docs(infra): runbook VPN NAS↔VPS (WireGuard) + pont SAV + api.navier-instruments.com
Source de vérité infra. VPN recommandé = WireGuard (VPS serveur / NAS client) pour éviter la contrainte IPv6/port-forward de l'OpenVPN NAS. Déploiement pont depuis le repo (pas le dump cassé du NAS). Exposition api. = seul service public. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
commit
30728d0492
|
|
@ -0,0 +1,12 @@
|
|||
# VPS / Infra Navier — docs & runbooks
|
||||
|
||||
Source de vérité **infra** (VPS `78.138.45.8` + NAS on‑prem + réseau). Tout changement infra =
|
||||
documenté ici (« ne rien casser » / reproductible).
|
||||
|
||||
## Runbooks
|
||||
- [`runbooks/vpn-nas-vps-pont-api.md`](runbooks/vpn-nas-vps-pont-api.md) — VPN NAS↔VPS (WireGuard, VPS serveur / NAS client) + déploiement du pont SAV + exposition `api.navier-instruments.com`.
|
||||
|
||||
## Repères
|
||||
- **VPS** `78.138.45.8` : NPM (reverse‑proxy + SSL), conteneurs (site, cloud…). `ssh navier-vps` (deploy).
|
||||
- **NAS** Synology `N_instruments` `192.168.10.104`, DSM 6.2.4 : Docker (Dolibarr, pont SAV, mosquitto). `ssh nas` (SteveC, port 1981).
|
||||
- **Cible** : `api.navier-instruments.com` = seul service exposé → relaie vers le pont interne. La gestion n'est jamais exposée.
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
# 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
|
||||
port‑forward box. On l'évite en **inversant le sens** : le **VPS** (IPv4 publique stable) = **serveur**,
|
||||
le **NAS** = **client qui compose** (dial‑out) → **aucun port à ouvrir sur la box**, pas d'IPv6.
|
||||
|
||||
**Reco : WireGuard** (moderne, léger, self‑hosted/souverain, reconnexion propre). Sur DSM 6.2.4 = **conteneur Docker**.
|
||||
Sous‑réseau VPN choisi : **`10.9.0.0/24`** (VPS = `10.9.0.1`, NAS = `10.9.0.2`).
|
||||
- *Alternative simplicité :* Tailscale (WireGuard clé‑en‑main, gère NAT/IPv6/clés) — service tiers.
|
||||
- *Alternative « réutiliser l'existant » :* OpenVPN NAS‑serveur (voir annexe) — plus contraignant.
|
||||
|
||||
## Étape 1 — VPN WireGuard (VPS serveur, NAS client)
|
||||
1. **VPS (root)** — serveur :
|
||||
```bash
|
||||
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`) :
|
||||
```bash
|
||||
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).
|
||||
```bash
|
||||
# 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.com` → **`10.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/health` → **200**.
|
||||
|
||||
## É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
|
||||
```bash
|
||||
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
|
||||
```
|
||||
Loading…
Reference in New Issue