Rendi configurabili le porte esposte sull'host
Le porte erano legate a 127.0.0.1, quindi l'applicazione non era raggiungibile per IP: andava bene solo accedendo da un dominio via Traefik. Ora interfaccia e porta si decidono separatamente nel .env, per ogni servizio. APP_BIND=0.0.0.0 APP_PORT=8080 app esposta (default) DB_BIND=127.0.0.1 DB_PORT_HOST=3306 database solo da localhost MAILPIT_BIND=127.0.0.1 solo col profilo dev Il database resta su localhost per due motivi: ci si arriva comunque con un tunnel SSH senza esporlo a Internet, e su un host con piu' progetti la 3306 va spesso in conflitto (per questo e' cambiabile con DB_PORT_HOST). Redis non pubblica nulla: non serve da fuori. SESSION_SECURE_COOKIE passa a false come default, perche' ora l'accesso tipico e' in HTTP per IP. Con true il cookie di sessione e' marcato "secure" e il browser non lo rimanda su HTTP: verificato, il login risponde 419 Page Expired e si torna alla schermata di accesso. Il tranello e' che provandolo su localhost non si manifesta, perche' i browser considerano localhost un contesto sicuro: emerge solo accedendo per IP. E' documentato in .env.example insieme al sintomo esatto. Verificato: app raggiungibile dall'IP di rete, porta del database chiusa dall'esterno e aperta da localhost, login e pagine funzionanti via IP. Nota: senza dominio il traffico e' in chiaro. Il README segnala il passaggio a HTTPS come consigliato, con le tre variabili da cambiare. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
62
.env.example
62
.env.example
@@ -20,11 +20,15 @@ APP_ENV=production
|
||||
APP_DEBUG=false
|
||||
APP_TIMEZONE=Europe/Rome
|
||||
|
||||
# [OBBLIGATORIA] Deve combaciare ESATTAMENTE col dominio servito, schema
|
||||
# incluso. L'app rifiuta richieste con un Host diverso (protezione contro
|
||||
# l'host header injection): un valore sbagliato da' 400 su tutto.
|
||||
# In locale: http://localhost:8080
|
||||
APP_URL=https://territori.example.org
|
||||
# [OBBLIGATORIA] Deve combaciare ESATTAMENTE con l'indirizzo da cui accedi,
|
||||
# schema e porta inclusi. L'app rifiuta richieste con un Host diverso
|
||||
# (protezione contro l'host header injection): un valore sbagliato da' 400
|
||||
# su tutto.
|
||||
#
|
||||
# accesso per IP:porta -> http://192.0.2.10:8080
|
||||
# accesso in locale -> http://localhost:8080
|
||||
# dominio con HTTPS -> https://territori.example.org
|
||||
APP_URL=http://192.0.2.10:8080
|
||||
|
||||
# [OBBLIGATORIA] Genera con: echo "base64:$(openssl rand -base64 32)"
|
||||
# I dati personali dei proclamatori sono cifrati con questa chiave: se la
|
||||
@@ -77,8 +81,18 @@ CACHE_STORE=redis
|
||||
SESSION_DRIVER=redis
|
||||
QUEUE_CONNECTION=redis
|
||||
|
||||
# true in produzione (HTTPS), false se accedi in HTTP su localhost.
|
||||
SESSION_SECURE_COOKIE=true
|
||||
# DEVE essere false se accedi in HTTP (tipicamente per IP:porta).
|
||||
#
|
||||
# Con true, il cookie di sessione viene marcato "secure" e il browser non lo
|
||||
# rimanda mai su una connessione HTTP: il login risponde 419 "Page Expired"
|
||||
# e si torna alla schermata di accesso, senza spiegazioni.
|
||||
#
|
||||
# Attenzione: provandolo su http://localhost NON te ne accorgi, perche' i
|
||||
# browser trattano localhost come contesto sicuro. Il problema salta fuori
|
||||
# solo accedendo per IP.
|
||||
#
|
||||
# Mettilo a true quando servirai l'app in HTTPS dietro un dominio.
|
||||
SESSION_SECURE_COOKIE=false
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Posta
|
||||
@@ -96,10 +110,32 @@ MAIL_FROM_ADDRESS=noreply@example.org
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Porte
|
||||
# Porte esposte sull'host
|
||||
# -----------------------------------------------------------------------------
|
||||
# Di default l'app ascolta solo su localhost. In produzione va bene cosi': il
|
||||
# traffico arriva da Traefik sulla rete interna, non da questa porta.
|
||||
# Per esporla davvero (server senza reverse proxy): APP_PORT=0.0.0.0:8080
|
||||
APP_PORT=127.0.0.1:8080
|
||||
MAILPIT_UI_PORT=127.0.0.1:8025
|
||||
# Per ogni servizio decidi separatamente SU QUALE INTERFACCIA ascoltare (_BIND)
|
||||
# e SU QUALE PORTA (_PORT):
|
||||
#
|
||||
# 0.0.0.0 raggiungibile da fuori, cioe' da Internet se il server e'
|
||||
# pubblico e non c'e' un firewall davanti
|
||||
# 127.0.0.1 solo dalla macchina stessa; da remoto ci arrivi con un
|
||||
# tunnel SSH: ssh -L 8080:127.0.0.1:8080 utente@server
|
||||
|
||||
# --- Applicazione ---
|
||||
# Esposta, cosi' l'app risponde su http://IP-DEL-SERVER:8080
|
||||
# Quando passerai a un dominio con HTTPS, rimetti APP_BIND=127.0.0.1: il
|
||||
# traffico arrivera' dal reverse proxy sulla rete interna e la porta non
|
||||
# servira' piu'.
|
||||
APP_BIND=0.0.0.0
|
||||
APP_PORT=8080
|
||||
|
||||
# --- Database ---
|
||||
# Legato a localhost: per collegare un client grafico (DBeaver, TablePlus)
|
||||
# apri un tunnel: ssh -L 3306:127.0.0.1:3306 utente@server
|
||||
# Se la 3306 e' gia' occupata sull'host, cambia DB_PORT_HOST (es. 3307).
|
||||
# Sconsigliato mettere DB_BIND=0.0.0.0: esporrebbe il database a Internet.
|
||||
DB_BIND=127.0.0.1
|
||||
DB_PORT_HOST=3306
|
||||
|
||||
# --- Mailpit (solo con --profile dev) ---
|
||||
MAILPIT_BIND=127.0.0.1
|
||||
MAILPIT_UI_PORT=8025
|
||||
|
||||
Reference in New Issue
Block a user