Generatore docker-compose per wg-easy
Indica il tuo server e come vuoi raggiungere il pannello di amministrazione. Ottieni un docker-compose.yml conforme all'immagine attuale di wg-easy v15, un Caddyfile se vuoi l'HTTPS e i comandi esatti per avviarlo. Tutto viene creato nel tuo browser.
Tutto viene generato nel tuo browser. Nulla di ciò che scrivi, password compresa, viene inviato ai nostri server.
L'indirizzo a cui si collegano i client WireGuard.
Un record A per questo nome deve puntare al server, con le porte 80 e 443 aperte.
- Clicca « Nuova » per generare la password amministratore.
- Indica il dominio del pannello: Caddy ne ha bisogno per ottenere il certificato.
# 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. Firewall: prima SSH, poi la porta di 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
# Nota: le porte pubblicate da Docker aggirano ufw. Aprile/chiudile anche nel firewall del provider.
# 2. Crea la cartella e incolla il o i file generati
sudo mkdir -p /etc/docker/containers/wg-easy
cd /etc/docker/containers/wg-easy
sudo nano docker-compose.yml
sudo nano Caddyfile
# 3. Avvia wg-easy
sudo docker compose up -d
# Segui i log (Ctrl+C per uscire)
sudo docker compose logs -f wg-easy
# 4. Apri il pannello: https://wg.example.com
# 5. Dopo l'accesso, togli le righe INIT_* e rilancia docker compose up -d
Questo file ha bisogno di un server con IP pubblico
Un VPS Cloud Contabo offre un IPv4 dedicato, immagini Linux pronte per Docker e traffico illimitato: tutto ciò che serve a wg-easy.
Link di affiliazione: riceviamo una commissione senza costi aggiuntivi per te.
Perché il tuo vecchio file di wg-easy non funziona più
wg-easy v15 è una riscrittura completa. La maggior parte delle variabili dei tutorial v14 viene semplicemente ignorata dalla nuova immagine: il container parte, ma host, password e DNS non vengono applicati. La guida ufficiale alla migrazione indica che quasi tutte le impostazioni sono passate nel pannello. Ecco la corrispondenza:
| Variabile v14 | Equivalente v15 |
|---|---|
| WG_HOST | INIT_HOST (solo al primo avvio), poi il pannello |
| PASSWORD / PASSWORD_HASH | INIT_USERNAME + INIT_PASSWORD, oppure la procedura guidata |
| WG_PORT | INIT_PORT, con la relativa mappatura UDP |
| WG_DEFAULT_DNS | INIT_DNS |
| WG_DEFAULT_ADDRESS | INIT_IPV4_CIDR insieme a INIT_IPV6_CIDR |
| Pannello in HTTP semplice | ora serve INSECURE=true |
Tre modi per raggiungere il pannello
Il pannello può creare client VPN: chi lo raggiunge controlla la tua VPN. Solo la porta UDP di WireGuard deve essere esposta a Internet.
L'HTTPS con Caddy è la configurazione raccomandata dalla documentazione di wg-easy: Caddy ottiene un certificato reale per un sottodominio che punta al server e il pannello non viene mai servito in HTTP semplice. Il generatore mette i due container sulla stessa rete, assegna a Caddy un indirizzo fisso e lo dichiara in TRUSTED_PROXIES, così gli accessi falliti vengono registrati con il vero IP del client.
Il tunnel SSH pubblica il pannello solo su 127.0.0.1. Niente è esposto; lo apri con ssh -L quando serve. Senza dominio è l'opzione sicura più semplice.
La modalità rete locale è per un server domestico: il pannello è pubblicato in HTTP con INSECURE=true. Docker pubblica le porte con regole iptables proprie, quindi ufw non le filtra; tieni chiusa quella porta sul router o nel firewall del provider.