О чем статья
В этой статье рассматривается решение проблемы деплоя 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