О чем статья
В этой статье рассматривается решение проблемы деплоя Telegram-бота Coreness. Вместо ручного копирования файлов, настройки зависимостей и миграций БД была создана система, которая делает всё автоматически.
Что получится:
-
Развернуть бота одной командой
-
Автоматически обновляться без потери данных
-
Умно мигрировать базу данных
-
Устанавливать SSL-сертификаты
-
Откатываться при ошибках
Напоминание
Coreness — это современное ядро с модульной архитектурой на основе плагинов, позволяющее создать Telegram-ботов с уникальными сценариями и полным контролем процессов.
Про создание ядра и архитектуру можно прочитать в предыдущей статье: Мой первый пет-проект.
Часть 1: Быстрый старт за 5 минут
Способ 1: Через командную строку
# Скачиваем скрипт wget https://raw.githubusercontent.com/Vensus137/Coreness/main/tools/core_updater.py # Запускаем установку python core_updater.py
Способ 2: Через веб-интерфейс GitHub
-
Перейти на страницу скрипта в GitHub
-
Нажать кнопку «Download raw file» в правом верхнем углу
-
Сохранить и запустить скрипт:
python core_updater.py
Рекомендации
Рекомендуется запускать скрипт через консоль/терминал, а не двойным кликом мыши.
Правильно: python core_updater.py в терминале
Неправильно: двойной клик на файле .py
Почему: При первичной установке проблем обычно не возникает, но при обновлении существующего проекта могут быть непредвиденные ошибки с путями, переменными окружения и скрипт может закрыться до завершения операций
Что происходит дальше:
-
Скрипт автоматически определяет, что это первая установка
-
Предлагает выбрать версию (Base/Pro)
-
Base версия — скачивается без токена (публичный репозиторий)
-
Pro версия — требует GitHub токен (приватный репозиторий)
-
Устанавливает зависимости Python
-
Создает базу данных
-
Самоудаляется после завершения
Результат
Через 5 минут у вас есть полностью готовое ядро Coreness с:
-
Настроенной базой данных
-
Установленными зависимостями
-
Готовыми конфигурациями
-
Логами и папками для данных
Важно: Это готовое ядро, которое ожидает настройки конфигом для сценариев. Если скачать базовые конфиги (обновить заводские конфиги), то по умолчанию будут настроены базовые тестовые сценарии для всех плагинов, модулей и возможностей.
Часть 2: Как работает магия обновления
Умный скрипт core_updater.py
Проблема: Как автоматически понять, что хочет пользователь — установить бота впервые или обновить существующего?
Решение: Используем расположение скрипта как индикатор намерений. Если скрипт лежит в папке tools/ — это обновление существующего проекта. Если где-то еще — первая установка.
Почему это эффективно:
-
Нулевая настройка — пользователь просто скачивает скрипт куда хочет
-
Автоматическое определение — система сама понимает, что делать
-
Безопасность — невозможно случайно перезаписать существующий проект
-
Универсальность — один скрипт для двух задач
Как это работает: Скрипт анализирует свой путь и выбирает стратегию. При установке создается новая папка, при обновлении система работает с существующей.
Умная работа с токенами
Проблема: Как обеспечить доступ к разным версиям (публичной и приватной)?
Решение: Гибридная система токенов с fallback на ручной ввод.
Стратегия токенов:
-
Base версия — скачивается без токена (публичный репозиторий)
-
Pro версия — требует токен (приватный репозиторий)
-
Автоматический fallback — если токен не найден в переменных окружения, запрашиваем вручную
-
Повторные попытки — при ошибках скачивания пробуем разные методы
Что это дает:
-
Простота для Base — никаких токенов не нужно
-
Гибкость для Pro — можно использовать переменные окружения или вводить вручную
-
Надежность — несколько методов скачивания на случай проблем
-
Прозрачность — пользователь понимает, что происходит
Система резервного копирования

Проблема: Как сделать бэкап, который защитит важные данные, но не будет занимать много места?
Решение: Умная система исключений с разными стратегиями для разных типов файлов.
Стратегия бэкапа:
-
Критичные данные (
logs/,data/,.git/) — исключаем из бэкапа (не трогаем) -
Временные файлы (
.venv/,pycache/,*.pyc) — исключаем (легко восстанавливаются) -
Заводские конфиги (
config/,resources/) — бэкап по запросу (обновляем отдельно) -
Код и плагины — полный бэкап (пересоздаем при обновлении)
Что получается:
-
Пользовательские данные (
logs/,data/) не трогаются -
Настройки бота можно обновлять отдельно
-
Git-история сохраняется
-
При ошибке — полный откат
-
Бэкап занимает минимум места — только то, что действительно нужно
Чистая синхронизация vs обновление
Проблема: Как обновлять файлы, чтобы не потерять пользовательские изменения, но при этом гарантировать работоспособность?
Решение: Гибридная стратегия — разные подходы для разных типов файлов.
Стратегия обновления:
-
Критичные компоненты (
plugins/,app/,tools/) — чистая синхронизация (полное пересоздание) -
Остальные файлы — умное обновление (сохранение изменений)
Почему так:
-
Плагины — должны быть в точности как в репозитории, иначе бот не запустится
-
Приложение — критичный код, любые изменения могут сломать систему
-
Инструменты — должны быть актуальными для корректной работы
-
Остальное — пользователь может кастомизировать, изменения сохраняются
Результат: Безопасность + гибкость. Критичные части всегда работают, пользовательские настройки сохраняются.
Обработка ошибок и откат
Проблема: Что делать, если обновление сломалось на полпути? Как не оставить проект в нерабочем состоянии?
Решение: Многоуровневая система защиты с гарантированным откатом.
Стратегия защиты:
-
Перед любыми изменениями — создаем полный бэкап
-
Во время обновления — отслеживаем каждый шаг
-
При ошибке — немедленно останавливаем процесс
-
Автоматический откат — восстанавливаем проект из бэкапа
-
Fallback — если автоматический откат не сработал, сохраняем бэкап для ручного восстановления
Что это дает:
-
Гарантия работоспособности — проект всегда в стабильном состоянии
-
Нулевой риск — даже при критических ошибках ничего не ломается
-
Простота восстановления — максимум один бэкап для восстановления
-
Прозрачность — пользователь всегда знает, что происходит
Результат: Можно спокойно обновляться — система обеспечивает стабильность проекта.
Часть 3: Умные миграции базы данных
Возможности скрипта database_manager.py
-
Пересоздавать таблицы
-
Обновлять индексы
-
Мигрировать схему с сохранением данных
-
Удалять таблицы
Умная миграция

Проблема: Как обновить структуру базы данных, не потеряв пользовательские данные? Особенно когда SQLite не поддерживает некоторые операции.
Решение: Интеллектуальная система миграции с автоматическим определением стратегии.
Алгоритм работы:
-
Создание бэкапа — полная копия БД перед любыми изменениями
-
Анализ структуры — сравнение существующих таблиц с новыми моделями
-
Выбор стратегии — для каждой таблицы определяем оптимальный способ обновления
-
Безопасное изменение — добавляем колонки, удаляем лишние (если возможно)
-
Пересоздание при необходимости — если SQLite не поддерживает операцию, пересоздаем таблицу с сохранением данных
Умные решения:
-
Автоматическое определение поддерживаемых операций SQLite
-
Сохранение данных при любых изменениях структуры
-
Обработка ошибок с полным откатом при проблемах
-
Обновление индексов для оптимальной производительности
Результат: Пользователь просто запускает миграцию, а система автоматически определяет, как безопасно обновить БД.
Сохранение данных при изменении структуры
Проблема: Что делать, когда нужно кардинально изменить структуру таблицы, а SQLite не поддерживает DROP COLUMN?
Решение: Безопасное пересоздание таблицы с полным сохранением данных.
Процесс пересоздания:
-
Создание временной таблицы — с новой структурой, но пустой
-
Перенос данных — построчное копирование с преобразованием типов
-
Обработка ошибок — если данные не помещаются в новый формат, используем NULL
-
Атомарная замена — удаляем старую таблицу, переименовываем новую
Умные особенности:
-
Сохранение всех данных — даже если структура кардинально изменилась
-
Преобразование типов — автоматическая адаптация данных к новой схеме
-
Graceful degradation — при проблемах с данными используем безопасные значения
-
Атомарность — либо все изменения применяются, либо ничего
Результат: Можно смело менять структуру БД — данные всегда сохранятся, а система останется стабильной.
Бонусная часть: SSL-сертификаты для российских сервисов
Зачем нужны российские сертификаты?
Многие российские сервисы (Сбер, Госуслуги) используют собственные центры сертификации. Без их сертификатов Python не может установить SSL-соединение.
Автоматическая установка

Проблема: Многие российские сервисы (Сбер, Госуслуги) используют собственные центры сертификации. Без их сертификатов Python не может установить SSL-соединение.
Решение: Автоматический установщик, который скачивает и устанавливает российские сертификаты.
Как это работает:
-
Скачивание сертификатов — автоматически с официальных источников
-
Распаковка архивов — поиск .cer файлов в ZIP архивах
-
Создание объединенного файла — все сертификаты в одном месте
-
Кроссплатформенная установка — разные способы для Windows и Linux
-
Тестирование соединений — проверка работоспособности с реальными серверами
Умные особенности:
-
Автоматическое определение ОС — Windows или Linux
-
Проверка прав администратора — предупреждение при недостатке прав
-
Обработка ошибок — graceful fallback при проблемах
-
Очистка временных файлов — не засоряем систему
Важно: В проекте уже есть готовый объединенный файл ssl_certificates/russian_certs.pem, который работает как на Windows, так и на Linux без дополнительной установки в систему.
Что получилось в итоге
Автоматизация деплоя
-
Одна команда для установки
-
Автоматическое обновление без потери данных
-
Умные бэкапы с исключениями
-
Полный откат при ошибках
Безопасность
-
Резервное копирование перед любыми изменениями
-
Проверка зависимостей перед обновлением
-
Сохранение данных при миграциях БД
-
Валидация скачанных файлов
-
Логирование всех операций
Гибкость
-
Выбор версии (Base/Pro)
-
Обновление конфигов по запросу
-
Кроссплатформенность (Windows/Linux)
-
Гибкая работа с токенами — переменные окружения или ручной ввод
Ссылки:
-
Предыдущая статья: Мой первый пет-проект
-
Репозиторий: github.com/Vensus137/Coreness
-
Демо‑бот: t.me/coreness_bot
-
Группа проекта: t.me/coreness
ссылка на оригинал статьи https://habr.com/ru/articles/940898/
Добавить комментарий