Générateur docker-compose wg-easy
Indiquez votre serveur et la façon dont vous voulez accéder au panneau d'administration. Vous obtenez un docker-compose.yml conforme à l'image wg-easy v15 actuelle, un Caddyfile si vous voulez du HTTPS, et les commandes exactes pour le lancer. Tout est construit dans votre navigateur.
Tout est généré dans votre navigateur. Rien de ce que vous saisissez, mot de passe compris, n'est envoyé à nos serveurs.
L'adresse à laquelle les clients WireGuard se connectent.
Un enregistrement A pour ce nom doit pointer vers le serveur, ports 80 et 443 ouverts.
- Cliquez sur « Nouveau » pour générer le mot de passe administrateur.
- Indiquez le domaine du panneau : Caddy en a besoin pour obtenir le certificat.
# wg-easy v15 - generated on vpnsmith.com/en/tools/wg-easy-compose-generator
# Host: vpn.example.com - WireGuard port: 51820/udp - panel: https://wg.example.com
volumes:
etc_wireguard:
caddy_data:
caddy_config:
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:15
container_name: wg-easy
environment:
- PORT=80
- TRUSTED_PROXIES=10.42.42.43,fdcc:ad94:bacf:61a3::2b
- INIT_ENABLED=true
- INIT_USERNAME=admin
- INIT_PASSWORD=GENERATE-A-PASSWORD
- INIT_HOST=vpn.example.com
- INIT_PORT=51820
- INIT_DNS=1.1.1.1,9.9.9.9
networks:
wg:
ipv4_address: 10.42.42.42
ipv6_address: fdcc:ad94:bacf:61a3::2a
volumes:
- etc_wireguard:/etc/wireguard
- /lib/modules:/lib/modules:ro
ports:
- "51820:51820/udp" # WireGuard: the only port clients need
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.all.forwarding=1
- net.ipv6.conf.default.forwarding=1
caddy:
image: caddy:2-alpine
container_name: caddy
ports:
- "80:80/tcp"
- "443:443/tcp"
- "443:443/udp"
networks:
wg:
ipv4_address: 10.42.42.43
ipv6_address: fdcc:ad94:bacf:61a3::2b
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
restart: unless-stopped
networks:
wg:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 10.42.42.0/24
- subnet: fdcc:ad94:bacf:61a3::/64
wg.example.com {
reverse_proxy wg-easy:80
}
# 1. Pare-feu : SSH d'abord, puis le port WireGuard
sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw enable
# Attention : les ports publiés par Docker contournent ufw. Ouvrez/fermez-les aussi dans le pare-feu de l'hébergeur.
# 2. Créez le dossier et collez le ou les fichiers générés
sudo mkdir -p /etc/docker/containers/wg-easy
cd /etc/docker/containers/wg-easy
sudo nano docker-compose.yml
sudo nano Caddyfile
# 3. Démarrez wg-easy
sudo docker compose up -d
# Suivez les journaux (Ctrl+C pour quitter)
sudo docker compose logs -f wg-easy
# 4. Ouvrez le panneau: https://wg.example.com
# 5. Une fois connecté, retirez les lignes INIT_* et relancez docker compose up -d
Ce fichier a besoin d'un serveur avec une IP publique
Un VPS Cloud Contabo fournit une IPv4 dédiée, des images Linux prêtes pour Docker et un trafic illimité : tout ce dont wg-easy a besoin.
Lien affilié : nous touchons une commission, sans surcoût pour vous.
Pourquoi votre ancien fichier wg-easy ne marche plus
wg-easy v15 est une réécriture complète. La plupart des variables des tutoriels v14 sont tout simplement ignorées par la nouvelle image : le conteneur démarre, mais votre hôte, votre mot de passe et vos DNS ne sont pas appliqués. Le guide de migration officiel indique que la plupart des réglages sont passés dans le panneau d'administration. Voici la correspondance :
| Variable v14 | Équivalent v15 |
|---|---|
| WG_HOST | INIT_HOST (premier démarrage seulement), puis le panneau |
| PASSWORD / PASSWORD_HASH | INIT_USERNAME + INIT_PASSWORD, ou l'assistant d'installation |
| WG_PORT | INIT_PORT, avec le mappage UDP correspondant |
| WG_DEFAULT_DNS | INIT_DNS |
| WG_DEFAULT_ADDRESS | INIT_IPV4_CIDR avec INIT_IPV6_CIDR |
| Panneau en HTTP simple | INSECURE=true est désormais obligatoire |
Trois façons d'accéder au panneau
Le panneau peut créer des clients VPN : qui l'atteint contrôle votre VPN. Seul le port UDP de WireGuard doit être exposé à Internet.
Le HTTPS avec Caddy est la configuration que recommande la documentation de wg-easy : Caddy obtient un vrai certificat pour un sous-domaine qui pointe vers votre serveur, et le panneau n'est jamais servi en HTTP simple. Le générateur place les deux conteneurs sur le même réseau, donne à Caddy une adresse fixe et la déclare dans TRUSTED_PROXIES, pour que les échecs de connexion soient journalisés avec la vraie IP du client.
Le tunnel SSH ne publie le panneau que sur 127.0.0.1. Rien n'est exposé ; vous l'ouvrez avec ssh -L quand vous en avez besoin. C'est l'option sûre la plus simple quand vous n'avez pas de domaine.
Le mode réseau local sert à un serveur domestique : le panneau est publié en HTTP avec INSECURE=true. Docker publie ses ports par ses propres règles iptables, donc ufw ne les filtre pas ; gardez ce port fermé sur votre box ou le pare-feu de l'hébergeur.