<?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>Wed, 17 Jun 2026 06:15:41 +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>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>
		<item>
		<title>Installazione e Configurazione Base di OpenGRC su Ubuntu Server 26.04</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-opengrc-su-ubuntu-server-26-04/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-opengrc-su-ubuntu-server-26-04/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Mon, 01 Jun 2026 11:59:54 +0000</pubDate>
				<category><![CDATA[OpenGRC]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[GDPR]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[NPM]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1123642</guid>

					<description><![CDATA[&#160; La gestione della Governance, Risk and Compliance (GRC) è spesso percepita come un&#8217;attività riservata alle grandi organizzazioni con budget dedicati e piattaforme enterprise dai costi proibitivi. OpenGRC ribalta questa prospettiva: si tratta di un&#8217;applicazione web open-source progettata specificamente per piccoli team e PMI che hanno la necessità di strutturare il proprio programma di sicurezza [&#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>La gestione della Governance, Risk and Compliance (GRC) è spesso percepita come un&#8217;attività riservata alle grandi organizzazioni con budget dedicati e piattaforme enterprise dai costi proibitivi.</p>
<p>OpenGRC ribalta questa prospettiva: si tratta di un&#8217;applicazione web open-source progettata specificamente per piccoli team e PMI che hanno la necessità di strutturare il proprio programma di sicurezza senza rinunciare alla semplicità d&#8217;uso.</p>
<p>In questa guida vedremo come installare e configurare OpenGRC su Ubuntu Server 26.04 LTS, dalla preparazione dell&#8217;ambiente fino al primo accesso all&#8217;interfaccia web.</p>
<p>Costruito su PHP e il framework Laravel OpenGRC permette di gestire controlli di sicurezza, framework di compliance, audit, rischi e vendor management da un&#8217;unica interfaccia intuitiva, con il vantaggio di essere completamente self-hosted.</p>
<p>Licenza: OpenGRC è distribuito sotto licenza Creative Commons Attribution-NonCommercial-ShareAlike 4.0. È consentito l&#8217;uso commerciale interno, ma non la rivendita del software né l&#8217;hosting per clienti terzi.</p>
<p>Che tu stia cercando di avvicinarti per la prima volta al mondo della GRC o di sostituire un foglio Excel con qualcosa di più strutturato OpenGRC potrebbe essere esattamente ciò di cui hai bisogno.</p>
<p>OpenGRC è un&#8217;applicazione web open-source per la Governance, Risk and Compliance (GRC) pensata per piccoli team e PMI.</p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<p>Prima di iniziare verificare che il sistema soddisfi i requisiti minimi:</p>
<ul>
<li>PHP8.X</li>
<li>Composer2.5</li>
<li>Node.js18.0</li>
<li>NPM8.0</li>
<li>MySQL 5.7+ / MariaDB 10.3+ / SQLite 3</li>
</ul>
<p>&nbsp;</p>
<h3><strong>AGGIORNAMENTO DEL SISTEMA</strong></h3>
<p>Aggiornare i pacchetti del sistema prima di procedere con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update &amp;&amp; sudo apt upgrade -y</pre><p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DI PHP E RELATIVE ESTENSIONI</strong></h3>
<p>Procedere all&#8217;installazione di PHP con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y software-properties-common

sudo add-apt-repository ppa:ondrej/php -y

sudo apt update</pre><p>Installare il PHP con tutte le estensioni necessarie con il seguente comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y \
php \
php-cli \
php-common \
php-fpm \
php-mbstring \
php-xml \
php-curl \
php-zip \
php-gd \
php-bcmath \
php-intl \
php-sqlite3 \
php-mysql \
unzip \
git \
curl</pre><p>Verificare la versione installata:</p><pre class="urvanov-syntax-highlighter-plain-tag">php -v</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">PHP 8.5.4 (cli) (built: Apr 1 2026 09:36:11) (NTS)
Copyright (c) The PHP Group
Built by Ubuntu
Zend Engine v4.5.4, Copyright (c) Zend Technologies
with Zend OPcache v8.5.4, Copyright (c), by Zend Technologies</pre><p>&nbsp;</p>
<h3></h3>
<h3><strong>INSTALLAZIONE DEL COMPOSER</strong></h3>
<p>Installare il Composer con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">curl -sS https://getcomposer.org/installer | php

sudo mv composer.phar /usr/local/bin/composer

sudo chmod +x /usr/local/bin/composer</pre><p>Verificare la versione installata con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">composer --version</pre><p>Se è tutto OK dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">Composer version 2.9.7 2026-04-14 13:31:52
PHP version 8.5.4 (/usr/bin/php8.5)
Run the "diagnose" command to get more detailed diagnostics output.</pre><p>&nbsp;</p>
<h3></h3>
<h3><strong>INSTALLAZIONE DI NODE.JS E NPM</strong></h3>
<p>Usa NodeSource per installare Node.js 20 LTS:</p><pre class="urvanov-syntax-highlighter-plain-tag">curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -

sudo apt install -y nodejs</pre><p>Verificare la versione di Node.Js con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">node -v</pre><p>Se è tutto OK dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">v20.20.2</pre><p>Verificare la versione di NPM con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">npm -v</pre><p>Se è tutto OK dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">10.8.2</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DEL DATABASE MYSQL</strong></h3>
<p>Se si preferisce usare SQLite (consigliato per ambienti di test o installazioni leggere), puoi saltare questo step.</p>
<p>L&#8217;installer di OpenGRC configura SQLite automaticamente senza ulteriori setup.</p>
<p>Per un ambiente di produzione consiglio l&#8217;installazione di MySQL:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y mysql-server

sudo systemctl enable --now mysql

sudo mysql_secure_installation</pre><p>Creare il database e l&#8217;utente dedicato con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo mysql -u root -p</pre><p>Quindi Creare il DB con relativa utenza con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">CREATE DATABASE opengrc CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'opengrc'@'localhost' IDENTIFIED BY 'password_sicura';

GRANT ALL PRIVILEGES ON opengrc.* TO 'opengrc'@'localhost';

FLUSH PRIVILEGES;

EXIT;</pre><p><strong>ATTENZIONE</strong>: Se si usa MySQL il database deve essere creato prima di eseguire l&#8217;installer.</p>
<p>&nbsp;</p>
<h3></h3>
<h3><strong>INSTALLAZIONE DI APACHE E CONFIGURAZIONE DEL VIRTUAL HOST</strong></h3>
<p>Installare Apache e il modulo per PHP-FPM con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y apache2 libapache2-mod-fcgid

sudo a2enmod rewrite proxy_fcgi setenvif

sudo a2enconf php8.5-fpm

sudo systemctl enable --now apache2</pre><p>Creare la directory di installazione con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo mkdir -p /var/www/html</pre><p>&nbsp;</p>
<h3></h3>
<h3><strong>CLONAZIONE DEL REPOSITORY DI OPERNGRC</strong></h3>
<p>Posizionarsi nella cartella html con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /var/www/html</pre><p>Quindi clonare il repository con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo git clone https://github.com/LeeMangold/OpenGRC.git

cd OpenGRC</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>ESECUZIONE DELL&#8217;INSTALLER</strong></h3>
<p>L&#8217;installer interattivo si occupa di tutto: dipendenze, database, chiave applicativa, utente admin e asset frontend.</p>
<p>Eseguire il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo bash install.sh</pre><p>&nbsp;</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123643 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-01-1024x542.png" alt="" width="1024" height="542" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-01-980x519.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-01-480x254.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>Premere un qualsiasi tasto per proseguire</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123644 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-02-1024x549.png" alt="" width="1024" height="549" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-02-980x525.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-02-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>Selezionare <strong>MySQL</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123645 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-03-1024x549.png" alt="" width="1024" height="549" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-03-980x525.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-03-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>Inserire l&#8217;IP del database MySQL (nel mio caso è localhost)</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-04.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123646 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-04-1024x548.png" alt="" width="1024" height="548" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-04-980x524.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-04-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>Inserire la porta del Database</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-05.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123647 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-05-1024x549.png" alt="" width="1024" height="549" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-05-980x525.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-05-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>Inserire il nome del Database</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-06.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123649 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-06-1024x549.png" alt="" width="1024" height="549" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-06-980x525.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-06-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>Inserire l&#8217;utente per l&#8217;accesso al Database</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-07.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123650 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-07-1024x548.png" alt="" width="1024" height="548" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-07-980x524.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-07-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>Inserire la password dell&#8217;utente</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-08.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123651 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-08-1024x549.png" alt="" width="1024" height="549" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-08-980x525.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-08-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>Inserire la mail dell&#8217;utente admin</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-09.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123652 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-09-1024x548.png" alt="" width="1024" height="548" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-09-980x525.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-09-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>Inserire la password di accesso</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-10.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123654 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-10-1024x549.png" alt="" width="1024" height="549" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-10-980x525.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-10-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>Inserire il nome del Site</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-11.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123655 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-11-1024x547.png" alt="" width="1024" height="547" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-11-980x524.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-11-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>Inserire il Site URL</p>
<p>Se è andato tutto a buon fine dovremmo visualizzare il seguente output:</p>
<p><strong>########################################</strong><br />
<strong>OpenGRC has been installed successfully!</strong><br />
<strong>########################################</strong></p>
<p><strong>ALTERNATIVA</strong>: Installazione non interattiva (SQLite + credenziali di default)<br />
Se vuoi installare rapidamente con i valori predefiniti (SQLite, utente admin@example.com / password password) eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">composer update

php artisan opengrc:install --unattended</pre><p><strong>NOTA BENE</strong>: Dopo l&#8217;installazione se devi eseguire nuovamente l&#8217;installer devi prima eliminare il file databases/opengrc.sqlite (per SQLite) oppure eliminare e ricreare il database MySQL.</p>
<h3></h3>
<h3><strong>IMPOSTAZIONE DEI PERMESSI CORRETTI</strong></h3>
<p>Posizionarsi nella cartella OpenGRC con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /var/www/html/OpenGRC</pre><p>Quindi configurare i permessi con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo chown -R www-data:www-data /var/www/html/OpenGRC/vendor

sudo chmod -R 775 storage bootstrap/cache</pre><p>E&#8217; possibile rivedere i permessi eseguendo lo script incluso nel progetto con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">cat set_permissions</pre><p>E&#8217; possibile modificare i permessi (se necessario) eseguendo il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo bash set_permissions</pre><p>&nbsp;</p>
<h3></h3>
<h3><strong>CONFIGURAZIONE DEL VIRTUAL HOST DI APACHE</strong></h3>
<p>Creare il file di configurazione del sito con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano /etc/apache2/sites-available/opengrc.conf</pre><p>Incollare la seguente configurazione (sostituire tuodominio.it con il tuo dominio o IP):</p><pre class="urvanov-syntax-highlighter-plain-tag">apache&lt;VirtualHost *:80&gt;
ServerName tuodominio.it
DocumentRoot /var/www/html/OpenGRC/public

&lt;Directory /var/www/html/OpenGRC/public&gt;
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
&lt;/Directory&gt;

ErrorLog ${APACHE_LOG_DIR}/opengrc_error.log
CustomLog ${APACHE_LOG_DIR}/opengrc_access.log combined
&lt;/VirtualHost&gt;</pre><p>Salvare e chiudere il file di configurazione.</p>
<p>Abilitare il sito e ricaricare Apache con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo a2dissite 000-default.conf

sudo a2ensite opengrc.conf

sudo systemctl reload apache2</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DEL QUEUE WORKER CON SUPERVISOR</strong></h3>
<p>OpenGRC usa il sistema di code di Laravel per elaborare task in background (email, import, report, ecc.).</p>
<p>Senza un queue worker attivo, queste funzionalità non operano correttamente.</p>
<p>Installare Supervisor con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y supervisor

sudo systemctl enable --now supervisor</pre><p>Creare la configurazione del worker con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano /etc/supervisor/conf.d/opengrc-worker.conf</pre><p>Quindi incollare la seguente configurazione:</p><pre class="urvanov-syntax-highlighter-plain-tag">[program:opengrc-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/OpenGRC/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/html/OpenGRC/storage/logs/worker.log
stopwaitsecs=3600</pre><p>Salvare e chiudere il file di configurazione</p>
<p><strong>ATTENZIONE</strong>: Il worker deve girare con lo stesso utente del web server (www-data). In caso contrario si verificheranno errori di permessi su cache, log e storage.</p>
<p>Avviare il worker con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo supervisorctl reread</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">opengrc-worker: available</pre><p></p><pre class="urvanov-syntax-highlighter-plain-tag">sudo supervisorctl update</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">opengrc-worker: added process group</pre><p></p><pre class="urvanov-syntax-highlighter-plain-tag">sudo supervisorctl start opengrc-worker:*</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">opengrc-worker:opengrc-worker_00: started</pre><p>Verificare lo stato con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo supervisorctl status opengrc-worker:*</pre><p>Se è tutto OK dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">opengrc-worker:opengrc-worker_00 RUNNING pid 30413, uptime 0:00:28

tail -f /var/www/html/OpenGRC/storage/logs/worker.log</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>PRIMO ACCESSO ALLA WEB GUI E CONFIGURAZIONE BASE</strong></h3>
<p>Aprire il browser e aprire l&#8217;indirizzo del server:</p>
<p><strong>http://tuodominio.it</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-12.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123656 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-12-1024x491.png" alt="" width="1024" height="491" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-12-980x470.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-12-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>Se è tutto Ok dovremmo visualizzare la pagina di accesso di OpenGRC</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-13.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123657 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-13-1024x488.png" alt="" width="1024" height="488" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-13-980x467.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-13-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 censite in prencedenza quindi cliccare <strong>Sign In</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-14.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1123659 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-14-1024x494.png" alt="" width="1024" height="494" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-14-980x473.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/05/install-opengrc-ubuntu-14-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>Dovremmo visualizzare la Dashboard di OpenGRC come mostrato nell&#8217;immagine sovrastante</p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE BASE TRAMITE INTERFACCIA WEB</strong></h3>
<p>Dopo il primo login andare in Settings per configurare:</p>
<ul>
<li>Nome organizzazione</li>
<li>fuso orario</li>
<li>MailServer SMTP per l&#8217;invio di notifiche email</li>
<li>Politiche password</li>
<li>timeout sessione</li>
<li>Authentication SSO (Microsoft Azure, Okta, Google, Auth0)</li>
<li>Storage locale o AWS S3 per i file allegati</li>
<li>Portale pubblico per la trasparenza verso clienti</li>
</ul>
<p>&nbsp;</p>
<h3><strong>AGGIORNAMENTI DI OPENGRC</strong></h3>
<p>Per aggiornare OpenGRC a una nuova versione eseguire i seguenti comandi riportati di seguito:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /var/www/html/OpenGRC

git pull origin main

composer install --no-dev

npm install

npm run build

php artisan migrate --force

php artisan config:cache

php artisan route:cache

php artisan view:cache

php artisan queue:restart

sudo chown -R www-data:www-data storage bootstrap/cache</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>TROUBLESHOOTING</strong></h3>
<p>Errori di permessi</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo chown -R www-data:www-data /var/www/html/OpenGRC/storage
sudo chown -R www-data:www-data /var/www/html/OpenGRC/bootstrap/cache
sudo chmod -R 775 /var/www/html/OpenGRC/storage
sudo chmod -R 775 /var/www/html/OpenGRC/bootstrap/cache</pre><p>Il queue worker non processa i job</p>
<p>bash# Controlla lo stato di Supervisor</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo supervisorctl status</pre><p>Verifica il file .env</p><pre class="urvanov-syntax-highlighter-plain-tag">grep QUEUE_CONNECTION /var/www/html/OpenGRC/.env</pre><p># Deve essere: QUEUE_CONNECTION=database (non sync)</p>
<p>Controllare i job falliti</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /var/www/html/OpenGRC
php artisan queue:failed
Pagina bianca o errori 500</pre><p></p><pre class="urvanov-syntax-highlighter-plain-tag">tail -f /var/www/html/OpenGRC/storage/logs/laravel.log

tail -f /var/log/apache2/opengrc_error.log</pre><p>Assicurarsi anche che la chiave applicativa sia impostata nel file .env:</p><pre class="urvanov-syntax-highlighter-plain-tag">grep APP_KEY /var/www/html/OpenGRC/.env</pre><p># Se vuota, rigenera con:</p><pre class="urvanov-syntax-highlighter-plain-tag">php artisan key:generate</pre><p>Per Creare un nuovo utente</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /var/www/html/OpenGRC
php artisan opengrc:create-user</pre><p>Per reimpostare la password di un utente</p><pre class="urvanov-syntax-highlighter-plain-tag">php artisan opengrc:reset-password</pre><p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-opengrc-su-ubuntu-server-26-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>