Магия деплоя: автоматическое развертывание Coreness одной командой

О чем статья

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

Магия деплоя: автоматическое развертывание Coreness одной командой

Умный скрипт core_updater.py

Проблема: Как автоматически понять, что хочет пользователь — установить бота впервые или обновить существующего?

Решение: Используем расположение скрипта как индикатор намерений. Если скрипт лежит в папке tools/ — это обновление существующего проекта. Если где-то еще — первая установка.

Почему это эффективно:

  • Нулевая настройка — пользователь просто скачивает скрипт куда хочет
  • Автоматическое определение — система сама понимает, что делать
  • Безопасность — невозможно случайно перезаписать существующий проект
  • Универсальность — один скрипт для двух задач

Как это работает: Скрипт анализирует свой путь и выбирает стратегию. При установке создается новая папка, при обновлении система работает с существующей.

Умная работа с токенами

Проблема: Как обеспечить доступ к разным версиям (публичной и приватной)?

Решение: Гибридная система токенов с fallback на ручной ввод.

Стратегия токенов:

  • Base версия — скачивается без токена (публичный репозиторий)
  • Pro версия — требует токен (приватный репозиторий)
  • Автоматический fallback — если токен не найден в переменных окружения, запрашиваем вручную
  • Повторные попытки — при ошибках скачивания пробуем разные методы

Что это дает:

  • Простота для Base — никаких токенов не нужно
  • Гибкость для Pro — можно использовать переменные окружения или вводить вручную
  • Надежность — несколько методов скачивания на случай проблем
  • Прозрачность — пользователь понимает, что происходит

Система резервного копирования

Магия деплоя: автоматическое развертывание Coreness одной командой

Проблема: Как сделать бэкап, который защитит важные данные, но не будет занимать много места?

Решение: Умная система исключений с разными стратегиями для разных типов файлов.

Стратегия бэкапа:

  • Критичные данные (logs/, data/, .git/) — исключаем из бэкапа (не трогаем)
  • Временные файлы (.venv/, pycache/, *.pyc) — исключаем (легко восстанавливаются)
  • Заводские конфиги (config/, resources/) — бэкап по запросу (обновляем отдельно)
  • Код и плагины полный бэкап (пересоздаем при обновлении)

Что получается:

  • Пользовательские данные (logs/, data/) не трогаются
  • Настройки бота можно обновлять отдельно
  • Git-история сохраняется
  • При ошибке — полный откат
  • Бэкап занимает минимум места — только то, что действительно нужно

Чистая синхронизация vs обновление

Проблема: Как обновлять файлы, чтобы не потерять пользовательские изменения, но при этом гарантировать работоспособность?

Решение: Гибридная стратегия — разные подходы для разных типов файлов.

Стратегия обновления:

  • Критичные компоненты (plugins/, app/, tools/) — чистая синхронизация (полное пересоздание)
  • Остальные файлыумное обновление (сохранение изменений)

Почему так:

  • Плагины — должны быть в точности как в репозитории, иначе бот не запустится
  • Приложение — критичный код, любые изменения могут сломать систему
  • Инструменты — должны быть актуальными для корректной работы
  • Остальное — пользователь может кастомизировать, изменения сохраняются

Результат: Безопасность + гибкость. Критичные части всегда работают, пользовательские настройки сохраняются.

Обработка ошибок и откат

Проблема: Что делать, если обновление сломалось на полпути? Как не оставить проект в нерабочем состоянии?

Решение: Многоуровневая система защиты с гарантированным откатом.

Стратегия защиты:

  1. Перед любыми изменениями — создаем полный бэкап
  2. Во время обновления — отслеживаем каждый шаг
  3. При ошибке — немедленно останавливаем процесс
  4. Автоматический откат — восстанавливаем проект из бэкапа
  5. Fallback — если автоматический откат не сработал, сохраняем бэкап для ручного восстановления

Что это дает:

  • Гарантия работоспособности — проект всегда в стабильном состоянии
  • Нулевой риск — даже при критических ошибках ничего не ломается
  • Простота восстановления — максимум один бэкап для восстановления
  • Прозрачность — пользователь всегда знает, что происходит

Результат: Можно спокойно обновляться — система обеспечивает стабильность проекта.

Часть 3: Умные миграции базы данных

Возможности скрипта database_manager.py

  • Пересоздавать таблицы
  • Обновлять индексы
  • Мигрировать схему с сохранением данных
  • Удалять таблицы

Умная миграция

Магия деплоя: автоматическое развертывание Coreness одной командой

Проблема: Как обновить структуру базы данных, не потеряв пользовательские данные? Особенно когда SQLite не поддерживает некоторые операции.

Решение: Интеллектуальная система миграции с автоматическим определением стратегии.

Алгоритм работы:

  1. Создание бэкапа — полная копия БД перед любыми изменениями
  2. Анализ структуры — сравнение существующих таблиц с новыми моделями
  3. Выбор стратегии — для каждой таблицы определяем оптимальный способ обновления
  4. Безопасное изменение — добавляем колонки, удаляем лишние (если возможно)
  5. Пересоздание при необходимости — если SQLite не поддерживает операцию, пересоздаем таблицу с сохранением данных

Умные решения:

  • Автоматическое определение поддерживаемых операций SQLite
  • Сохранение данных при любых изменениях структуры
  • Обработка ошибок с полным откатом при проблемах
  • Обновление индексов для оптимальной производительности

Результат: Пользователь просто запускает миграцию, а система автоматически определяет, как безопасно обновить БД.

Сохранение данных при изменении структуры

Проблема: Что делать, когда нужно кардинально изменить структуру таблицы, а SQLite не поддерживает DROP COLUMN?

Решение: Безопасное пересоздание таблицы с полным сохранением данных.

Процесс пересоздания:

  1. Создание временной таблицы — с новой структурой, но пустой
  2. Перенос данных — построчное копирование с преобразованием типов
  3. Обработка ошибок — если данные не помещаются в новый формат, используем NULL
  4. Атомарная замена — удаляем старую таблицу, переименовываем новую

Умные особенности:

  • Сохранение всех данных — даже если структура кардинально изменилась
  • Преобразование типов — автоматическая адаптация данных к новой схеме
  • Graceful degradation — при проблемах с данными используем безопасные значения
  • Атомарность — либо все изменения применяются, либо ничего

Результат: Можно смело менять структуру БД — данные всегда сохранятся, а система останется стабильной.

Бонусная часть: SSL-сертификаты для российских сервисов

Зачем нужны российские сертификаты?

Многие российские сервисы (Сбер, Госуслуги) используют собственные центры сертификации. Без их сертификатов Python не может установить SSL-соединение.

Автоматическая установка

Магия деплоя: автоматическое развертывание Coreness одной командой

Проблема: Многие российские сервисы (Сбер, Госуслуги) используют собственные центры сертификации. Без их сертификатов Python не может установить SSL-соединение.

Решение: Автоматический установщик, который скачивает и устанавливает российские сертификаты.

Как это работает:

  1. Скачивание сертификатов — автоматически с официальных источников
  2. Распаковка архивов — поиск .cer файлов в ZIP архивах
  3. Создание объединенного файла — все сертификаты в одном месте
  4. Кроссплатформенная установка — разные способы для Windows и Linux
  5. Тестирование соединений — проверка работоспособности с реальными серверами

Умные особенности:

  • Автоматическое определение ОС — Windows или Linux
  • Проверка прав администратора — предупреждение при недостатке прав
  • Обработка ошибок — graceful fallback при проблемах
  • Очистка временных файлов — не засоряем систему

Важно: В проекте уже есть готовый объединенный файл ssl_certificates/russian_certs.pem, который работает как на Windows, так и на Linux без дополнительной установки в систему.

Что получилось в итоге

Автоматизация деплоя

  • Одна команда для установки
  • Автоматическое обновление без потери данных
  • Умные бэкапы с исключениями
  • Полный откат при ошибках

Безопасность

  • Выбор версии (Base/Pro)
  • Обновление конфигов по запросу
  • Кроссплатформенность (Windows/Linux)
  • Гибкая работа с токенами — переменные окружения или ручной ввод

Ссылки:

1
2 комментария