Настройка бота на VPS/выделенном сервере

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Настройка бота на VPS/выделенном сервере
Простой
~1 день
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1307
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1219
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    920
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1148
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    611
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    886

Настройка бота на VPS/выделенном сервере

Торговый бот, работающий с ноутбука — это бот, который упадёт в самый неподходящий момент: закроете крышку, прервётся интернет, macOS решит обновиться. VPS с правильной конфигурацией решает задачу аптайма, но только если сделать это правильно — без nohup script.py & в терминале и надежды на лучшее.

Выбор и конфигурация сервера

Для большинства торговых ботов достаточно: 2 vCPU, 4 ГБ RAM, SSD 40 ГБ. Для ботов с тяжёлой аналитикой или собственной нодой — 4-8 vCPU, 16-32 ГБ RAM.

Географическое расположение имеет значение: латентность до биржи влияет на скорость исполнения. Binance — серверы во Франкфурте и Токио, Bybit — Нидерланды, dYdX — AWS us-east-1. Для HFT (high-frequency) ставьте сервер в том же датацентре или как можно ближе. Для стратегий с удержанием позиции > 1 минуты — некритично.

ОС: Ubuntu 22.04 LTS или Debian 12. Никакой графической оболочки — только headless сервер.

Изоляция и управление зависимостями

Python бот

# Обновление системы
apt update && apt upgrade -y
apt install -y python3.11 python3.11-venv python3-pip git

# Создание непривилегированного пользователя
useradd -m -s /bin/bash botuser
su - botuser

# Виртуальное окружение
python3.11 -m venv /home/botuser/bot-env
source /home/botuser/bot-env/bin/activate
pip install -r requirements.txt

Node.js бот

# Node.js через nvm (не через apt — устаревшие версии)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20

cd /home/botuser/mybot && npm ci --production

Никогда не запускайте бота от root. Если бот скомпрометирован — минимальные права означают минимальный ущерб.

Systemd как менеджер процессов

screen, tmux, nohup — для разработки. Для production — только systemd. Он перезапустит процесс при падении, управляет логами, стартует при перезагрузке сервера.

# /etc/systemd/system/trading-bot.service
[Unit]
Description=Trading Bot
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=botuser
Group=botuser
WorkingDirectory=/home/botuser/mybot

# Python
ExecStart=/home/botuser/bot-env/bin/python main.py
# Node.js альтернатива:
# ExecStart=/home/botuser/.nvm/versions/node/v20.0.0/bin/node index.js

Restart=on-failure
RestartSec=10s
StartLimitIntervalSec=60s
StartLimitBurst=3

# Лимиты ресурсов
MemoryMax=2G
CPUQuota=150%

# Переменные окружения из файла
EnvironmentFile=/home/botuser/mybot/.env

# Логирование
StandardOutput=journal
StandardError=journal
SyslogIdentifier=trading-bot

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable trading-bot
systemctl start trading-bot
systemctl status trading-bot

# Просмотр логов
journalctl -u trading-bot -f --since "1 hour ago"

Restart=on-failure + RestartSec=10s + StartLimitBurst=3 — бот перезапустится при падении, но не зациклится в бесконечном crash loop.

Переменные окружения и секреты

API ключи никогда не в коде и не в git. Файл .env с ограниченными правами:

# /home/botuser/mybot/.env
EXCHANGE_API_KEY=your_key_here
EXCHANGE_API_SECRET=your_secret_here
TELEGRAM_BOT_TOKEN=...
LOG_LEVEL=INFO
chmod 600 /home/botuser/mybot/.env
chown botuser:botuser /home/botuser/mybot/.env

.gitignore обязан содержать .env. Проверьте что .env случайно не попал в git историю: git log --all --full-history -- .env.

Мониторинг и алерты

Бот должен сам сообщать о проблемах. Минимальный набор:

import telebot
import functools

bot_notifier = telebot.TeleBot(os.environ['TELEGRAM_BOT_TOKEN'])
ADMIN_CHAT_ID = os.environ['TELEGRAM_CHAT_ID']

def notify(message: str, level: str = 'INFO'):
    prefix = {'INFO': 'ℹ️', 'WARNING': '⚠️', 'ERROR': '🔴'}.get(level, '')
    try:
        bot_notifier.send_message(ADMIN_CHAT_ID, f"{prefix} {message}")
    except Exception:
        pass  # не ломаем бота из-за проблем с нотификацией

# В обработчике исключений
except Exception as e:
    notify(f"Bot crashed: {type(e).__name__}: {e}", level='ERROR')
    raise

Внешний watchdog: UptimeRobot или аналог пингует HTTP health-endpoint бота каждые 5 минут. Бот отдаёт 200 — жив. Если нет — SMS/email алерт.

# Простой health endpoint (если бот имеет HTTP сервер)
from aiohttp import web

async def health(request):
    return web.json_response({
        'status': 'ok',
        'uptime': time.time() - start_time,
        'last_trade': last_trade_timestamp,
    })

Безопасность сервера

# Закрываем SSH по паролю, только ключи
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart ssh

# UFW — открываем только нужные порты
ufw default deny incoming
ufw allow ssh
ufw allow 443/tcp  # если есть web интерфейс
ufw enable

# Fail2ban против брутфорса SSH
apt install fail2ban -y
systemctl enable fail2ban --now

API ключи биржи: настройте IP whitelist на бирже — только IP вашего VPS. Даже если ключ утечёт, с других IP работать не будет.

Деплой обновлений

# Деплой скрипт
#!/bin/bash
set -e

cd /home/botuser/mybot
git pull origin main
source /home/botuser/bot-env/bin/activate
pip install -r requirements.txt --quiet

systemctl restart trading-bot
sleep 3
systemctl status trading-bot --no-pager

Для более сложных проектов — GitHub Actions + SSH деплой автоматически при push в main.

Настройка занимает один рабочий день: конфигурация сервера, systemd юнит, мониторинг, безопасность SSH, тестовый запуск бота и проверка автоматического рестарта.