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:
@@ -24,11 +24,11 @@ services:
|
||||
# I sorgenti non cambiano dentro un'immagine gia' costruita.
|
||||
PHP_OPCACHE_VALIDATE_TIMESTAMPS: 0
|
||||
ports:
|
||||
# Di default ascolta solo su localhost: in produzione il traffico passa
|
||||
# da Traefik sulla rete interna, non da questa porta. In locale invece
|
||||
# apri http://localhost:8080.
|
||||
# Per esporlo davvero: APP_PORT=0.0.0.0:8080 nel .env
|
||||
- "${APP_PORT:-127.0.0.1:8080}:80"
|
||||
# Interfaccia e porta si decidono separatamente nel .env:
|
||||
# APP_BIND=0.0.0.0 raggiungibile dall'esterno (http://IP:8080)
|
||||
# APP_BIND=127.0.0.1 solo dalla macchina stessa, per quando il
|
||||
# traffico arriva da un reverse proxy
|
||||
- "${APP_BIND:-0.0.0.0}:${APP_PORT:-8080}:80"
|
||||
volumes:
|
||||
# PDF territori, miniature, log e chiave di fallback.
|
||||
- storage_data:/var/www/html/storage
|
||||
@@ -121,6 +121,13 @@ services:
|
||||
- --character-set-server=utf8mb4
|
||||
- --collation-server=utf8mb4_unicode_ci
|
||||
- --innodb-buffer-pool-size=256M
|
||||
ports:
|
||||
# Legata a localhost: ci arrivi con un client grafico via tunnel SSH
|
||||
# ssh -L 3306:127.0.0.1:3306 utente@server
|
||||
# senza esporre il database a Internet. Per esporlo davvero (sconsigliato)
|
||||
# metti DB_BIND=0.0.0.0 nel .env.
|
||||
# Se la 3306 e' gia' occupata sull'host, cambia DB_PORT_HOST.
|
||||
- "${DB_BIND:-127.0.0.1}:${DB_PORT_HOST:-3306}:3306"
|
||||
volumes:
|
||||
- db_data:/var/lib/mysql
|
||||
networks:
|
||||
@@ -167,7 +174,7 @@ services:
|
||||
profiles: ["dev"]
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "${MAILPIT_UI_PORT:-127.0.0.1:8025}:8025"
|
||||
- "${MAILPIT_BIND:-127.0.0.1}:${MAILPIT_UI_PORT:-8025}:8025"
|
||||
networks:
|
||||
- internal
|
||||
|
||||
@@ -177,7 +184,8 @@ volumes:
|
||||
storage_data:
|
||||
|
||||
networks:
|
||||
# Database e Redis restano qui, senza rotta verso l'esterno.
|
||||
# Rete di servizio fra i container. Redis vive solo qui; MariaDB pubblica
|
||||
# anche una porta sull'host, legata a localhost salvo diversa indicazione.
|
||||
internal:
|
||||
driver: bridge
|
||||
# Rete condivisa del Traefik di Dokploy: e' cosi' che il dominio raggiunge
|
||||
|
||||
Reference in New Issue
Block a user