VPS/runbooks/vpn-nas-vps-pont-api.md

5.7 KiB
Raw Blame History

Runbook — VPN NAS↔VPS + pont SAV + api.navier-instruments.com

Objectif : exposer un seul service public (api.navier-instruments.com) qui relaie vers le pont (interne, sur le NAS), lequel parle à la gestion (Dolibarr) + ThingsBoard. La gestion n'est JAMAIS exposée. Documenté pour être reproductible — ne rien casser.

Architecture cible

public ──HTTPS──▶ api.navier-instruments.com
                  (VPS 78.138.45.8, Nginx Proxy Manager + SSL)
                        │
                        ▼  VPN OpenVPN (le VPS est client du serveur OpenVPN du NAS)
                  pont @navier/sav-pont  (NAS 10.8.0.1:8080)
                        │
              ┌─────────┴─────────┐
              ▼                   ▼
        Dolibarr (interne)   ThingsBoard (navier-cloud.com)

Inventaire (état 2026-07-13)

Élément Détail
NAS Synology N_instruments, LAN 192.168.10.104, DSM 6.2.4. SSH : ssh nas (SteveC, port 1981, clé id_ed25519_nas).
NAS = serveur OpenVPN server 10.8.0.0/24, proto udp6, port 1194, dev tun. NAS = 10.8.0.1. IP publique actuelle = IPv6 2a05:6e02:106c:fc10:....
Pont @navier/sav-pont (Node ≥20, TS). Source propre = repo Ecosystem-Navier/SAV/pont (Dockerfile, écoute :8080, métriques :9100). ⚠️ Le dossier /volume1/docker/sav/ du NAS est un dump de build cassé (noms mélangés) → NE PAS l'utiliser.
Gestion Dolibarr en Docker sur le NAS (/volume1/docker/dolibarr/, image tuxgasy/dolibarr + mariadb). Interne uniquement.
VPS 78.138.45.8, ssh navier-vps (user deploy). NPM (conteneur) fait le reverse-proxy + SSL.

Choix du VPN — recommandation : WireGuard (VPS serveur / NAS client)

Contrainte : le serveur OpenVPN du NAS est en udp6 + IP publique IPv6 → dépendance IPv6 ou portforward box. On l'évite en inversant le sens : le VPS (IPv4 publique stable) = serveur, le NAS = client qui compose (dialout) → aucun port à ouvrir sur la box, pas d'IPv6.

Reco : WireGuard (moderne, léger, selfhosted/souverain, reconnexion propre). Sur DSM 6.2.4 = conteneur Docker. Sousréseau VPN choisi : 10.9.0.0/24 (VPS = 10.9.0.1, NAS = 10.9.0.2).

  • Alternative simplicité : Tailscale (WireGuard cléenmain, gère NAT/IPv6/clés) — service tiers.
  • Alternative « réutiliser l'existant » : OpenVPN NASserveur (voir annexe) — plus contraignant.

Étape 1 — VPN WireGuard (VPS serveur, NAS client)

  1. VPS (root) — serveur :
    sudo apt-get update && sudo apt-get install -y wireguard
    umask 077; wg genkey | tee /etc/wireguard/vps.key | wg pubkey > /etc/wireguard/vps.pub
    # /etc/wireguard/wg0.conf :
    #   [Interface] Address=10.9.0.1/24  ListenPort=51820  PrivateKey=<contenu vps.key>
    #   [Peer]      PublicKey=<nas.pub>  AllowedIPs=10.9.0.2/32
    sudo systemctl enable --now wg-quick@wg0
    sudo ufw allow 51820/udp    # (ou règle firewall équivalente)
    
  2. NAS (Docker, root) — client (conteneur linuxserver/wireguard) :
    mkdir -p /volume1/docker/wireguard
    # /volume1/docker/wireguard/wg_confs/wg0.conf :
    #   [Interface] Address=10.9.0.2/32  PrivateKey=<contenu nas.key>
    #   [Peer]      PublicKey=<vps.pub>  Endpoint=<IP_PUBLIQUE_VPS>:51820  AllowedIPs=10.9.0.1/32  PersistentKeepalive=25
    docker run -d --name wireguard --cap-add NET_ADMIN --restart unless-stopped \
      -v /volume1/docker/wireguard:/config linuxserver/wireguard
    
  3. Vérifier : ssh navier-vps 'ping -c2 10.9.0.2' (le VPS doit joindre le NAS). Le pont sera en 10.9.0.2:8080. (Générer les clés : wg genkey|tee nas.key|wg pubkey>nas.pub côté NAS ; échanger les .pub entre les deux.)

Étape 2 — Déployer le pont (sur le NAS, proprement)

Depuis la source du repo (pas le dossier cassé). Le pont a un Dockerfile (écoute :8080).

# sur le NAS (root — Docker DSM 6)
mkdir -p /volume1/docker/sav-pont && cd /volume1/docker/sav-pont
# récupérer Ecosystem-Navier/SAV/pont (git clone ou rsync du sous-dossier)
docker build -t navier-sav-pont .
# pont.env = VRAIE config (URL Dolibarr interne, ThingsBoard, secrets) — à recréer proprement
docker run -d --name sav-pont --restart unless-stopped \
  -p 8080:8080 --env-file /volume1/docker/sav-pont/pont.env navier-sav-pont
curl -s http://localhost:8080/health   # doit répondre 200

Étape 3 — Exposer api.navier-instruments.com (VPS)

  1. DNS (LWS) : api.navier-instruments.com A 78.138.45.8 (+ AAAA si IPv6 VPS).
  2. NPM (Nginx Proxy Manager) : Proxy Host api.navier-instruments.com10.8.0.1:8080 (le pont via le VPN) + SSL Let's Encrypt (Force SSL, HTTP/2).
  3. Vérifier : curl -I https://api.navier-instruments.com/health200.

Étape 4 — Brancher les consommateurs

  • Espace client, PWA SAV atelier, webapp → base API = https://api.navier-instruments.com (le seul point d'entrée).

Résilience / ne rien casser

  • VPN VPS : openvpn-client@nas en enable → reconnexion auto. Si NAS/box down → api. down → les consommateurs doivent dégrader proprement (cache / message « temporairement indisponible »).
  • Dolibarr jamais exposé — accessible seulement via le pont, scopé par client.
  • Ne pas exposer le port 9100 (métriques) publiquement.
  • Sauvegardes : base mariadb Dolibarr (sur le NAS) — vérifier la tâche de sauvegarde Synology.

Vérifs de bout en bout

ssh navier-vps 'ping -c2 10.8.0.1 && curl -s http://10.8.0.1:8080/health'
curl -I https://api.navier-instruments.com/health