Как стать автором
Поиск
Написать публикацию
Обновить

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

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров137

О чем статья

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

  1. Перейти на страницу скрипта в GitHub

  2. Нажать кнопку "Download raw file" в правом верхнем углу

  3. Сохранить и запустить скрипт: python core_updater.py

Рекомендации

Рекомендуется запускать скрипт через консоль/терминал, а не двойным кликом мыши.

Правильно: python core_updater.py в терминале

Неправильно: двойной клик на файле .py

Почему: При первичной установке проблем обычно не возникает, но при обновлении существующего проекта могут быть непредвиденные ошибки с путями, переменными окружения и скрипт может закрыться до завершения операций

Что происходит дальше:

  1. Скрипт автоматически определяет, что это первая установка

  2. Предлагает выбрать версию (Base/Pro)

  3. Base версия — скачивается без токена (публичный репозиторий)

  4. Pro версия — требует GitHub токен (приватный репозиторий)

  5. Устанавливает зависимости Python

  6. Создает базу данных

  7. Самоудаляется после завершения

Результат

Через 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/) — чистая синхронизация (полное пересоздание)

  • Остальные файлыумное обновление (сохранение изменений)

Почему так:

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

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

  • Инструменты — должны быть актуальными для корректной работы

  • Остальное — пользователь может кастомизировать, изменения сохраняются

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

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

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

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

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

  1. Перед любыми изменениями — создаем полный бэкап

  2. Во время обновления — отслеживаем каждый шаг

  3. При ошибке — немедленно останавливаем процесс

  4. Автоматический откат — восстанавливаем проект из бэкапа

  5. Fallback — если автоматический откат не сработал, сохраняем бэкап для ручного восстановления

Что это дает:

  • Гарантия работоспособности — проект всегда в стабильном состоянии

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

  • Простота восстановления — максимум один бэкап для восстановления

  • Прозрачность — пользователь всегда знает, что происходит

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

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

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

  • Пересоздавать таблицы

  • Обновлять индексы  

  • Мигрировать схему с сохранением данных

  • Удалять таблицы

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

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

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

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

  1. Создание бэкапа — полная копия БД перед любыми изменениями

  2. Анализ структуры — сравнение существующих таблиц с новыми моделями

  3. Выбор стратегии — для каждой таблицы определяем оптимальный способ обновления

  4. Безопасное изменение — добавляем колонки, удаляем лишние (если возможно)

  5. Пересоздание при необходимости — если SQLite не поддерживает операцию, пересоздаем таблицу с сохранением данных

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

  • Автоматическое определение поддерживаемых операций SQLite

  • Сохранение данных при любых изменениях структуры

  • Обработка ошибок с полным откатом при проблемах

  • Обновление индексов для оптимальной производительности

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

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

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

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

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

  1. Создание временной таблицы — с новой структурой, но пустой

  2. Перенос данных — построчное копирование с преобразованием типов

  3. Обработка ошибок — если данные не помещаются в новый формат, используем NULL

  4. Атомарная замена — удаляем старую таблицу, переименовываем новую

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

  • Сохранение всех данных — даже если структура кардинально изменилась

  • Преобразование типов — автоматическая адаптация данных к новой схеме

  • Graceful degradation — при проблемах с данными используем безопасные значения

  • Атомарность — либо все изменения применяются, либо ничего

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

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

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

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

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

Проблема: Многие российские сервисы (Сбер, Госуслуги) используют собственные центры сертификации. Без их сертификатов 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)

  • Гибкая работа с токенами — переменные окружения или ручной ввод

Ссылки:

Теги:
Хабы:
0
Комментарии0

Публикации

Ближайшие события