feat: Add admin management system with super admin controls
Some checks failed
continuous-integration/drone/pr Build is failing

- 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
This commit is contained in:
2026-02-18 13:19:26 +09:00
parent d263730cf2
commit e1b4465f89
12 changed files with 1817 additions and 2 deletions

374
docs/SERVER_DEPLOYMENT.md Normal file
View File

@@ -0,0 +1,374 @@
# Гайд развертывания на сервере 192.168.0.103
## 🚀 Быстрый старт (5 минут)
### Шаг 1: Подключитесь к серверу по SSH
```bash
ssh trevor@192.168.0.103
# Пароль: R0sebud
```
### Шаг 2: Перейдите в директорию проекта
```bash
cd ~/new_lottery_bot
```
### Шаг 3: Создайте файл .env
```bash
nano .env
```
Добавьте следующие переменные:
```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: Запустите скрипт развертывания
```bash
chmod +x scripts/deploy_server.sh
./scripts/deploy_server.sh
```
Скрипт автоматически:
- ✅ Проверит зависимости
- ✅ Создаст виртуальное окружение
- ✅ Установит dependencies из requirements.txt
- ✅ Проверит подключение к БД
- ✅ Запустит миграции
- ✅ Проверит конфигурацию
### Шаг 5: Запустите бота
```bash
# Активируем виртуальное окружение
source venv/bin/activate
# Запускаем бота
python3 main.py
```
Если видите "✅ Bot started successfully!", значит всё работает!
---
## 📊 Детальные инструкции
### 1. Подготовка сервера
#### 1.1 Установка необходимых пакетов
```bash
sudo apt-get update
sudo apt-get install -y python3 python3-pip python3-venv postgresql-client git
```
#### 1.2 Проверка Python
```bash
python3 --version
# Должно быть 3.8 или выше
```
### 2. Подготовка PostgreSQL
#### 2.1 Подключитесь к PostgreSQL
```bash
psql -h localhost -U postgres
```
#### 2.2 Создайте пользователя и БД
```sql
-- Создание пользователя (если еще не существует)
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 Проверьте подключение
```bash
psql -h localhost -U trevor -d lottery_bot -c "SELECT 1"
```
Должен вернуть результат без ошибок.
### 3. Клонирование/обновление приложения
```bash
# Если еще не скачно
git clone <ваш-репозиторий> new_lottery_bot
cd new_lottery_bot
# Или если уже есть, обновить
cd new_lottery_bot
git pull origin main
```
### 4. Конфигурация приложения
#### 4.1 Создайте .env файл
```bash
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
```bash
cat .env
```
### 5. Запуск развертывания
```bash
# Сделайте скрипт исполняемым
chmod +x scripts/deploy_server.sh
# Запустите скрипт
./scripts/deploy_server.sh
```
### 6. Запуск бота
#### Вариант 1: Директный запуск (тестирование)
```bash
source venv/bin/activate
python3 main.py
```
#### Вариант 2: Фоновый запуск (screen)
```bash
source venv/bin/activate
screen -S lottery-bot
python3 main.py
# Нажмите Ctrl+A, затем D для отключения от session
```
Для повторного подключения:
```bash
screen -r lottery-bot
```
#### Вариант 3: Systemd сервис (рекомендуется для production)
Создайте файл `/etc/systemd/system/lottery-bot.service`:
```bash
sudo nano /etc/systemd/system/lottery-bot.service
```
Содержимое:
```ini
[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
```
Запустите сервис:
```bash
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
```
---
## 🔍 Проверка и диагностика
### Проверка подключения к БД
```bash
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
```
### Проверка работы бота
```bash
# Отправьте сообщение боту
# Если бот отвечает - всё работает!
```
### Просмотр логов
```bash
# Разовый запуск с логами
source venv/bin/activate
python3 main.py 2>&1 | tee logs/bot.log
# На фоне (systemd)
sudo journalctl -u lottery-bot -n 50 -f
```
### Устранение проблем
#### Проблема: "ModuleNotFoundError"
```bash
source venv/bin/activate
pip3 install -r requirements.txt
```
#### Проблема: "Connection refused" (БД)
```bash
# Проверьте, работает ли PostgreSQL
sudo systemctl status postgresql
# Проверьте переменную DATABASE_URL в .env
cat .env | grep DATABASE_URL
```
#### Проблема: "Bot token is invalid"
```bash
# Проверьте токен в .env
cat .env | grep BOT_TOKEN
# Получите новый токен от @BotFather
```
---
## 📈 Масштабирование и Production
### Использование Docker (рекомендуется)
```bash
# Убедитесь, что Docker установлен
docker --version
docker-compose --version
# Запустите в Docker
docker-compose up -d
# Просмотр логов
docker-compose logs -f lottery-bot
# Остановка
docker-compose down
```
### Настройка reverse proxy (Nginx)
Для API или веб-интерфейса (если добавится):
```nginx
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;
}
}
```
### Резервное копирование БД
```bash
# Ежедневное резервное копирование
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` запущен успешно
- [ ] Миграции БД завершены
- [ ] Бот запущен и отвечает на сообщения
- [ ] Логирование работает
После завершения всех пунктов - приложение готово к использованию! 🎉