docs(lxc103): add Dokploy service types guide + deployment workflows

Documentat cele 3 tipuri de servicii (Application/Compose/Database),
tabel comparativ, pași UI pas-cu-pas pentru fiecare tip, și când să
alegi fiecare variantă. Include cerințe obligatorii docker-compose.yml
și nota despre înregistrarea domeniilor prin UI vs labels.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-04-28 12:03:28 +00:00
parent ffe3806d43
commit 8f4f049e58

View File

@@ -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 1. Projects → [proiect] → Add Service → Application
2. DNS: adaugă numeapp.roa.romfast.ro A 188.26.14.103
(dacă e sub *.roa.romfast.ro, wildcard DNS acoperă automat) 2. Tab General:
3. SSL: Win-ACME pe VM 201 generează cert dacă nu există wildcard - Name: numeapp
4. Gata — Traefik pe LXC 103 routează automat - 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/
``` ```
--- ---