Variabili Ambiente
Guida completa alle variabili d'ambiente utilizzate in Emblema. Tutte le variabili sono definite nel file .env (copiare da .env.example).
π Setup Inizialeβ
# Copia il template
cp .env.example .env
# Genera segreti sicuri per produzione
openssl rand -hex 32 # Per JWT secrets, API keys, etc.
π Variabili per Categoriaβ
Core Applicationβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
COMPOSE_PROJECT_NAME | Nome progetto Docker Compose | emblema | emblema |
EMBLEMA_VERSION | Versione applicazione | 0.1.0 | 1.0.0 |
BASE_DOMAIN | Dominio base per tutti i servizi | - | emblema.aeronautica.difesa.it |
USE_SSL | Abilita HTTPS (0/1) | 1 | 1 |
EDITOR | Editor preferito per CLI | cursor | vscode |
Networking & DNSβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
DNS_SERVER | Server DNS interno | - | 192.168.1.69 |
TRAEFIK_HOSTNAME | Hostname Traefik dashboard | - | traefik.emblema.ai |
SSL/TLS Certificatesβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
CERT_RESOLVER | ModalitΓ certificati: vuoto (custom) o letsencrypt | | letsencrypt |
Per certificati custom, posizionare i file in config/traefik/certs/.
Database - PostgreSQLβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
POSTGRES_USER | Username PostgreSQL | emblema | emblema |
POSTGRES_PASSWORD | Password PostgreSQL | - | Generare con openssl rand -hex 32 |
Database - Redisβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
REDIS_MASTER_HOSTNAME | Hostname Redis master | - | redis.emblema.ai |
REDIS_PORT | Porta Redis | 6379 | 6379 |
REDIS_MASTER_PASSWORD | Password Redis | - | Generare con openssl rand -hex 32 |
REDIS_CACHE_URL | URL cache Redis | - | redis://redis-master:6379/2 |
Database - MongoDB (per Novu)β
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
MONGO_ROOT_USERNAME | Username MongoDB | emblema | emblema |
MONGO_ROOT_PASSWORD | Password MongoDB | - | Generare con openssl rand -hex 32 |
MONGO_URL | Connection string MongoDB | - | Auto-costruito dalle credenziali |
Vector Database - Milvusβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
MILVUS_HOSTNAME | Hostname Milvus | - | milvus.emblema.ai |
MILVUS_PORT | Porta Milvus | 19530 | 19530 |
MILVUS_DB_NAME | Nome database | emblema | emblema |
MILVUS_USER | Username Milvus | root | root |
MILVUS_PASSWORD | Password Milvus | Milvus | Cambiare in produzione |
MILVUS_ATTU_HOSTNAME | Hostname UI Attu | - | attu.emblema.ai |
Object Storage - MinIOβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
MINIO_HOSTNAME | Hostname MinIO API | - | minio.emblema.ai |
MINIO_ADMIN_HOSTNAME | Hostname MinIO Console | - | minio-admin.emblema.ai |
MINIO_ROOT_USER | Username admin | emblema | emblema |
MINIO_ROOT_PASSWORD | Password admin | - | Generare con openssl rand -hex 32 |
MINIO_BUCKET | Nome bucket principale | emblema | emblema |
MINIO_REGION | Regione S3-compatible | eu-rome-1 | eu-rome-1 |
MINIO_ACCESS_KEY_ID | Access key applicazione | - | emblema_bucket_user |
MINIO_SECRET_ACCESS_KEY | Secret key applicazione | - | Generare con openssl rand -hex 32 |
Authentication - Keycloakβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
KEYCLOAK_HOSTNAME | Hostname Keycloak | - | keycloak.emblema.ai |
KEYCLOAK_ADMIN | Username admin | emblema | admin |
KEYCLOAK_ADMIN_PASSWORD | Password admin | - | Generare con openssl rand -hex 32 |
KEYCLOAK_REALM_URL | URL realm Emblema | - | https://keycloak.emblema.ai/realms/emblema |
API Gateway - Hasuraβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
HASURA_HOSTNAME | Hostname Hasura | - | hasura.emblema.ai |
HASURA_ADMIN_SECRET | Admin secret | - | Generare con openssl rand -hex 32 |
Monitoring - Grafana & Lokiβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
GRAFANA_HOSTNAME | Hostname Grafana | - | grafana.emblema.ai |
LOKI_HOSTNAME | Hostname Loki | - | loki.emblema.ai |
GRAFANA_ADMIN | Username admin | emblema | admin |
GRAFANA_ADMIN_PASSWORD | Password admin | - | Generare con openssl rand -hex 32 |
AI/LLM Gateway - LiteLLMβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
LITELLM_HOSTNAME | Hostname LiteLLM | - | litellm.emblema.ai |
LITELLM_MASTER_KEY | Master API key | - | Generare con openssl rand -hex 32 |
LITELLM_SALT_KEY | Salt per encryption | - | Generare con openssl rand -hex 32 |
DEFAULT_CHAT_MODEL | Modello chat default | llama3.3-70b-instruct | gpt-4 |
DEFAULT_EMBEDDING_MODEL | Modello embedding default | bge-m3 | text-embedding-3-small |
Background Tasks - Celeryβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
CELERY_BROKER_URL | URL broker Redis | - | redis://redis-master:6379/6 |
CELERY_RESULT_URL | URL risultati | - | redis://redis-master:6379/6 |
CELERY_MAX_CONCURRENCY | Worker concurrency | 1 | 4 |
CELERY_FLOWER_HOSTNAME | Hostname Flower UI | - | celery-flower.emblema.ai |
BACKGROUND_TASK_HOSTNAME | Hostname API task | - | task.emblema.ai |
Application Servicesβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
EMBLEMA_WEB_HOSTNAME | Hostname app principale | - | www.emblema.ai |
EMBLEMA_UI_HOSTNAME | Hostname libreria UI | - | ui.emblema.ai |
DOCS_HOSTNAME | Hostname documentazione | - | doc.emblema.ai |
DOCUMENT_RENDER_HOSTNAME | Hostname render service | - | document-render.emblema.ai |
DOCUMENT_RENDER_URL | URL interno render service | - | http://document-render:8094 |
Authentication - Web Appβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
EMBLEMA_WEB_AUTH_SECRET | NextAuth secret | - | Generare con openssl rand -base64 32 |
EMBLEMA_WEB_AUTH_KEYCLOAK_ID | Client ID Keycloak | web_client | web_client |
EMBLEMA_WEB_AUTH_KEYCLOAK_SECRET | Client secret Keycloak | - | Da Keycloak console |
EMBLEMA_WEB_AUTH_URL | URL callback auth | - | https://www.emblema.ai/api/auth |
Notifications - Novuβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
NOVU_API_HOSTNAME | Hostname API Novu | - | novu-api.emblema.ai |
NOVU_DASHBOARD_HOSTNAME | Hostname dashboard | - | novu-dashboard.emblema.ai |
NOVU_JWT_SECRET | JWT secret | - | Generare con openssl rand -hex 32 |
NOVU_STORE_ENCRYPTION_KEY | Encryption key (32 char!) | - | Generare esattamente 32 caratteri |
NOVU_API_SECRET_KEY | API key (da dashboard) | - | Ottenere da Novu dopo setup |
NOVU_APPLICATION_IDENTIFIER | App ID (da dashboard) | - | Ottenere da Novu dopo setup |
External Servicesβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
HUGGINGFACE_TOKEN | Token HuggingFace | - | hf_... |
HF_HUB_OFFLINE | ModalitΓ offline HF (0/1) | 0 | 1 per ambienti air-gap |
OPENAI_API_KEY | API key OpenAI | - | sk-... |
OPENAI_BASE_URL | Base URL (se custom) | - | https://litellm.emblema.ai |
Monitoring & Telemetryβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
WEB_SENTRY_DSN | DSN Sentry frontend | - | Da progetto Sentry |
WEB_SENTRY_AUTH_TOKEN | Auth token Sentry | - | Da progetto Sentry |
TURBO_TELEMETRY_DISABLED | Disabilita telemetria Turbo | 1 | 1 |
Cron Jobsβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
CRON_SECRET | Secret per cron API | - | Generare con openssl rand -hex 32 |
File Uploadβ
| Variabile | Descrizione | Default | Esempio |
|---|---|---|---|
MAX_FILE_SIZE | Max upload size (bytes) | 1073741824 | 2147483648 (2GB) |
Configurazioni comuni:
- 10MB:
10485760 - 100MB:
104857600 - 500MB:
524288000 - 1GB:
1073741824(default) - 2GB:
2147483648 - 5GB:
5368709120
π Best Practices Sicurezzaβ
1. Generazione Segretiβ
# Per la maggior parte dei segreti
openssl rand -hex 32
# Per NextAuth secret
openssl rand -base64 32
# Per password complesse
openssl rand -base64 40 | tr -d "=+/" | cut -c1-32
2. Gestione .envβ
# Non committare mai .env
echo ".env" >> .gitignore
# Usa .env.example come template
cp .env.example .env
# Cambia TUTTI i valori di default prima della produzione
3. Rotazione Segretiβ
- Ruotare periodicamente tutti i segreti
- Usare un password manager per team
- Considerare l'uso di HashiCorp Vault per produzione
π³ Docker Compose Overrideβ
Per override locali senza modificare .env:
# docker-compose.override.yml
version: '3.8'
services:
www-emblema:
environment:
- DEBUG_MODE=1
- LOG_LEVEL=debug
π Configurazioni per Ambienteβ
Sviluppoβ
USE_SSL=0
CERT_RESOLVER=
HF_HUB_OFFLINE=0
Stagingβ
USE_SSL=1
CERT_RESOLVER=letsencrypt
HF_HUB_OFFLINE=0
Produzioneβ
USE_SSL=1
CERT_RESOLVER=letsencrypt
HF_HUB_OFFLINE=1 # Per ambienti air-gap
π¨ Troubleshootingβ
Errori Comuniβ
"Invalid JWT secret"
- Verificare che
EMBLEMA_WEB_AUTH_SECRETsia generato correttamente - Deve essere base64 encoded
"MinIO access denied"
- Verificare che
MINIO_ACCESS_KEY_IDeMINIO_SECRET_ACCESS_KEYcorrispondano - Controllare che il bucket esista
"Novu encryption key invalid"
NOVU_STORE_ENCRYPTION_KEYDEVE essere esattamente 32 caratteri- Non usare caratteri speciali
Verifica Configurazioneβ
# Controlla sintassi .env
docker compose config
# Verifica variabili caricate
docker compose exec www-emblema env | grep EMBLEMA
# Test connessioni
docker compose exec www-emblema ping postgres
docker compose exec www-emblema ping redis-master