# Deploy ja infrastruktuur

## Serverid

| Server | Roll | SSH | IP (Tailscale) |
|--------|------|-----|----------------|
| `ohmu` | Dev (arendus, andmetöötlus) | `ssh ohmu` | 100.87.1.24 |
| `hetzner` | Prod (avalik veeb) | `ssh hetzner` | 135.181.229.246 (avalik), 100.80.222.54 |

## ohmu (dev)

- Docker + docker-compose (vana v1)
- Projekt: `/data/docker/liiklusatlas`
- Port: 8074 (`main_ai_network`)
- **Token:** `.env` failis (`ATLAS_ACCESS_TOKEN=<kood>`), `.env` on `.gitignore`-is
- Uuendus:
  ```bash
  ssh ohmu
  cd /data/docker/liiklusatlas && git pull origin main
  docker-compose build && docker-compose up -d --force-recreate   # koodimuutus
  # andmeuuendus (ilma koodimuutuseta):
  # git pull && docker restart liiklusatlas
  ```
- Logid: `tail -f /data/docker/liiklusatlas/data/logs/access.log`
- Muud teenused: n8n (5678), Qdrant (6333), PostgreSQL/PostGIS (5432), Ollama, open-webui, jupyter, searxng

## hetzner (prod)

- Docker Swarm + traefik (Let's Encrypt, DNS-challenge DigitalOcean)
- Projekt: `~/swarm/docker-compose/containers/other/liiklusatlas`
- URL: `https://atlas.see1.ee`
- **Token:** tuleb **eksportida shellis** enne stack deploy — muidu `stack-prod.yml`
  saab tühja väärtuse ja kõik kaitstud vallad on lukus isegi koodiga.
- Uuendus:
  ```bash
  ssh hetzner
  cd ~/swarm/docker-compose/containers/other/liiklusatlas && git pull origin main
  docker build -t liiklusatlas:latest .
  export ATLAS_ACCESS_TOKEN=<kood>
  docker stack deploy --compose-file=stack-prod.yml atlas
  docker service update --force atlas_liiklusatlas
  ```
- Traefik: `traefik-network` (overlay), router `atlas-https`, certresolver `mychallenge`
- **Tähelepanu:** traefik kuulab ainult IPv4 (`0.0.0.0:443`). IPv6 hetzneril on katki — **AAAA kirje peab olema eemaldatud** (asub erineva DO konto all, kustuta käsitsi).

## Gogs (Git)

- URL: `https://gogs.odamus.com` (kasutaja `ardo`)
- Repod: `liiklusatlas`, `Obsidian`, `ohmu-cron`
- Gogs on hetzneril (Drupal see1.ee kõrval)

## Let's Encrypt / DNS

- `atlas.see1.ee` → A `135.181.229.246` (DigitalOcean DNS, see1.ee zone)
- Sert: traefik väljastab automaatselt DNS-01 challenge'ga
- Kui sert ebaõnnestub `NXDOMAIN`-iga: DO token ei näe zone'i — kontrolli traefiku `DO_AUTH_TOKEN` ulatust

## Varundus

- ohmu: `backup-ohmu.sh` → merkuur ketas (rsync --link-dest snapshot'id)
- hetzner: `~/swarm` cron-backup

## Seos

[[Liiklussageduse kaudne hindamine/04_Tehniline/Repo ja töövoog]]
