15 KiB
Инструкция по деплою на продакшен
Общая информация
⚠️ ВАЖНО: Креды для доступа к серверу (SSH хост, порт, пользователь) предоставляются пользователем в запросе и НЕ должны сохраняться в этой документации!
Технологический стек:
- Python: 3.11.9
- Docker: Alpine Linux
- База данных: SQLite
Директория проекта на сервере: /home/prod/bots/telegram-helper-bot
Директория для команд инфраструктуры: /home/prod
База данных: /home/prod/bots/telegram-helper-bot/database/tg-bot-database.db
Этап 1: Подготовка на локальной машине
1.1. Проверка состояния репозитория
git status
git log --oneline -10
git diff master...HEAD --stat
1.2. Пуш ветки в репозиторий
git push -u origin <branch-name>
1.3. Создание Release Notes
ВАЖНО: Release notes создаются ПОСЛЕ пуша, чтобы не попали в репозиторий!
- Использовать шаблон из
.cursor/rules/release-notes-template.md - Создать файл
RELEASE_NOTES_DEV-XX.mdв корне проекта - Собрать информацию о коммитах:
git log master..HEAD --pretty=format:"%h - %ai - %s" --reverse - Заполнить release notes по шаблону:
- Обзор (количество коммитов и основные направления)
- Ключевые изменения (каждый значимый коммит)
- Основные достижения (чекбоксы с эмодзи ✅)
- Временная шкала разработки
Примечание: Release notes используются для Pull Request, затем файл удаляется из рабочей директории.
1.4. Создание дополнительной документации (если требуется)
ВАЖНО: Документацию создавать ПОСЛЕ пуша, чтобы она не попала в репозиторий!
- Создать или обновить инструкции по деплою
- Обновить необходимую техническую документацию
- Убедиться, что не добавляются файлы с секретами
Этап 2: Деплой на сервер (тестовая ветка)
ВАЖНО: Креды для подключения к серверу должны быть предоставлены пользователем в запросе.
2.1. Подключение к серверу и остановка инфраструктуры
# Подключиться к серверу через SSH
# Перейти в директорию для команд инфраструктуры
cd /home/prod
make down
Проверка: Убедиться, что все контейнеры остановлены.
2.2. Создание бэкапа базы данных
cd /home/prod/bots/telegram-helper-bot/database
cp tg-bot-database.db tg-bot-database_$(date +%Y%m%d_%H%M%S).db
ls -lh tg-bot-database*.db
ВАЖНО: Всегда создавать бэкап с timestamp перед применением миграций!
2.3. Переключение на ветку и подтягивание изменений
cd /home/prod/bots/telegram-helper-bot
git fetch origin
git checkout <branch-name>
git pull origin <branch-name>
2.4. Установка зависимостей (если изменились)
Если виртуальное окружение уже существует:
cd /home/prod/bots/telegram-helper-bot
.venv/bin/pip install -r requirements.txt
Если виртуального окружения нет:
cd /home/prod/bots/telegram-helper-bot
python3 -m venv .venv
.venv/bin/pip install --upgrade pip
.venv/bin/pip install -r requirements.txt
Примечание: Виртуальное окружение .venv на сервере используется только для применения миграций и утилит. Бот работает в Docker-контейнере.
2.5. Применение миграций базы данных
cd /home/prod/bots/telegram-helper-bot
.venv/bin/python scripts/apply_migrations.py
ВАЖНО:
- Миграции применяются ПЕРЕД запуском контейнеров
- База должна быть "спящей" (контейнеры выключены)
- Проверить вывод скрипта на наличие ошибок
Вывод при успехе:
📋 Найдено новых миграций: X
✅ Все миграции применены успешно (X шт.)
2.6. Запуск инфраструктуры
cd /home/prod
make up
2.7. Пересборка контейнера telegram-bot
Используем команду с гарантией применения изменений:
cd /home/prod
docker-compose up -d --build --force-recreate --no-deps telegram-bot
Что делает команда:
--build- пересобирает образ--force-recreate- принудительно пересоздает контейнер--no-deps- не затрагивает зависимые сервисы- Гарантирует доставку нового кода в контейнер без кэша
2.8. Проверка работоспособности
# Проверка статуса всех контейнеров
docker-compose ps
# Проверка логов telegram-bot
docker-compose logs telegram-bot --tail=50
# Или напрямую
docker logs bots_telegram_bot --tail=50
Что проверять в логах:
- ✅ База данных инициализирована
- ✅ Scoring Manager инициализирован (если используется)
- ✅ Metrics server запущен на порту 8080
- ✅ Нет критических ошибок
- ✅ Бот обрабатывает команды
На этом этапе: Ждать подтверждения от владельца о мердже ветки в master.
Этап 3: Финальный деплой на master
ВАЖНО: Выполняется только после подтверждения мерджа ветки в master!
3.1. Остановка инфраструктуры
cd /home/prod
make down
3.2. Переключение на master и получение изменений
cd /home/prod/bots/telegram-helper-bot
git checkout master
git pull origin master
Проверка: Убедиться, что получен коммит с мерджем.
3.3. Запуск инфраструктуры
cd /home/prod
make up
3.4. Пересборка контейнера telegram-bot с кодом master
cd /home/prod
docker-compose up -d --build --force-recreate --no-deps telegram-bot
3.5. Финальная проверка
# Статус контейнеров
docker-compose ps
# Логи
docker logs bots_telegram_bot --tail=50
Проверить:
- ✅ Все контейнеры в состоянии
Upиhealthy - ✅ Логи не содержат критических ошибок
- ✅ Бот отвечает на команды в Telegram
3.6. Завершение работы
- Выйти с сервера
- Забыть все креды доступа (не сохранять их)
Troubleshooting
Проблема: Миграции не применяются
Решение:
- Проверить, что контейнеры остановлены
- Проверить права доступа к файлу БД
- Посмотреть логи скрипта apply_migrations.py
- Восстановить БД из бэкапа при необходимости:
cd /home/prod/bots/telegram-helper-bot/database cp tg-bot-database_YYYYMMDD_HHMMSS.db tg-bot-database.db
Проблема: Контейнер не запускается
Решение:
- Проверить логи контейнера:
docker logs bots_telegram_bot --tail=100 - Проверить переменные окружения в
.env - Проверить healthcheck:
docker inspect bots_telegram_bot | grep -A 20 Health
Проблема: Код не обновился в контейнере
Решение: Использовать принудительную пересборку без кэша:
docker-compose down telegram-bot
docker-compose build --no-cache telegram-bot
docker-compose up -d telegram-bot
Проблема: Нет виртуального окружения
Решение: Создать виртуальное окружение:
# Установить python3-venv (если нужно)
sudo apt install -y python3.11-venv
# Создать venv
cd /home/prod/bots/telegram-helper-bot
python3 -m venv .venv
.venv/bin/pip install --upgrade pip
.venv/bin/pip install -r requirements.txt
Последовательность действий для агента
Этап 1: Локальная подготовка
- Проверить состояние репозитория (
git status,git log) - Запушить ветку в репозиторий
- Создать Release Notes по шаблону - ПОСЛЕ пуша!
- Создать дополнительную документацию (если требуется) - ПОСЛЕ пуша!
- Сообщить пользователю о готовности к деплою
Этап 2: Деплой на dev-ветку
- Подключиться к серверу (креды из запроса пользователя)
- Остановить инфраструктуру (
make downиз/home/prod) - Создать бэкап БД с timestamp
- Переключиться на dev-ветку и подтянуть изменения
- Установить/обновить зависимости Python (если требуется)
- Применить миграции БД (через
.venv/bin/python scripts/apply_migrations.py) - Проверить успешность применения миграций
- Запустить инфраструктуру (
make up) - Пересобрать контейнер telegram-bot с
--build --force-recreate --no-deps - Проверить статус контейнеров и логи
- Сообщить пользователю о готовности и ждать подтверждения "ОК"
Этап 3: Финальный деплой на master
Выполняется только после получения "ОК" от пользователя (означает мердж в master)
- Остановить инфраструктуру
- Переключиться на master и подтянуть изменения
- Запустить инфраструктуру
- Пересобрать контейнер telegram-bot с
--build --force-recreate --no-deps - Проверить финальный статус и логи
- Сообщить о успешном завершении деплоя
- Завершить SSH-сессию и забыть все креды
Важные команды
Docker
# Просмотр всех контейнеров
docker-compose ps
# Логи конкретного сервиса
docker-compose logs <service-name> --tail=N
# Перезапуск конкретного сервиса
docker-compose restart <service-name>
# Остановка всей инфраструктуры
docker-compose down
# Запуск всей инфраструктуры
docker-compose up -d
# Пересборка без кэша
docker-compose build --no-cache <service-name>
# Принудительное пересоздание контейнера
docker-compose up -d --build --force-recreate --no-deps <service-name>
Git
# Проверка состояния
git status
git branch
# Переключение веток
git checkout <branch-name>
# Получение изменений
git fetch origin
git pull origin <branch-name>
# История коммитов
git log --oneline -N
git log master..HEAD --pretty=format:"%h - %ai - %s" --reverse
Работа с БД
# Создание бэкапа с timestamp
cp tg-bot-database.db tg-bot-database_$(date +%Y%m%d_%H%M%S).db
# Просмотр бэкапов
ls -lh tg-bot-database*.db
# Восстановление из бэкапа
cp tg-bot-database_BACKUP.db tg-bot-database.db
Примечания
-
Виртуальное окружение на сервере - используется только для запуска утилит и миграций. Бот работает в Docker-контейнере.
-
Бэкапы БД - создаются перед каждым применением миграций с timestamp в имени файла.
-
Пересборка контейнера - всегда использовать
--force-recreate --no-depsдля гарантии применения изменений. -
Миграции - применяются только при остановленных контейнерах к "спящей" базе данных.
-
Release notes - создаются ПОСЛЕ пуша, чтобы не попадали в репозиторий. Используются для Pull Request, затем удаляются из рабочей директории.
-
Документация после пуша - вся документация и инструкции создаются ПОСЛЕ пуша в репозиторий, чтобы не попадали в коммиты и удалённый репозиторий.
-
Креды доступа - креды сервера предоставляются пользователем в запросе и НЕ сохраняются в документации. После завершения деплоя - забыть все креды.
Контакты
При возникновении проблем или вопросов обращаться к владельцу проекта.