Skip to content

Latest commit

 

History

History
797 lines (647 loc) · 19.4 KB

File metadata and controls

797 lines (647 loc) · 19.4 KB

Техническая документация PumpFun Proxy Viewer

📚 Содержание

  1. Быстрый старт
  2. Установка и настройка
  3. Конфигурация
  4. Управление прокси
  5. Запуск и масштабирование
  6. Мониторинг и отладка
  7. Решение проблем
  8. API и интеграция

🚀 Быстрый старт

Минимальные требования

  • Node.js 16.0.0 или выше
  • 2GB RAM (для 10 зрителей)
  • 1GB свободного места на диске
  • Список прокси-серверов

Установка за 5 минут

# 1. Клонирование репозитория
git clone https://github.com/your-repo/pump-proxy.git
cd pump-proxy

# 2. Установка зависимостей
npm install

# 3. Настройка прокси (добавьте свои прокси)
echo "http://proxy1.example.com:8080" > config/proxies.txt
echo "socks5://proxy2.example.com:1080" >> config/proxies.txt

# 4. Настройка URL стрима (отредактируйте config/config.json)
# Замените URL на актуальную ссылку PumpFun

# 5. Запуск
npm start

🔧 Установка и настройка

Системные требования

Минимальные (10 зрителей)

  • OS: Linux, macOS, Windows
  • Node.js: 16.0.0+
  • RAM: 2GB
  • CPU: 2 ядра
  • Диск: 1GB свободного места
  • Прокси: 4+ сервера

Рекомендуемые (50+ зрителей)

  • OS: Linux (Ubuntu 20.04+, CentOS 8+)
  • Node.js: 18.0.0+
  • RAM: 8GB+
  • CPU: 4+ ядра
  • Диск: 5GB+ свободного места
  • Прокси: 17+ серверов

Установка Node.js

Ubuntu/Debian

# Установка через NodeSource
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

# Проверка версии
node --version
npm --version

CentOS/RHEL

# Установка через NodeSource
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo dnf install -y nodejs npm

# Проверка версии
node --version

macOS

# Через Homebrew
brew install node

# Или скачать с официального сайта
# https://nodejs.org/

Windows

# Скачать установщик с https://nodejs.org/
# Или через Chocolatey
choco install nodejs

Установка проекта

# Клонирование репозитория
git clone https://github.com/your-repo/pump-proxy.git
cd pump-proxy

# Установка зависимостей
npm install

# Проверка установки
npm run --version

Настройка среды разработки

# Установка PM2 глобально (для продакшн)
npm install -g pm2

# Установка Docker (опционально)
# Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# Добавление пользователя в группу docker
sudo usermod -aG docker $USER

⚙️ Конфигурация

Основной файл конфигурации (config/config.json)

{
  "stream": {
    "url": "https://pump.fun/coin/YOUR_COIN_ADDRESS",
    "viewTime": {
      "min": 300000,     // 5 минут (в миллисекундах)
      "max": 1200000     // 20 минут (в миллисекундах)
    }
  },
  "viewers": {
    "count": 10,          // Количество зрителей
    "maxPerProxy": 3,     // Максимум зрителей на один прокси
    "concurrentSessions": 3  // Одновременных запусков
  },
  "browser": {
    "headless": true,     // true для серверов, false для отладки
    "userDataDir": "./browser-profiles",
    "viewport": {
      "width": 1366,
      "height": 768
    },
    "args": [
      "--no-sandbox",
      "--disable-setuid-sandbox", 
      "--disable-dev-shm-usage",
      "--disable-accelerated-2d-canvas",
      "--no-first-run",
      "--no-zygote",
      "--disable-gpu"
    ]
  },
  "proxy": {
    "file": "./config/proxies.txt",
    "rotation": true,
    "timeout": 30000      // 30 секунд
  },
  "fingerprinting": {
    "enableStealth": true,
    "randomizeCanvas": true,
    "randomizeWebGL": true,
    "randomizeAudio": true,
    "randomizeTimezone": true
  },
  "monitoring": {
    "logLevel": "info",   // debug, info, warn, error
    "logFile": "./logs/viewers.log",
    "console": true
  }
}

Конфигурации для масштабирования

config-scale-1.json (10 зрителей)

{
  "stream": {
    "url": "https://pump.fun/coin/YOUR_COIN_ADDRESS",
    "viewTime": { "min": 300000, "max": 900000 }
  },
  "viewers": {
    "count": 10,
    "maxPerProxy": 3,
    "concurrentSessions": 2
  },
  "browser": { "headless": true }
}

config-scale-2.json (50 зрителей)

{
  "stream": {
    "url": "https://pump.fun/coin/YOUR_COIN_ADDRESS", 
    "viewTime": { "min": 600000, "max": 1800000 }
  },
  "viewers": {
    "count": 50,
    "maxPerProxy": 3,
    "concurrentSessions": 5
  },
  "browser": { 
    "headless": true,
    "args": [
      "--no-sandbox",
      "--disable-setuid-sandbox",
      "--disable-dev-shm-usage",
      "--memory-pressure-off",
      "--max_old_space_size=4096"
    ]
  }
}

🌐 Управление прокси

Формат файла proxies.txt

# HTTP прокси с авторизацией
http://username:password@proxy1.example.com:8080
http://user123:pass456@proxy2.example.com:3128

# HTTPS прокси
https://username:password@secure-proxy.com:443

# SOCKS прокси
socks4://proxy3.example.com:1080
socks5://username:password@proxy4.example.com:1080

# Прокси без авторизации
http://free-proxy.example.com:8080
socks5://open-proxy.example.com:1080

# Комментарии (игнорируются)
# http://disabled-proxy.com:8080

Рекомендации по выбору прокси

Качественные прокси провайдеры

  • Премиум: Bright Data, Oxylabs, NetNut
  • Средний сегмент: ProxyMesh, MyPrivateProxy, HighProxies
  • Бюджетные: ProxyRack, ProxyScrape

Требования к прокси

  • Скорость: >50 Mbps
  • Uptime: >99%
  • Ротация: Автоматическая или по запросу
  • Геолокация: Разные страны для большей естественности
  • Анонимность: Elite или Anonymous уровень

Тестирование прокси

# Создайте файл test-proxy.js для проверки
node -e "
const { HttpProxyAgent } = require('http-proxy-agent');
const https = require('https');

const proxy = 'http://username:password@proxy.example.com:8080';
const agent = new HttpProxyAgent(proxy);

const req = https.request({
  hostname: 'httpbin.org',
  path: '/ip',
  agent: agent
}, (res) => {
  let data = '';
  res.on('data', chunk => data += chunk);
  res.on('end', () => {
    console.log('Proxy response:', JSON.parse(data));
  });
});

req.on('error', err => console.error('Proxy error:', err.message));
req.end();
"

🚀 Запуск и масштабирование

Локальный запуск

# Базовый запуск
npm start

# Запуск с кастомной конфигурацией
node src/index.js --config ./config/config-scale-2.json

# Запуск с мониторингом
node src/index.js --status

# Запуск в режиме разработки (с трассировкой)
npm run dev

Опции командной строки

node src/index.js [опции]

Опции:
  -c, --config <path>    Путь к файлу конфигурации
  -s, --status           Показывать периодические обновления статуса
  -h, --help             Показать справку

Примеры:
  node src/index.js
  node src/index.js -c ./config/config-scale-2.json
  node src/index.js --status

PM2 развертывание (рекомендуется для продакшн)

# Запуск через PM2
npm run pm2:start

# Масштабирование до 5 процессов
pm2 scale pump-viewer 5

# Перезапуск без даунтайма
pm2 reload pump-viewer

# Остановка
pm2 stop pump-viewer

# Удаление из PM2
pm2 delete pump-viewer

# Мониторинг в реальном времени
pm2 monit

# Логи
pm2 logs pump-viewer

# Сохранение конфигурации PM2
pm2 save
pm2 startup

Docker развертывание

Простой запуск

# Сборка образа
docker build -t pump-viewer .

# Запуск контейнера
docker run -d \
  --name pump-viewer-1 \
  -v $(pwd)/config:/app/config \
  -v $(pwd)/logs:/app/logs \
  pump-viewer

# Просмотр логов
docker logs -f pump-viewer-1

Docker Compose развертывание

# Запуск одного экземпляра
docker-compose up -d

# Масштабирование до 5 экземпляров
docker-compose up -d --scale viewer=5

# Остановка
docker-compose down

# Просмотр логов
docker-compose logs -f viewer

Кастомный docker-compose.yml для масштабирования

version: '3.8'

services:
  viewer:
    build: .
    volumes:
      - ./config:/app/config
      - ./logs:/app/logs
    environment:
      - NODE_ENV=production
    restart: unless-stopped
    deploy:
      replicas: 3
      resources:
        limits:
          memory: 1G
        reservations:
          memory: 512M

  load-balancer:
    image: nginx:alpine
    ports:
      - "80:80" 
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - viewer

Kubernetes развертывание (для крупных инсталляций)

# k8s-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pump-viewer
spec:
  replicas: 10
  selector:
    matchLabels:
      app: pump-viewer
  template:
    metadata:
      labels:
        app: pump-viewer
    spec:
      containers:
      - name: pump-viewer
        image: pump-viewer:latest
        resources:
          requests:
            memory: "512Mi"
            cpu: "250m"
          limits:
            memory: "1Gi" 
            cpu: "500m"
        volumeMounts:
        - name: config-volume
          mountPath: /app/config
      volumes:
      - name: config-volume
        configMap:
          name: pump-viewer-config
# Развертывание в Kubernetes
kubectl apply -f k8s-deployment.yaml

# Масштабирование
kubectl scale deployment pump-viewer --replicas=20

# Мониторинг
kubectl get pods -l app=pump-viewer
kubectl logs -f deployment/pump-viewer

📊 Мониторинг и отладка

Система логирования

Уровни логирования

  • debug: Детальная отладочная информация
  • info: Общая информация о работе
  • warn: Предупреждения
  • error: Ошибки

Просмотр логов

# Просмотр текущих логов
tail -f logs/viewers.log

# Поиск ошибок
grep "ERROR" logs/viewers.log

# Анализ статистики
grep "status" logs/viewers.log | tail -10

Метрики системы

Встроенные метрики

# Запуск с выводом статуса каждые 30 секунд
node src/index.js --status

# Метрики в логах
grep "metrics" logs/viewers.log

Пример вывода метрик

📊 Status Report - 2025-09-05 12:30:45
===========================================
Active Viewers: 8/10
Proxy Usage: 6/12 slots used
Memory Usage: 1.2GB
Uptime: 15m 32s
Successful Sessions: 95%
Failed Connections: 2
Average Session Time: 8m 45s

Мониторинг ресурсов

Linux (htop, top)

# Мониторинг процессов Node.js
htop -p $(pgrep -f "pump-viewer")

# Мониторинг памяти
free -h

# Мониторинг диска
df -h

PM2 встроенный мониторинг

# Веб-интерфейс PM2
pm2 web

# Мониторинг в терминале
pm2 monit

# Статистика PM2
pm2 status

Отладка проблем

Включение режима отладки

# Запуск с отладкой Node.js
node --inspect src/index.js

# Запуск с трассировкой предупреждений
node --trace-warnings src/index.js

# Запуск в неголовом режиме (для визуальной отладки)
# Отредактируйте config.json: "headless": false

Проверка конфигурации

# Валидация JSON
node -e "console.log(JSON.parse(require('fs').readFileSync('./config/config.json')))"

# Проверка прокси файла
cat config/proxies.txt | grep -v '^#' | grep -v '^$'

🚨 Решение проблем

Частые ошибки и решения

"No available proxy slots"

Причина: Недостаточно прокси для количества зрителей Решение:

# Добавьте больше прокси в config/proxies.txt
# Или уменьшите количество зрителей в config.json
# Формула: количество_прокси * maxPerProxy >= viewers.count

"Navigation timeout"

Причина: Медленные прокси или недоступность сайта Решение:

// Увеличьте таймауты в config.json
{
  "proxy": {
    "timeout": 60000  // Увеличить до 60 секунд
  }
}

"Memory limit exceeded"

Причина: Недостаточно RAM для количества зрителей Решение:

# Увеличьте лимит памяти Node.js
node --max-old-space-size=4096 src/index.js

# Или уменьшите количество одновременных сессий
# "concurrentSessions": 2  // в config.json

"Chrome launch failed"

Причина: Отсутствуют зависимости Chrome в Linux Решение:

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y \
  ca-certificates \
  fonts-liberation \
  libasound2 \
  libatk-bridge2.0-0 \
  libdrm2 \
  libgtk-3-0 \
  libnspr4 \
  libnss3 \
  libxss1 \
  libxtst6 \
  xdg-utils

# CentOS/RHEL
sudo yum install -y \
  atk \
  cups-libs \
  gtk3 \
  libXcomposite \
  libXcursor \
  libXdamage \
  libXext \
  libXi \
  libXrandr \
  libXss \
  libXtst \
  pango \
  xorg-x11-fonts-100dpi

Диагностические скрипты

Проверка системы

# Создайте файл diagnose.js
cat > diagnose.js << 'EOF'
const puppeteer = require('puppeteer');
const fs = require('fs');

async function diagnose() {
  console.log('🔍 System Diagnostics');
  console.log('==================');
  
  // Node.js версия
  console.log(`Node.js: ${process.version}`);
  
  // Память
  const mem = process.memoryUsage();
  console.log(`Memory: ${Math.round(mem.rss / 1024 / 1024)}MB RSS`);
  
  // Конфигурация
  try {
    const config = JSON.parse(fs.readFileSync('./config/config.json'));
    console.log(`Config: ✅ Valid`);
    console.log(`Viewers: ${config.viewers.count}`);
  } catch (e) {
    console.log(`Config: ❌ ${e.message}`);
  }
  
  // Прокси
  try {
    const proxies = fs.readFileSync('./config/proxies.txt', 'utf8')
      .split('\n')
      .filter(line => line.trim() && !line.startsWith('#'));
    console.log(`Proxies: ${proxies.length} loaded`);
  } catch (e) {
    console.log(`Proxies: ❌ ${e.message}`);
  }
  
  // Puppeteer
  try {
    const browser = await puppeteer.launch({ headless: true });
    await browser.close();
    console.log(`Puppeteer: ✅ Working`);
  } catch (e) {
    console.log(`Puppeteer: ❌ ${e.message}`);
  }
  
  console.log('\n✅ Diagnostics complete');
}

diagnose().catch(console.error);
EOF

# Запуск диагностики
node diagnose.js

Оптимизация производительности

Настройки для высокой нагрузки

{
  "browser": {
    "args": [
      "--no-sandbox",
      "--disable-setuid-sandbox",
      "--disable-dev-shm-usage",
      "--disable-accelerated-2d-canvas",
      "--disable-gpu",
      "--disable-features=TranslateUI",
      "--disable-ipc-flooding-protection",
      "--memory-pressure-off",
      "--renderer-process-limit=10",
      "--max_old_space_size=4096"
    ]
  }
}

Системные оптимизации Linux

# Увеличение лимитов файловых дескрипторов
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf

# Оптимизация TCP
echo "net.core.somaxconn = 65536" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65536" >> /etc/sysctl.conf
sysctl -p

# Оптимизация swap (для больших нагрузок)
echo "vm.swappiness = 10" >> /etc/sysctl.conf

🔌 API и интеграция

Программный интерфейс

// Пример использования PumpViewerManager в коде
const PumpViewerManager = require('./src/PumpViewerManager');

async function customStart() {
  const manager = new PumpViewerManager('./config/config.json');
  
  // Инициализация
  await manager.initialize();
  
  // Запуск зрителей
  await manager.start();
  
  // Получение статистики
  setInterval(() => {
    const stats = manager.getStats();
    console.log('Active viewers:', stats.activeViewers);
  }, 30000);
}

customStart().catch(console.error);

Webhook уведомления (будущая функция)

// config.json
{
  "webhooks": {
    "onViewerStart": "https://your-api.com/webhook/viewer-start",
    "onViewerStop": "https://your-api.com/webhook/viewer-stop",
    "onError": "https://your-api.com/webhook/error"
  }
}

Интеграция с внешними сервисами

Telegram уведомления

// telegram-notifier.js
const TelegramBot = require('node-telegram-bot-api');

class TelegramNotifier {
  constructor(token, chatId) {
    this.bot = new TelegramBot(token);
    this.chatId = chatId;
  }
  
  async sendStatus(message) {
    await this.bot.sendMessage(this.chatId, message);
  }
}

module.exports = TelegramNotifier;

Документация обновлена: 05.09.2025 Поддержка: создайте issue в репозитории GitHub