Для ускорения сборки контейнеров создан базовый образ в корне проекта, который содержит в себе большинство необходимых для приложений библиотек в виртуальном окружении и установленный пакет lib/database для взаимодействия с БД. На уровне приложений у каждого есть собсвтенный Dockerfile, использующий базовый образ в качестве builder-образа. Базовый образ необходимо пересобирать всякий раз при редактировании lib.
Для локального запуска следует использовать docker-compose.yml с опцией --build, например, docker-compose up --build --force-recreate --remove-orphans (отличается от коллег тем, что самостоятельно собирает образы, а не ходит за ними в Registry).
Для запуска на проде – docker-compose.prod.yml, например, docker-compose -f docker-compose.prod.yml pull && docker-compose -f docker-compose.prod.yml up -d --force-recreate --remove-orphans.
Для запуска на тестинге – docker-compose.dev.yml (отличается тегами образов).
Миграции с помощью alembic накатывает при запуске core. Писать и редактировать миграции рекомендуется вручную, не полагаться на автогенерацию, с которой очень легко сломать проект. Папка с миграциями подключается к core volume'ом, чтобы можно было на лету их редактировать, поэтому при накатывании нового релиза нужно не забыть обновить миграции на сервере, иначе не получим свежую схему в БД.
Актуальные продовые и препродовые окружения можно найти в репозитории или попросить у коллег.
SENTRY_DSN – адрес проекта в Sentry
ONLINEEDU_CALLBACK_URL – адрес, на который будут приходить вебхуки с платформ интерактивных уроков и из телеграма, проще говоря – адрес, по которму отвечает приложение (прод – https://onlineedu.konstant-anxiety.ru/, для локальных запусков можно использовать ngrok)
ONLINEEDU_API_URL – адрес, по которому отвечает core (http://web:5000 в случае единого docker-compose)
ONLINEEDU_TG_BOT_URL – адрес, по которому отвечает tg_bot (http://tg_bot:6000 в случае единого docker-compose)
ONLINEEDU_ZULIP_BOT_URL – адрес, по которому отвечает zulip_notifier (http://zulip_notifier:6001 в случае единого docker-compose)
ONLINEEDU_LOG_FILE – путь к файлу для записи логов (на данных момент не используется)
POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB – провиженинг постгреса
ONLINEEDU_DB_PATH – полная строка подключения к БД (e.g. postgresql+psycopg2://user:password@host:5432/db-name)
ONLINEEDU_SPREADSHEET_ID – старый адрес гуглщита с уроками, не используется
ONLINEEDU_GOOGLE_CLIENT_ID, ONLINEEDU_GOOGLE_CLIENT_SECRET, ONLINEEDU_GOOGLE_AUTH_CREDS – креденшалы сервисного аккаунта google
ONLINEEDU_GOOGLE_DISCOVERY_TABLE_ID – ID discovery-гуглщита
ONLINEEDU_ZULIP_API_KEY, ONLINEEDU_ZULIP_MAIL, ONLINEEDU_ZULIP_SITE – креденшалы бота в Zulip
ONLINEEDU_TELEGRAM_SECRET токен телеграм бота, полученнй от @BotFather (для локальных тестов каждому разработчику рекомендуется завести своего бота, чтобы не пересекаться)
ONLINEEDU_ALERT_CHAT_ID – ID чата в телеграм, в который присылаются алерты из графаны и репорты от пользователей
ONLINEEDU_TRELLO_API_URL, ONLINEEDU_TRELLO_KEY, ONLINEEDU_TRELLO_TOKEN – информация для работы с Trello API
ONLINEEDU_TAIGA_API_URL, ONLINEEDU_TAIGA_API_TOKEN – информация для работы с Taiga API
ONLINEEDU_REDIS_HOST, ONLINEEDU_REDIS_PORT, ONLINEEDU_REDIS_DB – креденшалы редиса для стейтов aiogram
ONLINEEDU_TELEGRAM_ADMINS – список ([1, 3, 2]) тг id админов (разработчиков), которым доступны дополнительные команды, например, /discard для сброса стейта
ONLINEEDU_TIME_SYNC – частота обновления БД из гуглщитов в минутах
Для некоторых приложений настроены проекты в Sentry, для добавления приходить к @askonstantinov
Для Olamia Edu настроено несколько небольших дашбордов в Grafana, которая доступна по адресу сервера. Позволяет мониторить утилизацию ресурсов и работу core.
По состоянию на май 2022 все приложения развернуты в Yandex Cloud. Доступ к машинкам по shh без пароля, за добавлением ключей приходить к @askonstantinov