Salta ai contenuti
ArenileArenile
Coste360.itCoste360.it

Installazione con Docker

Docker è il modo consigliato per far girare Arenile in produzione. L’immagine ufficiale ghcr.io/coste360/arenile è pubblica e gratuita, multi-architettura (amd64 e arm64) e basata su distroless: contiene solo il binario, senza shell né pacchetti superflui.

Requisito Indicazione
Server Linux amd64 o arm64 con Docker e Docker Compose
Risorse 1 vCPU e 512 MB di RAM bastano per un lido; 1 GB di disco più lo spazio per i backup
Dominio Un sottodominio, ad esempio prenota.mio-lido.it, che punti all’IP del server (record A/AAAA)
Email (facoltativa) Credenziali SMTP per conferme e link di gestione ai clienti
Pagamenti online (facoltativi) Un account Stripe intestato allo stabilimento
  1. Prepara il server. Su Ubuntu o Debian installa Docker con lo script ufficiale e apri solo le porte necessarie:

    Finestra del terminale
    curl -fsSL https://get.docker.com | sh
    sudo ufw allow OpenSSH
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable
  2. Crea la cartella dell’installazione e scarica il compose ufficiale e il file di esempio delle variabili:

    Finestra del terminale
    sudo mkdir -p /opt/arenile && cd /opt/arenile
    curl -fsSLO https://raw.githubusercontent.com/coste360/arenile/main/deploy/docker-compose.yml
    curl -fsSL -o .env https://raw.githubusercontent.com/coste360/arenile/main/.env.example
    chmod 600 .env
    • Directory/opt/arenile/
      • docker-compose.yml il servizio arenile con il volume dei dati
      • .env la configurazione (non condividerla mai)
  3. Genera la chiave di cifratura e mettila in .env:

    Finestra del terminale
    openssl rand -base64 32

    Poi modifica .env almeno con queste righe:

    .env
    ARENILE_BASE_URL=https://prenota.mio-lido.it
    ARENILE_SECRET_KEY=la-chiave-generata-al-passo-precedente
    # Primo utente owner, creato al primo avvio solo se il database è vuoto
    ARENILE_BOOTSTRAP_OWNER_EMAIL=titolare@mio-lido.it
    ARENILE_BOOTSTRAP_OWNER_NAME=Mario Rossi
    ARENILE_BOOTSTRAP_OWNER_ORG=Lido Esempio
    ARENILE_ADMIN_PASSWORD=scegli-una-password-lunga
    # Email (facoltative ma consigliate)
    ARENILE_SMTP_URL=smtp://utente:password@smtp.mio-provider.it:587
    ARENILE_MAIL_FROM=Lido Esempio <prenotazioni@mio-lido.it>
  4. Avvia e controlla i log:

    Finestra del terminale
    docker compose up -d
    docker compose logs -f arenile

    Le migrazioni del database sono applicate in automatico all’avvio (ARENILE_AUTO_MIGRATE=true). Il database SQLite, i file caricati e i backup vivono nel volume arenile-data.

  5. Configura HTTPS. Metti Arenile dietro un reverse proxy (Caddy, Nginx, Traefik) oppure lascia che sia il binario a ottenere i certificati: tutte le opzioni sono in Reverse proxy e HTTPS.

  6. Accedi a https://prenota.mio-lido.it/admin/ con l’email e la password del passo 3. Dopo il primo accesso puoi togliere ARENILE_ADMIN_PASSWORD da .env. Prosegui con il primo avvio.

Se non vuoi usare le variabili ARENILE_BOOTSTRAP_OWNER_*, crea l’owner con il container avviato. L’immagine non ha una shell, ma exec lancia direttamente il binario:

Finestra del terminale
docker compose exec -e ARENILE_ADMIN_PASSWORD='scegli-una-password-lunga' arenile \
/arenile admin create --email titolare@mio-lido.it --name "Mario Rossi" --org "Lido Esempio"

La password deve avere almeno 10 caratteri.

Il repository include deploy/docker-compose.postgres.yml, con un servizio PostgreSQL già configurato e DATABASE_URL impostata in automatico. In .env aggiungi la password del database, generata con soli caratteri sicuri per un URL:

Finestra del terminale
echo "POSTGRES_PASSWORD=$(openssl rand -hex 24)" >> .env
docker compose -f docker-compose.postgres.yml --env-file .env up -d

Quando conviene PostgreSQL e come fare i backup: SQLite o PostgreSQL.

Il file deploy/docker-compose.yml è già irrobustito: file system in sola lettura (read_only: true, con /tmp in memoria), nessun privilegio aggiuntivo (no-new-privileges), tutte le capability Linux rimosse (cap_drop: ALL), utente non root e rotazione dei log Docker (5 file da 10 MB).

Sintomo Cosa controllare
Il container si riavvia in continuazione docker compose logs arenile: di solito manca ARENILE_SECRET_KEY o ARENILE_BASE_URL, o la chiave non è base64 di 32 byte
/readyz risponde con errore Database non raggiungibile o migrazioni non allineate: controlla DATABASE_URL e arenile migrate status
Il widget non compare nel sito Aggiungi il dominio del sito ai siti autorizzati all’incorporamento (Pagina pubblica)
Le email non arrivano Verifica ARENILE_SMTP_URL, ARENILE_MAIL_FROM, i record SPF/DKIM e il registro invii (Email)
Gli IP nei log sono tutti uguali Imposta ARENILE_TRUSTED_PROXIES con la rete del reverse proxy