Przejdź do treści

Usługi i przepływ danych

Usługi

Core

Usługa Opis
appserver Serwer aplikacji Django + migracje
authserver Django auth proxy dla nginx — bez migracji/collectstatic, startuje w sekundy
dbserver PostgreSQL + denormalizacja
webserver Nginx (reverse proxy + static files)
redis Cache, broker Celery i result backend

Workery

Usługa Opis
workerserver-general Ogólne zadania Celery (queue: celery)
workerserver-denorm Zadania denormalizacji (queue: denorm)
celerybeat Harmonogram zadań okresowych (service_started, nie _healthy — szybszy start)
denorm-queue Bridge PostgreSQL LISTEN → Celery
flower UI monitorowania Celery (port 5555, path /flower)

denorm-queue — pojedyncza instancja

denorm-queue musi działać jako jedna instancja, żeby uniknąć podwójnego przetwarzania wiadomości. Nie skaluj.

Monitoring

Usługa Opis
netdata Metryki hosta/kontenerów/PostgreSQL, 1s, alerty push na ntfy.sh (/netdata/)
loki + alloy Zbieranie i retencja logów per service
grafana Frontend do Loki/LogQL + dashboardy (/grafana/)
dozzle Live tail logów kontenerów (/dozzle/)

Support

Usługa Opis
ofelia Cron dla Dockera (zadania okresowe)
autoheal Sidecar restartujący niezdrowe kontenery (healthchecks)
backup-runner Codzienny pg_dump + tar media + rclone + Rollbar (postgres:<major>-alpine; Ofelia 0 30 2 * * *; manual: make backup-cycle)

Profil manual

workerserver-status (profiles: ['manual'], nie startuje automatycznie) — docker compose run --rm workerserver-status.

Przepływ danych

  • Web: nginx → Django.
  • Zadania w tle: Django → Celery.
  • Zmiany w bazie: triggery PG → LISTENdenorm-queue → Celery.
  • Static: nginx serwuje wspólny wolumen.
  • Cron: Ofelia → komendy zarządzające Django.
  • Logi: kontenery → Alloy → Loki → Grafana.
  • Metryki: kontenery + host + PostgreSQL + nginx → Netdata (1s, lokalne UI + alerty); push na ntfy.sh przy alertach.
  • Auth: nginx → authserver → proxy do Grafany/Dozzle.

Zależności startu

  • appserver startuje przed workerami (obsługuje migracje); workery zależą od appserver healthy (tranzytywnie dbserver).
  • denorm-queue wymaga workerserver-denorm healthy.
  • celerybeat używa service_started (nie _healthy) dla appserver — szybszy start.