Files
TieMeasureFlow/.env.example
Adriano 12d5b7e154 feat(config): SESSION_COOKIE_SECURE leggibile dall'ambiente (#38.4)
config.py: default invariato (sicuro salvo FLASK_DEBUG=1); nuova env
SESSION_COOKIE_SECURE=false la spegne esplicitamente, per l'installazione
on-premise dove nginx serve HTTP in LAN - un cookie Secure su origine non
HTTPS viene scartato dal browser in silenzio e il login non regge mai.
.env.example documenta la variabile (commentata, comportamento invariato
di default). docker-compose e default dev restano al lotto C2.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 23:06:59 +02:00

105 lines
4.5 KiB
Bash

# ===========================
# TieMeasureFlow Configuration
# ===========================
# --- Database ---
# DB_PASSWORD e DB_ROOT_PASSWORD (sezione Docker sotto): in produzione (docker-compose.yml)
# sono obbligatorie, senza default — `docker compose config` si rifiuta se mancano.
DB_HOST=localhost
DB_PORT=3306
DB_NAME=tiemeasureflow
DB_USER=tmflow
DB_PASSWORD=change_me_in_production
# --- Server ---
# APP_ENV: "dev" (default) o "test" fanno partire il server senza controlli;
# qualunque altro valore (es. "production") fa scattare i rifiuti descritti
# sotto per SERVER_SECRET_KEY e DB_PASSWORD ancora ai valori committati.
APP_ENV=dev
# SERVER_SECRET_KEY: in produzione obbligatoria, senza default, e il server rifiuta
# di avviarsi se resta uguale al valore committato qui sotto.
SERVER_HOST=0.0.0.0
SERVER_PORT=8000
SERVER_SECRET_KEY=change-this-to-a-random-secret-key
SERVER_CORS_ORIGINS=http://localhost:5000
# --- Client ---
# CLIENT_SECRET_KEY: in produzione obbligatoria, senza default, e il client rifiuta
# di avviarsi se resta uguale al valore committato qui sotto.
CLIENT_HOST=0.0.0.0
CLIENT_PORT=5000
CLIENT_SECRET_KEY=change-this-to-another-random-secret-key
API_SERVER_URL=http://localhost:8000
# Station code this client container belongs to (e.g. ST-001).
# Each physical tablet/PC deployment must set this unique per-station value.
# Leave empty only for a single-station all-in-one demo using ST-DEFAULT.
STATION_CODE=ST-DEFAULT
# Allow switching station from the URL (?station=CODE) during commissioning, so a
# single PC can exercise several stations. Leave at 0 in production: on the shop
# floor the station identity comes from the local install, and measuring against
# another station's recipes would silently break traceability.
STATION_SWITCH_ENABLED=0
# Cookie di sessione "Secure": di default segue FLASK_DEBUG (sicuro salvo
# debug). Impostare a false solo per l'installazione on-premise che serve
# HTTP in LAN (#38.4) - un cookie Secure su un'origine non-HTTPS viene
# scartato dal browser in silenzio e il login non regge mai.
# SESSION_COOKIE_SECURE=false
# --- Vision ---
# Internal address of the vision worker. Never exposed outside tmflow-net.
VISION_WORKER_URL=http://vision:8100
# The pinned VisionSuite commit, stamped into the vision image at build time
# (Dockerfile.vision ARG). Required: `docker compose build vision` fails
# immediately without it. Set with:
# VISION_ENGINE_VERSION=$(git -C vendor/visionsuite rev-parse HEAD)
VISION_ENGINE_VERSION=
# --- File Storage ---
# Resolved against the project root in src/backend/config.py.
# Default "uploads" maps to <project_root>/uploads, mounted as a Docker
# volume in production.
UPLOAD_DIR=uploads
MAX_UPLOAD_SIZE_MB=50
# --- Setup Page ---
SETUP_PASSWORD= # Password per /api/setup, vuoto = disabilitato
# Una volta creato un admin, /api/setup/{reset-db,seed,manage-user,
# change-user-password,init-db} rispondono 403. true per un deploy demo/test
# riprovisionato via script: non impostarlo su un'installazione reale.
SETUP_ALLOW_AFTER_INIT=false
# --- AI (OpenRouter) ---
OPENROUTER_API_KEY= # API key per parsing schede tecniche, vuoto = disabilitato
OPENROUTER_MODEL=anthropic/claude-sonnet-4 # Modello AI da utilizzare
# --- Deploy (introdotte dalla revisione del 21/09/2026) ---
# Dominio pubblico dell'installazione, usato nelle rule Traefik di
# docker-compose.yml (produzione). Obbligatorio, senza default.
APP_DOMAIN=
# Quanti hop di reverse proxy fidati ci sono davanti al server (Nginx o
# Traefik): serve a calcolare l'IP reale del tablet per il rate limiter.
TRUSTED_PROXY_COUNT=1
# Numero di worker Uvicorn del server. Il Dockerfile ne avvia 4 di default
# indipendentemente da questa variabile; impostarla esplicitamente per farla
# coincidere se si cambia il numero di worker nell'immagine.
WEB_CONCURRENCY=1
# Cookie di sessione Flask con flag Secure. true di default (richiede HTTPS,
# come dietro Traefik in docker-compose.yml). Le installazioni on-premise su
# rete LAN in HTTP semplice (docker-compose.dev.yml, Nginx senza SSL) la
# impostano a false, altrimenti il browser non rimanda mai indietro il cookie.
SESSION_COOKIE_SECURE=true
# Timeout (secondi) di un'esecuzione del worker di visione.
VISION_RUN_TIMEOUT_S=100
# Quante esecuzioni di visione in parallelo accetta il worker.
VISION_MAX_CONCURRENCY=2
# --- Docker ---
# DB_ROOT_PASSWORD: in produzione (docker-compose.yml) obbligatoria, senza default.
DB_ROOT_PASSWORD=root_password_change_me
NGINX_PORT=80
NGINX_SSL_PORT=443
# --- HTTPS (Production) ---
# SSL_CERTFILE=/path/to/cert.pem
# SSL_KEYFILE=/path/to/key.pem