Reverse proxy e HTTPS
Così com'è, Vaultisse ascolta in HTTP semplice sulla porta 3000. Va bene sul tuo computer o sulla rete di casa. Per raggiungerlo da internet servono un nome di dominio e HTTPS, in modo che password e sessioni viaggino cifrate. Scegli uno di questi modi:
| Opzione | Ideale quando | Richiede |
|---|---|---|
| Caddy | Hai un server con indirizzo pubblico e vuoi il minimo lavoro | Un dominio che punta al server, porte 80 e 443 aperte |
| Nginx | Usi già Nginx | Lo stesso, più Certbot |
| Cloudflare Tunnel | Il tuo dominio è su Cloudflare, o non puoi aprire porte | Un account Cloudflare gratuito |
| Unraid | Usi Unraid | La sua scheda Docker |
Qualunque tu scelga, queste due impostazioni in .env servono sempre:
FRONT_END_URL=https://books.example.com
TRUST_PROXY=trueFRONT_END_URL è l'indirizzo pubblico, esattamente come digitato nel browser. TRUST_PROXY=true avvisa Vaultisse che davanti c'è un proxy, così la sua protezione contro l'indovinare le password vede l'indirizzo reale di ogni visitatore e non quello del proxy. Lascia ALLOW_HTTP=false.
Tieni privata la porta dell'app
Se il proxy gira sulla stessa macchina, pubblica la porta dell'app solo sull'indirizzo di loopback, così l'unico ingresso è il proxy. In docker-compose.yml, modifica il servizio app:
ports:
- "127.0.0.1:${API_PORT:-3000}:${API_PORT:-3000}"Caddy
Caddy richiede e rinnova da solo il certificato HTTPS.
Punta il record
Adel tuo dominio (eAAAAper IPv6) al server.Installa Caddy sul server, fuori da Docker, e inserisci questo in
/etc/caddy/Caddyfile:books.example.com { reverse_proxy localhost:3000 }Applicalo:
bashsudo systemctl reload caddyApri le porte 80 e 443 sul firewall. Non serve aprire altro.
Nginx
Aggiungi un blocco server che passi le richieste all'app:
server {
server_name books.example.com;
client_max_body_size 20m;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Poi ottieni il certificato con Certbot, che aggiunge per te la parte HTTPS:
sudo certbot --nginx -d books.example.comclient_max_body_size deve essere almeno grande quanto MAX_EBOOK_FILE_SIZE_MB, altrimenti i caricamenti degli ebook falliscono.
Cloudflare Tunnel
Un tunnel crea una connessione in uscita verso Cloudflare, quindi non apri nessuna porta e non gestisci certificati.
Nella dashboard di Cloudflare, vai su Zero Trust → Networks → Tunnels e crea un tunnel.
Aggiungi un hostname pubblico, per esempio
books.example.com, con il serviziohttp://app:3000. È il nome del servizio Compose, nonlocalhost.Copia il token del tunnel e inseriscilo in
.env:iniFRONT_END_URL=https://books.example.com TRUST_PROXY=true CLOUDFLARE_TUNNEL_TOKEN=<il tuo token>Avvia lo stack con il profilo
cloudflarein modo che giri anche il contenitore del tunnel:bashdocker compose --profile cloudflare up -d
Quando funziona puoi rimuovere del tutto la voce ports: dal servizio app. Il tunnel raggiunge l'app attraverso la rete interna di Docker, quindi il server non ha più alcuna porta in ingresso.
Unraid
Chi usa Unraid può aggiungere Vaultisse dalla scheda Docker invece di usare Compose.
Ti serve prima un server PostgreSQL, uno che già usi o il template ufficiale
postgres. Caricaassets/db/databaseSchema.sqluna volta in un database vuoto.In un browser sulla tua rete, apri questo indirizzo, sostituendo
TOWER-IP:http://TOWER-IP/Docker/AddContainer?xmlTemplate=https://raw.githubusercontent.com/AlbertAmat/vaultisse/main/assets/unraid/vaultisse.xmlCompila
DB_HOST,DB_PORT,DB_NAME,DB_USER,DB_PASSWORD,FRONT_END_URLeJWT_SECRET, lasciaALLOW_DEV_AUTHsufalsee fai clic su Apply.Per
http://TOWER-IP:3000semplice sulla tua rete, impostaALLOW_HTTP=trueeTRUST_PROXY=false. Se aggiungi un proxy o un tunnel con HTTPS, impostaALLOW_HTTP=falseeTRUST_PROXY=true.
Se lo rendi raggiungibile da internet, dai a Vaultisse, al suo proxy e al suo database una rete Docker separata (docker network create vaultisse-net), e non usare reti Host o br0 per esso. In questo modo un problema in questa app non può raggiungere gli altri tuoi contenitori.
Verifica
- Apri
https://books.example.come controlla che compaia il lucchetto. - Prova ad accedere. Se la pagina si carica ma l'accesso gira in tondo o i link non funzionano,
FRONT_END_URLnon coincide con ciò che hai digitato, oppureALLOW_HTTPè sbagliato. Vedi Risoluzione dei problemi.
Lista di controllo della sicurezza
- [ ]
ALLOW_DEV_AUTH=false - [ ]
JWT_SECRETgenerato conopenssl rand -hex 32 - [ ]
DB_PASSWORDè una password vera - [ ]
TRUST_PROXY=truedietro un proxy o un tunnel,falsealtrimenti - [ ]
ALLOW_HTTP=falseogni volta che c'è HTTPS davanti - [ ] La porta dell'app è legata a
127.0.0.1, oppure non pubblicata con un tunnel - [ ]
APP_TAGfissato a una versione - [ ] La registrazione è chiusa quando le persone che ti servono hanno già un account