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.
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).
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.
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.
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).
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.
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.
Email del primo proprietario, creato all’avvio di servesolo 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).
ARENILE_SECRET_KEY accetta più chiavi separate da virgola: la prima cifra i nuovi segreti, tutte
vengono provate per decifrare quelli esistenti. Per ruotare:
genera una nuova chiave e mettila in testa: ARENILE_SECRET_KEY=nuova,vecchia;
riavvia e salva di nuovo i segreti dal pannello (ad esempio le chiavi Stripe);
quando tutti i segreti sono stati riscritti, togli la vecchia chiave.