<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>RaffaeleChiatto.com</title>
	<atom:link href="https://www.raffaelechiatto.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://www.raffaelechiatto.com</link>
	<description>Il Blog di Informatica a 360°</description>
	<lastBuildDate>Mon, 22 Jun 2026 06:27:27 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.raffaelechiatto.com/wp-content/uploads/2025/05/favicon-150x150.png</url>
	<title>RaffaeleChiatto.com</title>
	<link>https://www.raffaelechiatto.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<itunes:explicit>no</itunes:explicit><itunes:subtitle>Il Blog di Informatica a 360°</itunes:subtitle><itunes:category text="Technology"><itunes:category text="Gadgets"/></itunes:category><item>
		<title>Meridian ARC ITSM: tutte le funzionalità del Service Desk e cosa sblocca la Enterprise Edition</title>
		<link>https://www.raffaelechiatto.com/meridian-arc-itsm-tutte-le-funzionalita-del-service-desk-e-cosa-sblocca-la-enterprise-edition/</link>
					<comments>https://www.raffaelechiatto.com/meridian-arc-itsm-tutte-le-funzionalita-del-service-desk-e-cosa-sblocca-la-enterprise-edition/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Mon, 22 Jun 2026 06:27:27 +0000</pubDate>
				<category><![CDATA[Merdian ARC]]></category>
		<category><![CDATA[CMDB]]></category>
		<category><![CDATA[Incident]]></category>
		<category><![CDATA[ITSM]]></category>
		<category><![CDATA[KB]]></category>
		<category><![CDATA[KEDB]]></category>
		<category><![CDATA[Meridian ARC]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[Service Request]]></category>
		<category><![CDATA[SLA]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124077</guid>

					<description><![CDATA[&#160; Meridian ARC ITSM: il Service Desk completo e cosa aggiunge la Enterprise Edition Quando si parla di software ITSM (IT Service Management) la domanda ricorrente è sempre la stessa: cosa mi danno davvero gratis, e per cosa devo pagare?. Con la maggior parte dei prodotti la risposta è frustrante — la versione gratuita è [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091056 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/INTERMEDIATE-BAR.png" alt="" width="679" height="89" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/INTERMEDIATE-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/INTERMEDIATE-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<h3><strong>Meridian ARC ITSM: il Service Desk completo e cosa aggiunge la Enterprise Edition</strong></h3>
<p>Quando si parla di software ITSM (IT Service Management) la domanda ricorrente è sempre la stessa: <strong>cosa mi danno davvero gratis, e per cosa devo pagare?</strong>. Con la maggior parte dei prodotti la risposta è frustrante — la versione gratuita è una demo mutilata, pensata per farti sentire stretto entro la prima settimana.</p>
<p><strong>Meridian ARC</strong> ribalta questo schema. La sua Community Edition è un Service Desk ITIL <strong>completo e pronto alla produzione</strong>: la Enterprise non <strong>sblocca le funzioni base</strong> aggiunge le funzioni che servono a chi del servizio IT fa il proprio business. In questo articolo vediamo tutte le funzionalità del modulo ITSM (il <strong>Desk</strong>) e, soprattutto, dove finisce la Community e dove inizia la Enterprise — con un occhio a come funziona concretamente la licenza EE.</p>
<p>Questo articolo è dedicato al solo modulo <strong>ITSM / Service Desk</strong>. Le aree Orbit (governance e contratti) e CRM interno hanno un articolo a parte.</p>
<p>Dashboard del Service Desk di Meridian ARC: ticket aperti, SLA, KPI in tempo reale, asset CMDB e ultimi incident</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-01-desk-dashboard.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124082 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-01-desk-dashboard-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-01-desk-dashboard-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-01-desk-dashboard-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<h3></h3>
<h3><strong>La base: un ciclo ITIL completo, già nella Community</strong></h3>
<p>Partiamo da un punto fermo, perché è il vero elemento differenziante. La <strong>Community Edition</strong> di Meridian ARC non è una versione di prova: copre l&#8217;intero ciclo di vita di un ticket secondo le pratiche ITIL, ed è pensata per girare in produzione, on-premise o in cloud privato, sui tuoi server.</p>
<p>Ecco cosa include — <strong>tutto gratuito e self-hosted.</strong></p>
<p>&nbsp;</p>
<h4><strong>Gestione ticket end-to-end</strong></h4>
<p>Il cuore del sistema. Cinque tipi di ticket nativi, ciascuno con il proprio flusso:</p>
<ul>
<li><strong>Incident</strong> — gestione interruzioni e malfunzionamenti</li>
<li><strong>Problem</strong> — analisi delle cause (RCA con metodi *5 Whys* e *Ishikawa*), workaround, registrazione del *known error* e post-review.</li>
<li><strong>Change Request</strong> — con tipi (standard, normale, emergency, pre-autorizzato), finestra di deployment, test plan, piano di rollback e **workflow di approvazione** (interno, cliente o entrambi, anche tramite link pubblico per il cliente).</li>
<li><strong>Service Request</strong> — richieste di servizio.</li>
<li><strong>Security Incident</strong> — tipologia dedicata agli incidenti di sicurezza.</li>
</ul>
<p>Gli stati del ticket sono strutturati (nuovo → preso in carico → in lavorazione → risolto → chiuso, più stati di attesa) e alcuni di essi sospendono automaticamente il contatore SLA.</p>
<p>Dettaglio di un ticket Incident con stato, priorità, badge SLA e cronologia</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-02-ticket-detail.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124084 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-02-ticket-detail-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-02-ticket-detail-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-02-ticket-detail-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Change Management: stato di approvazione, finestra di deployment e calendario dei change</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-04-changes.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124086 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-04-changes-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-04-changes-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-04-changes-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>&nbsp;</p>
<h4><strong>Code, priorità e categorie</strong></h4>
<ul>
<li><strong>Code di supporto</strong> con SPOC (single point of contact), coda di default ed email di gruppo.</li>
<li><strong>Livelli di priorità</strong> personalizzabili per cliente (nome, colore, ordine).</li>
<li><strong>Categorie</strong> per tipo di ticket, con regole di approvazione configurabili.</li>
<li><strong>Orari di lavoro</strong> (business hours) per coda, con fuso orario — base di calcolo per gli SLA.</li>
</ul>
<p>&nbsp;</p>
<h4><strong>SLA inclusi</strong></h4>
<p>Configurazione delle metriche di servizio — *prima risposta*, *presa in carico*, *risoluzione* — per priorità, coda e tipo di ticket. Gli stati di attesa mettono in pausa il conteggio, così non vieni penalizzato per tempi che non dipendono da te.</p>
<p>Contratto &amp; SLA del cliente: copertura, RPO/RTO, retention e livelli di priorità</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-05-sla.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124087 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-05-sla-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-05-sla-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-05-sla-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>&nbsp;</p>
<h4><strong>CMDB e gestione asset</strong></h4>
<p>Un CMDB vero, non un elenco statico: Configuration Item per cliente, con numero auto-generato, hostname, IP/MAC, seriale, produttore, modello, date di acquisto, scadenza garanzia e fine vita. Le relazioni tra CI permettono di mappare le dipendenze, e l&#8217;anagrafica licenze software con alert di scadenza completa il quadro.</p>
<p>CMDB: l&#8217;inventario dei Configuration Item del cliente</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-06-cmdb.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124089 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-06-cmdb-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-06-cmdb-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-06-cmdb-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>&nbsp;</p>
<h4><strong>Service Catalog, Knowledge Base e Task Flows</strong></h4>
<ul>
<li><strong>Service Catalog</strong> con form dinamici: il cliente compila e la richiesta diventa un ticket.</li>
<li><strong>Knowledge Base</strong> con articoli pubblici e interni, versionamento e template; collegando un articolo a un ticket Problem si costruisce il <strong>KEDB</strong> (Known Error Database).</li>
<li><strong>Task Flows</strong>: una richiesta dal catalogo può generare più task ordinati, ciascuno assegnato a una coda diversa — flussi multi-stage anche paralleli.</li>
</ul>
<p>Service Catalog: le voci di servizio con form dinamici</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-07-catalog.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124090 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-07-catalog-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-07-catalog-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-07-catalog-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>&nbsp;</p>
<h4><strong>Automazioni, email e portale</strong></h4>
<ul>
<li>Motore di automazione** config-driven: trigger (ticket creato, cambio stato, assegnazione, commento, SLA violato), condizioni e azioni (imposta priorità, assegna, trasferisci coda, aggiungi commento). In Community è incluso con un tetto di **3 regole**.</li>
<li><strong>Email-to-Ticket</strong> (Mailgun/SMTP) con processamento inbound via webhook.</li>
<li><strong>Portale self-service</strong> per il cliente: apertura ticket, commenti, consultazione di KB e catalogo.</li>
<li><strong>CSAT</strong>: survey di soddisfazione dopo la risoluzione.</li>
<li><strong>RBAC</strong>, <strong>LDAP/Active Directory</strong> e <strong>SSO (OAuth 2.0)</strong> per autenticazione e controllo accessi.</li>
<li><strong>Allegati</strong> con scansione antivirus (ClamAV) ed email templates personalizzabili.</li>
</ul>
<p>Knowledge Base: articoli pubblici e interni, pubblicabili nel portale self-service del cliente</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-08-kb.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124091 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-08-kb-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-08-kb-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-08-kb-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Editor di una regola di automazione: trigger, condizioni e azioni</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-09-automation.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124093 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-09-automation-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-09-automation-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-09-automation-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>In sintesi: con la Community gestisci clienti reali, SLA, asset e tutto il ciclo operativo. <strong>Non è una demo</strong></p>
<p>&nbsp;</p>
<h3><strong>Cosa aggiunge la Enterprise Edition</strong></h3>
<p>La Enterprise entra in gioco quando il servizio diventa il business: gestisci SLA contrattuali con penali, vuoi misurare la marginalità di commessa e devi integrare l&#8217;ITSM con il resto dei tuoi sistemi. Ecco cosa si attiva.</p>
<p>&nbsp;</p>
<h4><strong>Operazioni sotto pressione</strong></h4>
<ul>
<li><strong>Major Incident con War Room</strong> — dichiarazione di incidente grave con *incident commander*, *communications officer*, collaborazione in war room e postmortem strutturato. Quando un disservizio diventa una crisi, hai un protocollo, non l&#8217;improvvisazione.</li>
<li><strong>OLA e gestione avanzata degli SLA</strong> — Operational Level Agreement con tracciamento degli handoff inter-team e target in minuti lavorativi; pause SLA legate ai contratti.</li>
<li><strong>Skill routing &amp; supervisor</strong> — assegnazione basata sulle competenze degli agenti (con livello 1–5) e vista supervisore con la disponibilità del team.</li>
</ul>
<p>Dashboard KPI &amp; Performance: il polso operativo del servizio in tempo reale</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-12-kpi.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124097 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-12-kpi-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-12-kpi-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-12-kpi-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Supervisor view: carico di lavoro in tempo reale e routing per competenze del team</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-10-supervisor.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124094 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-10-supervisor-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-10-supervisor-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-10-supervisor-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>&nbsp;</p>
<h4><strong>Margine e controllo</strong></h4>
<ul>
<li><strong>Costing &amp; marginalità</strong> — figure professionali con costo giornaliero/orario; il tempo registrato sui ticket si trasforma in **costo e margine per cliente, in tempo reale**. Non a fine anno.</li>
<li><strong>Reporting esteso</strong> (tier Professional) — filtri salvati per entità, export massivo e *time tracking*.</li>
<li><strong>Forecasting</strong> — analisi di trend.</li>
</ul>
<p>Marginalità di commessa: valore venduto, costo consuntivo e margine per cliente</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-11-marginalita.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124095 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-11-marginalita-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-11-marginalita-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-11-marginalita-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>&nbsp;</p>
<h4><strong>Integrazioni e automazione (add-on *Integrations &amp; API*)</strong></h4>
<ul>
<li><strong>REST API versionata</strong> con Personal Access Token (abilities selettive: lettura/scrittura ticket, lettura CMDB e BI), rate limit per tier.</li>
<li><strong>Webhook in/out</strong> firmati HMAC-SHA256.</li>
<li><strong>Notifiche Slack/Teams</strong>, <strong>import asset massivo</strong> da CSV/JSON.</li>
<li><strong>Automazione avanzata</strong> (regole illimitate e logiche più ricche rispetto alle 3 della Community).</li>
</ul>
<h3></h3>
<h4><strong>BI &amp; Analytics (add-on)</strong></h4>
<p><strong>Feed BI</strong> read-only per Power BI/Tableau, <strong>export avanzato</strong> (PDF/Excel formattati) e <strong>dashboard estese</strong>.</p>
<h3></h3>
<h4><strong>Omnichannel (add-on)</strong></h4>
<p><strong>Chatbot</strong> sul portale per ricerca in KB e apertura ticket.</p>
<h3></h3>
<h4><strong>Workforce &amp; Signature (add-on) + Firma massiva</strong></h4>
<ul>
<li><strong>Firma digitale (FEA)</strong> con OTP, conservazione a 10 anni e <strong>crypto-shredding</strong> (cancellazione della chiave su richiesta GDPR).</li>
<li><strong>Magazzino cespiti</strong> — beni serializzati e consumabili, movimenti append-only.</li>
<li><strong>Assegnazione materiale</strong> al dipendente con ricevuta firmabile.</li>
<li><strong>Firma documenti massiva</strong> — lo stesso documento a più firmatari, con tracking dello stato (questa funzione è di tier <strong>Enterprise</strong>).</li>
</ul>
<p><strong>Nota</strong>: firma digitale, magazzino e assegnazioni sono disponibili dal tier <strong>Professional</strong> (con l&#8217;add-on <strong>Workforce &amp; Signature</strong>); Major Incident, costing, skill routing, OLA e firma massiva sono <strong>Enterprise</strong>. Lo strumento di firma vive principalmente nella console interna, di cui parlo nell&#8217;articolo dedicato a Orbit + CRM.</p>
<p>Firma documenti massiva: campagne di firma dello stesso documento a più destinatari, con tracking dello stato</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/crm-11-firma-massiva.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124081 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/crm-11-firma-massiva-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/crm-11-firma-massiva-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/crm-11-firma-massiva-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>&nbsp;</p>
<h3><strong>Community vs Enterprise: il confronto</strong></h3>
<p>| Funzionalità | Community | Enterprise |<br />
|&#8212;|:&#8212;:|:&#8212;:|<br />
| Incident / Problem / Change (con approvazione) | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| Service Request / Security Incident | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| Code, SPOC, priorità, categorie | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| SLA base + pause | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| CMDB + relazioni CI + licenze software | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| Service Catalog + form dinamici | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| Knowledge Base + KEDB | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| Task Flows | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| Automazioni | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (max 3 regole) | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (illimitate + avanzate) |<br />
| Email-to-Ticket, Portale, CSAT, RBAC, LDAP/SSO | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| Major Incident / War Room | — | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| OLA e SLA avanzati | — | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| Skill routing &amp; supervisor | — | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| Costing &amp; marginalità di commessa | — | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| Reporting esteso + time tracking | — | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (da Professional) |<br />
| Forecasting | — | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |<br />
| REST API + token, webhook in/out | — | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (add-on) |<br />
| Slack/Teams, feed BI, import asset, chatbot | — | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (add-on) |<br />
| Firma digitale (FEA), magazzino, assegnazioni | — | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (da Professional, add-on) |<br />
| Firma documenti massiva | — | <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> |</p>
<h2></h2>
<h4><strong>Limiti operativi per edizione</strong></h4>
<p>| Limite | Community | Professional | Enterprise |<br />
|&#8212;|:&#8212;:|:&#8212;:|:&#8212;:|<br />
| Agenti (seat) | 20 | illimitato | illimitato |<br />
| Clienti gestiti | 3 | illimitato | illimitato |<br />
| Regole di automazione | 3 | illimitato | illimitato |<br />
| Retention audit | 90 giorni | 365 giorni | 36 mesi |<br />
| Storage allegati | 5 GB | 10 GB/agente | 25 GB/agente |<br />
| Rate limit API | nessuna API | 120 req/min | 600 req/min |</p>
<p>&nbsp;</p>
<h3><strong>Come funziona la licenza Enterprise</strong></h3>
<p>Questa è la parte che rende Meridian ARC diverso da un classico SaaS — e che lo rende adatto ad ambienti regolati (bancario, sanitario, PA).</p>
<p><strong>1. È lo stesso codice, ma immagini diverse.</strong><br />
Community ed Enterprise condividono lo stesso prodotto, ma la Community **non contiene affatto** il codice delle funzioni Enterprise: non è una versione depotenziata via flag, è proprio un&#8217;immagine Docker diversa. Le variabili d&#8217;ambiente, da sole, non bastano a sbloccare nulla.</p>
<p><strong>2. La licenza è una chiave firmata, verificata offline.</strong><br />
L&#8217;attivazione avviene con una chiave **Ed25519** validata localmente: l&#8217;istanza **non deve &#8220;chiamare casa&#8221;**. Funziona in ambienti air-gapped, senza dipendere da un server di attivazione. Nessun lock-in.</p>
<p><strong>3. Professional ed Enterprise sono due tier dello stesso impianto.</strong><br />
La *license key* determina quali feature e add-on sono attivi. La Professional copre il passo intermedio; l&#8217;Enterprise sblocca tutto. Non c&#8217;è un prodotto nuovo da imparare.</p>
<p><strong>4. L&#8217;upgrade non richiede reinstallazione.</strong><br />
Si parte dalla Community, poi si punta alle immagini Enterprise e si applica la licenza da **Admin → Licenza &amp; Edizione**. OAuth, configurazione <code>.env</code> e dati restano identici: nessuna migrazione, nessun fermo del servizio.</p>
<h3></h3>
<h4><strong>Attivazione in 3 passi</strong></h4>
<p>1. <strong>Parliamone</strong> — esigenze, clienti gestiti, volumi e integrazioni. Si valuta insieme il tier giusto.<br />
2. <strong>Accesso e licenza</strong> — un token di sola lettura al registry privato delle immagini + il file <code>azienda.license.key</code> firmato.<br />
3. <strong>Attivazione</strong> — un <code>docker login</code> al registry, si puntano le immagini Enterprise nello stesso stack e si applica la licenza dal pannello Admin.</p>
<p>Admin → Licenza &amp; Edizione: stato della licenza e feature attive</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-13-licenza.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124098 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-13-licenza-1024x640.png" alt="" width="1024" height="640" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-13-licenza-980x613.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/06/itsm-13-licenza-480x300.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<h2></h2>
<h3><strong>In conclusione</strong></h3>
<p>La forza del modello di Meridian ARC sta in una promessa rispettata: <strong>la Community è davvero completa</strong>. Puoi gestire un help desk ITIL serio, con clienti, SLA, CMDB e automazioni, senza spendere un euro e senza che i tuoi dati lascino i tuoi server.</p>
<p>La Enterprise non ti vende ciò che dovrebbe essere gratis: ti vende ciò che serve quando il servizio cresce — gestione delle crisi, marginalità misurabile, integrazioni e firma digitale. E lo fa con un modello di licenza pulito, offline, senza lock-in.</p>
<p>Se gestisci servizi IT per più clienti e ti riconosci in almeno uno di questi tre segnali — <strong>eroghi SLA contrattuali con penali</strong>, <strong>vuoi conoscere il margine di commessa</strong>, <strong>devi integrare l&#8217;ITSM con altri sistemi</strong> — è il momento di guardare alla Enterprise.</p>
<p>Trovi tutti i dettagli, la guida di installazione della Community e le condizioni Enterprise su <a href="https://meridian-arc.io" target="_blank" rel="noopener">meridian-arc.io</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/meridian-arc-itsm-tutte-le-funzionalita-del-service-desk-e-cosa-sblocca-la-enterprise-edition/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installazione e Configurazione Base di Odoo Community Edition su Ubuntu Server 26.04</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-odoo-community-edition-su-ubuntu-server-26-04/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-odoo-community-edition-su-ubuntu-server-26-04/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Wed, 17 Jun 2026 06:15:41 +0000</pubDate>
				<category><![CDATA[Odoo]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[HR]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Recruiting]]></category>
		<category><![CDATA[Ubuntu 26.04]]></category>
		<category><![CDATA[wkhtmltopdf]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1123806</guid>

					<description><![CDATA[&#160; Odoo è una delle piattaforme ERP open source più complete e diffuse al mondo. Grazie alla sua architettura modulare permette di gestire in un&#8217;unica soluzione processi aziendali come vendite, acquisti, magazzino, contabilità, CRM, risorse umane e molto altro adattandosi sia a piccole realtà che a strutture più complesse. In questa guida vedremo come installare [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091058 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png" alt="" width="679" height="89" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<p>Odoo è una delle piattaforme ERP open source più complete e diffuse al mondo.</p>
<p>Grazie alla sua architettura modulare permette di gestire in un&#8217;unica soluzione processi aziendali come vendite, acquisti, magazzino, contabilità, CRM, risorse umane e molto altro adattandosi sia a piccole realtà che a strutture più complesse.</p>
<p>In questa guida vedremo come installare e configurare Odoo 18 Community Edition su Ubuntu Server 26.04 LTS &#8220;Resolute Raccoon&#8221;, la distribuzione più recente di Canonical con supporto a lungo termine.</p>
<p>Si tratta di una combinazione particolarmente interessante per chi vuole costruire un ambiente di produzione stabile e aggiornato sfruttando Python 3.14 e PostgreSQL 18 già inclusi nel sistema operativo.</p>
<p>Seguiremo un approccio from source clonando il codice direttamente dal repository ufficiale GitHub di Odoo e installando le dipendenze Python all&#8217;interno di un ambiente virtuale isolato.</p>
<p>Questo metodo offre il massimo controllo sulla versione installata semplifica gli aggiornamenti futuri e consente di aggiungere moduli personalizzati senza interferire con il sistema operativo sottostante.</p>
<p>Al termine della guida avrai un&#8217;istanza di Odoo funzionante gestita come servizio systemd pronta per essere raggiunta dal browser e configurata secondo le esigenze del tuo progetto.</p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<p>Ubuntu Server 26.04 con almeno 2 GB di RAM<br />
Accesso SSH con utente dotato di privilegi sudo</p>
<p>&nbsp;</p>
<h3><strong>AGGIORNAMENTO DEL SISTEMA</strong></h3>
<p>Connettiti al server via SSH e verifica la versione e aggiorna i pacchetti:</p><pre class="urvanov-syntax-highlighter-plain-tag">lsb_release -a</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">Distributor ID: Ubuntu
Description: Ubuntu 26.04 LTS
Release: 26.04
Codename: resolute</pre><p>Aggiornare i pacchetti con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update &amp;&amp; sudo apt upgrade -y</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CREAZIONE DELL&#8217;UTENTE DI SISTEMA</strong></h3>
<p>Non eseguire mai Odoo come root. Creare un utente di sistema dedicato con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo /usr/sbin/adduser \
--system \
--shell /bin/bash \
--gecos 'Odoo user' \
--group \
--home /opt/odoo18 \
odoo18</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DELLE DIPENDENZE</strong></h3>
<p>Ubuntu 26.04 include Python 3.13 di default compatibile con Odoo 18 che richiede almeno Python 3.10.</p>
<p>Installare tutte le librerie necessarie con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y build-essential wget git \
python3-pip python3-dev python3-venv python3-wheel \
libfreetype6-dev libxml2-dev libzip-dev libsasl2-dev \
python3-setuptools libjpeg-dev zlib1g-dev libpq-dev \
libxslt1-dev libldap2-dev libtiff5-dev libopenjp2-7-dev \
nodejs npm</pre><p>&nbsp;</p>
<h3></h3>
<h3><strong>INSTALLAZIONE DI POSTGRESQL</strong></h3>
<p>PostgreSQL è il solo database engine supportato da Odoo per la gestione dei dati.</p>
<p>Odoo 18 richiede almeno PostgreSQL 12 e Ubuntu 26.04 include PostgreSQL 18 nei suoi repository.</p>
<p>Eseguire i comandi elencati di seguito:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y postgresql</pre><p>Verificare che il servizio sia attivo con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl status postgresql</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; prese&gt;
Active: active (exited) since Fri 2026-05-15 18:59:24 UTC; 7s ago
Invocation: 514460320a2e43829b3f254d590ed50d
Main PID: 10157 (code=exited, status=0/SUCCESS)
Mem peak: 2M
CPU: 4ms</pre><p>Quindi abilitare il servizio con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl enable postgresql</pre><p>Creare l&#8217;utente PostgreSQL per Odoo con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo su - postgres -c "createuser -s odoo18"</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DI WKHTMLTOPDF</strong></h3>
<p>Odoo utilizza wkhtmltopdf per generare report in PDF. È necessaria la versione con patched Qt.</p>
<p>Posizionarsi nella cartella tmp con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /tmp</pre><p>Quindi scaricare<strong> wkhtmltopdf</strong> con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb</pre><p>Installare wkhtmltopdf con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y ./wkhtmltox_0.12.6.1-2.jammy_amd64.deb</pre><p>Verificare l&#8217;installazione con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">wkhtmltopdf --version</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">wkhtmltopdf 0.12.6.1 (with patched qt)</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>DOWNLOAD E INSTALLAZIONE DI ODOO</strong></h3>
<p>Passare all&#8217;utente odoo18 e clonare il sorgente da GitHub con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo su - odoo18

git clone https://www.github.com/odoo/odoo --depth 1 --branch 18.0 odoo18</pre><p>Creare e attivare un ambiente virtuale Python con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">python3 -m venv --system-site-packages odoo18-venv

source odoo18-venv/bin/activate</pre><p>Installare le dipendenze Python di Odoo con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">pip3 install wheel

pip3 install -r odoo18/requirements.txt</pre><p>Verificare che lxml sia disponibile (l&#8217;errore di build è ignorabile)</p><pre class="urvanov-syntax-highlighter-plain-tag">python3 -c "import lxml; print(lxml.__version__)"</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">6.0.2</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CHECK E FIX LXML</strong></h3>
<p>Se il pip si interrompe quando lxml fallisce non installa i pacchetti successivi.</p>
<p>La soluzione è installare tutto escludendo lxml dal requirements.txt</p>
<p>Creare un requirements filtrato senza lxml con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">grep -v "^lxml" odoo18/requirements.txt &gt; /tmp/requirements_no_lxml.txt</pre><p>Installare tutto tranne lxml con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">pip3 install -r /tmp/requirements_no_lxml.txt</pre><p>Installare il pacchetto lxml_html_clean con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">pip3 install lxml-html-clean</pre><p>Verificare che sia tutto OK con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">python3 -c "import pytz, werkzeug, psycopg2, PIL; print('OK')"</pre><p>Disattivare l&#8217;ambiente virtuale e creare la cartella per i moduli custom con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">deactivate

mkdir /opt/odoo18/odoo18/custom-addons

exit</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>FILE DI CONFIGURAZIONE</strong></h3>
<p>Creare il file di configurazione principale con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano /etc/odoo18.conf</pre><p>Incollare il seguente contenuto (sostituisci la master password!):</p><pre class="urvanov-syntax-highlighter-plain-tag">[options]
admin_passwd = CambiaMiConPasswordSicura!
db_host = False
db_port = False
db_user = odoo18
db_password = False
addons_path = /opt/odoo18/odoo18/addons,/opt/odoo18/odoo18/custom-addons
logfile = /var/log/odoo18/odoo18.log
http_port = 8069</pre><p>Creare la cartella per i log e impostare i permessi con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo mkdir /var/log/odoo18

sudo chown odoo18:odoo18 /var/log/odoo18

sudo chmod 640 /etc/odoo18.conf

sudo chown odoo18:root /etc/odoo18.conf</pre><p>Salvare e chiudere il file di configurazione.</p>
<p>&nbsp;</p>
<h3><strong>CREAZIONE DEL SYSTEMD</strong></h3>
<p>Creare l&#8217;unit file per gestire Odoo come servizio con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano /etc/systemd/system/odoo18.service</pre><p>Incollare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">[Unit]
Description=Odoo 18 Community Edition
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
SyslogIdentifier=odoo18
PermissionsStartOnly=true
User=odoo18
Group=odoo18
ExecStart=/opt/odoo18/odoo18-venv/bin/python3 /opt/odoo18/odoo18/odoo-bin -c /etc/odoo18.conf
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target</pre><p>Salvare chiudere il file di configurazione.</p>
<p>Abilitare e avviare il servizio con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl daemon-reload

sudo systemctl enable --now odoo18

sudo systemctl status odoo18</pre><p>Se è tutto OK dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">● odoo18.service
Loaded: loaded (/etc/systemd/system/odoo18.service; enabled; preset: enabl&gt;
Active: active (running) since Fri 2026-05-15 19:30:41 UTC; 19ms ago
Invocation: 89df5e70c325462586d852df85cfbed0
Main PID: 22114 (python3)
Tasks: 1 (limit: 6210)
Memory: 3.3M (peak: 3.3M)
CPU: 15ms
CGroup: /system.slice/odoo18.service
└─22114 /opt/odoo18/odoo18-venv/bin/python3 /opt/odoo18/odoo18/odo&gt;

May 15 19:30:41 vm-srv-test systemd[1]: Started odoo18.service.</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DEL FIREWALL</strong></h3>
<p>Se usi UFW aprire la porta 8069 con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo ufw allow 8069/tcp

sudo ufw reload</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>ACCESSO DA WEBGUI</strong></h3>
<p>Accedi a Odoo dal browser richiamando il link:</p>
<p><strong>http://IP_DEL_SERVER:8069</strong></p>
<p>Al primo accesso ti verrà mostrata la pagina di creazione database.</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123827 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-01-1024x490.png" alt="" width="1024" height="490" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-01-980x469.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-01-480x230.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Inserisci la master password definita nel file di configurazione.</p>
<p>Scegliere un nome per il database e creare il tuo primo admin.</p>
<p>Cliccare su <strong>Create Database</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123828 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-02-1024x491.png" alt="" width="1024" height="491" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-02-980x470.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-02-480x230.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Accedere con le credenziali create nel passaggio precedente</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123829 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-03-1024x492.png" alt="" width="1024" height="492" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-03-980x471.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-odoo-community-ubuntu-03-480x231.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se abbiamo fatto tutto correttente dovremmo accedere al backend di Odoo</p>
<p>&nbsp;</p>
<h3></h3>
<h3><strong>CONFIGURAZIONE DEL REVERSE PROXY CON NGINX</strong></h3>
<p>Per un ambiente di produzione è consigliato mettere Nginx davanti a Odoo con SSL:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y nginx

sudo nano /etc/nginx/sites-available/odoo18</pre><p>Quindi incollare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">nginxupstream odoo {
server 127.0.0.1:8069;
}

server {
listen 80;
server_name tuodominio.it;

access_log /var/log/nginx/odoo18.access.log;
error_log /var/log/nginx/odoo18.error.log;

proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;

location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_pass http://odoo;
}

location ~* /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo;
}
}</pre><p>Salvare e chiudere il file di configurazione.</p>
<p>Attivare il sito e ricaricare Nginx con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo ln -s /etc/nginx/sites-available/odoo18 /etc/nginx/sites-enabled/

sudo nginx -t

sudo systemctl reload nginx</pre><p>Aggiungi poi <strong>proxy_mode = True</strong> al file <strong>/etc/odoo18.conf</strong> e riavviare il servizio.</p>
<p>&nbsp;</p>
<h3><strong>COMANDI UTILI</strong></h3>
<p>Comandi utili per la gestione quotidiana:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl restart odoo18 # riavvio

sudo systemctl stop odoo18 # stop

journalctl -u odoo18 -f # log in tempo reale

tail -f /var/log/odoo18/odoo18.log # log applicativo</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>COMMUNITY VS ENTERPRISE: COSA CAMBIA?</strong></h3>
<p>Odoo è disponibile in due versioni:</p>
<p><strong>Community:</strong> completamente gratuita e open source rilasciata sotto licenza LGPL-3</p>
<p><strong>Enterprise</strong>: a pagamento con licenza proprietaria.</p>
<p><strong>La versione Community</strong> include tutti i moduli fondamentali per la gestione aziendale: vendite, acquisti, magazzino, fatturazione base, CRM, progetto, inventario e molto altro ed è più che sufficiente per la maggior parte delle piccole e medie imprese.</p>
<p>Il codice sorgente è pubblico e liberamente modificabile e distribuibile.</p>
<p><strong>La versione Enterprise</strong> aggiunge funzionalità avanzate su tre fronti principali:</p>
<p><strong>Moduli esclusivi</strong>: tra cui la contabilità completa con riconciliazione bancaria automatica, il modulo per la firma elettronica dei documenti, VoIP integrato, eLearning, marketing automation avanzato e la gestione della qualità e manutenzione in ambito manifatturiero.</p>
<p><strong>Interfaccia e usabilità</strong>: Enterprise include una UI più rifinita, l&#8217;app mobile nativa per iOS e Android (la Community è accessibile solo via browser), e una dashboard di reportistica più avanzata con Spreadsheet integrato.</p>
<p><strong>Supporto e aggiornamenti</strong>: con la licenza Enterprise si ha accesso al supporto ufficiale Odoo, agli aggiornamenti automatici gestiti tramite Odoo.sh (la piattaforma cloud proprietaria) e alla migrazione assistita tra versioni maggiori.</p>
<p>Il costo della licenza Enterprise si basa sul numero di utenti e parte da circa €24,90 per utente al mese (prezzo indicativo 2025, può variare per area geografica e partner).</p>
<p>Vale la pena sottolineare che le due versioni condividono lo stesso core infatti un&#8217;installazione Community può essere migrata a Enterprise semplicemente aggiungendo la licenza e i moduli aggiuntivi, senza dover reinstallare nulla.</p>
<p>&nbsp;</p>
<h3><strong>QUANDO SCEGLIERE LA VERSIONE COMMUNITY E QUANDO LA VERSIONE ENTERPRISE?</strong></h3>
<p>La scelta tra le due edizioni dipende principalmente dalle dimensioni dell&#8217;azienda, dai processi da gestire e dal budget disponibile.</p>
<p><strong>Scegli Community se:</strong></p>
<ul>
<li>sei una piccola o media impresa con processi aziendali standard e non troppo complessi</li>
<li>hai a disposizione un tecnico interno o un partner in grado di installare, configurare e manutenere il sistema autonomamente</li>
<li>vuoi valutare Odoo prima di impegnarti economicamente, magari con l&#8217;intenzione di migrare a Enterprise in futuro</li>
<li>la contabilità avanzata non è un requisito prioritario e puoi gestire le fatture con moduli di terze parti o integrazioni esterne</li>
<li>hai bisogno di personalizzazioni profonde sul codice sorgente, possibili senza restrizioni solo nella versione open source</li>
</ul>
<p>&nbsp;</p>
<p><strong>Scegli Enterprise se:</strong></p>
<ul>
<li>hai un reparto contabile strutturato che necessita di riconciliazione bancaria automatica, localizzazione fiscale certificata e report avanzati</li>
<li>i tuoi utenti lavorano spesso da dispositivi mobili e hanno bisogno dell&#8217;app nativa iOS/Android</li>
<li>vuoi affidarti al supporto ufficiale Odoo per la risoluzione dei problemi e gli aggiornamenti di versione</li>
<li>stai valutando un deployment su Odoo.sh, la piattaforma cloud gestita direttamente da Odoo S.A.</li>
<li>operi in settori specifici come la produzione, dove i moduli di qualità, manutenzione e PLM di Enterprise fanno la differenza</li>
</ul>
<p>&nbsp;</p>
<p>Una via di mezzo praticabile è partire con la Community per i primi mesi e verificare quali funzionalità mancano nel flusso di lavoro reale, e poi valutare il passaggio a Enterprise solo se strettamente necessario.</p>
<p>Trattandosi della stessa base di codice, la migrazione è sempre possibile senza perdita di dati.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-odoo-community-edition-su-ubuntu-server-26-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Costruire un ambiente di rete Zero Trust con OpenZiti su Ubuntu Server 26.04</title>
		<link>https://www.raffaelechiatto.com/costruire-un-ambiente-di-rete-zero-trust-con-openziti-su-ubuntu-server-26-04/</link>
					<comments>https://www.raffaelechiatto.com/costruire-un-ambiente-di-rete-zero-trust-con-openziti-su-ubuntu-server-26-04/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Mon, 15 Jun 2026 06:30:00 +0000</pubDate>
				<category><![CDATA[OpenZiti]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[Edge Router]]></category>
		<category><![CDATA[Ubuntu 26.04]]></category>
		<category><![CDATA[zac]]></category>
		<category><![CDATA[Ziti Admin Console]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1123794</guid>

					<description><![CDATA[&#160; Nel panorama della sicurezza informatica moderna, il modello tradizionale basato sul perimetro di rete quello del &#8220;dentro si fida, fuori non si fida&#8221; ha mostrato tutti i suoi limiti. Ambienti ibridi lavoro remoto microservizi distribuiti su cloud multipli: il perimetro, semplicemente, non esiste più. È in questo contesto che nasce il paradigma Zero Trust [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091058 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png" alt="" width="679" height="89" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<p>Nel panorama della sicurezza informatica moderna, il modello tradizionale basato sul perimetro di rete quello del &#8220;dentro si fida, fuori non si fida&#8221; ha mostrato tutti i suoi limiti.</p>
<p>Ambienti ibridi lavoro remoto microservizi distribuiti su cloud multipli: il perimetro, semplicemente, non esiste più.</p>
<p>È in questo contesto che nasce il paradigma Zero Trust il cui principio fondamentale è tanto semplice quanto radicale: non fidarsi mai di nessuno per default, verificare sempre tutto.</p>
<p>OpenZiti è una piattaforma open source che porta questo modello dalla teoria alla pratica.</p>
<p>Ogni connessione viene autenticata con un&#8217;identità crittografica, ogni accesso è autorizzato da policy esplicite, il traffico è cifrato end-to-end e i servizi restano completamente invisibili a chiunque non sia autorizzato nessuna porta aperta, nessuna superficie di attacco esposta.</p>
<p>Il tutto senza richiedere modifiche al codice delle applicazioni esistenti.</p>
<p>In questa guida vedremo come installare e configurare OpenZiti su Ubuntu Server 26.04 costruendo da zero un overlay network zero trust con Controller, Edge Router e console di amministrazione web.</p>
<p>Che tu voglia proteggere un homelab, esporre servizi interni senza aprire porte sul firewall o semplicemente capire come funziona una rete zero trust nella pratica, questa è la guida da cui partire.</p>
<p>Di seguito uno schema che spiega il funzionamento di OpenZiti</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-00.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123818 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-00-1024x711.png" alt="" width="1024" height="711" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-00-980x680.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-00-480x333.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<p>Ubuntu 26.04 LTS (fresh install)<br />
Utente con privilegi sudo<br />
FQDN <strong>servertest.lab.prv</strong> risolvibile via DNS o /etc/hosts su tutti i client<br />
Porte aperte sul firewall (vedi sezione dedicata)</p>
<p><strong>Controller</strong> — il cervello della rete: gestisce identità, policy e certificati<br />
<strong>Edge Router</strong> — il piano dati che instrada il traffico cifrato<br />
<strong>ZAC (Ziti Admin Console)</strong> — interfaccia web di amministrazione</p>
<p>Porte richieste:</p>
<table style="height: 100%; border-color: #000000; width: 100%; border-style: solid;" border="1" width="100%">
<tbody>
<tr>
<td style="text-align: center;" width="145"><strong>Porta</strong></td>
<td style="text-align: center;" width="145"><strong>Protocollo</strong></td>
<td style="text-align: center;" width="145"><strong>Componente</strong></td>
<td style="text-align: center;" width="179"><strong>Descrizione</strong></td>
</tr>
<tr>
<td width="145">1280</td>
<td width="145">TCP</td>
<td width="145">Controller</td>
<td width="179">API Edge + Control Plane</td>
</tr>
<tr>
<td width="145">3022</td>
<td width="145">TCP</td>
<td width="145">Edge Router</td>
<td width="179">Edge Listener</td>
</tr>
<tr>
<td width="145">10080</td>
<td width="145">TCP</td>
<td width="145">Edge Router</td>
<td width="179">Link Listener (fabric)</td>
</tr>
<tr>
<td width="145">8443</td>
<td width="145">TCP</td>
<td width="145">ZAC Console</td>
<td width="179">Interfaccia Web Admin</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3><strong>FASE 1 &#8211; PREPARAZIONE DEL SISTEMA</strong></h3>
<p>Aggiornare il sistema con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update &amp;&amp; sudo apt upgrade -y</pre><p>Installare le dipendenze di base con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y curl wget gnupg2 apt-transport-https ca-certificates</pre><p>Verifica che l&#8217;FQDN sia corretto con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">hostname -f</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">servertest.lab.prv</pre><p>Se necessario impostare l&#8217;FQDN con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo hostnamectl set-hostname servertest.lab.prv</pre><p>Assicurarsi che /etc/hosts contenga la riga corretta:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano /etc/hosts</pre><p>Aggiungere (sostituire con l&#8217;IP reale del server):</p><pre class="urvanov-syntax-highlighter-plain-tag">192.168.X.X servertest.lab.prv servertest</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>FASE 2 &#8211; AGGIUNTA DEL REPOSITORY OPENZITI</strong></h3>
<p>Questi comandi configurano il repository APT ufficiale di OpenZiti.</p>
<p>Scaricare e installare la chiave GPG del repository con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">curl -sSLf https://get.openziti.io/tun/package-repos.gpg \
| sudo gpg --dearmor --output /usr/share/keyrings/openziti.gpg</pre><p>Rendere la chiave leggibile da tutti gli utenti con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo chmod a+r /usr/share/keyrings/openziti.gpg</pre><p>Creare il file di repository APT con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo tee /etc/apt/sources.list.d/openziti-release.list &gt;/dev/null &lt;&lt;EOF
deb [signed-by=/usr/share/keyrings/openziti.gpg] https://packages.openziti.org/zitipax-openziti-deb-stable debian main
EOF</pre><p>Aggiornare la lista dei pacchetti con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update</pre><p><strong>NOTA BENE:</strong> OpenZiti usa debian come label del repository anche per Ubuntu — è corretto così.</p>
<p>&nbsp;</p>
<h3><strong>FASE 3 &#8211; INSTALLAZIONE E CONFIGURAZIONE DEL CONTROLLER</strong></h3>
<p>&nbsp;</p>
<h4><strong>3.1 INSTALLAZIONE DEL PACCHETTO</strong></h4>
<p>Eseguire il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y openziti-controller</pre><p>Il pacchetto installa anche la CLI ziti come dipendenza.</p>
<p>&nbsp;</p>
<h4><strong>3.2 AVVIARE IL BOOTSTRAP DEL CONTROLLER</strong></h4>
<p>Il bootstrap crea automaticamente: PKI, certificati, config file e database.</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo /opt/openziti/etc/controller/bootstrap.bash</pre><p>Lo script pone alcune domande interattive. Rispondere come indicato nella tabella sottostante:</p>
<table style="height: 100%; border-collapse: collapse; width: 100%; border-style: solid; border-color: #000000;" border="1" width="100%" cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 15.0pt;">
<td class="xl65" style="height: 15px; width: 333.6px; text-align: center;" height="20"><strong>Domanda</strong></td>
<td class="xl65" style="border-left: medium; width: 410.4px; text-align: center; height: 15px;"><strong>Risposta</strong></td>
</tr>
<tr style="height: 15.0pt;">
<td class="xl66" style="height: 15px; border-top: medium; width: 333.6px;" height="20">Are you joining an existing cluster?</td>
<td class="xl67" style="border-top: medium; border-left: medium; width: 410.4px; height: 15px;">N<span class="font0"> (nuovo cluster, default)</span></td>
</tr>
<tr style="height: 15.0pt;">
<td class="xl66" style="height: 15px; border-top: medium; width: 333.6px;" height="20">Permanent external address</td>
<td class="xl68" style="border-top: medium; border-left: medium; width: 410.4px; height: 15px;">servertest.lab.prv</td>
</tr>
<tr style="height: 15.75pt;">
<td class="xl66" style="height: 15px; border-top: medium; width: 333.6px;" height="21">Node name</td>
<td class="xl68" style="border-top: medium; border-left: medium; width: 410.4px; height: 15px;">servertest<span class="font0"> (default: primo label dell&#8217;FQDN)</span></td>
</tr>
<tr style="height: 15.75pt;">
<td class="xl66" style="height: 15px; border-top: medium; width: 333.6px;" height="21">Trust domain</td>
<td class="xl68" style="border-top: medium; border-left: medium; width: 410.4px; height: 15px;">lab.prv<span class="font0"> (default: label rimanenti)</span></td>
</tr>
<tr style="height: 15.75pt;">
<td class="xl66" style="height: 15px; border-top: medium; width: 333.6px;" height="21">Port</td>
<td class="xl68" style="border-top: medium; border-left: medium; width: 410.4px; height: 15px;">1280<span class="font0"> (default)</span></td>
</tr>
<tr style="height: 30.0pt;">
<td class="xl66" style="height: 27px; border-top: medium; width: 333.6px;" height="40">Admin password</td>
<td class="xl66" style="border-top: medium; border-left: medium; width: 410.4px; height: 27px;">Genera automaticamente <span class="font5">OPPURE</span><span class="font0"> inserisci una password sicura</span></td>
</tr>
<tr style="height: 15.0pt;">
<td class="xl66" style="height: 15px; border-top: medium; width: 333.6px;" height="20">Install web console?</td>
<td class="xl67" style="border-top: medium; border-left: medium; width: 410.4px; height: 15px;">Y<span class="font0"> (consigliato)</span></td>
</tr>
<tr style="height: 15.0pt;">
<td class="xl66" style="height: 15px; border-top: medium; width: 333.6px;" height="20">Enable certificate renewal timer?</td>
<td class="xl67" style="border-top: medium; border-left: medium; width: 410.4px; height: 15px;">Y<span class="font0"> (consigliato)</span></td>
</tr>
</tbody>
</table>
<p>Al termine dell&#8217;installazione dovremmo vedere il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">bootstrap completed successfully and will not run again. Adjust /var/lib/private/ziti-controller/config.yml to suit.</pre><p>Al termine abilitare il controller con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl enable --now ziti-controller</pre><p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> IMPORTANTE</strong>: Salvare la password admin mostrata a fine bootstrap, ti servirà per accedere!</p>
<p>&nbsp;</p>
<h4><strong>3.3 VERIFICARE LO STATO DEL CONTROLLER</strong></h4>
<p>Controllare che il servizio sia attivo con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl status ziti-controller</pre><p>Se è tutto OK dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">● ziti-controller.service - OpenZiti Controller
Loaded: loaded (/usr/lib/systemd/system/ziti-controller.service; enabled; &gt;
Drop-In: /etc/systemd/system/ziti-controller.service.d
└─override.conf
Active: active (running) since Sat 2026-05-16 18:59:45 UTC; 30s ago
Invocation: d39fb50a519e44ef9f761f6d5db446e1
Process: 3028 ExecStartPre=/opt/openziti/etc/controller/entrypoint.bash che&gt;
Main PID: 3054 (ziti)
Tasks: 7 (limit: 6210)
Memory: 64.6M (peak: 64.7M)
CPU: 922ms
CGroup: /system.slice/ziti-controller.service
└─3054 /opt/openziti/bin/ziti controller run config.yml --

May 16 18:59:46 servertest.lab.prv ziti[3054]: {"file":"github.com/openziti/zit&gt;
May 16 18:59:46 servertest.lab.prv ziti[3054]: {"file":"github.com/openziti/zit&gt;
May 16 18:59:46 servertest.lab.prv ziti[3054]: {"file":"github.com/openziti/zit&gt;
May 16 18:59:46 servertest.lab.prv ziti[3054]: {"file":"github.com/openziti/zit&gt;
May 16 18:59:46 servertest.lab.prv ziti[3054]: {"file":"github.com/openziti/zit&gt;
May 16 18:59:46 servertest.lab.prv ziti[3054]: {"file":"github.com/openziti/zit&gt;
May 16 18:59:46 servertest.lab.prv ziti[3054]: {"file":"github.com/openziti/cha&gt;
May 16 18:59:46 servertest.lab.prv ziti[3054]: {"file":"github.com/openziti/zit&gt;
May 16 18:59:46 servertest.lab.prv ziti[3054]: {"file":"github.com/openziti/xwe&gt;
lines 1-23</pre><p>Verificare i log con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo journalctl -u ziti-controller -f</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>FASE 4 &#8211; INSTALLAZIONE E CONFIGURAZIONE DELL&#8217;EDGE ROUTER</strong></h3>
<p>&nbsp;</p>
<h4><strong>4.1 INSTALLAZIONE DEL PACCHETTO</strong></h4>
<p>Eseguire il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y openziti-router</pre><p>&nbsp;</p>
<h4><strong>4.2 CREARE IL ROUTER NEL CONTROLLER TRAMITE CLI</strong></h4>
<p>Prima fai login con la CLI ziti:</p>
<p>Login al controller (usa la password salvata nel passo 3.2)</p><pre class="urvanov-syntax-highlighter-plain-tag">ziti edge login servertest.lab.prv:1280 \
--username admin \
--password PASSWORD \
--yes</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">Untrusted certificate authority retrieved from server
Verified that server supplied certificates are trusted by server
Server supplied 2 certificates
Server certificate chain written to /home/rchiatto/.config/ziti/certs/servertest.lab.prv
Token: af50d889-9308-49fb-a1e3-6c16d388f7a5
Saving identity 'default' to /home/rchiatto/.config/ziti/ziti-cli.json</pre><p><strong>ATTENZIONE:</strong> copiare il TOKEN perchè ci verrà chiesto più avanti</p>
<p>Ora creare il router (ottieni il token JWT di enrollment):</p>
<p>Creare l&#8217;edge router</p><pre class="urvanov-syntax-highlighter-plain-tag">ziti edge create edge-router "servertest-router" \
--role-attributes public \
--tunneler-enabled \
--jwt-output-file /tmp/router.jwt</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">New edge router servertest-router created with id: mKAQ7adB2Q
Enrollment expires at 2026-05-16T22:03:55.226Z</pre><p>Verificare che il file JWT sia stato creato con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">cat /tmp/router.jwt</pre><p>Dovremmo visualizzare un output simile al seguente:</p><pre class="urvanov-syntax-highlighter-plain-tag">eyJhbGciOiJSUzI1NiIsImtpZCI6IjBlZWJhMmU4MzMiLCJ0eXAiOiJKV1QifQ.eyJpc3MLnBydjoxMjgwIiwic3ViIjoibUtBUTdhZEIyUSIsImF1ZCI6WyIiXSwiZXhwIjoxNzc4OTY5MDM1LCJqdGkiOiI0YzlmZmRlYS1iZWViLTQ3Y2UtYjY0NS0yMjQyYTc4MTlhMDYiLCJlbSI6ImVyb3R0IiwiY3RybHMiOlsidGxzOnNlcnZlcnRlc3QubGFiLnBydjoxMjgwIl19.Bh7bd_oYjC0Y-YtxkmLQZsJ5J-CHi4enI5A-rbQ7c7N6n44EAC2hfFy1f-ve6vVoJA-7bko7A5Yw57llCUy55yiwSMeuh5XTjiy2bdpL3v3A6MqbVA7mCSE5WYHIOcCGuo-fLdy_iZ-r0ZZNjHiI_9_PWJ2_SLUcx45OsNA6gBHtMwEN4yZKPxGYoSesBnAJ__cdqKXx9S_IG8U-wLQQE0eDK8Je21wavj4kZuCm297UUjocg7xk0qkiPQ3TkyJZDWYOM0YjJmKWBexDWzJF-ANG3Zz8A38kiRIAEHYFBM1KTgS8RbjJ6ruK8vwaHtAtnxp-neHNtrP64Xb0D5VDem4k1NV_Lc_X53u004E3jHWYwb1n8IJ72liF4sTtczQllsHmgTj756l07j6r4P8Jlv1uPkL3cMSiOj6ZiUdYROZj76befSgZQ95C2vj5Zj3-0KvQnUcnqCcWO0aMtJYXSPEsOjesukqZkIuY7Ce_796VQbBgSre4bBydpJu4o4-ktz_XmNtP-dvScHNr-32qUpvxanWlG7RfSwM7u1qfzL1vxfbGWwB8xvrt516fYricip7pGcHadxJZfZvc2gYm55lZB8TBLfAX5qAYX1EpS2CfZr_k_av7Z51EiwqDEYr-9ogc4RouaoVTe4PB8f4Xhx5C-Yy6J4e-m9ZHTRnx7Nsrchiatto@vm-srv-test:~$</pre><p>&nbsp;</p>
<h4><strong>4.3 AVVIARE IL BOOSTRAP DEL ROUTER</strong></h4>
<p>Eseguire il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo /opt/openziti/etc/router/bootstrap.bash</pre><p>Rispondere alle domande come di seguito:</p>
<table style="height: 100%; border-style: solid; width: 100%; border-color: #000000;" border="1" width="100%">
<tbody>
<tr>
<td style="text-align: center;" width="290"><strong>Domanda</strong></td>
<td style="text-align: center;" width="316"><strong>Risposta</strong></td>
</tr>
<tr>
<td width="290">Address of the controller</td>
<td width="316">servertest.lab.prv</td>
</tr>
<tr>
<td width="290">Controller port</td>
<td width="316">1280 (default)</td>
</tr>
<tr>
<td width="290">DNS name or IP address of this router</td>
<td width="316">localhost</td>
</tr>
<tr>
<td width="290">Permanent external address</td>
<td width="316">servertest.lab.prv</td>
</tr>
<tr>
<td width="290">Router Port</td>
<td width="316">3022 (default)</td>
</tr>
<tr>
<td width="290">Enrollment token</td>
<td width="316">Incolla il contenuto del file /tmp/router.jwt</td>
</tr>
</tbody>
</table>
<p>Al termine abilitare il router con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl enable --now ziti-router</pre><p>Quindi eseguire l&#8217;enrollment con il JWT con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo ziti router enroll \
/var/lib/private/ziti-router/config.yml \
--jwt /tmp/router.jwt</pre><p>Cambiare il proprietario dei file root:root a nobody:nogroup con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo chown nobody:nogroup \
/var/lib/private/ziti-router/router.key \
/var/lib/private/ziti-router/router.cas \
/var/lib/private/ziti-router/router.server.chain.cert \
/var/lib/private/ziti-router/endpoints.yml</pre><p>Verificare le ACL con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo ls -la /var/lib/private/ziti-router/</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">drwxr-xr-x 2 nobody nogroup 4096 May 16 19:11 .
drwx------ 4 root root 4096 May 16 19:05 ..
-rw-r--r-- 1 nobody nogroup 1560 May 16 19:07 config.yml
-rw------- 1 nobody nogroup 41 May 16 19:11 endpoints.yml
-rw------- 1 nobody nogroup 4250 May 16 19:11 router.cas
-rw------- 1 nobody nogroup 3243 May 16 19:11 router.key
-rw------- 1 nobody nogroup 4252 May 16 19:11 router.server.chain.cert</pre><p>&nbsp;</p>
<h4><strong>4.4 VERIFICARE LO STATO DEL ROUTER</strong></h4>
<p>Controllare che il servizio sia attivo con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl status ziti-router</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">● ziti-router.service - OpenZiti Router
Loaded: loaded (/usr/lib/systemd/system/ziti-router.service; enabled; pres&gt;
Drop-In: /etc/systemd/system/ziti-router.service.d
└─override.conf
Active: active (running) since Sat 2026-05-16 19:17:07 UTC; 19ms ago
Invocation: ae59ec8bd0e64710b62adac8855aeb8a
Process: 6671 ExecStartPre=/opt/openziti/etc/router/entrypoint.bash check c&gt;
Main PID: 6680 (ziti)
Tasks: 5 (limit: 6210)
Memory: 3.2M (peak: 3.2M)
CPU: 36ms
CGroup: /system.slice/ziti-router.service
└─6680 /opt/openziti/bin/ziti router run config.yml --extend

May 16 19:17:07 servertest.lab.prv systemd[1]: Starting ziti-router.service - O&gt;
May 16 19:17:07 servertest.lab.prv entrypoint.bash[6671]: WARN: set VERBOSE=1 o&gt;
May 16 19:17:07 servertest.lab.prv entrypoint.bash[6671]: WARN: see output in '&gt;
May 16 19:17:07 servertest.lab.prv systemd[1]: Started ziti-router.service - Op&gt;</pre><p>Verificare i log con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo journalctl -u ziti-router -f</pre><p>&nbsp;</p>
<h3></h3>
<h3><strong>FASE 5 — CONFIGURAZIONE POLICY DI DEFAULT</strong></h3>
<p>Dopo l&#8217;installazione creare le policy per permettere a identità e servizi di usare il router.</p>
<p>Assicurati di essere loggato</p><pre class="urvanov-syntax-highlighter-plain-tag">ziti edge login servertest.lab.prv:1280 -u admin -p PASSWORD --yes</pre><p>Creare una <strong>Edge Router Policy</strong> (tutti i client possono usare router con attributo #public)</p><pre class="urvanov-syntax-highlighter-plain-tag">ziti edge create edge-router-policy "all-endpoints-all-routers" \
--edge-router-roles '#public' \
--identity-roles '#all'</pre><p>Creare una <strong>Service Edge Router Policy</strong> (tutti i servizi possono usare router #public)</p><pre class="urvanov-syntax-highlighter-plain-tag">ziti edge create service-edge-router-policy "all-services-all-routers" \
--edge-router-roles '#public' \
--service-roles '#all'</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>FASE 6 &#8211; INSTALLAZIONE DELLA CONSOLE WEB (ZAC)</strong></h3>
<p>Installare il pacchetto della console con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y openziti-console</pre><p>Poi bisogna abilitarla nel config del controller quindi aprire il config del controller con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano /var/lib/private/ziti-controller/config.yml</pre><p>Cercare la sezione web e aggiungere il binding zac.</p>
<p>Dovrebbe già esserci una sezione simile nel caso va aggiunto zac agli apis:</p><pre class="urvanov-syntax-highlighter-plain-tag">yaml apis:
- binding: edge-management
- binding: edge-client
- binding: fabric
- binding: zac</pre><p>Salvare e poi riavviare il controller con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl restart ziti-controller</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>FASE 7 — ACCESSO ALLA CONSOLE WEB (ZAC)</strong></h3>
<p>Aprire il browser e richiamare il seguente link:</p>
<p><strong>https://servertest.lab.prv:1280/zac</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123811 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-01-1024x506.png" alt="" width="1024" height="506" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-01-980x485.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-01-480x237.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se abbiamo fatto tutto correttamente dovremmo visualizzare una schermata come quella mostrata nell&#8217;immagine sovrastante</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123812 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-02-1024x505.png" alt="" width="1024" height="505" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-02-980x483.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-02-480x237.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Inserire le credenziali di accesso</p>
<p><strong>Username</strong>: admin<br />
<strong>Password</strong>: quella impostata/generata al passo 3.2</p>
<p>Cliccare <strong>Login</strong></p>
<p><strong>ATTENZIONE</strong>: Il certificato è self-signed: accetta l&#8217;eccezione nel browser (è normale in ambiente lab).</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123813 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-03-1024x508.png" alt="" width="1024" height="508" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-03-980x486.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-openziti-ubuntu-03-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Dovremmo visualizzare la <strong>Ziti Admin Console</strong></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/costruire-un-ambiente-di-rete-zero-trust-con-openziti-su-ubuntu-server-26-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installazione e Configurazione di Komodo su Ubuntu Server 26.04</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-di-komodo-su-ubuntu-server-26-04/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-di-komodo-su-ubuntu-server-26-04/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Thu, 11 Jun 2026 06:38:07 +0000</pubDate>
				<category><![CDATA[Komodo]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[komodo]]></category>
		<category><![CDATA[Ubuntu 26.04]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1123759</guid>

					<description><![CDATA[&#160; Gestire più server, tenere sotto controllo i container Docker, automatizzare i deployment e monitorare le risorse di sistema da un&#8217;unica interfaccia: è esattamente quello che promette Komodo, un progetto open-source che negli ultimi mesi sta guadagnando sempre più attenzione nella community homelab e non solo. Se hai già utilizzato Portainer, l&#8217;idea di base ti [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091058 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png" alt="" width="679" height="89" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<p>Gestire più server, tenere sotto controllo i container Docker, automatizzare i deployment e monitorare le risorse di sistema da un&#8217;unica interfaccia: è esattamente quello che promette Komodo, un progetto open-source che negli ultimi mesi sta guadagnando sempre più attenzione nella community homelab e non solo.</p>
<p>Se hai già utilizzato Portainer, l&#8217;idea di base ti sarà familiare ma Komodo spinge il concetto un passo più avanti.</p>
<p>Oltre alla gestione dei container, integra un sistema di build, procedure automatizzate, alerting e un agente leggero chiamato Periphery che permette di collegare e supervisionare server remoti senza la complessità di soluzioni enterprise.</p>
<p>Il tutto completamente gratuito e con il codice sorgente disponibile su GitHub.</p>
<p>In questa guida vedremo come installare e configurare Komodo su Ubuntu Server 26.04, utilizzando Docker Compose e MongoDB come backend.</p>
<p>Seguiremo ogni passaggio dalla preparazione dell&#8217;ambiente fino al primo accesso all&#8217;interfaccia web, con qualche consiglio utile per adattare la configurazione al proprio setup.</p>
<p>Che tu stia cercando un pannello di controllo per il tuo homelab o uno strumento più strutturato per gestire ambienti multi-server, Komodo potrebbe essere esattamente quello che fa per te.</p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<ul>
<li>Ubuntu Server 26.04 aggiornato</li>
<li>Accesso root o utente con sudo</li>
<li>Docker Engine installato (vedi sotto)</li>
<li>Porte 9120 disponibile nel firewall</li>
</ul>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DI DOCKER ENGINE</strong></h3>
<p>Aggiornare i pacchetti con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update &amp;&amp; sudo apt upgrade -y</pre><p>Installare le dipendenze con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y ca-certificates curl gnupg</pre><p>Aggiungere la chiave GPG ufficiale di Docker con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg</pre><p>Aggiungere il repository Docker con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;&amp; echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null</pre><p>Installare Docker con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin</pre><p>Verificare che Docker funzioni con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo docker run --rm hello-world</pre><p>Se è tutto ok dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
4f55086f7dd0: Pull complete
d5e71e642bf5: Download complete
Digest: sha256:f9078146db2e05e794366b1bfe584a14ea6317f44027d10ef7dad65279026885
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/</pre><p>Aggiungere il proprio utente al gruppo docker per evitare di usare sudo ogni volta con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo usermod -aG docker $USER &amp;&amp; newgrp docker</pre><p>&nbsp;</p>
<h3><strong>CREAZIONE DELLA STRUTTURA DI CARTELLE</strong></h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">mkdir -p ~/komodo

cd ~/komodo</pre><p>&nbsp;</p>
<h3><strong>DOWNLOAD DEL FILE DI CONFIGURAZIONE</strong></h3>
<p>Komodo fornisce un file compose.yaml e un file di variabili d&#8217;ambiente pronti all&#8217;uso. Scaricarli nella cartella appena creata:</p>
<p>File Docker Compose (con MongoDB — opzione consigliata):</p><pre class="urvanov-syntax-highlighter-plain-tag">wget -O mongo.compose.yaml \
https://raw.githubusercontent.com/moghtech/komodo/main/compose/mongo.compose.yaml</pre><p>File delle variabili d&#8217;ambiente:</p><pre class="urvanov-syntax-highlighter-plain-tag">wget -O compose.env \
https://raw.githubusercontent.com/moghtech/komodo/main/compose/compose.env</pre><p>&nbsp;</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>ATTENZIONE</strong>: Se il tuo server ha hardware datato o un kernel vecchio che non supporta MongoDB recente, usa invece ferretdb.compose.yaml:</p><pre class="urvanov-syntax-highlighter-plain-tag">wget -O ferretdb.compose.yaml \
https://raw.githubusercontent.com/moghtech/komodo/main/compose/ferretdb.compose.yaml</pre><p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DELLE VARIABILI DI AMBIENTE</strong></h3>
<p>Aprire compose.env con un editor:</p><pre class="urvanov-syntax-highlighter-plain-tag">nano compose.env</pre><p>Le variabili essenziali da modificare sono:</p>
<p>Tag versione immagine (2 = ultima major release)</p><pre class="urvanov-syntax-highlighter-plain-tag">COMPOSE_KOMODO_IMAGE_TAG="2"</pre><p>Percorso backup del database</p><pre class="urvanov-syntax-highlighter-plain-tag">COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups</pre><p>Credenziali MongoDB — Modificarle!!!</p><pre class="urvanov-syntax-highlighter-plain-tag">KOMODO_DATABASE_USERNAME=admin
KOMODO_DATABASE_PASSWORD=una_password_sicura</pre><p>Fuso orario</p><pre class="urvanov-syntax-highlighter-plain-tag">TZ=Europe/Rome</pre><p>URL pubblico di Komodo (usare IP o dominio reale)</p><pre class="urvanov-syntax-highlighter-plain-tag">KOMODO_HOST=http://192.168.1.100:9120</pre><p>Titolo visualizzato nel browser</p><pre class="urvanov-syntax-highlighter-plain-tag">KOMODO_TITLE=Komodo</pre><p>Credenziali admin iniziale — Modificarle!!!</p><pre class="urvanov-syntax-highlighter-plain-tag">KOMODO_INIT_ADMIN_USERNAME=admin
KOMODO_INIT_ADMIN_PASSWORD=una_password_sicura</pre><p>Segreti JWT e webhook — Modificarli con stringhe casuali!!!</p><pre class="urvanov-syntax-highlighter-plain-tag">KOMODO_WEBHOOK_SECRET=segreto_webhook_casuale (fsj09fuy039rjiodcj0923urhjdi)
KOMODO_JWT_SECRET=segreto_jwt_casuale (08dsfjksaOi32ein23o9ruu23)</pre><p>Nome del primo server (di solito l&#8217;hostname va bene)</p><pre class="urvanov-syntax-highlighter-plain-tag">KOMODO_FIRST_SERVER_NAME=server-locale</pre><p>Salvare e chiudere il file di configurazione</p>
<p>&nbsp;</p>
<h3><strong>CREAZIONE DELLA CARTELLA DI BACKUP</strong></h3>
<p>Creare la cartella con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo mkdir -p /etc/komodo/backups</pre><p>&nbsp;</p>
<h3><strong>AVVIO DI KOMODO CON DOCKER COMPOSE</strong></h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose -p komodo \
-f ~/komodo/mongo.compose.yaml \
--env-file ~/komodo/compose.env \
up -d</pre><p>Verificare che tutti e tre i container siano in esecuzione:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose -p komodo ps</pre><p>L&#8217;output atteso mostra mongo, core e periphery tutti in stato running come mostrato sotto:</p><pre class="urvanov-syntax-highlighter-plain-tag">NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
komodo-core-1 ghcr.io/moghtech/komodo-core:2 "entrypoint.sh core" core 13 seconds ago Up 12 seconds 0.0.0.0:9120-&gt;9120/tcp, [::]:9120-&gt;9120/tcp
komodo-mongo-1 mongo "docker-entrypoint.s…" mongo 19 seconds ago Up 12 seconds 27017/tcp
komodo-periphery-1 ghcr.io/moghtech/komodo-periphery:2 "entrypoint.sh perip…" periphery 13 seconds ago Up 12 seconds 8120/tcp</pre><p>&nbsp;</p>
<h3><strong>APERTURE FIREWALL</strong></h3>
<p>Di seguito i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo ufw allow 9120/tcp

sudo ufw reload</pre><p>&nbsp;</p>
<h3><strong>PRIMO ACCESSO DALL&#8217;INTERFACCIA WEB</strong></h3>
<p>Aprire il browser e navigare su:</p>
<p><strong>http://&lt;IP-del-server&gt;:9120</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-komodo-ubuntu-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123770 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-komodo-ubuntu-01-1024x547.png" alt="" width="1024" height="547" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-komodo-ubuntu-01-980x524.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-komodo-ubuntu-01-480x257.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>IMPORTANTE</strong>: al primo avvio fare clic su <strong>Sign Up</strong>, non su <strong>Log In</strong>.<br />
Inserire le credenziali impostate in compose.env (<strong>KOMODO_INIT_ADMIN_USERNAME / KOMODO_INIT_ADMIN_PASSWORD</strong>). Questo crea l&#8217;account amministratore iniziale.</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-komodo-ubuntu-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123771 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-komodo-ubuntu-02-1024x547.png" alt="" width="1024" height="547" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-komodo-ubuntu-02-980x523.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-komodo-ubuntu-02-480x256.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se è andato tutto a buon fine dovremmo accedere alla <strong>Dashboard di Komodo</strong></p>
<p>&nbsp;</p>
<h3><strong>VERIFICA DEL SERVER LOCALE</strong></h3>
<p>Dopo il login andare su Servers nel menu di sinistra. Il server locale (chiamato come impostato in <strong>KOMODO_FIRST_SERVER_NAME</strong>) dovrebbe già risultare connesso tramite il container Periphery avviato in automatico.</p>
<p>&nbsp;</p>
<h3><strong>COMANDI UTILI</strong></h3>
<p>Vedere i log in tempo reale con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose -p komodo -f ~/komodo/mongo.compose.yaml logs -f</pre><p>Fermare Komodo con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose -p komodo -f ~/komodo/mongo.compose.yaml down</pre><p>Aggiornare Komodo all&#8217;ultima versione con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose -p komodo -f ~/komodo/mongo.compose.yaml pull

docker compose -p komodo -f ~/komodo/mongo.compose.yaml up -d</pre><p>Per gestire server aggiuntivi con Komodo, bisogna installare il Periphery agent su ciascuno di essi. La guida ufficiale è disponibile su <a href="https://komo.do/docs/setup/connect-servers" target="_blank" rel="noopener">Connect More Servers | Komodo</a></p>
<p>&nbsp;</p>
<h3><strong>PRO E CONTRO</strong></h3>
<h4><strong>PRO</strong></h4>
<p><strong>Open source e gratuito</strong>: nessun piano a pagamento per le funzionalità core, a differenza di Portainer che nasconde molte feature dietro licenza Business.</p>
<p><strong>Multi-server nativo:</strong> l&#8217;agente Periphery permette di collegare e monitorare server remoti in modo semplice, senza configurazioni complesse.</p>
<p><strong>Tutto in uno:</strong> gestione container, build di immagini, deployment automatizzati, procedure schedulate e alerting sono integrati nella stessa piattaforma.</p>
<p><strong>Interfaccia moderna e reattiva</strong>: la UI è pulita, veloce e decisamente più curata rispetto ad alcune alternative.</p>
<p><strong>Integrazione Git</strong>: supporto nativo per repository Git, utile per workflow GitOps e sincronizzazione di stack Docker Compose.</p>
<p><strong>Webhook e automazione</strong>: supporta trigger via webhook per pipeline CI/CD leggere senza dipendere da strumenti esterni.</p>
<p><strong>Comunità attiva</strong>: sviluppo frequente, issue tracker reattivo e buona documentazione ufficiale.</p>
<p>&nbsp;</p>
<h4><strong>CONTRO</strong></h4>
<p><strong>Nessun supporto Kubernetes</strong>: è pensato esclusivamente per ambienti Docker; chi gestisce cluster K8s deve guardare altrove (Rancher, ArgoCD, ecc.).</p>
<p><strong>Richiede MongoDB o FerretDB</strong>: aggiunge un componente in più da mantenere rispetto a soluzioni che usano SQLite o un semplice file.</p>
<p><strong>Curva di apprendimento iniziale</strong>: il modello Core + Periphery può disorientare chi si aspetta uno strumento plug-and-play come Portainer.</p>
<p><strong>Ecosistema ancora giovane</strong>: rispetto a soluzioni più mature mancano alcune integrazioni e plugin di terze parti.</p>
<p><strong>Nessuna gestione IAM avanzata</strong>: il controllo degli accessi è presente ma basilare; non è adatto ad ambienti enterprise con esigenze complesse di ruoli e permessi.</p>
<p><strong>Terminali remoti dipendenti dalla rete</strong>: la funzionalità di shell remota via browser può essere instabile su connessioni lente o con latenza elevata.</p>
<p>In sintesi Komodo è una scelta eccellente per homelab e piccoli ambienti multi-server basati su Docker, ma non è ancora pronto per sostituire strumenti enterprise o per chi lavora con Kubernetes</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-di-komodo-su-ubuntu-server-26-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installazione e Configurazione Base di UTMStack su Ubuntu Server 26.04</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-utmstack-su-ubuntu-server-26-04/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-utmstack-su-ubuntu-server-26-04/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 06:29:17 +0000</pubDate>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[UTMStack]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[SIEM]]></category>
		<category><![CDATA[Ubuntu26.04]]></category>
		<category><![CDATA[XDR]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1123727</guid>

					<description><![CDATA[&#160; Nel panorama della sicurezza informatica moderna, proteggere la propria infrastruttura non è più un&#8217;opzione riservata alle grandi aziende: è una necessità concreta anche per chi gestisce ambienti homelab, piccole reti aziendali o server esposti su Internet. Le minacce evolvono rapidamente, i log si moltiplicano su decine di sistemi diversi, e tenere tutto sotto controllo [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091058 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png" alt="" width="679" height="89" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<p>Nel panorama della sicurezza informatica moderna, proteggere la propria infrastruttura non è più un&#8217;opzione riservata alle grandi aziende: è una necessità concreta anche per chi gestisce ambienti homelab, piccole reti aziendali o server esposti su Internet.</p>
<p>Le minacce evolvono rapidamente, i log si moltiplicano su decine di sistemi diversi, e tenere tutto sotto controllo manualmente diventa presto impossibile.</p>
<p>È qui che entra in gioco UTMStack, una piattaforma open source di tipo SIEM (Security Information and Event Management) e XDR (Extended Detection and Response) che centralizza la raccolta, l&#8217;analisi e la correlazione degli eventi di sicurezza provenienti da tutta la tua infrastruttura.</p>
<p>In un&#8217;unica interfaccia web puoi monitorare log di sistema, traffico di rete, attività sospette, alert in tempo reale e molto altro, il tutto supportato da regole di correlazione scritte in YAML e da feed di threat intelligence integrati.</p>
<p>In questa guida vedremo come installare e configurare UTMStack su Ubuntu Server 26.04 LTS (Resolute Raccoon), l&#8217;ultima release LTS di Canonical.</p>
<p>Il percorso non è privo di insidie: essendo una distribuzione molto recente, ci troveremo ad affrontare qualche conflitto di pacchetti legato alla coesistenza tra i repository ufficiali di Docker e quelli di Ubuntu.</p>
<p>Niente che non si possa risolvere con i giusti comandi, ma vale la pena documentarlo passo per passo per evitare di perdere tempo davanti a errori criptici.</p>
<p>Alla fine della guida avrai un&#8217;istanza UTMStack perfettamente funzionante, raggiungibile via HTTPS, pronta ad accogliere le prime sorgenti di log e a fare il suo lavoro: tenerti un passo avanti rispetto a chi cerca di entrare dove non dovrebbe.</p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<p>Requisiti minimi assoluti (verificati dall&#8217;installer stesso):</p>
<p>2 CPU core<br />
16 GB di RAM<br />
30 GB di spazio libero su disco<br />
Connessione Internet per il download dei componenti<br />
Accesso root</p>
<p>Sulla base di quanto trovato nella documentazione ufficiale i requisiti variano in base al numero di sorgenti di log che vuoi monitorare e alla retention desiderata (assumendo ~100 GB/mese per 60 dispositivi):</p>
<table style="border-style: solid; width: 691px; border-color: #000000;" border="1" width="691">
<tbody>
<tr>
<td width="226"><strong>Data source</strong></td>
<td width="155"><strong>CPU</strong></td>
<td width="155"><strong>RAM</strong></td>
<td width="155"><strong>Disco</strong></td>
</tr>
<tr>
<td width="226">~50 sorgenti (120 GB/mese)</td>
<td width="155">4 core</td>
<td width="155">16 GB</td>
<td width="155">150 GB</td>
</tr>
<tr>
<td width="226">~120 sorgenti (250 GB/mese)</td>
<td width="155">8 core</td>
<td width="155">16 GB</td>
<td width="155">250 GB</td>
</tr>
<tr>
<td width="226">~240 sorgenti (500 GB/mese)</td>
<td width="155">16 core</td>
<td width="155">32 GB</td>
<td width="155">500 GB</td>
</tr>
<tr>
<td width="226">~500 sorgenti (1 TB/mese)</td>
<td width="155">32 core</td>
<td width="155">64 GB</td>
<td width="155">1000 GB</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3><strong>RIMUOVERE DOCKER.IO E RESIDUI</strong></h3>
<p>Eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">apt remove -y docker.io docker-compose docker-compose-v2 docker-doc containerd runc 2&gt;/dev/null || true

apt autoremove -y</pre><p>&nbsp;</p>
<h3></h3>
<h3><strong>INSTALLAZIONE DI DOCKER CE UFFICIALE PER UBUNTU 26.04</strong></h3>
<p>Docker 29 include il supporto nativo per Ubuntu 26.04 (resolute) nei repository ufficiali senza bisogno di workaround sul repo noble.</p>
<p>Eseguire il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">apt install -y ca-certificates curl</pre><p>Aggiungere la GPG key di Docker con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

chmod a+r /etc/apt/keyrings/docker.asc</pre><p>Aggiungere il repository Docker (resolute) con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release &amp;&amp; echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list &gt; /dev/null</pre><p>Aggiornare e installare Docker CE con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">apt update

apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</pre><p>Verificare che Docker funzioni con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">systemctl enable --now docker

docker run hello-world</pre><p>Se è tutto OK dovremmo visualizzare <strong>Hello from Docker!</strong></p>
<p>Forzare l&#8217;installazione di docker compose sovrascrivendo il file in conflitto con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">apt install -y -o Dpkg::Options::="--force-overwrite" docker-compose-v2</pre><p>Questo dice a dpkg di sovrascrivere <strong>/usr/libexec/docker/cli-plugins/docker-compose</strong> senza protestare.</p>
<p>Il file finale sarà quello di docker-compose-v2 ma entrambi i pacchetti risulteranno installati e dpkg sarà soddisfatto.</p>
<p>&nbsp;</p>
<h3><strong>PREPARAZIONE DEL SISTEMA</strong></h3>
<p>Aggiornare i pacchetti e installare le dipendenze di base:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update &amp;&amp; sudo apt upgrade -y

sudo apt install -y wget curl</pre><p>Assicurarsi di operare come root per tutta l&#8217;installazione:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo -i</pre><p>&nbsp;</p>
<h3><strong>DOWNLOAD DELL&#8217;INSTALLER</strong></h3>
<p>Scaricare l&#8217;ultima versione dell&#8217;installer direttamente da GitHub:</p><pre class="urvanov-syntax-highlighter-plain-tag">wget https://github.com/utmstack/UTMStack/releases/latest/download/installer</pre><p>Rendere il file eseguibile con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">chmod +x installer</pre><p>&nbsp;</p>
<h3><strong>ESECUZIONE DELL&#8217;INSTALLER</strong></h3>
<p>Eseguire l&#8217;installer come root con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">./installer</pre><p>L&#8217;installer esegue automaticamente una serie di operazioni in sequenza: verifica i requisiti di sistema (almeno 2 CPU core e 30 GB di spazio libero), prepara il sistema, installa i componenti necessari, configura lo stack e inizializza i database.</p>
<p>L&#8217;installazione richiede alcuni minuti. Al termine viene generata una password casuale per l&#8217;utente admin.</p>
<p>Al termine dovemmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">### Installing UTMStack ###
Generating Stack configuration...
Balancing memory...
Memory distribution successful. Total Assigned: 13476MB (Available: 13476MB)
Configuring Docker [OK]
Initializing Swarm [OK]
Downloading images:
Downloading ghcr.io/utmstack/utmstack/eventprocessor:v11.2.6... [OK]
Downloading ghcr.io/utmstack/utmstack/eventprocessor:v11.2.6... [OK]
Downloading ghcr.io/utmstack/utmstack/web-pdf:v11.2.6... [OK]
Downloading ghcr.io/utmstack/utmstack/agent-manager:v11.2.6... [OK]
Downloading ghcr.io/utmstack/utmstack/postgres:latest... [OK]
Downloading ghcr.io/utmstack/utmstack/frontend:v11.2.6... [OK]
Downloading ghcr.io/utmstack/utmstack/backend:v11.2.6... [OK]
Downloading ghcr.io/utmstack/utmstack/opensearch:latest... [OK]
Downloading ghcr.io/utmstack/utmstack/user-auditor:v11.2.6... [OK]
Installing reverse proxy. This may take a while. [OK]
Installing Administration Tools [OK]
Initializing UTMStack and AgentManager databases [OK]
Initializing User Auditor database [OK]
Initializing OpenSearch. This may take a while. [OK]
Waiting for Backend to be ready. This may take a while. [OK]
Generating Connection Key [OK]
Generating Base URL [OK]
Installing Updater Service [OK]
Running post installation scripts. This may take a while.
Securing ports 9200, 5432 and 10000 [OK]
Restarting Stack [OK]
Cleaning up Docker system [OK]
Installation fisnished successfully. We have generated a configuration file for you, please do not modify or remove it. You can find it at /root/utmstack.yml.
You can also use it to re-install your stack in case of a disaster or changes in your hardware. Just run the installer again.
You can access to your Web-GUI at https://&lt;your-server-ip&gt; using admin as your username
Web-GUI default password for admin: 26tS2jvcZgViuGyM
You can also access to your Web-based Administration Interface at https://&lt;your-server-ip&gt;:9090 using your Linux system credentials.
Detailed installation logs can be found at /var/log/utmstack-installer.log
### Thanks for using UTMStack ###</pre><p>&nbsp;</p>
<h3><strong>RECUPERO DELLE CREDENZIALI (OPZIONALE)</strong></h3>
<p>Al termine dell&#8217;installazione la password generata e le configurazioni si trovano in:</p><pre class="urvanov-syntax-highlighter-plain-tag">cat /root/utmstack.yml</pre><p>Annotare la password perchè servirà per il primo accesso.</p>
<p>&nbsp;</p>
<h3><strong>ACCESSO ALL&#8217;INTERFACCIA WEB</strong></h3>
<p>Aprire il browser e richiamare l&#8217;indirizzo del server usando HTTPS. L&#8217;utente predefinito è admin e la password è quella generata durante l&#8217;installazione:</p>
<p><strong>https://&lt;IP_DEL_SERVER&gt;</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123736 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-01-1024x490.png" alt="" width="1024" height="490" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-01-980x469.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-01-480x230.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Dovremmo visualizzare una schermata come quella sovrastante</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>ATTENZIONE: Usare sempre https://, non http://.</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123737 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-02-1024x489.png" alt="" width="1024" height="489" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-02-980x468.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-02-480x229.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Inserire le credenziali di accesso quidi cliccare <strong>Sign In</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123738 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-03-1024x488.png" alt="" width="1024" height="488" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-03-980x467.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-03-480x229.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare su <strong>Authenticator App</strong> per configurare l&#8217;autenticazione a due fattori</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-04.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123739 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-04-1024x488.png" alt="" width="1024" height="488" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-04-980x467.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-04-480x229.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Inserire il codice a <strong>6 cifre</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-05.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123740 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-05-1024x488.png" alt="" width="1024" height="488" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-05-980x467.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-05-480x229.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare <strong>Complete</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-06.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123742 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-06-1024x489.png" alt="" width="1024" height="489" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-06-980x468.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-06-480x229.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare se procedere con il <strong>Quick Setup</strong> oppure con l&#8217;installazione <strong>Expert Mode</strong></p>
<p>In questo tutorial procederò con il <strong>Quick Setup</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-07.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123743 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-07-1024x491.png" alt="" width="1024" height="491" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-07-980x470.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-07-480x230.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Inserire l&#8217;indirizzo email, la password corrente quindi creare una nuova password. Cliccare <strong>Set up</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-08.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123744 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-08-1024x489.png" alt="" width="1024" height="489" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-08-980x468.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-08-480x229.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare <strong>Continue</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-09.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123746 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-09-1024x490.png" alt="" width="1024" height="490" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-09-980x469.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-utmstack-ubuntu-09-480x230.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Compilare tutti i campi relativi al mail server e alle notifiche quindi cliccare <strong>Save Changes</strong></p>
<h3></h3>
<h3><strong>CONFIGURAZIONE INIZIALE</strong></h3>
<p>Dopo il login:</p>
<p>Andare alla sezione Integrations per installare gli agenti sui dispositivi da monitorare.</p>
<p>Configurare le sorgenti di log (firewall, server, endpoint, SaaS).</p>
<p>Rivedere le Correlation Rules per personalizzare gli alert.</p>
<p>&nbsp;</p>
<h3><strong>PORTE DA APRIRE SUL FIREWALL</strong></h3>
<p>Configurare UFW per consentire le porte necessarie:</p>
<p>SSH (limita all&#8217;IP di admin)</p><pre class="urvanov-syntax-highlighter-plain-tag">ufw allow from &lt;IP_ADMIN&gt; to any port 22</pre><p>Web UI (HTTPS redirect)</p><pre class="urvanov-syntax-highlighter-plain-tag">ufw allow 80/tcp
ufw allow 443/tcp</pre><p>Syslog</p><pre class="urvanov-syntax-highlighter-plain-tag">ufw allow 514/tcp
ufw allow 514/udp</pre><p>Agent communication</p><pre class="urvanov-syntax-highlighter-plain-tag">ufw allow 9000/tcp

ufw enable</pre><p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> NOTA SU UBUNTU 26.04</strong>: Ubuntu 26.04 LTS è appena uscita (aprile 2026) e UTMStack non ha ancora rilasciato supporto ufficiale.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-utmstack-su-ubuntu-server-26-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installazione e Configurazione Base di PatchMon v2 su Ubuntu Server 26.04</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-patchmon-v2-su-ubuntu-server-26-04/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-patchmon-v2-su-ubuntu-server-26-04/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Thu, 04 Jun 2026 06:26:33 +0000</pubDate>
				<category><![CDATA[PatchMon]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[powershell]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1123679</guid>

					<description><![CDATA[&#160; Mantenere i propri server aggiornati è una delle pratiche fondamentali per garantire sicurezza e stabilità in qualsiasi infrastruttura, che si tratti di un homelab casalingo o di un ambiente di produzione. Sapere in tempo reale quali pacchetti necessitano di aggiornamento, quali patch di sicurezza sono disponibili e avere una visione centralizzata dello stato dei [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091058 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png" alt="" width="679" height="89" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<p>Mantenere i propri server aggiornati è una delle pratiche fondamentali per garantire sicurezza e stabilità in qualsiasi infrastruttura, che si tratti di un homelab casalingo o di un ambiente di produzione.</p>
<p>Sapere in tempo reale quali pacchetti necessitano di aggiornamento, quali patch di sicurezza sono disponibili e avere una visione centralizzata dello stato dei propri sistemi Linux è qualcosa che, fino a poco tempo fa, richiedeva script personalizzati o soluzioni enterprise costose.</p>
<p>PatchMon v2 si propone come una soluzione open source elegante e leggera per il monitoraggio degli aggiornamenti su sistemi Debian/Ubuntu, offrendo una dashboard web intuitiva, notifiche configurabili e un&#8217;API REST che si integra facilmente con i principali strumenti di automazione e orchestrazione.</p>
<p>In questa guida vedremo come installare e configurare PatchMon v2 da zero su Ubuntu Server 26.04 LTS, la nuova release a supporto prolungato che introduce diverse ottimizzazioni lato sicurezza e gestione dei pacchetti. Partiremo dai prerequisiti di sistema, passeremo attraverso l&#8217;installazione del servizio e la sua configurazione base, fino ad avere un&#8217;istanza perfettamente funzionante e pronta all&#8217;uso.</p>
<p>Che tu stia gestendo un singolo server o una piccola flotta di macchine, al termine di questa guida avrai un sistema di monitoraggio delle patch affidabile, sempre sotto controllo.</p>
<h3><strong>PREREQUISITI</strong></h3>
<p>Ubuntu Server 26.04 LTS (Resolute Raccoon)</p>
<p>Architettura amd64/arm64</p>
<p>Utente con privilegi sudo o root</p>
<p>&nbsp;</p>
<h3><strong>AGGIORNAMENTO DEL SISTEMA</strong></h3>
<p>Aggiornare il sistema con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update &amp;&amp; sudo apt upgrade -y</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>RIMOZIONE DEI PACCHETTI DOCKER CONFLITTUALI</strong></h3>
<p>Prima di installare Docker Engine, devi rimuovere eventuali pacchetti non ufficiali che potrebbero creare conflitti: Docker</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc -y</pre><p>Non preoccuparti se alcuni pacchetti non risultano installati è normale.</p>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DOCKER CE DAL REPOSITORY UFFICIALE</strong></h3>
<p>Per avere sempre le ultime patch di sicurezza, aggiungi il repository ufficiale Docker alle sorgenti APT: iRexta</p>
<p>Installare i prerequisiti con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install ca-certificates curl -y</pre><p>Aggiungere la GPG key ufficiale di Docker con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc</pre><p>Aggiungere il repository (usa automaticamente il codename &#8220;resolute&#8221;) con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release &amp;&amp; echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null</pre><p>Aggiornare l&#8217;indice e installare Docker con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>VERIFICARE DOCKER E ABILITARE L&#8217;AVVIO AUTOMATICO</strong></h3>
<p>Verificare e abilitare Docker con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl enable --now docker

sudo systemctl status docker</pre><p>Dovremmo vedere Active: active (running).</p>
<p>&nbsp;</p>
<h3><strong>AGGIUNGERE IL TUO UTENTE AL GRUPPO DOCKER (OPZIONALE MA CONSIGLIATO)</strong></h3>
<p>Per eseguire i comandi Docker senza sudo aggiungere il tuo utente al gruppo docker con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo usermod -aG docker $USER

newgrp docker</pre><p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>ATTENZIONE</strong>: questo equivale a privilegi root sull&#8217;host. Fallo solo con utenti fidati.</p>
<p>&nbsp;</p>
<h3><strong>VERIFICA DEL DOCKER</strong></h3>
<p>Per verificare che Docker funzioni esseguire il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker run hello-world</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
4f55086f7dd0: Pull complete
d5e71e642bf5: Download complete
Digest: sha256:f9078146db2e05e794366b1bfe584a14ea6317f44027d10ef7dad65279026885
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/</pre><p>Quindi verificare la versione di Docker Compose installata con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose version</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">Docker Compose version v5.1.3</pre><p>&nbsp;</p>
<h3></h3>
<h3><strong>INSTALLAZIONE DI PATCHMON V2</strong></h3>
<p>Eseguire lo script di setup da una directory vuota.</p>
<p>Scaricherà automaticamente docker-compose.yml e env.example, genererà tutti i secret necessari e ti guiderà nella configurazione dell&#8217;URL e del fuso orario in modo interattivo.</p>
<p>Eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">mkdir ~/patchmon &amp;&amp; cd ~/patchmon

bash -c "$(curl -fsSL https://raw.githubusercontent.com/PatchMon/PatchMon/refs/heads/main/docker/setup-env.sh)"</pre><p>Lo script chiederà le seguenti cose:</p><pre class="urvanov-syntax-highlighter-plain-tag">Will you be accessing PatchMon via a reverse proxy (nginx, Caddy, etc.)? (y/n) [n]: n

Do you want to change the timezone from UTC? (y/n) [n]: y

PatchMon runs on port 3000 by default. Include the port in your URL unless you are
terminating it at a reverse proxy on a standard port (e.g. https://patchmon.example.com).
Examples: http://192.168.1.10:3000 https://patchmon.local:3000 https://patchmon.example.com

What URL will you use to access PatchMon? [http://localhost:3000]: http://miodominio.lab:3000

Add (a), Remove (r), or Done (d) [d]: d</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>AVVIARE IL CONTAINER</strong></h3>
<p>Eseguire il comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose up -d</pre><p>Verificare che tutti i servizi siano Up:</p><pre class="urvanov-syntax-highlighter-plain-tag">[+] up 48/48
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Image postgres:17-alpine Pulled 10.6s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Image redis:7-alpine Pulled 4.3s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Image guacamole/guacd:latest Pulled 10.3s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Image ghcr.io/patchmon/patchmon-server:latest Pulled 22.2s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Network patchmon_patchmon-internal Created 0.0s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Volume patchmon_postgres_data Created 0.0s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Volume patchmon_redis_data Created 0.0s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Container patchmon-database-1 Healthy 9.6s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Container patchmon-redis-1 Healthy 10.1s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Container patchmon-guacd-1 Healthy 11.6s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Container patchmon-server-1 Started 5.5s</pre><p>Eseguire il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose ps</pre><p>Dovremmo vedere 4 container attivi: server, database (PostgreSQL), redis e guacd.</p><pre class="urvanov-syntax-highlighter-plain-tag">NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
patchmon-database-1 postgres:17-alpine "docker-entrypoint.s…" database 38 seconds ago Up 31 seconds (healthy) 5432/tcp
patchmon-guacd-1 guacamole/guacd:latest "/opt/guacamole/entr…" guacd 38 seconds ago Up 31 seconds (healthy) 4822/tcp
patchmon-redis-1 redis:7-alpine "docker-entrypoint.s…" redis 38 seconds ago Up 31 seconds (healthy) 6379/tcp
patchmon-server-1 ghcr.io/patchmon/patchmon-server:latest "./entrypoint.sh" server 32 seconds ago Up 25 seconds (healthy) 0.0.0.0:3000-&gt;3000/tcp, [::]:3000-&gt;3000/tcp</pre><p>&nbsp;</p>
<h3><strong>WIZARD DI PRIMO ACCESSO TRAMITE WEBGUI</strong></h3>
<p>Aprire il browser e richiamare l&#8217;URL che abbiamo configurato (es. <strong>http://miodominio.lab:3000</strong>).</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123680 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-01-1024x509.png" alt="" width="1024" height="509" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-01-980x487.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-01-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Inserire tutte le info richieste quindi cliccare <strong>Next</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123681 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-02-1024x508.png" alt="" width="1024" height="508" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-02-980x487.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-02-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Scegliere ser attivare l&#8217;MFA subito oppure se farlo dopo quindi cliccare <strong>Next</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123682 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-03-1024x508.png" alt="" width="1024" height="508" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-03-980x486.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-03-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Confermare l&#8217;<strong>URL del Server</strong> e valutare se abilitare il <strong>Certificato Self Signed</strong>. Cliccare <strong>Next</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-04.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123683 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-04-1024x509.png" alt="" width="1024" height="509" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-04-980x487.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-04-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare <strong>Next</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-05.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123684 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-05-1024x509.png" alt="" width="1024" height="509" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-05-980x487.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-05-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare su <strong>Access Dashboard</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-06.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123686 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-06-1024x510.png" alt="" width="1024" height="510" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-06-980x488.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-06-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se è tutto OK dovremmo visualizzare la <strong>Dashboard di Patchmon</strong> come mostrato nell&#8217;immagine sovrastante</p>
<h3></h3>
<h3><strong>AGGIUNTA DI UN SERVER WINDOWS A PATCHMON</strong></h3>
<p>Dalla Dashboard</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-07.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123687 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-07-1024x511.png" alt="" width="1024" height="511" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-07-980x489.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-07-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare su <strong>Host</strong> dal menu laterale quindi <strong>Add Host</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-08.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123688 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-08-1024x493.png" alt="" width="1024" height="493" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-08-980x472.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-08-480x231.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare <strong>Windows</strong> come tipolgia di server quindi cliccare <strong>Next</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-09.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123689 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-09-1024x492.png" alt="" width="1024" height="492" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-09-980x471.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-09-480x230.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Inserire il nome quindi cliccare <strong>Next</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-10.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123691 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-10-1024x495.png" alt="" width="1024" height="495" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-10-980x474.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-10-480x232.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Copiare il comando da eseguire sul server da monitorare</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-11.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123692 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-11-1024x599.png" alt="" width="1024" height="599" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-11-980x573.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-11-480x281.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Sul server da monitorare aprire un <strong>Powershell</strong> con diritti amministrativi quindi incollare il comando</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-12.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123694 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-12-1024x494.png" alt="" width="1024" height="494" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-12-980x472.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-12-480x231.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Sulla <strong>Console PatchMon</strong> dovremmo vedere <strong>Waiting for Connection</strong></p>
<p>Sul Server da monitorare se è andato tutto a buon fine dovremmo visualizzare il seguente output del Powershell:</p><pre class="urvanov-syntax-highlighter-plain-tag">Encoding UTF8; &amp; "$env:TEMP\patchmon-install.ps1"
Fetching credentials from PatchMon server...
Credentials received successfully.
PatchMon Agent Installation for Windows
=======================================
Downloading agent from PatchMon server: http://192.168.80.34:3000/api/v1/hosts/agent/download?arch=amd64&amp;os=windows
Architecture: amd64
Install Path: C:\Program Files\PatchMon
Config Path: C:\ProgramData\PatchMon

Creating installation directory...
Creating configuration directory...
Downloading PatchMon agent...
Download completed.
Installing agent to C:\Program Files\PatchMon\patchmon-agent.exe...
Creating default configuration file...
Adding PatchMon to system PATH...
Configuring API credentials...
Credentials configured successfully.

Testing installation...
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> API credentials are valid
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Connectivity test successful
Installation test successful!

Setting up Windows Service...
Creating Windows Service...
Service created successfully.
Starting service...
Service started successfully!

PatchMon Agent installation completed successfully!

Installation Summary:
â¢ Configuration directory: C:\ProgramData\PatchMon
â¢ Agent binary installed: C:\Program Files\PatchMon\patchmon-agent.exe
â¢ Architecture: amd64
â¢ Windows Service: configured and running
â¢ API credentials configured and tested
â¢ Logs: C:\ProgramData\PatchMon\patchmon-agent.log

Management Commands:
â¢ Test connection: patchmon-agent ping
â¢ Manual report: patchmon-agent report
â¢ Check status: patchmon-agent diagnostics
â¢ Service status: Get-Service -Name PatchMonAgent
â¢ Service logs: Get-Content "C:\ProgramData\PatchMon\patchmon-agent.log" -Tail 50 -Wait
â¢ Restart service: Restart-Service -Name PatchMonAgent

Your system is now being monitored by PatchMon!</pre><p>&nbsp;</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-13.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123695 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-13-1024x491.png" alt="" width="1024" height="491" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-13-980x470.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-13-480x230.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Sulla Console PatchMon dovremmo visualizzare il server appena aggiunto</p>
<p>&nbsp;</p>
<h3><strong>AGGIUNTA DI UN SERVER LINUX A PATCHMON</strong></h3>
<p>Dalla Dashboard</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-14.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123696 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-14-1024x511.png" alt="" width="1024" height="511" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-14-980x489.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-14-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare su <strong>Host</strong> dal menu laterale quindi <strong>Add Host</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-15.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123697 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-15-1024x493.png" alt="" width="1024" height="493" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-15-980x471.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-15-480x231.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare Linux come tipologia di server quindi cliccare <strong>Next</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-16.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123699 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-16-1024x492.png" alt="" width="1024" height="492" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-16-980x471.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-16-480x231.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Inserire il nome quindi cliccare <strong>Next</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-17.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123700 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-17-1024x493.png" alt="" width="1024" height="493" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-17-980x472.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-17-480x231.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Copiare il comando da eseguire sul server Linux da monitorare</p>
<p>Dopo aver eseguito il comando sul server da monitorare se è tutto OK dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">INFO: Installing curl...
SUCCESS: All required packages are already installed

SUCCESS: Dependencies installation completed

INFO: Setting up configuration directory...
INFO: Creating new configuration directory...
INFO: Checking if agent is already configured...
SUCCESS: Agent not yet configured - proceeding with installation

INFO: Creating configuration files...
INFO: Downloading PatchMon agent binary...
INFO: Agent version: Unknown
INFO: Setting up log directory...
INFO: Testing API credentials and connectivity...
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> API credentials are valid
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Connectivity test successful
SUCCESS: TEST: API credentials are valid and server is reachable
INFO: Setting up systemd service...
Created symlink /etc/systemd/system/multi-user.target.wants/patchmon-agent.service → /etc/systemd/system/patchmon-agent.service.
SUCCESS: PatchMon Agent service started successfully
INFO: WebSocket connection established
SUCCESS: PatchMon Agent installation completed successfully!

Installation Summary:
• Configuration directory: /etc/patchmon
• Agent binary installed: /usr/local/bin/patchmon-agent
• Architecture: amd64
• Dependencies installed: curl
• Systemd service configured and running
• API credentials configured and tested
• WebSocket connection established
• Logs directory: /etc/patchmon/logs

Management Commands:
• Test connection: /usr/local/bin/patchmon-agent ping
• Manual report: /usr/local/bin/patchmon-agent report
• Check status: /usr/local/bin/patchmon-agent diagnostics
• Service status: systemctl status patchmon-agent
• Service logs: journalctl -u patchmon-agent -f
• Restart service: systemctl restart patchmon-agent

SUCCESS: Your system is now being monitored by PatchMon!</pre><p>&nbsp;</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-18.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123701 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-18-1024x494.png" alt="" width="1024" height="494" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-18-980x473.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/inst-patchmon-ubuntu-18-480x232.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se è andato tutto a buon fine sulla console di PatchMon dovremmo visualizzare il server aggiunto</p>
<h3></h3>
<h3><strong>DISINSTALLAZIONE DELL&#8217;AGENT PATCHMON DA UN HOST WINDOWS</strong></h3>
<p>Su un server Windows eseguire con una console Powershell con diritti amministrativi eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag"><strong># 1. Ferma il servizio</strong>
Stop-Service -Name "patchmon-agent" -Force -ErrorAction SilentlyContinue

<strong># 2. Rimuovi il servizio Windows</strong>
sc.exe delete "patchmon-agent"

<strong># 3. Rimuovi il binario e i file dell'agente</strong>
Remove-Item -Path "C:\Program Files\patchmon-agent\*" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "C:\Program Files\patchmon-agent" -Recurse -Force -ErrorAction SilentlyContinue

<strong># 4. Rimuovi la configurazione e le credenziali</strong>
Remove-Item -Path "C:\ProgramData\patchmon\*" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "C:\ProgramData\patchmon" -Recurse -Force -ErrorAction SilentlyContinue

<strong># 5. Verifica che il servizio sia stato rimosso</strong>
Get-Service -Name "patchmon-agent" -ErrorAction SilentlyContinue</pre><p>&nbsp;</p>
<p><strong>NOTA BENE</strong>: rimuovere l&#8217;agente dall&#8217;host non lo elimina automaticamente dalla dashboard di PatchMon. Ricordati di cancellare l&#8217;host anche dalla UI per tenerla pulita</p>
<p>&nbsp;</p>
<h3><strong>DISINSTALLAZIONE DELL&#8217;AGENT PATCHMON DA UN HOST LINUX</strong></h3>
<p>Su un server Linux eseguire l&#8217;agente include un comando di disinstallazione integrato:</p><pre class="urvanov-syntax-highlighter-plain-tag"><strong># Rimozione base (binario + crontab)</strong>
sudo patchmon-agent uninstall

<strong># Rimozione completa (binario + config + log)</strong>
sudo patchmon-agent uninstall --remove-all

<strong># Rimozione silenziosa senza conferma</strong>
sudo patchmon-agent uninstall -af</pre><p>Se il server non è raggiungibile, puoi rimuovere l&#8217;agente manualmente:</p><pre class="urvanov-syntax-highlighter-plain-tag"><strong># 1. Ferma e disabilita il servizio (systemd)</strong>

sudo systemctl stop patchmon-agent
sudo systemctl disable patchmon-agent
sudo rm -f /etc/systemd/system/patchmon-agent.service
sudo systemctl daemon-reload

<strong># 2. Termina eventuali processi residui</strong>

sudo pkill -f patchmon-agent

<strong># 3. Rimuovi il binario</strong>

sudo rm -f /usr/local/bin/patchmon-agent
sudo rm -f /usr/local/bin/patchmon-agent.backup.*

<strong># 4. Rimuovi configurazione e log</strong>

sudo rm -rf /etc/patchmon/

<strong># 5. Rimuovi eventuali entry crontab</strong>

crontab -l 2&gt;/dev/null | grep -v "patchmon-agent" | crontab -

<strong># 6. Verifica la rimozione completa</strong>

which patchmon-agent # deve restituire vuoto
ls /etc/patchmon/ 2&gt;/dev/null # deve dire "No such file or directory"
systemctl status patchmon-agent 2&gt;&amp;1 | head -1 # deve dire "not found"
Per Alpine Linux (OpenRC) al posto dei comandi systemd usa:
bashsudo rc-service patchmon-agent stop
sudo rc-update del patchmon-agent default
sudo rm -f /etc/init.d/patchmon-agent</pre><p>&nbsp;</p>
<p><strong>NOTA BENE</strong>: rimuovere l&#8217;agente dall&#8217;host non lo elimina automaticamente dalla dashboard di PatchMon. Ricordati di cancellare l&#8217;host anche dalla UI per tenerla pulita</p>
<p>&nbsp;</p>
<h3><strong>AGGIORNAMENTO DI PATCHMON</strong></h3>
<p>Per aggiornare PatchMon eseguire i comandi elencati di seguito:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd ~/patchmon

docker compose pull

docker compose up -d</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DI PATCHMON DIETRO REVERSE PROXY</strong></h3>
<p>La configurazione si articola in due parti: il file .env di PatchMon e il Proxy Host in NPM.</p>
<h4><strong>Parte 1 — Modificare il file .env di PatchMon</strong></h4>
<p>Questo è il passaggio più importante. Apri il file .env nella directory di PatchMon:</p><pre class="urvanov-syntax-highlighter-plain-tag">nano ~/patchmon/.env</pre><p>Individuare e modificare le seguenti variabili:</p><pre class="urvanov-syntax-highlighter-plain-tag">env# URL pubblico del tuo server PatchMon
SERVER_PROTOCOL=https
SERVER_HOST=patchmon.tuodominio.it
SERVER_PORT=443
CORS_ORIGIN=https://patchmon.tuodominio.it

# OBBLIGATORIO con NPM o qualsiasi reverse proxy
TRUST_PROXY=true

# Abilita HSTS in produzione con HTTPS
ENABLE_HSTS=true</pre><p>&nbsp;</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>TRUST_PROXY</strong> ora è true per default in v2. La maggior parte degli utenti usa PatchMon dietro un reverse proxy (<strong>Traefik, Caddy, Nginx, NPM</strong>); il precedente default false causava problemi di login OIDC e perdita degli IP reali dei client. Se esponi PatchMon direttamente su IP pubblico senza proxy, imposta esplicitamente <strong>TRUST_PROXY=false</strong>.</p>
<p>Dopo aver salvato, riavvia i container con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd ~/patchmon
docker compose down &amp;&amp; docker compose up -d</pre><p>&nbsp;</p>
<h4><strong>Parte 2 — Configurare il Proxy Host in NPM</strong></h4>
<p>Accedere alla dashboard di NPM (http://IP-NPM:81)<br />
Andare su Proxy Hosts → Add Proxy Host<br />
Compila la scheda Details così:</p>
<p><strong>Domain Names</strong>: patchmon.tuodominio.it</p>
<p><strong>Scheme</strong>: http</p>
<p><strong>Forward Hostname / IP</strong>: IP del server PatchMon (es. 192.168.1.100)</p>
<p><strong>Forward Port:</strong> 3000</p>
<p><strong>Cache Assets</strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Off</p>
<p><strong>Block Common Exploits</strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> On</p>
<p><strong>Websockets Support</strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> On ← fondamentale</p>
<p>Nella scheda SSL:</p>
<ul>
<li>Selezionare o richiedere un certificato Let&#8217;s Encrypt</li>
<li>Abilitare Force SSL</li>
<li>Abilitare HTTP/2 Support</li>
</ul>
<p>Nella scheda <strong>Advanced</strong>, incollare queste direttive custom per garantire il corretto passaggio degli header ai WebSocket:</p>
<p><strong>nginxproxy_set_header Host $host;</strong><br />
<strong>proxy_set_header X-Real-IP $remote_addr;</strong><br />
<strong>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</strong><br />
<strong>proxy_set_header X-Forwarded-Proto $scheme;</strong></p>
<p><strong># WebSocket</strong><br />
<strong>proxy_http_version 1.1;</strong><br />
<strong>proxy_set_header Upgrade $http_upgrade;</strong><br />
<strong>proxy_set_header Connection &#8220;upgrade&#8221;;</strong><br />
<strong>proxy_read_timeout 3600s;</strong><br />
<strong>proxy_send_timeout 3600s;</strong></p>
<p>Cliccare <strong>Save</strong></p>
<h4><strong>Perché i WebSocket sono critici</strong></h4>
<p>TLS in produzione: usa sempre HTTPS e WSS. L&#8217;agente assume WSS quando l&#8217;URL del server inizia con https://. Quando sei dietro Nginx (o simili), assicurati che l&#8217;header X-Forwarded-Proto: https venga inviato correttamente al backend, in modo che rilevi la connessione sicura.</p>
<p>Gli agenti usano HTTPS per i report e la configurazione, e WSS (WebSocket over TLS) per eventi in tempo reale come lo streaming live delle patch e lo stato Docker. Assicurati che i WebSocket siano supportati dal proxy quando inoltri il traffico al container PatchMon sulla porta 3000.</p>
<h4><strong>Verifica finale</strong></h4>
<p>Dopo aver salvato tutto, controlla che la connessione sia corretta accedendo a https://patchmon.tuodominio.it.</p>
<p>Nella dashboard, gli agenti connessi dovrebbero mostrare lo stato WSS (verde) e non WS (non sicuro).</p>
<p>Se un agente già installato usa il vecchio URL HTTP, aggiorna la sua configurazione</p>
<p>&nbsp;</p>
<h3><strong>NOTE IMPORTANTI</strong></h3>
<p><strong>UFW e Docker:</strong> Ubuntu 26.04 usa UFW come firewall, ma Docker manipola iptables direttamente, bypassando UFW. Se esponi una porta tramite Docker, questa rimane aperta al pubblico anche se bloccata in UFW. Per mitigare, fai bind solo su localhost e usa un reverse proxy (Nginx, Caddy, NPM) per l&#8217;accesso esterno.</p>
<p>Reverse proxy e WebSocket: assicurati che il tuo proxy supporti i WebSocket, poiché gli agenti li usano per eventi in tempo reale (WSS su porta 443).</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-patchmon-v2-su-ubuntu-server-26-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>