Le dépôt n'avait aucun moyen de monter un tunnel VPN ni de dire pourquoi il refuse de monter. Cinq technologies libres, un pilote chacune, derrière un `vpn.py` qui monte, démonte et diagnostique. Ce qui n'est pas secret — hôte, utilisateur, routes, MTU — vit dans une configuration JSON lisible ; clés pré-partagées et mots de passe vivent dans un coffre KeePassXC. Un profil se montre et se partage sans donner de quoi monter le tunnel. Les secrets s'écrivent en tmpfs sous 0700, jamais sur un disque persistant. Le diagnostic part du noyau et remonte, pour que la première ligne fausse soit la cause et non une conséquence. Vérifié : 138 tests, dont le rendu de chaque fichier généré. --- EN --- The repository had no way to raise a VPN tunnel, nor to say why one refuses to come up. Five free technologies, one driver each, behind a `vpn.py` that raises, tears down and diagnoses. What is not secret — host, user, routes, MTU — lives in readable JSON configuration; pre-shared keys and passwords live in a KeePassXC vault. A profile can be shown and shared without handing over the means to raise the tunnel. Secrets are written to tmpfs at 0700, never to a persistent disk. Diagnosis starts at the kernel and climbs, so the first false line is the cause and not a consequence. Checked: 138 tests, including the rendering of every generated file. Assisted-by: Claude Opus 5
50 lines
2.2 KiB
Markdown
50 lines
2.2 KiB
Markdown
---
|
|
name: erplibre-deployment
|
|
description: >-
|
|
Déploiement ERPLibre : Docker, systemd, nginx, SSL, DNS, plateformes
|
|
supportées, et le choix de l'interpréteur Python (EL_PYTHON_PROVIDER)
|
|
comme du gestionnaire de paquets (EL_PIP_PROVIDER). À charger pour
|
|
déployer, installer ou changer de fournisseur Python.
|
|
---
|
|
|
|
- **Docker** : `docker-compose.yml` (PostgreSQL 18 + PostGIS 3.6)
|
|
- **Systemd** : `script/systemd/` pour les services
|
|
- **Nginx** : `script/nginx/` pour le reverse proxy
|
|
- **SSL** : Certbot pour les certificats
|
|
- **DNS** : `script/deployment/update_dns_cloudflare.py`
|
|
- **VPN** : `script/vpn/` — cinq pilotes (L2TP/IPsec PSK, WireGuard,
|
|
OpenVPN, OpenConnect, sshuttle), profils en JSON et secrets dans un
|
|
coffre KeePassXC. Mode d'emploi : `script/vpn/README.md`.
|
|
|
|
Plateformes supportées : Ubuntu 24.04 / 25.10 / 26.04, Linux Mint 22.3,
|
|
Debian 12, AlmaLinux 9+, Rocky Linux 9+, openSUSE Leap 16 et Tumbleweed,
|
|
Arch Linux,
|
|
macOS (mise ou pyenv),
|
|
Windows (WSL/Docker).
|
|
|
|
Ubuntu 20.04 et 22.04 sont abandonnées : pikepdf exige qpdf >= 12.2, compilé
|
|
en C++20, quand focal livre GCC 9.
|
|
|
|
## Interpréteur Python
|
|
|
|
`EL_PYTHON_PROVIDER` (dans `env_var.sh`) vaut `auto`, `mise` ou `pyenv`.
|
|
`auto` reprend un interpréteur DÉJÀ posé, quel que soit le fournisseur ; sinon
|
|
il préfère mise, qui pose un CPython précompilé, et retombe sur pyenv, qui le
|
|
compile.
|
|
|
|
Un seul fichier décide : `script/install/lib_python_provider.sh`. mise n'est
|
|
jamais installé automatiquement — `make install_mise` porte cette décision.
|
|
Pas de binaire mise pour s390x à ce jour : cette architecture reste sur pyenv.
|
|
|
|
## Paquets Python
|
|
|
|
`EL_PIP_PROVIDER` (dans `env_var.sh`) vaut `auto`, `uv` ou `pip`. `auto` prend
|
|
uv s'il est présent et si le venv visé est en Python ≥ 3.8, sinon pip ; un
|
|
échec d'uv retombe sur pip. Un seul fichier décide :
|
|
`script/install/lib_pip_provider.sh`. uv n'est jamais installé
|
|
automatiquement — `make install_uv` porte cette décision.
|
|
|
|
Portée réelle : le venv d'outils et l'amorçage de Poetry. **`poetry install`
|
|
n'est pas concerné** — uv ne lit pas `poetry.lock` — et c'est pourtant l'étape
|
|
qui domine. Sur s390x le gain est quasi nul : une trentaine de paquets sans
|
|
roue se compilent, et uv n'enlève pas une seconde de gcc.
|