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
Valgono per entrambe le strade — Portainer o terminale. Preparale una volta e il resto è questione di minuti.
Linux x86_64 con Docker Engine 24+ e Compose v2. Come dimensione di partenza: 4 vCPU, 8 GB RAM, 60 GB SSD (fino a ~50 utenti). Su Mac Apple Silicon o server ARM le immagini girano in emulazione runtime, senza configurazione extra.
.envParti dal template .env.community.example e genera APP_KEY e APP_KEK_SECRET con openssl. Cifrano i dati sensibili nel database: conservale, se le perdi dopo il primo avvio quei dati diventano irrecuperabili.
Meridian ARC non ha password locali: l'accesso è federato. Per il primo avvio Google è il più rapido — registra un client OAuth (Web application) e imposta come redirect il tuo APP_URL + /auth/google/callback, poi copia Client ID e Secret nel .env. Microsoft Entra ID e LDAP/AD si abilitano dopo, dal pannello admin.
| Variabile | Valore |
|---|---|
APP_URL | http://<IP-host>:8087 per una prova · https://itsm.tuodominio.it dietro reverse proxy TLS |
APP_KEY · APP_KEK_SECRET | gli output dei due openssl qui sopra |
DB_PASSWORD · REDIS_PASSWORD | due password robuste a tua scelta |
GOOGLE_CLIENT_ID · GOOGLE_CLIENT_SECRET | dal client OAuth registrato su Google Cloud |
ITSM_FIRST_SYSTEM_ADMIN_EMAIL | la tua email OAuth: al primo login diventi amministratore di sistema |
APP_FORCE_HTTPS · SESSION_SECURE_COOKIE | false su http://, true dietro HTTPS |
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
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
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
docker composeDue comandi e sei in piedi: pull e up -d. Nessuna UI da installare, si automatizza bene. Vai al metodo B ↓
ghcr.io/dadu14-code/meridian-arc/itsm-fpm-ce e …/itsm-web-ce. Nessun docker login, nessun token.
Metodo A · 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.
Apri https://<IP-host>:9443, crea l'utente admin, scegli Get started → local.
Sidebar Stacks → + Add stack. Nome: itsm. Come Build method scegli Web editor.
Copia tutto il contenuto di docker-compose.community.yml (è nel pacchetto di deploy, link in fondo) e incollalo nel Web editor.
Nell'editor, sostituisci :latest con il tag voluto (es. :3.61.4) sulle due righe image: — itsm-fpm-ce e itsm-web-ce. Su un host di produzione conviene sempre pinnare una versione esplicita.
Scorri a Environment variables → Advanced mode → Load variables from .env file e incolla il tuo .env compilato ai prerequisiti.
Deploy the stack. Portainer scarica le immagini pubbliche e avvia i container; dopo 1–2 minuti li vedi running / healthy. Le migrazioni del database partono da sole.
docker-compose.community.yml, fissi il tag delle due immagini, carichi il .env, premi Deploy. Mockup illustrativo.Aggiornare da Portainer
Stack itsm → Editor → 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-fpm → Logs per l'applicazione, Console → /bin/sh per i comandi Artisan (es. php artisan itsm:make-admin tua.email@dominio.it).
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
Se hai già Docker sull'host e ti trovi bene con la riga di comando, è la via più rapida: due file e due comandi.
docker-compose.community.yml e .env.community.example (dal pacchetto di deploy, link in fondo). Mettili in una cartella di lavoro.
.envcp .env.community.example .env, poi compila i campi visti nei prerequisiti (chiavi, APP_URL, password, email admin, OAuth). Per fissare la versione, imposta il tag nelle due righe image: del compose.
docker compose -f docker-compose.community.yml pull e poi up -d. L'app risponde su http://<host>:8087; le migrazioni del database si applicano da sole al primo avvio.
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.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
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_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
Apri http://<host>:8087/login e premi Accedi con Google. Consenso OAuth, torni loggato.
Se l'email combacia con ITSM_FIRST_SYSTEM_ADMIN_EMAIL sei promosso automaticamente ad amministratore di sistema (una tantum). Se non scatta: php artisan itsm:make-admin tua.email@dominio.it dalla console del container.
Vai su /admin/onboarding: una procedura guidata in 5 passi crea il primo cliente. Gli consegni l'indirizzo del suo portale /portale/{nome}, dove i suoi utenti aprono e seguono i ticket vedendo solo i propri dati.
Dopo il primo accesso svuota ITSM_FIRST_SYSTEM_ADMIN_EMAIL nelle variabili e riapplica lo stack (up -d, non un semplice restart).
APP_URL a https://… e APP_FORCE_HTTPS / SESSION_SECURE_COOKIE a true, aggiornando la redirect URI OAuth.
Domande frequenti
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.
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.
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.
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.
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.
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
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.