- Быстрый старт
- Установка и настройка
- Конфигурация
- Управление прокси
- Запуск и масштабирование
- Мониторинг и отладка
- Решение проблем
- API и интеграция
- Node.js 16.0.0 или выше
- 2GB RAM (для 10 зрителей)
- 1GB свободного места на диске
- Список прокси-серверов
# 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- OS: Linux, macOS, Windows
- Node.js: 16.0.0+
- RAM: 2GB
- CPU: 2 ядра
- Диск: 1GB свободного места
- Прокси: 4+ сервера
- OS: Linux (Ubuntu 20.04+, CentOS 8+)
- Node.js: 18.0.0+
- RAM: 8GB+
- CPU: 4+ ядра
- Диск: 5GB+ свободного места
- Прокси: 17+ серверов
# Установка через NodeSource
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# Проверка версии
node --version
npm --version# Установка через NodeSource
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo dnf install -y nodejs npm
# Проверка версии
node --version# Через Homebrew
brew install node
# Или скачать с официального сайта
# https://nodejs.org/# Скачать установщик с 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{
"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
}
}{
"stream": {
"url": "https://pump.fun/coin/YOUR_COIN_ADDRESS",
"viewTime": { "min": 300000, "max": 900000 }
},
"viewers": {
"count": 10,
"maxPerProxy": 3,
"concurrentSessions": 2
},
"browser": { "headless": true }
}{
"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"
]
}
}# 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 devnode 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
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 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 up -d
# Масштабирование до 5 экземпляров
docker-compose up -d --scale viewer=5
# Остановка
docker-compose down
# Просмотр логов
docker-compose logs -f viewerversion: '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# 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
# Мониторинг процессов Node.js
htop -p $(pgrep -f "pump-viewer")
# Мониторинг памяти
free -h
# Мониторинг диска
df -h# Веб-интерфейс 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 '^$'Причина: Недостаточно прокси для количества зрителей Решение:
# Добавьте больше прокси в config/proxies.txt
# Или уменьшите количество зрителей в config.json
# Формула: количество_прокси * maxPerProxy >= viewers.countПричина: Медленные прокси или недоступность сайта Решение:
// Увеличьте таймауты в config.json
{
"proxy": {
"timeout": 60000 // Увеличить до 60 секунд
}
}Причина: Недостаточно RAM для количества зрителей Решение:
# Увеличьте лимит памяти Node.js
node --max-old-space-size=4096 src/index.js
# Или уменьшите количество одновременных сессий
# "concurrentSessions": 2 // в config.jsonПричина: Отсутствуют зависимости 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"
]
}
}# Увеличение лимитов файловых дескрипторов
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// Пример использования 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);// 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-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