davide 78e1c37a9e feat: ottimizzazione SBC e miglioramento documentazione
- Aggiunge limiti di memoria, CPU e swap al container per prevenire crash
  dell'host su SBC (la causa principale era log illimitati + OOM senza cgroup)
- Aggiunge rotazione log (max 30 MB totali) per evitare riempimento SD card
- Aggiunge health check con riavvio automatico in caso di blocco Node.js
- Monta /tmp come tmpfs per ridurre scritture sulla SD card
- Pinna l'immagine a 15.2.2 invece di latest
- Semplifica README: unico metodo per generare la password, guida passo-passo
- Aggiunge variabili opzionali WG_MEM_LIMIT / WG_MEMSWAP_LIMIT / WG_CPUS in .env.example

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-03 22:41:38 +02:00
2026-04-12 23:15:02 +02:00

WireGuard VPN con wg-easy (Docker)

Una configurazione Docker pronta all'uso per eseguire un server VPN WireGuard con interfaccia web wg-easy, ideale per Raspberry Pi o qualsiasi server Linux.


Prerequisiti

  • Docker e Docker Compose installati sul server
  • Una porta UDP aperta sul router/firewall (default: 51820)
  • Un indirizzo IP pubblico statico oppure un hostname DDNS (es. DuckDNS, No-IP)

Configurazione rapida

1. Clona il repository

git clone https://santantonio.sytes.net/davide/vpn.git
cd vpn

2. Crea il file .env

cp .env.example .env

Apri .env con un editor e compila i valori richiesti:

Variabile Descrizione Obbligatoria
WG_HOST IP pubblico o hostname DDNS del server
PASSWORD_HASH Hash della password per la UI web (vedi sotto)
TZ Fuso orario (formato IANA, es. Europe/Rome)
WG_PORT Porta UDP WireGuard (default: 51820) No
WG_UI_PORT Porta TCP interfaccia web (default: 51821) No
WG_DEFAULT_DNS DNS inviati ai client (default: 1.1.1.1,8.8.8.8) No

3. Genera e imposta la password

La password non si scrive in chiaro nel file .env: va convertita in un hash (una stringa cifrata che wg-easy usa per verificare il login senza conservare la password originale).

Passo 1 — Scegli la password che vuoi usare per accedere all'interfaccia web, poi esegui questo comando sostituendo LatuaPassword con quella scelta:

docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw 'LatuaPassword'

Passo 2 — Il comando stampa una riga simile a questa:

PASSWORD_HASH='$2a$12$cDMCiMmFTuMOlT1E4BvxEO4CJfzMKSanRZSMqiE1234abcXYZ'

Passo 3 — Copia solo la parte dopo PASSWORD_HASH=, senza le virgolette singole. Nel file .env deve apparire così:

PASSWORD_HASH=$2a$12$cDMCiMmFTuMOlT1E4BvxEO4CJfzMKSanRZSMqiE1234abcXYZ

Attenzione: non aggiungere virgolette, spazi o altri caratteri intorno al valore. Copia e incolla esattamente quello che hai ottenuto.

4. Apri la porta sul router

Inoltra la porta UDP 51820 (o quella scelta in WG_PORT) verso l'IP locale del server.

5. Avvia il container

docker compose up -d

Al primo avvio la directory wg-data/ viene creata automaticamente con tutte le chiavi crittografiche. Non è necessario modificarla manualmente.

6. Accedi all'interfaccia web

http://IP_DEL_TUO_SERVER:51821

Da qui puoi aggiungere client, scaricare i file di configurazione e generare QR code per dispositivi mobili.


Struttura del progetto

vpn/
├── docker-compose.yml   # Definizione del servizio
├── .env.example         # Template variabili (committato)
├── .env                 # Variabili locali con segreti (NON committato)
├── .gitignore
├── README.md
└── wg-data/             # Generato automaticamente dal container (NON committato)
    ├── wg0.conf         # Configurazione WireGuard (chiavi reali)
    └── wg0.json         # Stato interno wg-easy (chiavi reali)

Aggiornare wg-easy

docker compose pull
docker compose up -d

Sicurezza

  • wg-data/ contiene chiavi crittografiche private. Non committarla mai su Git.
  • .env contiene la password (hash) e il tuo hostname. Non committarlo.
  • Entrambi sono esclusi da .gitignore.
S
Description
Setup per wireguard VPN dockerizzato
Readme 51 KiB
Languages
Markdown 100%