Arcane
Arcane est une interface web auto-hébergée pour gérer les conteneurs, images, volumes et stacks Compose de Docker.

Installation
- /
- srv
- docker
- arcane
- compose.yaml
- .env
- data
- arcane
- docker
- srv
Générer une clé de chiffrement
openssl rand -base64 32
Gardez le résultat, vous en aurez besoin pour le fichier .env ci-dessous.
Déployer la stack
Ouvrez Dockge, cliquez sur compose, nommez la stack arcane, et ajoutez la configuration suivante. Elle inclut le socket proxy : arcane ne touche jamais directement à /var/run/docker.sock, seul docker-socket-proxy le fait, et il n'autorise que les permissions dont Arcane a besoin (conteneurs, images, réseaux, volumes, exec, build/commit), sur leur propre réseau interne :
---
services:
arcane:
image: ghcr.io/getarcaneapp/manager:latest
container_name: arcane
restart: unless-stopped
cgroup: host
env_file:
- .env
volumes:
- /srv/docker/arcane/data:/app/data
networks:
- arcane-internal
ports:
- 3552:3552
depends_on:
- docker-socket-proxy
docker-socket-proxy:
image: lscr.io/linuxserver/socket-proxy:latest
container_name: arcane-docker-proxy
security_opt:
- no-new-privileges:true
networks:
- arcane-internal
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- CONTAINERS=1
- IMAGES=1
- NETWORKS=1
- VOLUMES=1
- EXEC=1
- BUILD=1
- COMMIT=1
- INFO=1
- SYSTEM=1
- POST=1
- ALLOW_START=1
- ALLOW_STOP=1
- ALLOW_RESTARTS=1
restart: unless-stopped
read_only: true
tmpfs:
- /run
networks:
arcane-internal:
name: arcane-internal
POST=1 est l'autorisation d'écriture globale nécessaire pour créer et supprimer conteneurs, images, réseaux et volumes ; ALLOW_START/ALLOW_STOP/ALLOW_RESTARTS couvrent séparément les actions sur le cycle de vie des conteneurs. Tout le reste (Swarm, secrets, configs, auth) est laissé à sa valeur par défaut 0, puisque ce site ne les utilise pas.---
services:
arcane:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
Renseigner vos variables d'environnement
Remplissez le fichier .env :
APP_URL=https://arcane.mondomaine.fr
ENCRYPTION_KEY=
DOCKER_HOST=tcp://docker-socket-proxy:2375
PUID=1000
PGID=1000
| Variable | Valeur | Exemple |
|---|---|---|
APP_URL | L'URL publique par laquelle vous joindrez Arcane (voir l'exposition plus bas), sans port | https://arcane.mondomaine.fr |
ENCRYPTION_KEY | La clé générée ci-dessus | Q2pVEqsTNRkJSO9SkJzU3KZ2... |
DOCKER_HOST | Pointe Arcane vers le socket proxy plutôt qu'un socket monté | tcp://docker-socket-proxy:2375 |
PUID / PGID | Vos identifiants d'utilisateur et de groupe, via id votreutilisateur | 1000 |
Déployez la stack. L'interface locale est disponible sur http://ipdevotreserveur:3552.
Terminé !
Exposer Arcane avec SWAG
Le principal intérêt de cette installation est de pouvoir accéder à Arcane à distance depuis tous vos appareils. Nous allons l'exposer avec SWAG.
arcane.mondomaine.fr avec un CNAME pointant vers mondomaine.fr dans votre zone DNS. Et bien sûr, à moins d'utiliser Cloudflare Zero Trust, le port 443 de votre box doit être redirigé vers le port 443 de votre serveur dans les règles NAT.Ajouter le réseau d'Arcane à SWAG
Allez dans Dockge et modifiez le fichier compose de SWAG en y ajoutant le réseau d'Arcane :
---
services:
swag:
container_name: # ...
# ...
networks: # Rattache le conteneur au réseau personnalisé
# ...
- arcane # Nom du réseau déclaré
networks: # Définit le réseau personnalisé
# ...
arcane: # Nom du réseau déclaré
name: arcane_default # Nom réel du réseau externe
external: true # Le marque comme défini à l'extérieur
Redéployez la stack et attendez que SWAG soit pleinement opérationnel.
arcane_default. Vous pouvez vérifier la connexion en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81.Créer le fichier subdomain.conf
Dans les dossiers de Swag, créez le fichier arcane.subdomain.conf :
sudo nano /srv/docker/swag/config/nginx/proxy-confs/arcane.subdomain.conf
Collez la configuration suivante :
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name arcane.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
location / {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app arcane;
set $upstream_port 3552;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Upgrade/Connection ci-dessus, en plus de l'inclusion habituelle de proxy.conf.Appuyez sur Ctrl+O, puis Enter pour enregistrer, et Ctrl+X pour quitter.
Terminé !
Et voilà ! Arcane est maintenant accessible depuis internet.
Connecter un hôte distant
Arcane peut gérer plusieurs hôtes Docker depuis une seule instance. Chaque hôte distant fait tourner un conteneur agent léger qui se reconnecte à Arcane. Plutôt que d'exposer cette connexion sur internet, nous la ferons passer par le VPN WireGuard déjà mis en place plus tôt, ainsi le trafic de l'agent ne quitte jamais votre réseau privé.
10.8.0.3) ; c'est l'adresse que visera l'agent distant ci-dessous.Ajouter l'environnement distant dans Arcane
Dans Arcane, allez dans Environments > Add Environment. Arcane génère un Agent Token à usage unique et le bout de configuration compose à déployer sur l'hôte distant.
Déployer l'agent sur l'hôte distant
Sur l'hôte distant, ouvrez Dockge, cliquez sur compose, nommez la stack arcane-agent, et ajoutez la configuration suivante, en remplaçant le token par celui qu'Arcane vous a donné et l'URL par l'adresse VPN de votre hôte Arcane :
---
services:
arcane-agent:
image: ghcr.io/getarcaneapp/agent:latest
container_name: arcane-agent
restart: unless-stopped
environment:
- EDGE_AGENT=true
- EDGE_TRANSPORT=poll
- AGENT_TOKEN=arc_votretoken
- MANAGER_API_URL=http://10.8.0.3:3552
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /srv/docker/arcane-agent/data:/app/data
Déployez la stack.
Vérifier la connexion
De retour dans Arcane, le nouvel environnement devrait apparaître comme connecté en quelques secondes. Basculez dessus depuis le sélecteur d'environnement pour gérer les conteneurs et les stacks de cet hôte.
Terminé !
Connecter Pocket ID
Arcane gère OIDC nativement, vous pouvez donc exiger une connexion Pocket ID avant de laisser qui que ce soit gérer vos conteneurs, plutôt qu'avec (ou en plus de) les comptes propres à l'application.
Enregistrer Arcane comme client OIDC
Enregistrez un client OIDC dans Pocket ID nommé arcane, avec cette URL de callback :
https://arcane.mondomaine.fr/auth/oidc/callback
Activer OIDC dans Arcane
Modifiez le fichier .env d'Arcane et ajoutez :
OIDC_ENABLED=true
OIDC_CLIENT_ID=
OIDC_CLIENT_SECRET=
OIDC_ISSUER_URL=https://id.mondomaine.fr
OIDC_SCOPES=openid email profile
OIDC_PROVIDER_NAME=Pocket ID
| Variable | Valeur |
|---|---|
OIDC_CLIENT_ID | Le client ID copié depuis Pocket ID |
OIDC_CLIENT_SECRET | Le client secret copié depuis Pocket ID |
OIDC_ISSUER_URL | L'URL publique de Pocket ID, sans slash final ; Arcane découvre le reste via .well-known/openid-configuration |
Redéployez la stack.
OIDC_AUTO_REDIRECT_TO_PROVIDER=true, ou désactivez complètement la connexion locale dans Settings > Authentication pour un accès uniquement OIDC.Terminé !
Et voilà ! Arcane propose désormais une option « Login with Pocket ID » à côté du formulaire de connexion local.
- Dans Authentik, créez une application et un provider OAuth2/OpenID Connect nommé
Arcane, avec une redirect URI (de typeStrict) valanthttps://arcane.mondomaine.fr/auth/oidc/callback. - Notez les Client ID et Client Secret du provider.
- Dans le
.envd'Arcane, mettezOIDC_ISSUER_URL=https://authentik.mondomaine.fr/application/o/arcane/, puis renseignez le Client ID et le Client Secret.