# Déploiement serveur Proxmox / NAT — Notes d’exploitation

## Contexte validé

Cette archive a été déployée sur une VM Ubuntu dédiée dans Proxmox.

Architecture utilisée :

```txt
Internet
  ↓
IP publique Proxmox
  ↓ NAT / port forwarding
VM Ubuntu privée 192.168.100.10
  ↓
Docker Compose DataLab0
```

## VM unique ou plusieurs VM ?

Pour cette archive, une seule VM suffit.

Les services applicatifs sont séparés en containers Docker :

```txt
reverse-proxy
workspace-web
viewer-web
api
worker
scheduler
postgres
redis
minio
```

Ce ne sont pas des VM séparées.

Une séparation multi-VM deviendra utile plus tard pour une production plus exigeante :

- PostgreSQL dédié ou managé ;
- Redis dédié ;
- stockage S3/MinIO séparé ;
- workers sur VM séparées ;
- monitoring/backups séparés ;
- Kubernetes éventuel.

## Réseau Proxmox validé

Bridge public existant :

```txt
vmbr0 -> interface publique Proxmox
```

Bridge privé créé :

```txt
vmbr1 -> 192.168.100.1/24
```

Exemple `/etc/network/interfaces` côté Proxmox :

```txt
auto vmbr1
iface vmbr1 inet static
    address 192.168.100.1/24
    bridge-ports none
    bridge-stp off
    bridge-fd 0
```

Activer le bridge sans redémarrer tout le réseau :

```bash
ifup vmbr1
```

## NAT Proxmox

Activer l’IP forwarding :

```bash
sysctl -w net.ipv4.ip_forward=1
```

Le rendre persistant :

```bash
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
```

Règle NAT de sortie pour les VM privées :

```bash
iptables -t nat -A POSTROUTING -s '192.168.100.0/24' -o vmbr0 -j MASQUERADE
```

## Configuration réseau Ubuntu VM

Exemple Netplan pour la VM :

```yaml
network:
  version: 2
  ethernets:
    enp6s18:
      dhcp4: false

    enp6s19:
      addresses:
        - 192.168.100.10/24
      routes:
        - to: default
          via: 192.168.100.1
      nameservers:
        addresses:
          - 1.1.1.1
          - 8.8.8.8
```

Appliquer :

```bash
sudo chmod 600 /etc/netplan/01-netcfg.yaml
sudo netplan apply
```

Tests :

```bash
ping 192.168.100.1
ping 8.8.8.8
ping google.com
```

## SSH vers la VM privée

Port forwarding Proxmox utilisé :

```bash
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to-destination 192.168.100.10:22
iptables -t nat -A POSTROUTING -p tcp -d 192.168.100.10 --dport 22 -j MASQUERADE
```

Connexion depuis le PC :

```powershell
ssh -p 2222 admin@IP_PUBLIQUE_PROXMOX
```

## Exposition HTTP de DataLab0

Docker expose le reverse proxy sur le port `8080` de la VM.

Port forwarding Proxmox :

```bash
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.100.10:8080
iptables -t nat -A POSTROUTING -p tcp -d 192.168.100.10 --dport 8080 -j MASQUERADE
```

Accès depuis navigateur :

```txt
http://IP_PUBLIQUE_PROXMOX:8080/
```

Routes utiles :

```txt
/             -> accueil DataLab0
/workspace/   -> interface
/doc.html     -> documentation
/viewer/      -> viewer placeholder
/api/health   -> API healthcheck
```

## Rendre les règles iptables persistantes

Installer :

```bash
apt install -y iptables-persistent
```

Sauvegarder :

```bash
netfilter-persistent save
```

## DNS Proxmox

Si `apt update` ne résout pas les domaines :

```bash
nano /etc/resolv.conf
```

Ajouter :

```txt
nameserver 1.1.1.1
nameserver 8.8.8.8
```

## Repository Proxmox Enterprise

Sans abonnement Proxmox, désactiver le dépôt enterprise :

```bash
nano /etc/apt/sources.list.d/pve-enterprise.list
```

Commenter :

```txt
# deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise
```

Puis :

```bash
apt update
```

## Déploiement d’une nouvelle archive sur la VM

Depuis le PC Windows :

```powershell
scp -P 2222 .\saas_bi_docker_ready_v1_1.zip admin@IP_PUBLIQUE_PROXMOX:~/projects/
```

Dans la VM :

```bash
cd ~/projects
mkdir -p saas_bi_v1_1
unzip saas_bi_docker_ready_v1_1.zip -d saas_bi_v1_1
cd saas_bi_v1_1
docker compose up -d --build
```

Si l’ancienne stack tourne depuis `~/projects`, l’arrêter d’abord depuis son dossier :

```bash
cd ~/projects
docker compose down
```

## Points de vigilance

- Les règles iptables Proxmox doivent être persistées.
- Les mots de passe Docker Compose actuels sont des valeurs de développement.
- PostgreSQL, Redis et MinIO sont dans la même VM pour ce socle initial.
- Avant production réelle, prévoir HTTPS, sauvegardes, firewall, monitoring et rotation des secrets.
