- Add LXC 103 Dokploy infrastructure (v0.28.2) with Traefik - Deploy pdf-qr-app and qr-generator via Dokploy from GitHub - Configure IIS VM 201: roa-qr and *.roa.romfast.ro wildcard sites - Add SSL certificates (Let's Encrypt + wildcard DNS challenge) - Fix Docker Swarm VIP DNS issue with dnsrr endpoint mode - Document architecture: IIS → Traefik → Dokploy containers Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
226 lines
7.6 KiB
Markdown
226 lines
7.6 KiB
Markdown
# VM 201 IIS — Infrastructură Web Dokploy
|
|
|
|
## Obiectiv
|
|
|
|
Structură clară de domenii pentru toate serviciile ROMFAST, cu Dokploy ca
|
|
platformă unificată de deployment. Un singur wildcard DNS (`*.roa.romfast.ro`)
|
|
acoperă toate app-urile deployate prin Dokploy.
|
|
|
|
---
|
|
|
|
## Structura Completă a Domeniilor
|
|
|
|
```
|
|
romfast.ro (DNS → 188.26.14.103 → NAT → VM 201 IIS)
|
|
│
|
|
├── roa.romfast.ro ← IIS Default Web Site
|
|
│ ├── /contafinupdate ← fișiere locale IIS (rămân neschimbate)
|
|
│ ├── /roaupdate ← fișiere locale IIS (rămân neschimbate)
|
|
│ └── /* ← proxy → 10.0.20.36 (ROA Windows prod)
|
|
│
|
|
├── roa2web.romfast.ro ← IIS Site 2 (existent)
|
|
│ └── proxy → 10.0.20.36
|
|
│
|
|
├── roa-qr.romfast.ro ← IIS Site NOU → Traefik LXC 103
|
|
│ └── pdf-qr-app (migrat pe Dokploy/LXC 103)
|
|
│
|
|
├── dokploy.romfast.ro ← IIS Site (existent)
|
|
│ └── proxy → Traefik LXC 103 → Dokploy UI
|
|
│
|
|
├── gitea.romfast.ro ← IIS Site (existent)
|
|
│ └── proxy → Gitea LXC 106
|
|
│
|
|
└── *.roa.romfast.ro ← IIS Site NOU (wildcard) → Traefik LXC 103
|
|
├── app1.roa.romfast.ro ← app deployată în Dokploy pe LXC 103
|
|
├── app2.roa.romfast.ro ← altă app deployată pe LXC 103
|
|
└── [orice app viitoare]
|
|
```
|
|
|
|
---
|
|
|
|
## Arhitectura Serverelor
|
|
|
|
```
|
|
VM 201 IIS (10.0.20.122) — SSL termination + routing per domeniu
|
|
│
|
|
├── *.roa.romfast.ro + roa-qr.romfast.ro + dokploy.romfast.ro
|
|
│ ↓ proxy HTTPS
|
|
│ LXC 103 Traefik (10.0.20.167:443)
|
|
│ ├── dokploy.roa.romfast.ro / dokploy.romfast.ro → Dokploy UI
|
|
│ ├── roa-qr.romfast.ro → pdf-qr-app container
|
|
│ ├── app1.roa.romfast.ro → app1 container
|
|
│ ├── app2.roa.romfast.ro → app2 container
|
|
│ └── [configurat automat de Dokploy la fiecare deploy]
|
|
│
|
|
└── roa.romfast.ro, roa2web.romfast.ro, gitea.romfast.ro
|
|
↓ proxy spre destinații existente (neschimbat)
|
|
|
|
LXC 103 (10.0.20.167) — Dokploy Control Plane + Execution Node Public
|
|
├── Dokploy UI (port 3000) — management toate serverele
|
|
├── Traefik (port 443) — routing public pentru TOATE app-urile publice
|
|
└── SSH management → LXC 100
|
|
|
|
LXC 100 (10.0.20.170) — Remote Execution Node (gestionat din Dokploy)
|
|
├── Traefik propriu (instalat de Dokploy) — pentru servicii interne
|
|
├── App-uri fără DNS public (backend-uri, jobs, servicii interne)
|
|
└── Portainer UI (port 9443) — rămâne funcțional
|
|
```
|
|
|
|
---
|
|
|
|
## Rezumat Roluri
|
|
|
|
| Component | Rol |
|
|
|-----------|-----|
|
|
| **VM 201 IIS** | SSL termination, routing per domeniu |
|
|
| **LXC 103 Traefik** | Routing pentru TOATE app-urile publice (`*.roa.romfast.ro`) |
|
|
| **LXC 103 Dokploy** | UI management, CI/CD, deployment pe LXC 103 și LXC 100 |
|
|
| **LXC 100** | Compute pentru servicii interne/backend fără DNS public |
|
|
| **LXC 100 Traefik** | Routing intern pentru app-urile pe LXC 100 |
|
|
| **LXC 100 Portainer** | Vizualizare containere locale (port 9443) |
|
|
|
|
---
|
|
|
|
## Implementare Pași
|
|
|
|
### Pasul 1 — LXC 100: Oprire nginx existent
|
|
|
|
```bash
|
|
# Pe LXC 100 (via Portainer terminal sau Proxmox console)
|
|
docker stop docker-nginx-1
|
|
docker rm docker-nginx-1
|
|
ss -tlnp | grep -E ':80|:443' # verifică porturile sunt libere
|
|
```
|
|
|
|
### Pasul 2 — Dokploy: Generare SSH Key + Adăugare LXC 100
|
|
|
|
**În Dokploy UI** (https://dokploy.romfast.ro):
|
|
1. Settings → SSH Keys → **Create SSH Key** → copiază public key
|
|
|
|
**Pe LXC 100:**
|
|
```bash
|
|
echo "ssh-ed25519 AAAA...[cheia copiată]" >> /root/.ssh/authorized_keys
|
|
chmod 600 /root/.ssh/authorized_keys
|
|
```
|
|
|
|
**În Dokploy UI:**
|
|
1. Servers → Add Server → IP: `10.0.20.170`, User: `root`
|
|
2. Test Connection → Setup Server
|
|
3. Verificare: pe LXC 100, `docker ps` → trebuie container Traefik
|
|
|
|
### Pasul 3 — Dokploy: Deploy pdf-qr-app pe LXC 103
|
|
|
|
**În Dokploy UI:**
|
|
1. Services → Create Service → Docker Compose
|
|
2. **Server: LXC 103 (local)**
|
|
3. Docker Compose: conținutul app-ului pdf-qr
|
|
4. Domain: `roa-qr.romfast.ro`
|
|
5. Deploy
|
|
|
|
### Pasul 4 — IIS VM 201: Site nou `roa-qr.romfast.ro`
|
|
|
|
Rulează scriptul PowerShell (sau manual):
|
|
|
|
```powershell
|
|
# Rulează scriptul complet
|
|
C:\scripts\setup-new-iis-sites.ps1
|
|
```
|
|
|
|
Sau manual:
|
|
```powershell
|
|
New-Item -Path "C:\inetpub\roa-qr" -ItemType Directory -Force
|
|
New-Website -Name "roa-qr" -PhysicalPath "C:\inetpub\roa-qr" `
|
|
-HostHeader "roa-qr.romfast.ro" -Port 80
|
|
New-WebBinding -Name "roa-qr" -Protocol https -Port 443 `
|
|
-HostHeader "roa-qr.romfast.ro" -SslFlags 1
|
|
```
|
|
|
|
Copiază `iis-configs/roa-qr.web.config` → `C:\inetpub\roa-qr\web.config`
|
|
|
|
### Pasul 5 — IIS VM 201: Site wildcard `*.roa.romfast.ro`
|
|
|
|
```powershell
|
|
New-Item -Path "C:\inetpub\roa-apps" -ItemType Directory -Force
|
|
New-Website -Name "roa-apps" -PhysicalPath "C:\inetpub\roa-apps" `
|
|
-HostHeader "*.roa.romfast.ro" -Port 80
|
|
New-WebBinding -Name "roa-apps" -Protocol https -Port 443 `
|
|
-HostHeader "*.roa.romfast.ro" -SslFlags 1
|
|
```
|
|
|
|
Copiază `iis-configs/roa-apps-wildcard.web.config` → `C:\inetpub\roa-apps\web.config`
|
|
|
|
**Notă:** Wildcard hostname (`*.roa.romfast.ro`) funcționează din IIS 10 cu SNI.
|
|
|
|
### Pasul 6 — DNS + SSL
|
|
|
|
**DNS** (la provider):
|
|
```
|
|
roa-qr.romfast.ro A 188.26.14.103
|
|
*.roa.romfast.ro A 188.26.14.103 ← wildcard
|
|
```
|
|
|
|
**SSL Certificate** pe VM 201 — Win-ACME:
|
|
```powershell
|
|
cd C:\Tools\win-acme
|
|
|
|
# Certificate pentru roa-qr.romfast.ro
|
|
.\wacs.exe --source iis --siteid <ID_roa-qr> --accepttos --emailaddress admin@romfast.ro
|
|
|
|
# Certificate wildcard *.roa.romfast.ro (necesită DNS challenge)
|
|
# Dacă provider-ul DNS nu suportă API Win-ACME → certificate individuale
|
|
.\wacs.exe --source iis --siteid <ID_roa-apps> --accepttos --emailaddress admin@romfast.ro
|
|
iisreset
|
|
```
|
|
|
|
**Notă SSL wildcard:** Certificate wildcard (`*.roa.romfast.ro`) necesită DNS challenge
|
|
(nu HTTP-01). Dacă provider-ul DNS nu suportă API Win-ACME, generează certificate
|
|
individuale per subdomain când adaugi app-uri noi.
|
|
|
|
---
|
|
|
|
## Workflow: Adăugare App Nouă
|
|
|
|
```
|
|
1. Dokploy UI → New Service → docker-compose → domain: numeapp.roa.romfast.ro
|
|
2. DNS: adaugă numeapp.roa.romfast.ro A 188.26.14.103
|
|
(acoperit de wildcard *.roa.romfast.ro dacă e configurat)
|
|
3. SSL: Win-ACME pe VM 201 generează cert dacă nu e wildcard
|
|
4. Gata — Traefik pe LXC 103 routează automat
|
|
```
|
|
|
|
---
|
|
|
|
## Verificare Completă
|
|
|
|
```bash
|
|
# Traefik LXC 103 funcționează
|
|
curl -I https://10.0.20.167/
|
|
|
|
# pdf-qr-app accesibil public
|
|
curl -I https://roa-qr.romfast.ro/
|
|
|
|
# Wildcard funcționează (după deploy app)
|
|
curl -I https://app1.roa.romfast.ro/
|
|
|
|
# LXC 100 Portainer funcționează
|
|
curl -sk https://10.0.20.170:9443/api/status
|
|
```
|
|
|
|
---
|
|
|
|
## Fișiere Asociate
|
|
|
|
| Fișier | Scop |
|
|
|--------|------|
|
|
| `../scripts/setup-new-iis-sites.ps1` | Script PowerShell setup IIS automat |
|
|
| `../iis-configs/roa-qr.web.config` | web.config proxy pentru roa-qr.romfast.ro |
|
|
| `../iis-configs/roa-apps-wildcard.web.config` | web.config proxy wildcard *.roa.romfast.ro |
|
|
| `../../lxc103-dokploy/README.md` | Documentație LXC 103 Dokploy |
|
|
| `../../lxc103-dokploy/docs/pdf-qr-app.md` | Deploy pdf-qr-app în Dokploy |
|
|
|
|
---
|
|
|
|
**Ultima actualizare:** 2026-03-02
|
|
**Autor:** Marius Mutu
|
|
**Proiect:** ROMFASTSQL - Infrastructură Web Dokploy
|