Přeskočit obsah

Instalace v Dockeru

Docker stack obsahuje tři služby: web (Django + Daphne), db (PostgreSQL 17) a redis (Redis 7). Před ním má být reverzní proxy s HTTPS. V návodu používáme Caddy, který certifikát od Let's Encrypt získá automaticky.

Požadavky

  • Linuxový server s Dockerem a Docker Compose v2 (docker compose).
  • Doména (např. odbavto.example.cz) s DNS záznamem A/AAAA na server.
  • Otevřené porty 80 a 443.
  • Zhruba 1 GB RAM a 2 GB místa na disku.

1. Stažení aplikace

git clone https://github.com/michaelkalus/OdbavTo.git odbavto
cd odbavto

2. Konfigurace

cp .env.docker.example .env

Upravte v .env minimálně tyto hodnoty:

COMPOSE_PROJECT_NAME=odbavto

SECRET_KEY=<dlouhy-nahodny-retezec>
ALLOWED_HOSTS=odbavto.example.cz
CSRF_TRUSTED_ORIGINS=https://odbavto.example.cz

DB_NAME=odbavto
DB_USER=odbavto
DB_PASSWORD=<silne-heslo>

SECRET_KEY vygenerujete například takto:

python3 -c "import secrets; print(secrets.token_urlsafe(50))"

Popis všech proměnných najdete v kapitole Konfigurace (.env).

3. Síť pro reverzní proxy

Služba web nepublikuje žádný port na hostitele. Je připojená do externí Docker sítě web, přes kterou na ni vidí reverzní proxy. Síť jednou vytvořte:

docker network create web

4. Spuštění

docker compose up -d --build

Při každém startu kontejneru web se automaticky provedou databázové migrace a collectstatic. Stav ověříte příkazy:

docker compose ps
docker compose logs -f web

5. Reverzní proxy (Caddy)

Pokud na serveru Caddy ještě neběží, spusťte ho jako samostatný kontejner ve stejné síti web. Například v adresáři ~/caddy:

services:
  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - web

volumes:
  caddy_data:
  caddy_config:

networks:
  web:
    external: true
odbavto.example.cz {
    encode gzip
    reverse_proxy odbavto-web:8000
}
cd ~/caddy && docker compose up -d

Název kontejneru je ${COMPOSE_PROJECT_NAME}-web, tedy s COMPOSE_PROJECT_NAME=odbavto je to odbavto-web. Caddy předává WebSockety automaticky, nic dalšího se nastavovat nemusí.

Jiná reverzní proxy

Funguje i Nginx, Traefik a další. Proxy musí předávat hlavičku X-Forwarded-Proto a podporovat WebSocket upgrade (cesta /ws/). V docker-compose.yml je nastaveno BEHIND_PROXY=True, takže Django hlavičce X-Forwarded-Proto věří.

6. První administrátor

Na serveru se výchozí účet odbavto nezakládá. Administrátora vytvoříte ručně:

docker compose exec web python manage.py createsuperuser

Pak otevřete https://odbavto.example.cz/, přihlaste se a v administraci /admin/ založte účty dalším uživatelům (viz Uživatelé).

Data a svazky (volumes)

Volume Obsah Zálohovat
postgres_data Databáze Ano
private_media Nahrané obrázky a loga štítků Ano
app_logs Logy aplikace Volitelně

Svazky mají v názvu prefix projektu, např. odbavto_postgres_data. Postup zálohy je v kapitole Aktualizace a zálohy.

Kontrolní seznam po instalaci

  • https://odbavto.example.cz/ se načte s platným certifikátem.
  • Přihlášení administrátora funguje.
  • Ve skeneru jde zapnout kamera (ověřuje HTTPS).
  • Testovací speciální štítek se vytiskne.
  • Je nastavená pravidelná záloha databáze a private_media.