Documentation — DataLab0Page 35 / 36 — Architecture EDGE / DEV / PROD — Reverse proxy centralisé · v00001 · b00005

Architecture EDGE / DEV / PROD — Reverse proxy centralisé

Objectif

Cette évolution stabilise l’infrastructure DataLab0 en séparant clairement les rôles :

  • EDGE : reverse proxy, HTTPS, routage public ;
  • DEV : environnement de développement applicatif ;
  • PROD : environnement de production applicatif.

L’objectif est d’éviter que le reverse proxy soit hébergé dans une VM applicative. Le point d’entrée public devient un CT LXC dédié, plus léger et plus cohérent pour les services d’infrastructure.


Architecture validée

Internet
   ↓
IP publique Proxmox : 147.135.131.39
   ↓
NAT Proxmox
   ↓
CT EDGE : 192.168.100.12
   ↓
Nginx Proxy Manager
   ├── DEV  -> 192.168.100.10:8080
   └── PROD -> 192.168.100.11:8080

Machines

| Rôle | Type | ID | Nom | IP interne | SSH public |

|---|---:|---:|---|---|---|

| EDGE | CT LXC Debian 12 | 103 | PRO-DATALAB0-EDGE | 192.168.100.12 | 2224 |

| DEV | VM Ubuntu | 102 | datalab0-app-dev | 192.168.100.10 | 2222 |

| PROD | VM Ubuntu | 101 | datalab0-app-prod | 192.168.100.11 | 2223 |

| Template | VM template | 100 | UBUNTU-BASE-TEMPLATE | - | - |


Accès SSH

Depuis Windows PowerShell :

DEV

ssh -i $HOME\.ssh\id_ed25519 -p 2222 admin@147.135.131.39

PROD

ssh -i $HOME\.ssh\id_ed25519 -p 2223 admin@147.135.131.39

EDGE

ssh -i $HOME\.ssh\id_ed25519 -p 2224 root@147.135.131.39

DNS OVH

La zone DNS doit contenir :

appv2dev        IN A     147.135.131.39
appv2           IN A     147.135.131.39

Les deux domaines pointent vers la même IP publique. Le routage réel est fait par Nginx Proxy Manager sur EDGE.


Domaines applicatifs

| Environnement | Domaine | Cible NPM |

|---|---|---|

| DEV | https://appv2dev.datalab0.com | 192.168.100.10:8080 |

| PROD | https://appv2.datalab0.com | 192.168.100.11:8080 |


NAT Proxmox

Les règles NAT publiques attendues sur le host Proxmox :

2222 -> 192.168.100.10:22
2223 -> 192.168.100.11:22
2224 -> 192.168.100.12:22
80   -> 192.168.100.12:80
81   -> 192.168.100.12:81
443  -> 192.168.100.12:443

Le port 8080 historique peut rester temporairement vers DEV pour debug, mais l’accès normal passe désormais par HTTPS via EDGE.

Vérifier les règles

iptables -t nat -L PREROUTING -n --line-numbers

Sauvegarder les règles

netfilter-persistent save

CT EDGE

Le CT EDGE héberge uniquement Nginx Proxy Manager.

Docker Compose EDGE

Chemin :

/opt/npm/docker-compose.yml

Contenu :

services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "81:81"
      - "443:443"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Commandes EDGE

cd /opt/npm
docker compose up -d
docker ps

Interface admin :

http://147.135.131.39:81

Proxy Hosts Nginx Proxy Manager

DEV

Domain Names: appv2dev.datalab0.com
Scheme: http
Forward Hostname / IP: 192.168.100.10
Forward Port: 8080

Options :

Block Common Exploits: enabled
Websockets Support: enabled
SSL: Let's Encrypt
Force SSL: enabled
HTTP/2: enabled

PROD

Domain Names: appv2.datalab0.com
Scheme: http
Forward Hostname / IP: 192.168.100.11
Forward Port: 8080

Options identiques à DEV.


Nettoyage réalisé

Nginx Proxy Manager a été supprimé des VMs DEV et PROD.

Les VMs applicatives ne doivent contenir que la stack DataLab0 :

  • reverse-proxy applicatif ;
  • workspace-web ;
  • viewer-web ;
  • api ;
  • worker ;
  • scheduler ;
  • postgres ;
  • redis ;
  • minio.

Restart policy Docker

Les services applicatifs DEV/PROD doivent utiliser :

restart: unless-stopped

Le service reverse-proxy applicatif doit lui aussi avoir cette politique.

Vérification DEV / PROD

docker inspect v1_3-reverse-proxy-1 | grep -A 3 RestartPolicy

Résultat attendu :

"Name": "unless-stopped"

Vérification EDGE

docker inspect npm-npm-1 | grep -A 3 RestartPolicy

Docker au démarrage

Sur DEV, PROD et EDGE :

sudo systemctl enable docker
sudo systemctl status docker

Résultat attendu :

Loaded: ... enabled
Active: active (running)

Vérifications réseau

Depuis EDGE :

curl -I http://192.168.100.10:8080
curl -I http://192.168.100.11:8080

Résultat attendu :

HTTP/1.1 200 OK

Depuis le navigateur :

https://appv2dev.datalab0.com
https://appv2.datalab0.com

Déploiement DEV

Depuis Windows :

scp -i $HOME\.ssh\id_ed25519 -P 2222 .\saas_bi_docker_ready_v1_4_edge_architecture_docs_indexed.zip admin@147.135.131.39:~/projects/

Sur DEV :

cd ~/projects
mv v1_3 v1_3_backup_$(date +%Y%m%d_%H%M%S)
unzip saas_bi_docker_ready_v1_4_edge_architecture_docs_indexed.zip -d v1_3
cd v1_3
docker compose up -d --build --force-recreate
curl -I http://localhost:8080

Déploiement PROD

Depuis Windows :

scp -i $HOME\.ssh\id_ed25519 -P 2223 .\saas_bi_docker_ready_v1_4_edge_architecture_docs_indexed.zip admin@147.135.131.39:~/projects/

Sur PROD :

cd ~/projects
mv v1_3 v1_3_backup_$(date +%Y%m%d_%H%M%S)
unzip saas_bi_docker_ready_v1_4_edge_architecture_docs_indexed.zip -d v1_3
cd v1_3
docker compose up -d --build --force-recreate
curl -I http://localhost:8080

Points d’attention

  • Les firewalls Proxmox sur les interfaces VM peuvent bloquer le trafic interne VM vers vmbr1.
  • En cas de 502 Bad Gateway, tester depuis EDGE vers les IP internes.
  • En cas de timeout SSH, vérifier les règles NAT Proxmox.
  • En cas d’échec Let’s Encrypt, vérifier que les ports 80 et 443 pointent bien vers EDGE.

Prochaine étape recommandée

La prochaine étape logique est Git + CI/CD :

branche dev  -> déploiement automatique DEV
branche main -> déploiement contrôlé PROD