Files
schedule/deploy/README-dev.md
Vladislav Kopnin 688bb44ff1 Перенос в master всего, кроме админки: ТОП-группы, порядок групп, запуск без Docker
Админка осталась отдельной ветвью admin-panel; в master её нет (ни кода, ни
страниц, ни переменных окружения, ни тома настроек).

Что перенесено:
- parsing: имена групп вида «ИВТ-ТОП-11БО» распознаются, порядок групп = порядок
  столбцов таблицы (похожие заголовки с пробелами группой не считаются);
- main: GET /groups отдаёт группы в порядке столбцов; интервал обновления из
  SCHEDULE_INTERVAL_MINUTES (со старым SCHEDULE_CACHE_TTL как fallback);
- cache: по интервалу сверяем modified — если файл не менялся, не скачиваем;
  при загрузке считаем sha256 и пишем в лог и /status, изменился ли файл;
- source: запросы к Яндекс.Диску с no-cache и меткой времени;
- frontend: ответы API с Cache-Control: no-store, общий .env из корня проекта
  (и backend, и frontend), страницы/прокси админки нет;
- Dockerfile/compose/.env.example: без ADMIN_* и без тома настроек; в api-образ
  попадают все модули backend (проверяется тестом test_deploy);
- Makefile: make help/venv/run/run-api/run-front/test + docker-цели — «make run»
  поднимает всё локально без Docker;
- README: быстрый старт, полный список зависимостей, запуск локально и в Docker;
- deploy/: пример nginx и инструкция «второй стенд рядом с основным».

Тесты: 114 (удалены админские), все зелёные.
2026-10-06 14:59:51 +03:00

1.9 KiB
Raw Blame History

Второй стенд рядом с основным

Как поднять ещё один экземпляр проекта (например, для проверки правок в таблице на отдельном домене): свой каталог, свои порты, своя ссылка на таблицу. Основной стенд при этом не трогаем.

1. Код

sudo mkdir -p /opt/schedule-dev && sudo chown "$USER" /opt/schedule-dev
git clone <адрес репозитория> /opt/schedule-dev

2. .env

Скопировать .env.example в /opt/schedule-dev/.env и заполнить:

SCHEDULE_LINK=https://disk.yandex.ru/i/...
SCHEDULE_INTERVAL_MINUTES=15
SCHEDULE_RETRY_AFTER=60
API_PORT=127.0.0.1:8001
FRONTEND_PORT=127.0.0.1:8091

Порты 8001/8091 выбраны, чтобы не пересечься с основным стендом (8000/8090). Привязка к 127.0.0.1 — чтобы API и фронт не смотрели в интернет напрямую, наружу их отдаёт nginx.

3. Запуск

cd /opt/schedule-dev
sudo docker compose up -d --build
sudo docker compose ps

4. nginx и сертификат

В deploy/nginx-dev.conf порт proxy_pass должен совпадать с FRONTEND_PORT из .env (по умолчанию 8091).

sudo cp deploy/nginx-dev.conf /etc/nginx/sites-available/dev.schedule.our-place.ru
sudo ln -sf /etc/nginx/sites-available/dev.schedule.our-place.ru /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d dev.schedule.our-place.ru

5. Проверка

curl -s http://127.0.0.1:8091/healthz                    # {"ok":true}
curl -sI https://dev.schedule.our-place.ru/ | head -3    # 200

Обновление

cd /opt/schedule-dev && git pull && sudo docker compose up -d --build