VPS с самостоятельным администрированием

Обновление и мониторинг Telegram-бота на VPS

Docker-бот перезапускается после падения процесса, но обслуживание этим не ограничивается. Неверные ключи, заполненный диск или второй poller могут вызывать бесконечные перезапуски без пользы пользователю. Храните краткую запись о развёртывании и сначала определяйте, какой слой сломался.

Применяйте подходящее действие

Изменение Команда из исходного каталога проекта
Перезапустить текущий процесс docker compose restart bot
Применить изменения .env docker compose up -d --force-recreate
Пересобрать после правки bot.py docker compose up -d --build
Остановить/запустить вручную docker compose stop bot / docker compose start bot

Политика unless-stopped оставляет вручную остановленный сервис остановленным. Это не расписание, которое позже включает бота. Включите Docker при загрузке хоста согласно инструкции запуска. При проверке своего VPS отдельно протестируйте reboot: restart одного контейнера не подтверждает поведение всего сервера.

Обновляйте с возможностью восстановления

Сделайте копию вне VPS, сохраните текущие исходники и конфигурацию. Новый архив распакуйте в отдельный каталог для проверки. Сравните изменения, затем перенесите нужные файлы в исходный проект. Не заменяйте рабочий .env шаблоном, не переименовывайте проект без необходимости и не используйте down -v для обновления.

В примерах используются изменяемые Docker tags: python:3.12-slim, а для Mini App — Node/Caddy. Поэтому пересборка может изменить базовый образ. Записывайте реальные image IDs/digests: для отката они полезнее имени тега. Для осознанного обновления базы бота выполните docker compose build --pull, затем docker compose up -d. Проверяйте результат, а не включайте бесконтрольные обновления процесса с доступом к API-балансу.

Если будущая версия меняет схему базы, сначала изучите её миграцию и откат. Возврат старого кода не обязательно возвращает совместимые данные. В текущем примере нет механизма автоматических миграций схемы.

Проверяйте три уровня

docker compose ps
docker compose logs --tail=50 bot
docker stats --no-stream
df -h
  1. Процесс: контейнер не уходит в restart loop, хватает памяти и диска.
  2. Telegram: /id возвращает числовой ID без обращения к модели.
  3. Inference: один намеренно отправленный короткий вопрос получает ответ, а использование API соответствует ожиданию. Это потенциально платная проверка, не фоновый health check.

Мониторинг, который постоянно задаёт AI-вопросы, способен расходовать дневной лимит и деньги. Часто проверяйте процесс, а полный путь — осознанно после изменений. У Mini App есть /healthz, но он показывает доступность HTTP, а не успешный вход через Telegram.

Диагностика без раскрытия данных

Бот пишет фиксированные коды ошибок и HTTP-статусы вместо текстов запросов, токенов и ответов upstream. Docker ограничивает его логи двумя файлами до 5 МБ каждый. Логи других служб, образы и бэкапы по-прежнему занимают диск. Полная запись request body ради поиска ошибки ключа может раскрыть переписку и секреты.

Для инцидента запишите время, сервис, код/статус, результат /id и последнее существенное изменение конфигурации. Не отправляйте .env, развёрнутый вывод Compose или содержимое базы вместе с диагностикой. Если ключ раскрыт, замените его и пересоздайте сервис: удаление лога не отзывает доступ.

Таймаут означает, что клиент не получил полный ответ. Он не доказывает остановку генерации или отсутствие списания. Именно поэтому бот не повторяет платную попытку автоматически. До увеличения лимитов прочитайте контроль расходов и диагностику.

Источники: Docker restart policies, Compose restart.

Все руководства по Telegram-ботам и Mini Apps.

Тарифы из текущего каталога

Сейчас не удалось загрузить планы. Смотрите актуальные тарифы на странице цен.