Repository navigation
Installation FR
English · 🌐 Français
Deux chemins d'installation supportés : Docker (recommandé pour la plupart des homelabs) et systemd natif sur Linux. Choisis-en un — les deux finissent au même endroit : une instance Arenet qui tourne avec l'UI d'admin accessible sur :8001 et le listener public sur :80 + :443.
Cette page est le guide condensé. Pour les détails par OS, voir le dossier docs/install/ dans le repo principal.
| Requirement | Pourquoi |
|---|---|
| Host Linux (amd64 ou arm64) | Cible binaire native ; l'image Docker est multi-arch |
| DNS public pointant sur le host | Pour que le challenge ACME HTTP-01 fonctionne pour l'auto-HTTPS |
| TCP/80 + TCP/443 ouverts en inbound | Redirect HTTP-to-HTTPS + serving HTTPS |
| UDP/443 ouvert en inbound | HTTP/3 sur QUIC (voir doc HTTP/3) |
| Optionnel : creds API DNS provider | Challenge DNS-01 pour les certs wildcard — configure un ou plusieurs comptes OVH, voir DNS Providers |
Cible hardware : 2 vCPU + 1 Go RAM est confortable pour 50 routes. Le WAF Coraza est le plus gros consommateur — désactive-le par route sur les hosts low-resource si nécessaire (voir WAF).
mkdir -p ~/arenet && cd ~/arenet
curl -O https://raw.githubusercontent.com/barto95100/arenet/main/docker-compose.ymldocker compose pull
docker compose up -dUn volume nommé arenet-data contient l'état BoltDB + SQLite + les certs Caddy. Backup tout le volume (ou utilise l'UI Backup) pour la disaster recovery.
Au premier boot, Arenet génère un setup token one-time pour bootstrapper le compte admin. Trouve-le dans les logs :
docker compose logs arenet | grep "setup token"Tu verras une ligne comme : setup token : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Ouvre http://<your-host>:8001 dans un navigateur. Le wizard de setup demande :
- Le setup token (de l'étape 3)
- Un username + password admin (hashé en Argon2id)
- Un email admin (pour alerting + recovery)
Clique Submit → tu es dedans. Le setup token est consommé (usage one-time), le compte admin est créé avec le rôle admin, et le wizard de setup disparaît aux visites suivantes.
Le répertoire de données contient arenet.db (routes, users, audit, et secrets — client secrets OIDC, clés API DNS, le hash du password admin) plus les clés privées TLS sous certmagic/. Depuis la v2.30 ces secrets sont chiffrés avec arenet.key, généré à côté de la base au premier démarrage — sauvegarde-le à part (voir Updates → Sûreté de migration ; ARENET_SECRET_KEY_FILE le déplace, par exemple vers un secret Docker). Arenet le garde owner-only (0700), appartenant à l'utilisateur distroless nonroot (UID 65532).
Volume nommé (le défaut) — rien à faire. Docker seed l'ownership et les permissions d'un volume nommé neuf depuis le /var/lib/arenet de l'image, qui ship en 65532:65532 mode 0700. Ça marche direct, et les secrets sont owner-only dès le premier boot.
Bind mount (./data:/var/lib/arenet) — nécessite un fix d'ownership une fois. Un directory host appartient à qui l'a créé (souvent root ou ton user de login), pas à l'UID 65532. Le container distroless n'a pas de shell et ne peut pas chown son propre mount, donc il crash-loop avec permission denied. Choisis :
Option A — manuel (le plus simple) : crée le dir avec le bon owner et mode avant docker compose up :
mkdir -p ./data
sudo chown -R 65532:65532 ./data # UID distroless 'nonroot'
sudo chmod 700 ./data # owner-only : secrets + clés TLSPuis édite docker-compose.yml pour monter ./data:/var/lib/arenet au lieu du volume nommé.
Option B — init container (automatique, idempotent) : ajoute un service one-shot qui fixe l'ownership avant qu'Arenet démarre. Il resserre aussi un directory laissé en 0755 par une install pré-v2.15.1. Ajoute à docker-compose.yml :
services:
arenet:
# ... config existante ...
volumes:
- ./data:/var/lib/arenet # bind mount au lieu du volume nommé
depends_on:
arenet-init:
condition: service_completed_successfully
arenet-init:
image: busybox:1.37
user: "0:0" # tourne en root juste pour chown le mount
command: ["sh", "-c", "chown -R 65532:65532 /data && chmod 700 /data"]
volumes:
- ./data:/data # MÊME dir host que le bind mount d'arenet
restart: "no"
security_opt:
- no-new-privileges:truearenet-init tourne une fois, fixe le mount, et sort ; depends_on … service_completed_successfully fait attendre Arenet. On peut le laisser en place — le relancer est un no-op.
Pourquoi 65532 / 0700 ?
65532est l'utilisateur distrolessnonrootsous lequel Arenet tourne.0700veut dire que seul cet utilisateur peut lire ou écrire le directory — donc les secrets dansarenet.dbet les clés privées TLS ne sont pas exposés aux autres users ou containers qui partagent le host. Vois Updates → Sûreté de migration si tu upgrades une install plus ancienne, et Troubleshooting → permission denied si un boot échoue sur le répertoire de données (page EN pour l'instant).
Pour les opérateurs qui ne veulent pas Docker, ou qui veulent intégrer Arenet avec le graphe d'unit systemd existant du host (ex. WantedBy ta stack de monitoring).
curl -fsSL https://raw.githubusercontent.com/barto95100/arenet/main/packaging/systemd/install.sh \
| sudo bashLe script :
- Télécharge le dernier binaire release (multi-arch) depuis les GitHub releases
- Crée l'utilisateur système
arenet(pas de shell, password locké) - Installe le binaire à
/usr/local/bin/arenet - Installe l'unit systemd à
/etc/systemd/system/arenet.service - Crée
/var/lib/arenet/pour l'état BoltDB + SQLite - Reload systemd (
systemctl daemon-reload)
Arenet crée et garde /var/lib/arenet en mode 0700 (owner-only) — il contient des secrets et des clés privées TLS. Les installs neuves l'ont automatiquement ; si tu upgrades depuis avant v2.15.1, le binaire resserre le dir en 0700 à son prochain boot. Pour confirmer : stat -c '%a' /var/lib/arenet → 700.
sudo systemctl enable --now arenetsudo journalctl -u arenet --since "1 min ago" | grep "setup token"Pareil que l'étape 4 du chemin Docker — http://<your-host>:8001, colle le token, crée le compte admin.
Par défaut l'UI d'admin est restreinte au loopback par sécurité — bind sur 127.0.0.1:8001 sur systemd, publiée sur 127.0.0.1:8001 sur Docker (dans le conteneur elle bind toutes les interfaces ; c'est le port publié qui fait frontière). Pour y accéder depuis ton LAN :
Docker : le docker-compose.yml publie 127.0.0.1:8001:8001, donc l'UI d'admin est joignable depuis l'hôte Docker uniquement, pas depuis ton LAN. Pour y accéder d'ailleurs : soit un tunnel (ssh -L 8001:localhost:8001 <docker-host>), soit changer le mapping en 8001:8001 et appliquer la checklist de durcissement.
systemd : édite /etc/systemd/system/arenet.service et set la variable d'env :
[Service]
Environment="ARENET_ADMIN_BIND=0.0.0.0:8001"Puis systemctl daemon-reload && systemctl restart arenet.
127.0.0.1:8001 pour que l'admin soit derrière ta chaîne d'auth.
Toutes optionnelles — définis-les via environment: dans docker-compose.yml ou Environment="..." dans l'unit systemd.
| Variable | Défaut | Rôle |
|---|---|---|
ARENET_ADMIN_BIND |
127.0.0.1:8001 |
Adresse de bind de l'UI/API d'admin. Mets 0.0.0.0:8001 pour un accès LAN sur systemd. Sans effet sous Docker (l'image passe --admin-port). |
ARENET_DATA_DIR |
/var/lib/arenet |
Où le binaire stocke son état BoltDB/SQLite. |
ARENET_UPDATE_CHECK_INTERVAL |
24h |
Cadence du vérificateur de mises à jour opt-in (durée Go, min 1h). Le check doit tout de même être activé dans Réglages → Mises à jour — pas de toggle env pour ça. Voir DNS Providers → Rester à jour. |
ARENET_ACME_EMAIL |
(aucun) | Email de contact passé à l'émetteur ACME pour les notices Let's Encrypt. |
D'autres variables opérationnelles (ARENET_CROWDSEC_*, ARENET_UI_ORIGIN, …) sont documentées dans les pages de feature correspondantes.
# Endpoint Healthz
curl http://localhost:8001/healthz
# Output attendu : {"status":"ok"}Si tu vois {"status":"ok"}, Arenet tourne et le Caddy embarqué + BoltDB + Coraza + bouncer CrowdSec ont tous booté proprement. Sinon, voir Troubleshooting.
- Routes — câble ton premier host proxifié
- Backup & Restore — sauve ta config avant/après les upgrades
- Troubleshooting — pièges communs d'install + décodage des logs
-
docs/install/docker-quickstart.md— guide Docker étendu avec troubleshooting -
docs/install/systemd-native.md— guide systemd étendu
- Home · Accueil
- Installation · Installation 🇫🇷
- Routes · Routes 🇫🇷
- TCP / UDP services · Services TCP / UDP 🇫🇷
- DNS Providers · DNS Providers 🇫🇷
- Topology · Topology 🇫🇷
- WAF · WAF 🇫🇷
- CrowdSec · CrowdSec 🇫🇷
- Country Block · Country Block 🇫🇷
- Rate Limit · Rate Limit 🇫🇷
- OIDC SSO · OIDC SSO 🇫🇷
- Forward auth · Forward auth 🇫🇷
- Certificates · Certificats 🇫🇷
- Updating Arenet · Mettre à jour 🇫🇷
- Backup & Restore · Backup & Restore 🇫🇷
- Alerting · Alerting 🇫🇷
- Custom Error Pages · Custom Error Pages 🇫🇷
- API (OpenAPI) · API (OpenAPI) 🇫🇷
- Troubleshooting · Troubleshooting 🇫🇷