diff --git a/proxmox/lxc103-dokploy/README.md b/proxmox/lxc103-dokploy/README.md index a07f9f9..bcff116 100644 --- a/proxmox/lxc103-dokploy/README.md +++ b/proxmox/lxc103-dokploy/README.md @@ -103,14 +103,173 @@ chmod 600 /root/.ssh/authorized_keys --- -## Workflow: Adăugare App Nouă +## Tipuri de Servicii în Dokploy — Când să Alegi Ce + +Dokploy v0.28.2 oferă trei tipuri de servicii. Alegerea corectă evită probleme +de rețea și simplifică mentenanța. + +### Comparație rapidă + +| Criteriu | Application | Compose | Database | +|----------|-------------|---------|----------| +| Nr. containere | 1 | 2+ | 1 (managed) | +| Comunicare inter-servicii | ✗ | ✓ | — | +| Gestionat de Swarm | ✓ | ✗ | ✓ | +| Race condition overlay network | nu | **da** (mitigat) | nu | +| Traefik routing | `.yml` static | Docker labels | — | +| Build din Git | ✓ | ✓ | — | +| Build automat fără Dockerfile | ✓ (Nixpacks) | ✗ | — | + +--- + +### Tip 1: Application — un singur container + +**Când îl alegi:** +- Aplicație simplă: un singur proces (API, frontend static, bot, worker) +- Nu are nevoie să vorbească cu alt container din același proiect +- Exemple pe LXC 103: `roa-qr`, `qr-generator`, `icon-generator` + +**Avantaje:** Gestionat nativ de Swarm — nu are race condition la restart. +Traefik primește config static (`.yml` în `/etc/dokploy/traefik/dynamic/`), +persistent indiferent de starea containerului. + +**Pași în Dokploy UI:** ``` -1. Dokploy UI → New Service → docker-compose → domain: numeapp.roa.romfast.ro -2. DNS: adaugă numeapp.roa.romfast.ro A 188.26.14.103 - (dacă e sub *.roa.romfast.ro, wildcard DNS acoperă automat) -3. SSL: Win-ACME pe VM 201 generează cert dacă nu există wildcard -4. Gata — Traefik pe LXC 103 routează automat +1. Projects → [proiect] → Add Service → Application + +2. Tab General: + - Name: numeapp + - Provider: GitHub / GitLab / Gitea / URL public + - Repository + Branch + +3. Tab Build: + - Build Type: + Dockerfile → dacă repo-ul are Dockerfile (recomandat pentru control) + Nixpacks → dacă nu ai Dockerfile, Dokploy detectează limbajul automat + Docker Image → dacă folosești o imagine deja construită (ex: nginx:alpine) + +4. Tab Domains → Add Domain: + - Host: numeapp.roa.romfast.ro + - Container Port: portul pe care ascultă aplicația (ex: 80, 3000, 8000) + - HTTPS: OFF (SSL e pe IIS VM 201) + - Certificate: None + +5. Tab Environment → adaugă variabile de mediu dacă e nevoie + +6. → Deploy +``` + +--- + +### Tip 2: Compose — mai multe containere + +**Când îl alegi:** +- Aplicația are frontend + backend care comunică intern + (ex: nginx face `proxy_pass http://backend:8000`) +- Ai nevoie de o rețea bridge shared între servicii +- Exemple pe LXC 103: `space-booking` (frontend nginx + backend Python) + +**Atenție:** Docker Compose pe Swarm are race condition la restart Docker +(bug Dokploy #2033, docker/compose #12862). Mitigat pe acest server prin +`dokploy-compose-heal.service` — **fără intervenție manuală la restart**. + +**Cerințe obligatorii în `docker-compose.yml`:** + +```yaml +services: + frontend: + # ... + restart: unless-stopped # obligatoriu pe toate serviciile + networks: + - internal + - dokploy-network # obligatoriu pe serviciul cu Traefik + labels: + - traefik.enable=true + # ... (labels Traefik, populate automat de Dokploy la Add Domain) + + backend: + # ... + restart: unless-stopped + networks: + - internal # suficient dacă nu e accesat direct din exterior + +networks: + internal: + driver: bridge + dokploy-network: + external: true # rețeaua Swarm gestionată de Dokploy +``` + +**Pași în Dokploy UI:** + +``` +1. Projects → [proiect] → Add Service → Compose + +2. Tab General: + - Name: numeapp + - Provider: GitHub / GitLab / Gitea / URL public + - Repository + Branch + - Compose File Path: docker-compose.yml (sau subpath dacă e în subdirector) + +3. Tab Domains → Add Domain: ← OBLIGATORIU prin UI, nu doar în labels! + - Service Name: alege serviciul care are portul 80 (ex: frontend) + - Host: numeapp.roa.romfast.ro + - Container Port: 80 + - HTTPS: OFF + - Certificate: None + → Dokploy generează .yml static în Traefik dynamic config + +4. Tab Environment → variabile de mediu + +5. → Deploy +``` + +> **Important:** Dacă adaugi domeniul NUMAI în labels din docker-compose.yml +> (fără să-l înregistrezi în UI), Traefik pierde ruta când containerul e oprit. +> Înregistrarea prin UI generează config static persistent. + +--- + +### Tip 3: Database — baze de date gestionate + +**Când îl alegi:** +- Ai nevoie de PostgreSQL, MySQL, MongoDB, Redis, MariaDB +- Preferi ca Dokploy să gestioneze backupurile și volumele +- Alternativa: include DB direct în docker-compose.yml al aplicației + +**Pași:** +``` +1. Projects → [proiect] → Add Service → Database +2. Alege tipul (PostgreSQL / MySQL / Redis etc.) +3. Configurează credențialele și versiunea +4. → Create +``` + +Conexiunea din aplicație folosește hostname-ul serviciului pe `dokploy-network`. + +--- + +## Workflow: Adăugare App Nouă (Rezumat) + +``` +1. Alege tipul: + - Un container, fără comunicare internă → Application + - Frontend + backend care comunică intern → Compose + - Bază de date → Database + +2. Dokploy UI → Projects → [proiect] → Add Service → [tipul ales] + +3. DNS: numeapp.roa.romfast.ro → acoperit automat de wildcard *.roa.romfast.ro + (nu trebuie A record nou dacă e sub *.roa.romfast.ro) + +4. SSL: certificatul wildcard de pe VM 201 acoperă automat subdomeniile noi + (Win-ACME — necesită reînnoire manuală doar dacă adaugi domenii non-wildcard) + +5. Domeniu: adaugă ÎNTOTDEAUNA prin tab Domains în Dokploy UI + → nu doar în docker-compose.yml labels + +6. Deploy → verificare: curl -I https://numeapp.roa.romfast.ro/ ``` ---