Salta ai contenuti
ArenileArenile
Coste360.itCoste360.it

Configurazione

Tutta la configurazione del server avviene con variabili d’ambiente: funziona allo stesso modo con Docker, systemd, Kubernetes o qualsiasi piattaforma. Le impostazioni dello stabilimento (prezzi, mappa, pagina pubblica, chiavi Stripe, notifiche) non stanno qui: si gestiscono dal pannello e vivono nel database.

All’avvio Arenile valida ogni variabile e, se qualcosa non va, si ferma con un messaggio che indica la variabile e il formato atteso: meglio non partire che partire configurato male.

Variabile Predefinito Descrizione
ARENILE_BASE_URL — URL pubblico, ad esempio https://prenota.mio-lido.it. Obbligatoria in produzione. Usata nei link delle email, nel codice del widget, nei ritorni dal pagamento e nell’URL del webhook. Deve essere un URL http(s) assoluto.
ARENILE_SECRET_KEY — Chiave di cifratura dei segreti (chiavi Stripe, segreti dei webhook, TOTP): 32 byte in base64, generata con openssl rand -base64 32. Obbligatoria. Accetta più chiavi separate da virgola per la rotazione.
ARENILE_DATA_DIR /data Cartella dei dati: database SQLite (arenile.db), file caricati, certificati automatici.
DATABASE_URL vuoto Vuota = SQLite. Con postgres:// o postgresql:// usa PostgreSQL. I caratteri speciali della password vanno codificati (@ diventa %40).
ARENILE_ADDR :8080 Indirizzo e porta di ascolto del server HTTP.
Variabile Predefinito Descrizione
ARENILE_AUTO_MIGRATE true Applica le migrazioni del database all’avvio di serve. Con false usa arenile migrate up prima di avviare.
ARENILE_DEV false Modalità sviluppo (come arenile serve --dev): ARENILE_BASE_URL facoltativa, chiave segreta generata e salvata in ARENILE_DATA_DIR/dev-secret.key, cookie non Secure su http. Mai in produzione.
Variabile Predefinito Descrizione
ARENILE_SMTP_URL vuoto Server SMTP, ad esempio smtp://utente:password@smtp.example.com:587 (STARTTLS) oppure smtps://...:465 (TLS implicito). Fuori da localhost lo STARTTLS è obbligatorio (le email contengono link magici e dati personali): per un relay su rete fidata che non offre TLS aggiungi ?tls=none.
ARENILE_MAIL_FROM noreply@<host di ARENILE_BASE_URL> Mittente, ad esempio Lido Esempio <prenotazioni@mio-lido.it>. Deve essere un indirizzo valido.
ARENILE_MAIL_DIR vuoto Senza SMTP: cartella in cui scrivere ogni email come file .eml (sviluppo e test end-to-end). Vuota e senza SMTP: le email sono solo annotate nel log, con il destinatario mascherato.
ARENILE_STRIPE_API_URL vuoto Solo per i test: indirizzo di un doppio dell’API Stripe (stripe-mock o il finto Stripe dei test end-to-end). Vuoto = https://api.stripe.com. Il server la accetta solo su un host di loopback oppure con ARENILE_DEV=true (e solo https fuori da loopback) e avvisa nel log all’avvio: le chiavi segrete degli stabilimenti verrebbero inviate a quell’indirizzo.
Variabile Predefinito Descrizione
ARENILE_HOLD_TTL 10m Durata del blocco temporaneo della postazione mentre il cliente completa la prenotazione online (formato durata Go: 10m, 15m, 1h). Durante il pagamento il blocco viene esteso fino a un massimo di 30 minuti.
ARENILE_PUBLIC_READS_PER_MINUTE 60 Letture al minuto per indirizzo IP sull’API pubblica (spec 17.2). Alzalo se molti clienti prenotano dalla stessa rete (Wi-Fi dell’hotel o del lido) e Arenile non è dietro un proxy configurato in ARENILE_TRUSTED_PROXIES.
ARENILE_PUBLIC_CREATIONS_PER_MINUTE 10 Prenotazioni avviate (e richieste di un nuovo link) al minuto per indirizzo IP. I passi successivi della stessa prenotazione contano come letture.
ARENILE_REFUND_MAX_ATTEMPTS 10 Tentativi di invio al gestore di pagamento di un rimborso automatico (cancellazione dal link del cliente o dal pannello), con attesa crescente da 1 minuto a 12 ore. Esauriti, il rimborso passa a «Non riuscito», il gestore riceve una notifica e può riprovare dalla prenotazione. Da 1 a 100.
ARENILE_WEBHOOK_ATTEMPT_RETENTION_DAYS 30 Giorni di conservazione dello storico completo dei tentativi di consegna dei webhook (ogni tentativo, non solo l’ultimo).
Variabile Predefinito Descrizione
ARENILE_TLS_AUTOCERT_DOMAINS vuoto Domini separati da virgola per i certificati TLS automatici (Let’s Encrypt). Arenile ascolta direttamente su 80 e 443. Lascia vuota se usi un reverse proxy.
ARENILE_TRUSTED_PROXIES vuoto CIDR dei reverse proxy fidati, separati da virgola (es. 127.0.0.1/32,172.18.0.0/16), da cui leggere l’IP reale del client. Necessaria dietro un proxy, altrimenti i limiti per IP colpiscono tutti insieme.
ARENILE_REQUIRE_TOTP_FOR_OWNERS false Rende obbligatoria la verifica in due passaggi per gli utenti proprietari.
Variabile Predefinito Descrizione
ARENILE_LOG_LEVEL info debug, info, warn o error. I log sono JSON e non contengono mai email, telefoni, token o segreti in chiaro.
ARENILE_TELEMETRY false Nessuna telemetria di default.
ARENILE_UPDATE_CHECK true Avviso di nuova versione nel pannello: una volta al giorno legge il file pubblico dell’ultima versione dal server di Coste360. La richiesta contiene solo versione, edizione e sistema operativo (e, come ogni richiesta, l’indirizzo IP); non è telemetria. false = nessuna chiamata di rete. Vedi Aggiornamenti.
ARENILE_UPDATE_URL https://updates.coste360.it/arenile/latest.json File letto dal controllo della nuova versione, per esempio un mirror interno.
Variabile Predefinito Descrizione
ARENILE_BOOTSTRAP_OWNER_EMAIL vuoto Email del primo proprietario, creato all’avvio di serve solo se il database non ha utenti.
ARENILE_BOOTSTRAP_OWNER_NAME vuoto Nome del primo proprietario.
ARENILE_BOOTSTRAP_OWNER_ORG vuoto Nome dell’organizzazione.
ARENILE_ADMIN_PASSWORD vuoto Password del primo proprietario (almeno 10 caratteri), oppure per arenile admin create e arenile seed demo senza richiesta interattiva.

Le tre variabili ARENILE_BOOTSTRAP_OWNER_* vanno impostate insieme ad ARENILE_ADMIN_PASSWORD; ai riavvii successivi vengono ignorate e dopo il primo accesso puoi togliere la password.

Queste variabili sono lette dai file di deploy/, non dal binario:

Variabile Predefinito Descrizione
ARENILE_VERSION latest Tag dell’immagine ghcr.io/coste360/arenile (fissa una versione precisa in produzione).
ARENILE_PUBLISH_PORT 8080 Porta pubblicata sull’host (es. 127.0.0.1:8080 per esporla solo al reverse proxy).
POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB arenile, —, arenile Credenziali del servizio PostgreSQL di docker-compose.postgres.yml. La password finisce in DATABASE_URL senza codifica: usa solo caratteri sicuri (openssl rand -hex 24).
.env
ARENILE_BASE_URL=https://prenota.mio-lido.it
ARENILE_SECRET_KEY=Zm9vYmFyLi4uMzItYnl0ZS1rZXktaW4tYmFzZTY0Lg==
ARENILE_SMTP_URL=smtp://prenotazioni%40mio-lido.it:password@smtp.mio-provider.it:587
ARENILE_MAIL_FROM=Lido Esempio <prenotazioni@mio-lido.it>
ARENILE_TRUSTED_PROXIES=127.0.0.1/32

ARENILE_SECRET_KEY accetta più chiavi separate da virgola: la prima cifra i nuovi segreti, tutte vengono provate per decifrare quelli esistenti. Per ruotare:

  1. genera una nuova chiave e mettila in testa: ARENILE_SECRET_KEY=nuova,vecchia;
  2. riavvia e salva di nuovo i segreti dal pannello (ad esempio le chiavi Stripe);
  3. quando tutti i segreti sono stati riscritti, togli la vecchia chiave.