Compare commits
2 Commits
ffe3806d43
...
bb91d06e4b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bb91d06e4b | ||
|
|
8f4f049e58 |
@@ -103,14 +103,226 @@ 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: Modificare Cod + Redeploy
|
||||||
|
|
||||||
|
Toate serviciile sunt legate la Git. Fluxul pentru orice modificare:
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Modifici fișierele local (docker-compose.yml, Dockerfile, cod sursă etc.)
|
||||||
|
2. git commit + git push → repo-ul sursă (Gitea / GitHub)
|
||||||
|
3. Dokploy preia modificările și face redeploy
|
||||||
|
```
|
||||||
|
|
||||||
|
**Pasul 3 are două variante:**
|
||||||
|
|
||||||
|
### Varianta A — Redeploy manual
|
||||||
|
|
||||||
|
Intri în Dokploy UI → proiect → serviciu → tab **Deployments** → buton **Deploy**.
|
||||||
|
Dokploy face `git pull` + rebuild + restart. Necesar dacă nu e configurat webhook.
|
||||||
|
|
||||||
|
### Varianta B — Auto-deploy prin webhook (recomandat)
|
||||||
|
|
||||||
|
La fiecare `git push`, Gitea/GitHub notifică automat Dokploy → redeploy fără intervenție.
|
||||||
|
|
||||||
|
**Configurare o singură dată per serviciu:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Dokploy UI → proiect → serviciu → tab General → Auto Deploy → ON
|
||||||
|
→ copiază Webhook URL afișat
|
||||||
|
|
||||||
|
Gitea (gitea.romfast.ro):
|
||||||
|
repo → Settings → Webhooks → Add Webhook
|
||||||
|
Payload URL: [webhook-ul din Dokploy]
|
||||||
|
Content Type: application/json
|
||||||
|
Trigger: Push events
|
||||||
|
→ Save
|
||||||
|
|
||||||
|
GitHub:
|
||||||
|
repo → Settings → Webhooks → Add webhook
|
||||||
|
Payload URL: [webhook-ul din Dokploy]
|
||||||
|
Content Type: application/json
|
||||||
|
Events: Just the push event
|
||||||
|
→ Add webhook
|
||||||
|
```
|
||||||
|
|
||||||
|
**Repo-uri curente și sursa lor:**
|
||||||
|
|
||||||
|
| Serviciu | Repo | Branch |
|
||||||
|
|----------|------|--------|
|
||||||
|
| space-booking (Compose) | `gitea.romfast.ro/romfast/space-booking` | master |
|
||||||
|
| icon-generator (Application) | `github.com/Romfast/icon-generator` | main |
|
||||||
|
| qr-pdfqrapp (Application) | `gitea.romfast.ro` (detalii în Dokploy UI) | — |
|
||||||
|
| qr-qrgenerator (Application) | `gitea.romfast.ro` (detalii în Dokploy UI) | — |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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/
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Reference in New Issue
Block a user