Files
termanager2/.env.example

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