Налаштування бота на 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
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    921
  • 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, тестовий запуск бота та перевірка автоматичного рестарту.