158 lines
6.0 KiB
Plaintext
158 lines
6.0 KiB
Plaintext
# =============================================================================
|
|
# TerManager2 — configurazione
|
|
#
|
|
# Questo file e' l'UNICA fonte di configurazione: docker-compose.yml lo legge
|
|
# cosi' com'e' e non ridichiara nulla.
|
|
#
|
|
# In locale: cp .env.example .env e modifica quello che serve
|
|
# Su Dokploy: incolla queste variabili in Environment, il .env lo
|
|
# genera lui
|
|
#
|
|
# Le variabili marcate [OBBLIGATORIA] non hanno default: lo stack si rifiuta
|
|
# di partire senza.
|
|
# =============================================================================
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Applicazione
|
|
# -----------------------------------------------------------------------------
|
|
APP_NAME=TerManager2
|
|
APP_ENV=production
|
|
APP_DEBUG=false
|
|
APP_TIMEZONE=Europe/Rome
|
|
|
|
# [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
|
|
# perdi non sono piu' leggibili nemmeno avendo il backup del database.
|
|
# Conservala in un password manager.
|
|
APP_KEY=
|
|
|
|
LOG_CHANNEL=stderr
|
|
LOG_LEVEL=warning
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Primo avvio
|
|
# -----------------------------------------------------------------------------
|
|
# L'amministratore creato al primo deploy. Cambia la password dopo il login.
|
|
INITIAL_ADMIN_NAME=Amministratore
|
|
INITIAL_ADMIN_EMAIL=
|
|
INITIAL_ADMIN_PASSWORD=
|
|
|
|
# Lasciale cosi': esistono come via di fuga se qualcosa va storto.
|
|
RUN_MIGRATIONS=true
|
|
RUN_DB_SEED_ON_FIRST_START=true
|
|
ENSURE_INITIAL_ADMIN_ON_EMPTY_DB=true
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Database
|
|
# -----------------------------------------------------------------------------
|
|
# DB_HOST deve restare "mariadb": e' il nome del servizio in
|
|
# docker-compose.yml, non un indirizzo di rete.
|
|
DB_CONNECTION=mysql
|
|
DB_HOST=mariadb
|
|
DB_PORT=3306
|
|
DB_DATABASE=termanager2
|
|
DB_USERNAME=termanager2
|
|
|
|
# [OBBLIGATORIE] Genera con: openssl rand -base64 24
|
|
DB_PASSWORD=
|
|
DB_ROOT_PASSWORD=
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Redis — cache, sessioni, code
|
|
# -----------------------------------------------------------------------------
|
|
# Come sopra: "redis" e' il nome del servizio, non va cambiato.
|
|
REDIS_HOST=redis
|
|
REDIS_PORT=6379
|
|
|
|
# [OBBLIGATORIA] openssl rand -base64 24
|
|
REDIS_PASSWORD=
|
|
|
|
CACHE_STORE=redis
|
|
SESSION_DRIVER=redis
|
|
QUEUE_CONNECTION=redis
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Dimensione massima dei file caricati (MB)
|
|
# -----------------------------------------------------------------------------
|
|
# Governa insieme nginx (client_max_body_size), PHP (upload_max_filesize e
|
|
# post_max_size) e la validazione dell'applicazione: li genera l'entrypoint da
|
|
# questo unico valore, cosi' non possono andare fuori sincrono.
|
|
#
|
|
# Il file piu' grande che passa di qui e' il pacchetto di ripristino, che
|
|
# contiene tutti i PDF dei territori: con qualche centinaio di mappe si arriva
|
|
# facilmente a oltre un giga. Se un caricamento muore senza spiegazioni e la
|
|
# barra si pianta, e' quasi sempre questo il limite che si e' incontrato.
|
|
#
|
|
# Alzarlo non costa memoria: nginx accumula il corpo su disco e PHP lavora su un
|
|
# file temporaneo. Serve pero' spazio libero nel volume.
|
|
MAX_UPLOAD_MB=2048
|
|
|
|
# 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
|
|
# -----------------------------------------------------------------------------
|
|
# In produzione: SMTP esterno.
|
|
# In locale con --profile dev: MAIL_HOST=mailpit, MAIL_PORT=1025
|
|
# Per disattivare del tutto l'invio: MAIL_MAILER=log
|
|
MAIL_MAILER=smtp
|
|
MAIL_HOST=
|
|
MAIL_PORT=587
|
|
MAIL_USERNAME=
|
|
MAIL_PASSWORD=
|
|
MAIL_SCHEME=tls
|
|
MAIL_FROM_ADDRESS=noreply@example.org
|
|
MAIL_FROM_NAME="${APP_NAME}"
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Porte esposte sull'host
|
|
# -----------------------------------------------------------------------------
|
|
# 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
|