Community Edition · gratuita · self-hosted

Installala a casa tua,
in pochi minuti.

La Community Edition gira sui tuoi server: immagini Docker pubbliche, niente login, niente carta. Questa è la guida completa — con Portainer se preferisci un'interfaccia web, o da terminale con docker compose.

Ti serve invece la Enterprise Edition (Major Incident, costing & marginalità, API/webhook/BI, firma digitale, magazzino)? Non si scarica da soli — si parte da una richiesta.

Prima di iniziare

Tre cose
che ti servono

Valgono per entrambe le strade — Portainer o terminale. Preparale una volta e il resto è questione di minuti.

# genera le due chiavi obbligatorie — conservale in un posto sicuro echo "base64:$(openssl rand -base64 32)" # → APP_KEY (tieni il prefisso "base64:") openssl rand -base64 32 # → APP_KEK_SECRET (base64 di 32 byte, NON hex)
VariabileValore
APP_URLhttp://<IP-host>:8087 per una prova · https://itsm.tuodominio.it dietro reverse proxy TLS
APP_KEY · APP_KEK_SECRETgli output dei due openssl qui sopra
DB_PASSWORD · REDIS_PASSWORDdue password robuste a tua scelta
GOOGLE_CLIENT_ID · GOOGLE_CLIENT_SECRETdal client OAuth registrato su Google Cloud
ITSM_FIRST_SYSTEM_ADMIN_EMAILla tua email OAuth: al primo login diventi amministratore di sistema
APP_FORCE_HTTPS · SESSION_SECURE_COOKIEfalse su http://, true dietro HTTPS
L'inciampo numero uno: APP_FORCE_HTTPS o SESSION_SECURE_COOKIE a true su una connessione http://. Il browser scarta il cookie di sessione dopo il redirect OAuth e resti in loop sul login, senza errori. Su http tienili entrambi a false.

Scegli come installarla

Stesso risultato,
due strade

Le immagini e il file compose sono identici. Cambia solo come lo avvii: da un'interfaccia web o da riga di comando.

Metodo A · Portainer

Con l'interfaccia web

Se preferisci non vivere nel terminale. Incolli il compose, carichi il .env, premi Deploy. Cambi versione, leggi i log e apri una console Artisan con un click. Vai al metodo A ↓

Metodo B · Terminale

Con docker compose

Due comandi e sei in piedi: pull e up -d. Nessuna UI da installare, si automatizza bene. Vai al metodo B ↓

In tutti i casi le immagini della Community Edition sono pubbliche su GitHub Container Registry: ghcr.io/dadu14-code/meridian-arc/itsm-fpm-ce e …/itsm-web-ce. Nessun docker login, nessun token.

Metodo A · Portainer

Installazione
con Portainer

Portainer è un pannello web per Docker. Se non ce l'hai, si tira su con un comando; poi tutto il resto si fa dall'interfaccia.

# installa Portainer CE (una volta sola) docker volume create portainer_data docker run -d --name portainer --restart=always \ -p 9443:9443 -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest

Apri https://<IP-host>:9443, crea l'utente admin, scegli Get started → local.

10.0.0.4:9443 / stacks / new portainer Dashboard App Templates Stacks Containers Images Volumes Networks Create stack Name itsm Build method Web editor Upload Repository services: itsm-fpm: image: ghcr.io/dadu14-code/meridian-arc/itsm-fpm-ce:3.61.4 env_file: [ ./.env ] itsm-web: image: ghcr.io/dadu14-code/meridian-arc/itsm-web-ce:3.61.4 ports: [ "8087:8080" ] itsm-db: · redis: · clamav: · itsm-worker: · itsm-scheduler: Environment variables Load variables from .env file Deploy the stack
Portainer CE · Stacks → Add stack → Web editor: incolli docker-compose.community.yml, fissi il tag delle due immagini, carichi il .env, premi Deploy. Mockup illustrativo.
itsm-fpm-ce e itsm-web-ce sempre allo stesso tag. L'immagine Nginx contiene la sua copia degli asset compilati: se aggiorni una sola delle due con una versione che tocca il frontend, ottieni una schermata bianca finché non riallinei i tag.

Aggiornare da Portainer

Stack itsmEditor → cambia le due righe image: al nuovo tag → Update the stack con Re-pull image e Prune services. I volumi dati (itsm_db_data, itsm_storage, …) sopravvivono; le migrazioni della nuova versione partono da sole. Per il rollback rimetti il tag precedente e ripeti.

Log e comandi: container itsm-fpmLogs per l'applicazione, Console → /bin/sh per i comandi Artisan (es. php artisan itsm:make-admin tua.email@dominio.it).

Variante “da repository”. In Portainer puoi anche far leggere il compose direttamente dal repo (tab Repository, ref refs/tags/3.61.4, path deploy/onprem/docker-compose.community.yml). Lì serve un Personal Access Token GitHub, ma solo per leggere il file: le immagini restano quelle pubbliche. Per fissare la versione delle immagini in quella modalità devi comunque modificare le due righe image:, quindi il Web editor resta la via più diretta.

Metodo B · Terminale

Installazione
da terminale

Se hai già Docker sull'host e ti trovi bene con la riga di comando, è la via più rapida: due file e due comandi.

bash — itsm-ce
~/itsm-ce $ docker compose -f docker-compose.community.yml pull itsm-db Pulled redis Pulled clamav Pulled itsm-fpm Pulled # ghcr.io/dadu14-code/meridian-arc/itsm-fpm-ce:3.61.4 itsm-web Pulled # ghcr.io/dadu14-code/meridian-arc/itsm-web-ce:3.61.4 ~/itsm-ce $ docker compose -f docker-compose.community.yml up -d Network itsm-internal Created Container itsm-db Healthy Container itsm-redis Healthy Container itsm-clamav Started Container itsm-fpm Healthy Container itsm-worker Started Container itsm-scheduler Started Container itsm-web Healthy ~/itsm-ce $ curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8087/login 200
Le immagini CE sono pubbliche: nessun docker login. Al primo up -d ClamAV scarica ~300 MB di firme — è normale che parta Started e diventi healthy dopo qualche minuto. Mockup illustrativo dell'output.
# operazioni ricorrenti docker compose -f docker-compose.community.yml ps # stato dei servizi docker compose -f docker-compose.community.yml logs -f itsm-fpm # log applicativi docker compose -f docker-compose.community.yml pull && \ docker compose -f docker-compose.community.yml up -d # aggiornare
Su host ARM (Apple Silicon, AWS Graviton) vedrai un avviso platform mismatch: le immagini CE sono linux/amd64 e girano in emulazione. È atteso e non bloccante; se il pull si rifiuta, esporta DOCKER_DEFAULT_PLATFORM=linux/amd64.

Cosa gira dopo il deploy

Sette container,
una rete interna

Un solo servizio è esposto sull'host: itsm-web (Nginx) sulla porta 8087. Tutto il resto parla su una rete Docker privata; database e Redis non sono pubblicati.

itsm-web · Nginx · :8087 itsm-fpm · app Laravel itsm-worker · code & job itsm-scheduler · cron itsm-db · PostgreSQL 16 redis · cache & queue clamav · antivirus allegati minio · object storage (opzionale)
I dati vivono in volumi Docker nominati (itsm_db_data, itsm_storage, itsm_redis_data, itsm_clamav_data, itsm_bootstrap_cache): sopravvivono a ogni redeploy e sono ciò che va incluso nei backup periodici.

Ci sei quasi

Primo accesso
e onboarding

Esporla su Internet? Lo stack parla solo HTTP sulla porta 8087. Per l'accesso da fuori mettile davanti un reverse proxy con TLS (Caddy, Traefik, Nginx host), poi porta APP_URL a https://… e APP_FORCE_HTTPS / SESSION_SECURE_COOKIE a true, aggiornando la redirect URI OAuth.

Domande frequenti

FAQ

Devo per forza usare Portainer? +

No. Portainer è comodo se preferisci un'interfaccia web e vuoi cambiare versione con un click. Da terminale bastano docker compose pull e up -d. Entrambe le vie sono in questa pagina e portano allo stesso identico stack.

Serve un account GitHub o un token per scaricare le immagini? +

No. Le immagini della Community Edition sono pubbliche su GitHub Container Registry: nessun docker login, nessun Personal Access Token. Il token serve solo se in Portainer scegli di leggere il file compose dal repository invece di incollarlo nel Web editor.

Le due immagini vanno tenute alla stessa versione? +

Sì. itsm-fpm-ce e itsm-web-ce vanno sempre allo stesso tag. L'immagine web contiene la sua copia degli asset compilati: se aggiorni una sola delle due con una versione che tocca il frontend, ottieni una schermata bianca finché non riallinei i tag.

Come aggiorno senza perdere i dati? +

I dati vivono in volumi Docker persistenti che sopravvivono al redeploy. Da Portainer cambi il tag nell'editor e fai Update the stack con Re-pull image. Da terminale docker compose pull e up -d. Le migrazioni del database si applicano da sole. Fai comunque un backup prima.

Resto bloccato sulla pagina di login dopo l'accesso con Google. +

Su una connessione http:// imposta APP_FORCE_HTTPS=false e SESSION_SECURE_COOKIE=false. Con i valori true su http il browser scarta il cookie di sessione dopo il redirect OAuth e torni al login senza errori espliciti.

Posso usarla in produzione? +

Sì. La Community Edition copre l'intero ciclo di vita di un ticket ed è pensata per l'uso reale. Qui trovi cosa include. Per la messa in sicurezza (TLS, backup, antivirus attivo) vedi anche la pagina Problemi noti.

Gratis, davvero

Prendi i file
e parti.

Il pacchetto di deploy contiene docker-compose.community.yml, il template .env.community.example commentato e la guida estesa.

Niente login, niente carta di credito.