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>
This commit is contained in:
2026-05-03 22:41:38 +02:00
parent e321dd312b
commit 78e1c37a9e
4 changed files with 100 additions and 23 deletions
+14 -21
View File
@@ -31,43 +31,36 @@ Apri `.env` con un editor e compila i valori richiesti:
| Variabile | Descrizione | Obbligatoria |
|---|---|---|
| `WG_HOST` | IP pubblico o hostname DDNS del server | Si |
| `PASSWORD_HASH` | Hash bcrypt della password per la UI web | Si |
| `TZ` | Fuso orario (formato IANA, es. `Europe/Rome`) | Si |
| `WG_HOST` | IP pubblico o hostname DDNS del server | Sì |
| `PASSWORD_HASH` | Hash della password per la UI web (vedi sotto) | Sì |
| `TZ` | Fuso orario (formato IANA, es. `Europe/Rome`) | Sì |
| `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 l'hash della password
### 3. Genera e imposta la password
Scegli uno dei seguenti metodi:
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).
**Metodo A — Docker (consigliato, zero dipendenze aggiuntive):**
**Passo 1** — Scegli la password che vuoi usare per accedere all'interfaccia web, poi esegui questo comando sostituendo `LatuaPassword` con quella scelta:
```bash
docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw 'LatuaPassword'
```
Output esempio: `PASSWORD_HASH='$2a$12$...'`
Copia il valore senza le virgolette singole.
**Passo 2** — Il comando stampa una riga simile a questa:
**Metodo B — `htpasswd` (pacchetto `apache2-utils`):**
```bash
sudo apt install apache2-utils
htpasswd -bnBC 12 "" 'LatuaPassword' | tr -d ':\n'
```
PASSWORD_HASH='$2a$12$cDMCiMmFTuMOlT1E4BvxEO4CJfzMKSanRZSMqiE1234abcXYZ'
```
**Metodo C — Python:**
**Passo 3** — Copia solo la parte dopo `PASSWORD_HASH=`, **senza** le virgolette singole. Nel file `.env` deve apparire così:
```bash
pip3 install bcrypt
python3 -c "import bcrypt; print(bcrypt.hashpw(b'LatuaPassword', bcrypt.gensalt(12)).decode())"
```
PASSWORD_HASH=$2a$12$cDMCiMmFTuMOlT1E4BvxEO4CJfzMKSanRZSMqiE1234abcXYZ
```
> **Nota:** `openssl passwd` non supporta bcrypt. I metodi sopra producono hash con prefisso `$2a$`, `$2b$` o `$2y$` — tutti validi e accettati da wg-easy.
> **Attenzione:** incolla il valore esatto in `.env`, senza aggiungere `$$` o altri caratteri di escape.
> **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
@@ -94,7 +87,7 @@ Da qui puoi aggiungere client, scaricare i file di configurazione e generare QR
## Struttura del progetto
```
vpn-wg/
vpn/
├── docker-compose.yml # Definizione del servizio
├── .env.example # Template variabili (committato)
├── .env # Variabili locali con segreti (NON committato)