Salta ai contenuti

Docker Compose

Questa guida approfondisce la configurazione Docker Compose di XIQUIL per utenti che vogliono personalizzare l’installazione.

Il file .env.example di XIQUIL e volutamente ridotto a 3 variabili. Tutto il resto ha default sensati e viene auto-configurato al primo avvio (password database, JWT secret, certificato TLS, chiavi di cifratura).

Terminal window
# Domini o IP autorizzati ad accedere all'app
ALLOWED_HOSTS=localhost
# Porta HTTPS esposta sull'host
APP_PORT=443
# Timezone per date e orari
APP_TIMEZONE=Europe/Rome

Per la maggior parte delle installazioni, modifica solo ALLOWED_HOSTS se esponi l’app in rete, poi avvia:

Terminal window
docker compose up -d
services:
app:
image: ghcr.io/justvitlab/xiquil:latest
container_name: xiquil_app
env_file: .env
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
ports:
- "${APP_PORT:-443}:8443"
volumes:
- xiquil-data:/app/data
- xiquil-backups:/app/backups
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:18-alpine
container_name: xiquil_db
environment:
POSTGRES_DB: ${POSTGRES_DB:-xiquil}
POSTGRES_USER: ${POSTGRES_USER:-xiquil_admin}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-xiquil_local_db}
volumes:
- xiquil-db:/var/lib/postgresql
ports:
- "127.0.0.1:5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER:-xiquil_admin}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 60s
restart: unless-stopped
volumes:
xiquil-data:
xiquil-backups:
xiquil-db:
VariabileDefaultDescrizione
ALLOWED_HOSTSlocalhostDomini/IP consentiti (separati da virgola)
APP_PORT443Porta HTTPS esterna
APP_TIMEZONEEurope/RomeTimezone IANA per date e orari
VariabileDefaultDescrizione
POSTGRES_DBxiquilNome del database
POSTGRES_USERxiquil_adminUtente database
POSTGRES_PASSWORDxiquil_local_dbPassword database (DB su 127.0.0.1, safe per self-hosted)
DB_PORT5432Porta locale del DB per DBeaver/psql
PUID / PGID1000UID/GID nel container (TrueNAS: 568, Synology: 1026)
DATA_MOUNTapp_dataVolume/path dati app
BACKUPS_MOUNT./backupsVolume/path backup
DB_MOUNTpgdataVolume/path database
ENABLE_HSTSFalseHeader HSTS (solo con certificati CA-trusted)
CERT_HOSTNAMEautoCN certificato self-signed (auto: primo host da ALLOWED_HOSTS)
BASE_URLvuotoURL canonico per email/export (vuoto = auto-dedotto)
UPDATE_CHECK_ENABLEDTrueControllo aggiornamenti GitHub (disabilita se air-gapped)
ADMIN_RECOVERYvuotoGenera URL reset password admin nei log (emergenza)
SKIP_MIGRATIONSfalseSalta migrazioni DB all’avvio (solo manutenzione)

Auto-configurate dal codice (NON servono nel .env)

Sezione intitolata “Auto-configurate dal codice (NON servono nel .env)”
NomeGestione automatica
DATABASE_URLCostruita da POSTGRES_* al boot
JWT_SECRET_KEYGenerata al primo boot, salvata in /app/data/conf/jwt_secret
TOTP_ENCRYPTION_KEYGenerata al primo boot, salvata in /app/data/conf/totp_key
ALLOWED_ORIGINSDerivata da ALLOWED_HOSTS aggiungendo https://
CERT_HOSTNAMEDerivato dal primo host di ALLOWED_HOSTS

XIQUIL usa tre volumi:

VolumeContenutoDentro il container
xiquil-dataDati app (upload, certificati, log, plugin)/app/data/
xiquil-backupsBackup database/app/backups/
xiquil-dbDati PostgreSQL/var/lib/postgresql/
Terminal window
# Scarica l'ultima versione
docker compose pull
# Riavvia con la nuova versione
docker compose up -d

I dati sono nei volumi e non vengono cancellati durante l’aggiornamento. Le migrazioni del database vengono eseguite automaticamente all’avvio.

Terminal window
# Stato dei container
docker compose ps
# Log in tempo reale
docker compose logs -f app
# Accesso diretto al database
docker compose exec db psql -U xiquil -d xiquil
# Gestione utenti da CLI
docker compose exec app sh -c "cd /app/backend && python -m app.cli list-users"
# Reset password admin
docker compose exec app sh -c "cd /app/backend && python -m app.cli reset-password --email [email protected]"
# Recovery admin (genera URL di reset nei log)
ADMIN_RECOVERY=true docker compose up -d
docker compose logs app | grep RECOVERY

Posso usare un database PostgreSQL esterno? Si. Rimuovi il servizio db dal docker-compose.yml e imposta DATABASE_URL con l’indirizzo del tuo database esterno.

Come cambio la porta? Modifica APP_PORT nel file .env o cambia direttamente nel docker-compose.yml la riga ports.

I dati sopravvivono a un docker compose down? Si, i volumi Docker vengono preservati. Solo docker compose down -v cancella i volumi (e quindi tutti i dati).