# Расписание ПГУ. # # docker compose up -d --build → http://localhost:3001 # DOMAIN=schedule.example.by docker compose --profile https up -d --build # → https://schedule.example.by # # Установка PWA на телефон требует HTTPS: для публичного адреса включите # профиль https (Caddy сам получит сертификат Let's Encrypt) либо поставьте # приложение за свой обратный прокси. services: app: build: . image: psu-schedule:latest restart: unless-stopped ports: # Без HTTPS-прокси приложение доступно напрямую; за прокси можно # ограничить локальным адресом: APP_BIND=127.0.0.1 - "${APP_BIND:-0.0.0.0}:${APP_PORT:-3001}:3001" environment: HOST: 0.0.0.0 PORT: 3001 TZ: Europe/Minsk # Путь к LibreOffice для импорта старых .doc уже есть в образе. volumes: # Кэш каталога, таблицы недель и распознанных документов. # Переживает пересборку образа; удаление тома только замедлит первый запуск. - psu-data:/app/.data healthcheck: test: ["CMD", "curl", "-fsS", "http://127.0.0.1:3001/api/health"] interval: 30s timeout: 5s retries: 3 # Первый запуск разбирает все документы каталога (около полуминуты). start_period: 60s caddy: image: caddy:2.8.4-alpine profiles: ["https"] restart: unless-stopped depends_on: app: condition: service_healthy environment: DOMAIN: ${DOMAIN:-} # DOMAIN проверяется внутри контейнера: обычный `docker compose up` # без профиля https не должен его требовать. entrypoint: ["/bin/sh", "-c"] command: - >- caddy reverse-proxy --from "$${DOMAIN:?Укажите DOMAIN, например schedule.example.by}" --to app:3001 ports: - "80:80" - "443:443" - "443:443/udp" volumes: # Сертификаты: без тома Caddy запрашивал бы их заново при каждом запуске. - caddy-data:/data - caddy-config:/config volumes: psu-data: caddy-data: caddy-config: