Files
new_lottery_bot/docs/SERVER_DEPLOYMENT.md
Andrew K. Choi e1b4465f89
Some checks failed
continuous-integration/drone/pr Build is failing
feat: Add admin management system with super admin controls
- Implemented two-level admin hierarchy (super admin from .env and assigned admins)
- Only super admins (from ADMIN_IDS in .env) can manage admin assignments
- Added admin management menu to settings (visible only for super admins)
- Admins can add/remove other admins through the bot interface
- Protected super admins from deletion
- Added CLI tool for admin management (scripts/manage_admins.py)
- Added database check script (scripts/check_db.py)
- Added deployment scripts for server setup
- Added comprehensive documentation on admin management system
- Added backup and server deployment guides
2026-02-18 13:19:26 +09:00

8.7 KiB
Raw Blame History

Гайд развертывания на сервере 192.168.0.103

🚀 Быстрый старт (5 минут)

Шаг 1: Подключитесь к серверу по SSH

ssh trevor@192.168.0.103
# Пароль: R0sebud

Шаг 2: Перейдите в директорию проекта

cd ~/new_lottery_bot

Шаг 3: Создайте файл .env

nano .env

Добавьте следующие переменные:

# Telegram Bot
BOT_TOKEN=your_bot_token_here

# Database (PostgreSQL на этом же сервере)
DATABASE_URL=postgresql://trevor:password@localhost:5432/lottery_bot

# Администраторы (Telegram ID через запятую)
ADMIN_IDS=123456789,987654321

# Redis (опционально)
REDIS_URL=redis://localhost:6379/0

# Логирование
LOG_LEVEL=INFO

Важно: замените:

  • your_bot_token_here на токен вашего бота из @BotFather
  • password на пароль PostgreSQL пользователя trevor
  • 123456789,987654321 на реальные Telegram ID администраторов

Сохраните файл: Ctrl+X, затем Y, затем Enter

Шаг 4: Запустите скрипт развертывания

chmod +x scripts/deploy_server.sh
./scripts/deploy_server.sh

Скрипт автоматически:

  • Проверит зависимости
  • Создаст виртуальное окружение
  • Установит dependencies из requirements.txt
  • Проверит подключение к БД
  • Запустит миграции
  • Проверит конфигурацию

Шаг 5: Запустите бота

# Активируем виртуальное окружение
source venv/bin/activate

# Запускаем бота
python3 main.py

Если видите " Bot started successfully!", значит всё работает!


📊 Детальные инструкции

1. Подготовка сервера

1.1 Установка необходимых пакетов

sudo apt-get update
sudo apt-get install -y python3 python3-pip python3-venv postgresql-client git

1.2 Проверка Python

python3 --version
# Должно быть 3.8 или выше

2. Подготовка PostgreSQL

2.1 Подключитесь к PostgreSQL

psql -h localhost -U postgres

2.2 Создайте пользователя и БД

-- Создание пользователя (если еще не существует)
CREATE USER trevor WITH PASSWORD 'your_secure_password';

-- Создание базы данных
CREATE DATABASE lottery_bot OWNER trevor;

-- Даем права
GRANT ALL PRIVILEGES ON DATABASE lottery_bot TO trevor;
GRANT ALL PRIVILEGES ON SCHEMA public TO trevor;

-- Выход
\q

2.3 Проверьте подключение

psql -h localhost -U trevor -d lottery_bot -c "SELECT 1"

Должен вернуть результат без ошибок.

3. Клонирование/обновление приложения

# Если еще не скачно
git clone <ваш-репозиторий> new_lottery_bot
cd new_lottery_bot

# Или если уже есть, обновить
cd new_lottery_bot
git pull origin main

4. Конфигурация приложения

4.1 Создайте .env файл

cat > .env << 'EOL'
BOT_TOKEN=your_bot_token
DATABASE_URL=postgresql://trevor:password@localhost:5432/lottery_bot
ADMIN_IDS=123456789
LOG_LEVEL=INFO
EOL

4.2 Проверьте содержимое .env

cat .env

5. Запуск развертывания

# Сделайте скрипт исполняемым
chmod +x scripts/deploy_server.sh

# Запустите скрипт
./scripts/deploy_server.sh

6. Запуск бота

Вариант 1: Директный запуск (тестирование)

source venv/bin/activate
python3 main.py

Вариант 2: Фоновый запуск (screen)

source venv/bin/activate
screen -S lottery-bot
python3 main.py
# Нажмите Ctrl+A, затем D для отключения от session

Для повторного подключения:

screen -r lottery-bot

Вариант 3: Systemd сервис (рекомендуется для production)

Создайте файл /etc/systemd/system/lottery-bot.service:

sudo nano /etc/systemd/system/lottery-bot.service

Содержимое:

[Unit]
Description=Lottery Bot Telegram
After=network.target postgresql.service

[Service]
Type=simple
User=trevor
WorkingDirectory=/home/trevor/new_lottery_bot
Environment="PATH=/home/trevor/new_lottery_bot/venv/bin"
ExecStart=/home/trevor/new_lottery_bot/venv/bin/python3 main.py
Restart=on-failure
RestartSec=10
StandardOutput=append:/home/trevor/new_lottery_bot/logs/bot.log
StandardError=append:/home/trevor/new_lottery_bot/logs/bot.log

[Install]
WantedBy=multi-user.target

Запустите сервис:

sudo systemctl daemon-reload
sudo systemctl enable lottery-bot
sudo systemctl start lottery-bot

# Проверьте статус
sudo systemctl status lottery-bot

# Просмотр логов
sudo journalctl -u lottery-bot -f

🔍 Проверка и диагностика

Проверка подключения к БД

source venv/bin/activate
python3 << 'EOF'
from src.core.database import async_session_maker
from sqlalchemy import text
import asyncio

async def test():
    async with async_session_maker() as session:
        result = await session.execute(text("SELECT 1"))
        print("✅ БД работает!")

asyncio.run(test())
EOF

Проверка работы бота

# Отправьте сообщение боту
# Если бот отвечает - всё работает!

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

# Разовый запуск с логами
source venv/bin/activate
python3 main.py 2>&1 | tee logs/bot.log

# На фоне (systemd)
sudo journalctl -u lottery-bot -n 50 -f

Устранение проблем

Проблема: "ModuleNotFoundError"

source venv/bin/activate
pip3 install -r requirements.txt

Проблема: "Connection refused" (БД)

# Проверьте, работает ли PostgreSQL
sudo systemctl status postgresql

# Проверьте переменную DATABASE_URL в .env
cat .env | grep DATABASE_URL

Проблема: "Bot token is invalid"

# Проверьте токен в .env
cat .env | grep BOT_TOKEN

# Получите новый токен от @BotFather

📈 Масштабирование и Production

Использование Docker (рекомендуется)

# Убедитесь, что Docker установлен
docker --version
docker-compose --version

# Запустите в Docker
docker-compose up -d

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

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

Настройка reverse proxy (Nginx)

Для API или веб-интерфейса (если добавится):

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Резервное копирование БД

# Ежедневное резервное копирование
0 3 * * * /home/trevor/new_lottery_bot/scripts/backup_db.sh

🆘 Контакты и помощь

  • Документация проекта: docs/ директория
  • Система управления администраторами: docs/ADMIN_MANAGEMENT_SYSTEM.md
  • Логи приложения: logs/ директория

Чек-лист развертывания

  • Python 3 установлен
  • PostgreSQL установлен и работает
  • БД lottery_bot создана
  • Пользователь trevor создан с правами
  • Проект клонирован/обновлен
  • Файл .env создан с корректными данными
  • Скрипт deploy_server.sh запущен успешно
  • Миграции БД завершены
  • Бот запущен и отвечает на сообщения
  • Логирование работает

После завершения всех пунктов - приложение готово к использованию! 🎉