# Развертывание TG Autoposter ## Локальное развертывание (Development) ### 1. Установка ```bash # Клонировать git clone cd TG_autoposter # Создать виртуальное окружение python -m venv venv source venv/bin/activate # Linux/macOS # или venv\Scripts\activate # Windows # Установить зависимости pip install -r requirements.txt ``` ### 2. Конфигурация ```bash cp .env.example .env # Отредактировать .env с вашим токеном ``` ### 3. Запуск ```bash python main.py ``` ## Развертывание на Linux сервер (Production) ### 1. Подготовка сервера ```bash # Обновить систему sudo apt update && sudo apt upgrade -y # Установить Python 3.10+ sudo apt install python3.10 python3.10-venv python3.10-dev -y # Установить PostgreSQL (опционально) sudo apt install postgresql postgresql-contrib -y # Создать пользователя для бота sudo useradd -m -s /bin/bash tg_bot sudo su - tg_bot ``` ### 2. Установка приложения ```bash # Клонировать репозиторий git clone cd TG_autoposter # Создать виртуальное окружение python3.10 -m venv venv source venv/bin/activate # Установить зависимости pip install -r requirements.txt pip install gunicorn # Если нужен HTTP сервер ``` ### 3. Настройка БД (PostgreSQL) ```bash # Создать БД sudo -u postgres createdb autoposter_db sudo -u postgres createuser autoposter_user # Установить пароль sudo -u postgres psql postgres=# ALTER USER autoposter_user WITH PASSWORD 'strong_password'; postgres=# GRANT ALL PRIVILEGES ON DATABASE autoposter_db TO autoposter_user; postgres=# \q # В .env установить: # DATABASE_URL=postgresql+asyncpg://autoposter_user:strong_password@localhost/autoposter_db ``` ### 4. Systemd сервис Создать `/etc/systemd/system/tg-autoposter.service`: ```ini [Unit] Description=Telegram Autoposter Bot After=network.target [Service] Type=simple User=tg_bot WorkingDirectory=/home/tg_bot/TG_autoposter Environment="PATH=/home/tg_bot/TG_autoposter/venv/bin" ExecStart=/home/tg_bot/TG_autoposter/venv/bin/python main.py Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target ``` Запустить сервис: ```bash sudo systemctl daemon-reload sudo systemctl enable tg-autoposter sudo systemctl start tg-autoposter sudo systemctl status tg-autoposter ``` ### 5. Логирование Логи сохраняются в `logs/` директорию. Для просмотра: ```bash # Последние 100 строк tail -100 logs/bot_*.log # В реальном времени tail -f logs/bot_*.log # Поиск ошибок grep ERROR logs/bot_*.log # Через journalctl sudo journalctl -u tg-autoposter -f ``` ## Развертывание с Docker ### 1. Dockerfile ```dockerfile FROM python:3.10-slim WORKDIR /app # Установить зависимости COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Скопировать приложение COPY . . # Создать директорию для логов RUN mkdir -p logs # Запустить бота CMD ["python", "main.py"] ``` ### 2. docker-compose.yml ```yaml version: '3.8' services: bot: build: . container_name: tg_autoposter environment: TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN} DATABASE_URL: postgresql+asyncpg://autoposter:password@db:5432/autoposter_db depends_on: - db volumes: - ./logs:/app/logs restart: unless-stopped db: image: postgres:15 container_name: tg_autoposter_db environment: POSTGRES_DB: autoposter_db POSTGRES_USER: autoposter POSTGRES_PASSWORD: password volumes: - db_data:/var/lib/postgresql/data restart: unless-stopped volumes: db_data: ``` ### 3. Запуск с Docker ```bash docker-compose up -d docker-compose logs -f bot ``` ## Мониторинг ### Health Check Добавить в systemd сервис или cron: ```bash #!/bin/bash # check_bot.sh # Проверить что процесс работает if ! pgrep -f "python main.py" > /dev/null; then echo "Bot is down! Restarting..." sudo systemctl restart tg-autoposter # Отправить алерт (опционально) curl -X POST -H 'Content-type: application/json' \ --data '{"text":"Bot restarted at '$(date)'"}' \ $WEBHOOK_URL fi ``` ### Prometheus метрики (опционально) ```python from prometheus_client import Counter, Histogram, start_http_server # Метрики messages_sent = Counter('messages_sent_total', 'Total messages sent') send_duration = Histogram('message_send_duration_seconds', 'Time to send message') # В обработчике: with send_duration.time(): await bot.send_message(...) messages_sent.inc() ``` ## Бэкапы ### Бэкап БД ```bash #!/bin/bash # backup.sh DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/backups/autoposter" mkdir -p $BACKUP_DIR # SQLite if [ -f "autoposter.db" ]; then cp autoposter.db $BACKUP_DIR/autoposter_$DATE.db fi # PostgreSQL pg_dump -U autoposter autoposter_db > $BACKUP_DIR/autoposter_$DATE.sql # Удалить старые бэкапы (старше 30 дней) find $BACKUP_DIR -name "*.db" -mtime +30 -delete find $BACKUP_DIR -name "*.sql" -mtime +30 -delete echo "Backup completed: $BACKUP_DIR/autoposter_$DATE.*" ``` Добавить в crontab: ```bash crontab -e # Ежедневный бэкап в 02:00 0 2 * * * /home/tg_bot/backup.sh ``` ## Обновление ```bash # Получить обновления git pull origin main # Установить новые зависимости source venv/bin/activate pip install -r requirements.txt # Перезагрузить сервис sudo systemctl restart tg-autoposter ``` ## Проблемы и решения ### Бот падает при запуске ```bash # Проверить ошибки python main.py # Проверить логи tail -100 logs/bot_*.log # Проверить токен grep TELEGRAM_BOT_TOKEN .env ``` ### Много ошибок в логах ```bash # Увеличить уровень логирования # В .env: LOG_LEVEL=DEBUG # Перезапустить sudo systemctl restart tg-autoposter sudo journalctl -u tg-autoposter -f ``` ### БД заполняется ```bash # Проверить размер ls -lh autoposter.db # Очистить старые данные python cli.py db reset # Или вручную в PostgreSQL ``` ### Бот не отправляет сообщения ```bash # Проверить что бот работает systemctl status tg-autoposter # Проверить группы python cli.py group list # Проверить сообщения python cli.py message list # Проверить права (может токен протух?) # Получить новый от @BotFather ``` ## Оптимизация для Production 1. **Используйте PostgreSQL вместо SQLite** - Лучше для concurrency - Лучше для бэкапов - Быстрее с большими данными 2. **Настройте logging** - Отправлять в централизованное хранилище - Настроить rotation - Мониторить ошибки 3. **Добавьте мониторинг** - Prometheus/Grafana - ELK Stack для логов - Alerts на критические ошибки 4. **Оптимизируйте БД** - Индексы на часто используемые поля - Connection pooling - Regular vacuum (PostgreSQL) 5. **Безопасность** - Используйте переменные окружения - Не коммитьте .env - Обновляйте зависимости - Используйте firewall ## Масштабирование ### Для больших рассылок Используйте Queue (Celery): ```bash pip install celery redis # Добавить в app/__init__.py from celery import Celery celery_app = Celery('autoposter') celery_app.config_from_object('celeryconfig') # Использовать: send_message.delay(message_id, group_ids) ``` ### Для высоконагруженных систем - Используйте Webhook вместо Polling - Добавьте кэш (Redis) - Горизонтальное масштабирование с Load Balancer - Нескольких воркеров (Celery) ## Контрольный список - [ ] Сервер подготовлен (Python, зависимости) - [ ] БД настроена (SQLite или PostgreSQL) - [ ] .env файл с токеном - [ ] Сервис запущен через systemd - [ ] Логирование работает - [ ] Бэкапы настроены - [ ] Мониторинг на месте - [ ] Обновления могут быть применены - [ ] Есть план восстановления после сбоя - [ ] Документация актуальна --- **Успешного развертывания!** 🚀