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

<channel>
	<title>RaffaeleChiatto.com</title>
	<atom:link href="https://www.raffaelechiatto.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://www.raffaelechiatto.com</link>
	<description>Il Blog di Informatica a 360°</description>
	<lastBuildDate>Mon, 03 Aug 2026 06:33:30 +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 Dozzle su Ubuntu Server 26.04 con Docker Engine</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-dozzle-su-ubuntu-server-26-04-con-docker-engine/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-dozzle-su-ubuntu-server-26-04-con-docker-engine/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Mon, 03 Aug 2026 06:33:30 +0000</pubDate>
				<category><![CDATA[Dozzle]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124341</guid>

					<description><![CDATA[&#160; Dozzle è un log viewer per container Docker leggero e in tempo reale pensato per essere l&#8217;alternativa pratica al classico docker logs -f lanciato a mano su ogni container. È stateless (non salva nulla su disco), pesa pochi MB e si installa con un solo comando Docker. Nelle versioni più recenti supporta anche query [&#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>Dozzle è un log viewer per container Docker leggero e in tempo reale pensato per essere l&#8217;alternativa pratica al classico docker logs -f lanciato a mano su ogni container.</p>
<p>È stateless (non salva nulla su disco), pesa pochi MB e si installa con un solo comando Docker.</p>
<p>Nelle versioni più recenti supporta anche query SQL sui log tramite DuckDB in-browser monitoraggio multi-host con agent dedicati e notifiche verso Slack, Discord, ntfy o webhook generici.</p>
<p>In questa guida vedremo come installarlo su Ubuntu 26.04 con configurazione tramite Docker Compose, persistenza dei dati, autenticazione e pubblicazione dietro reverse proxy con certificato TLS.</p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<ul>
<li>Un server Ubuntu 26.04 con accesso sudo</li>
<li>Docker Engine (versione 19.03 o superiore, API 1.40+) e il plugin Docker Compose</li>
<li>Un container già in esecuzione, giusto per avere qualche log da guardare</li>
</ul>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DI DOCKER</strong></h3>
<p>Se Docker non è ancora installato eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update

sudo apt install -y ca-certificates curl gnupg

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

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

sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

sudo usermod -aG docker $USER</pre><p>Dopo l&#8217;ultimo comando, esci e rientra nella sessione SSH (o esegui newgrp docker) per usare Docker senza sudo.</p>
<p>&nbsp;</p>
<h3><strong>CREAZIONE DELLA DIRECTORY DELLO STACK</strong></h3>
<p>Come per gli altri servizi self-hosted conviene tenere ogni stack in una cartella dedicata sotto /opt:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo mkdir -p /opt/stacks/dozzle

cd /opt/stacks/dozzle</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CREAZIONE DEL DOCKER-COMPOSE.YML</strong></h3>
<p>Creare il file <strong>docker-compose.yml</strong> con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano docker-compose.yml</pre><p>Contenuto minimo, con persistenza del volume /data (necessaria per non perdere le impostazioni di notifica tra un riavvio e l&#8217;altro del container):</p><pre class="urvanov-syntax-highlighter-plain-tag">services:
dozzle:
image: amir20/dozzle:latest
container_name: dozzle
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- dozzle_data:/data
ports:
- "8080:8080"
environment:
- DOZZLE_HOSTNAME=dozzle-srv01
# - DOZZLE_ENABLE_ACTIONS=true # abilita start/stop/restart dei container dalla UI
# - DOZZLE_ENABLE_SHELL=true # abilita l'accesso alla shell dei container dalla UI
# - DOZZLE_AUTH_PROVIDER=simple # abilita l'autenticazione (vedi Passo 5)

volumes:
dozzle_data:</pre><p><strong>NOTA BENE</strong>: il flag :ro sul mount del socket Docker perchè Dozzle ha bisogno solo di leggere lo stato dei container e i log, quindi montarlo in sola lettura è una buona pratica anche se, va detto, l&#8217;accesso al socket Docker resta comunque equivalente a un accesso root sull&#8217;host.</p>
<p>&nbsp;</p>
<h3><strong>AVVIO DEL CONTAINER</strong></h3>
<p>Avviare il Container con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose up -d</pre><p>Dovremmo visualizzare un output simile al seguente:</p><pre class="urvanov-syntax-highlighter-plain-tag">[+] up 9/9
<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 amir20/dozzle:latest Pulled 3.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;" /> Network dozzle_default 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 dozzle_dozzle_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 dozzle Started</pre><p>Fare un check con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker ps | grep dozzle</pre><p>Dovremmo visualizzare un output simile al seguente:</p><pre class="urvanov-syntax-highlighter-plain-tag">d7c03c6a3fb8 amir20/dozzle:latest "/dozzle" 33 seconds ago Up 31 seconds 0.0.0.0:8080-&gt;8080/tcp, [::]:8080-&gt;8080/tcp dozzle</pre><p>Verificare che sia raggiungibile il link con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">curl -I http://localhost:8080</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>ACCESSO A DOZZLE DA WEBGUI</strong></h3>
<p>Se tutto è a posto da un qualsiasi browser richiamare il link <strong>http://IP-DEL-SERVER:8080</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-doozle.ubuntu-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124343 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-doozle.ubuntu-01-1024x402.png" alt="" width="1024" height="402" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-doozle.ubuntu-01-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-doozle.ubuntu-01-480x188.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 dashboard con l&#8217;elenco dei container in esecuzione sull&#8217;host.</p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DEL FIREWALL</strong></h3>
<p>Se si vuole esporre la porta solo sulla rete interna limitare la regola alla subnet invece di aprirla su 0.0.0.0 con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo ufw allow from 192.168.0.0/16 to any port 8080 proto tcp</pre><p>Se invece si pubblica Dozzle dietro reverse proxy la porta 8080 non deve essere esposta pubblicamente: basta che sia raggiungibile dal proxy.</p>
<p>&nbsp;</p>
<h3><strong>ABILITARE L&#8217;AUTENTICAZIONE SU DOOZLE</strong></h3>
<p>Di default Dozzle è senza autenticazione quindi chiunque raggiunge la porta vede i log di tutti i container.</p>
<p>Per qualsiasi esposizione oltre al semplice localhost va abilitata l&#8217;autenticazione con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker run -it --rm -v dozzle_data:/data amir20/dozzle generate admin \
--password "PASSWORD_SICURA" \
--email admin@lab.prv \
--name "Admin"</pre><p>Poi nel docker-compose.yml scommentare la seguente riga:</p><pre class="urvanov-syntax-highlighter-plain-tag">yaml environment:
- DOZZLE_AUTH_PROVIDER=simple</pre><p>Quindi riavviare lo stack con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose up -d</pre><p>Da questo momento l&#8217;accesso alla UI richiederà la login.</p>
<p>&nbsp;</p>
<h3><strong>MONITORAGGIO MULTI-HOST (OPZIONALE)</strong></h3>
<p>Se si hanno più host Docker da monitorare da un&#8217;unica dashboard Dozzle supporta un&#8217;architettura ad agent: su ogni host remoto lanci un agent leggero, e li colleghi tutti al Dozzle principale.</p>
<p>Su ogni host remoto eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker run -d \
--name dozzle-agent \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-p 7007:7007 \
amir20/dozzle:latest agent</pre><p>Sul Dozzle principale aggiungere nel docker-compose.yml le seguenti righe:</p><pre class="urvanov-syntax-highlighter-plain-tag">environment:
- DOZZLE_REMOTE_AGENT=IP_HOST_REMOTO:7007</pre><p>L&#8217;agent comunica via gRPC sulla porta 7007: verificare che sia raggiungibile prima di dare per scontato che non funzioni.</p>
<p>&nbsp;</p>
<h3><strong>FUNZIONALITA&#8217; DI DOOZER</strong></h3>
<p>Ecco un quadro completo delle funzionalità di Dozzle, con pro e contro di ciascuna:</p>
<h4><strong>Monitoraggio log in tempo reale</strong></h4>
<p>Streaming live dei log di tutti i container Docker, senza bisogno di aprire terminali multipli con docker logs -f.</p>
<p><strong>Pro:</strong> zero configurazione, log visibili immediatamente all&#8217;avvio</p>
<p><strong>Contro</strong>: nessuna persistenza se un container va giù, vedi solo quello che rimane nel buffer del log driver Docker (limitato da max-size in daemon.json)</p>
<h4><strong>Ricerca e filtri sui log</strong></h4>
<p>Supporta ricerca regex, fuzzy search e (nelle versioni recenti) query SQL complete tramite DuckDB, eseguite via WebAssembly direttamente nel browser.</p>
<p><strong>Pro</strong>: ricerca potente senza bisogno di un backend esterno o database</p>
<p><strong>Contro</strong>: la ricerca SQL funziona solo sui log attualmente in buffer/visibili, non su uno storico persistente non è un sostituto di Loki o ELK per ricerche su settimane di log</p>
<h4><strong>Statistiche container (CPU, memoria, rete)</strong></h4>
<p>Grafici con storico &#8220;rolling&#8221; delle risorse per ogni container, aggiornati in tempo reale.</p>
<p><strong>Pro</strong>: utile per un colpo d&#8217;occhio rapido senza aprire docker stats o Portainer</p>
<p><strong>Contro</strong>: storico limitato alla sessione, non pensato per capacity planning a lungo termine</p>
<h4><strong>Multi-container / split view</strong></h4>
<p>Visualizzazione affiancata dei log di più container contemporaneamente.</p>
<p><strong>Pro:</strong> comodo per debug su stack con più servizi correlati (es. app + db + reverse proxy)</p>
<p><strong>Contro</strong>: con molti container aperti insieme l&#8217;interfaccia diventa affollata</p>
<h4><strong>Azioni sui container (start/stop/restart, shell)</strong></h4>
<p>Da abilitare esplicitamente con DOZZLE_ENABLE_ACTIONS e DOZZLE_ENABLE_SHELL.</p>
<p><strong>Pro</strong>: gestione rapida senza uscire dal browser</p>
<p><strong>Contro</strong>: disattivate di default per motivi di sicurezza — abilitarle su un&#8217;istanza esposta pubblicamente amplia parecchio la superficie di rischio, dato che chi ha accesso può eseguire comandi nei container</p>
<h4><strong>Notifiche/alert su pattern di log</strong></h4>
<p>Match su espressioni configurabili con notifica verso Slack, Discord, ntfy o webhook generico.</p>
<p><strong>Pro</strong>: permette un minimo di alerting reattivo senza integrare uno stack di observability completo</p>
<p><strong>Contro</strong>: nessuna gestione di stato/silenziamento evoluta come in un vero sistema di alerting (Alertmanager, ecc.)</p>
<h4><strong>Multi-host e Swarm/Kubernetes</strong></h4>
<p>Architettura ad agent per collegare più host Docker o cluster Swarm da un&#8217;unica dashboard; supporto anche per Kubernetes (DOZZLE_MODE=k8s, con RBAC per accesso ai log dei pod).</p>
<p><strong>Pro</strong>: scala bene per contesti MSP con più host da monitorare centralmente</p>
<p><strong>Contro</strong>: richiede di esporre/raggiungere la porta 7007 (gRPC) dell&#8217;agent su ogni host remoto, quindi va pianificato bene su reti segmentate o dietro VPN/tunnel</p>
<h4><strong>Autenticazione</strong></h4>
<p>Provider &#8220;simple&#8221; con utenti generati via CLI, oppure integrazione con reverse proxy di autenticazione tipo Authelia.</p>
<p><strong>Pro</strong>: copre il caso base senza bisogno di terze parti</p>
<p><strong>Contro</strong>: disattivata di default è facile dimenticarsene e lasciare un&#8217;istanza aperta su una rete condivisa; nessun supporto nativo a RBAC granulare (es. utenti che vedono solo certi container)</p>
<h4><strong>Impronta e leggerezza</strong></h4>
<p>Immagine da 7-10 MB, footprint minimo di CPU/RAM, nessun database.</p>
<p><strong>Pro</strong>: ideale per homelab o affiancato ad app leggere senza overhead percepibile</p>
<p><strong>Contro</strong>: proprio perché stateless, non fa retention: non è adatto a compliance/audit log a lungo termine</p>
<h4><strong>Accesso al socket Docker</strong></h4>
<p>Richiede il mount di /var/run/docker.sock (idealmente in sola lettura, :ro).</p>
<p><strong>Pro</strong>: nessuna configurazione aggiuntiva per &#8220;vedere&#8221; tutti i container</p>
<p><strong>Contro</strong>: l&#8217;accesso al socket Docker è di fatto equivalente a un accesso root sull&#8217;host è il principale motivo per cui va protetto dietro autenticazione/reverse proxy e mai esposto direttamente su internet</p>
<h4><strong>Analytics anonime</strong></h4>
<p>Raccoglie dati anonimi di utilizzo (Google Analytics) per orientare lo sviluppo, disattivabile col flag &#8211;no-analytics.</p>
<p><strong>Pro</strong>: aiuta il progetto (open source, non finanziato) a capire dove investire</p>
<p><strong>Contro</strong>: va disattivato esplicitamente se in ambienti con policy privacy stringenti (es. NIS2, clienti regolamentati)</p>
<p>In sintesi Dozzle è ottimo come vista live leggera e immediata, ma non sostituisce una piattaforma di log management vera e propria quando servono retention, ricerca storica, alerting strutturato o controlli di accesso granulari lì restano scelte più adatte Loki+Grafana, ELK o soluzioni a pagamento tipo Dash0.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-dozzle-su-ubuntu-server-26-04-con-docker-engine/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installazione e Configurazione Base di Planka su Ubuntu Server 26.04 con Docker Compose</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-planka-su-ubuntu-server-26-04-con-docker-compose/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-planka-su-ubuntu-server-26-04-con-docker-compose/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Thu, 30 Jul 2026 06:13:54 +0000</pubDate>
				<category><![CDATA[Planka]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Canba]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[DockerCompose]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124323</guid>

					<description><![CDATA[&#160; Chi gestisce progetti in team o anche solo la propria lista di attività personali prima o poi si scontra con lo stesso dilemma: affidarsi a un servizio cloud di terze parti, con tutti i limiti in termini di privacy e controllo dei dati che questo comporta, oppure cercare un&#8217;alternativa self-hosted altrettanto semplice da usare. [&#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>Chi gestisce progetti in team o anche solo la propria lista di attività personali prima o poi si scontra con lo stesso dilemma: affidarsi a un servizio cloud di terze parti, con tutti i limiti in termini di privacy e controllo dei dati che questo comporta, oppure cercare un&#8217;alternativa self-hosted altrettanto semplice da usare.</p>
<p>Planka risponde proprio a questa esigenza: una board Kanban open source, leggera e reattiva, che riprende l&#8217;esperienza di Trello ma gira interamente sul proprio server.</p>
<p>In questa guida vedremo come installare e configurare Planka su Ubuntu Server 26.04 utilizzando Docker Compose, l&#8217;approccio più pulito e manutenibile per chi, come nel mio caso, gestisce già altri servizi containerizzati in homelab.</p>
<p>Partiremo dall&#8217;installazione di Docker, passeremo per la configurazione del container PostgreSQL necessario come backend, fino ad arrivare alla creazione dell&#8217;utente amministratore e a qualche accorgimento pratico per evitare i problemi più comuni che si possono incontrare al primo avvio, come la classica race condition tra database e applicazione.</p>
<p>Alla fine della guida avrete un&#8217;istanza di Planka funzionante e pronta per organizzare i vostri progetti, con le basi solide per aggiungere in un secondo momento un reverse proxy con HTTPS e altre personalizzazioni.</p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<ul>
<li>Ubuntu 26.04 con accesso sudo</li>
<li>Almeno 1 GB di RAM libera</li>
<li>Docker ed il plugin Compose</li>
</ul>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DI DOCKER</strong></h3>
<p>Installare Docker con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">curl -fsSL https://get.docker.com | sudo sh

sudo usermod -aG docker $USER

newgrp docker

sudo apt install docker-compose-plugin -y</pre><p>Quindi verificare Docker con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker --version</pre><p>Dovremmo visualizzare un output simile al seguente:</p><pre class="urvanov-syntax-highlighter-plain-tag">Docker version 29.6.1, build 8900f1d</pre><p>Verificare Docker Compose con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose version</pre><p>Dovremmo visualizzare un output simile al seguente:</p><pre class="urvanov-syntax-highlighter-plain-tag">Docker Compose version v5.3.1</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CREAZIONE DELLE STRUTTURA DI PROGETTO</strong></h3>
<p>Creare la struttura di cartella con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo mkdir -p /opt/planka

cd /opt/planka</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DEL DOCKER-COMPOSE.YML</strong></h3>
<p>Usare l&#8217;immagine ufficiale <strong>ghcr.io/plankanban/planka</strong> con PostgreSQL come backend.</p>
<p>Creare il file <strong>docker-compose.yml</strong> con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano docker-compose.yml</pre><p>Quindi copiare all&#8217;interno il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">services:
planka:
image: ghcr.io/plankanban/planka:latest
container_name: planka
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
ports:
- "3000:1337"
environment:
- BASE_URL=http://TUO_IP_O_DOMINIO:3000
- DATABASE_URL=postgres://planka:CAMBIA_QUESTA_PASSWORD@postgres:5432/planka
- SECRET_KEY=CAMBIA_CON_STRINGA_CASUALE_LUNGA
- TRUST_PROXY=false
volumes:
- ./data/user-avatars:/app/public/user-avatars
- ./data/project-background-images:/app/public/project-background-images
- ./data/attachments:/app/private/attachments

postgres:
image: postgres:16-alpine
container_name: planka-db
restart: unless-stopped
environment:
- POSTGRES_USER=planka
- POSTGRES_PASSWORD=CAMBIA_QUESTA_PASSWORD
- POSTGRES_DB=planka
volumes:
- ./db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U planka -d planka"]
interval: 5s
timeout: 5s
retries: 5</pre><p>Salvare il file e generare una <strong>SECRET_KEY</strong> sicura con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">openssl rand -hex 64</pre><p>Copiare il risultato dentro il file al posto di <strong>CAMBIA_CON_STRINGA_CASUALE_LUNGA</strong> e impostare una password robusta uguale in entrambi i punti <strong>CAMBIA_QUESTA_PASSWORD</strong>.</p>
<h3></h3>
<h3><strong>AVVIARE IL CONTAINER</strong></h3>
<p>Avviare il container con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /opt/planka

docker compose up -d</pre><p>Dovremmo visualizzare un output simile al seguente:</p><pre class="urvanov-syntax-highlighter-plain-tag">[+] up 31/31
<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:16-alpine Pulled 8.9s
<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/plankanban/planka:latest Pulled 10.5s
<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 planka_default 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 planka-db Started 4.7s
<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 planka Started</pre><p>Verificare i log con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose logs -f planka</pre><p>Attendere che i log mostrino che il server è pronto, poi Ctrl+C per uscire dai log (i container restano attivi).</p>
<p>&nbsp;</p>
<h3><strong>CREAZIONE DELL&#8217;UTENTE AMMINISTRATORE</strong></h3>
<p>Dalla versione 1.13 in poi Planka non crea più un admin di default automaticamente. Va creato a mano con il seguente comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose run --rm planka npm run db:create-admin-user</pre><p>Ti verranno chiesti email, password, nome e username.</p>
<p>In alternativa, puoi impostare le variabili <strong>DEFAULT_ADMIN_EMAIL, DEFAULT_ADMIN_PASSWORD, DEFAULT_ADMIN_USERNAME</strong> e <strong>DEFAULT_ADMIN_NAME</strong> nel compose e fare un restart in modo che l&#8217;utente viene creato al primo avvio.</p>
<p>&nbsp;</p>
<h3><strong>ACCESSO TRAMITE WEBGUI</strong></h3>
<p>Da un quslaisi browser aprire il link <strong>http://TUO_IP:3000</strong> (o l&#8217;IP del server) ed effettuare il login con le credenziali admin appena create.</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124325 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-01-1024x405.png" alt="" width="1024" height="405" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-01-980x388.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-01-480x190.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 create in precedenza quindi cliccare su <strong>Accedi</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124326 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-02-1024x402.png" alt="" width="1024" height="402" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-02-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-02-480x188.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>Accettare l&#8217;<strong>EULA</strong> e cliccare <strong>Continua</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124327 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-03-1024x398.png" alt="" width="1024" height="398" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-03-980x381.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-planka-ubuntu-docker-03-480x186.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 accedere alla <strong>Home di Planka</strong></p>
<p>Da questa schermata è possibile iniziare a creare Progetti</p>
<p>&nbsp;</p>
<h3><strong>BACKUP DI PLANKA</strong></h3>
<p>Planka fornisce script dedicati per backup/restore quando si usa docker-compose utile per uno script cron periodico che salvi sia il volume db_data sia le cartelle data/.</p>
<p>&nbsp;</p>
<h3><strong>TROUBLESHOOTING RAPIDO</strong></h3>
<p>Check di Errori di avvio con il seguente comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose logs planka | grep -i error</pre><p>Check Problemi di autenticazione DB con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose logs postgres</pre><p>Per un Riavvio pulito utilizzare i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose down

docker compose up -d</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>FUNZIONALITA&#8217; PRINCIPALI</strong></h3>
<h4></h4>
<h4><strong>Gestione progetti e board</strong></h4>
<ul>
<li>Board in stile Kanban con liste e card trascinabili (drag-and-drop)</li>
<li>Card con checklist, sotto-attività, etichette colorate, scadenze</li>
<li>Allegati file sulle card</li>
<li>Aggiornamenti in tempo reale via WebSocket (se più persone lavorano insieme, vedono i cambiamenti istantaneamente)</li>
</ul>
<h4><strong>Collaborazione</strong></h4>
<ul>
<li>Gestione utenti e membri per progetto/board</li>
<li>Assegnazione di card a membri specifici</li>
<li>Commenti sulle card</li>
<li>Import da Trello (utile se stai migrando)</li>
</ul>
<h4><strong>Amministrazione</strong></h4>
<ul>
<li>Autenticazione OIDC (OpenID Connect) — comodo se vuoi integrarlo con un provider SSO che magari già usi in ambito M365/Azure AD</li>
<li>Personalizzazione dei termini di utilizzo per utenti finali</li>
<li>API disponibili (con client Python non ufficiale, plankapy)</li>
<li>Supporto Swagger/Postman per chi vuole integrarlo via API</li>
</ul>
<h4><strong>Deployment</strong></h4>
<ul>
<li>Docker/Docker Compose (il metodo che abbiamo appena configurato)</li>
<li>Installazione manuale su Debian/Ubuntu</li>
<li>Helm chart per chi gira su Kubernetes — potenzialmente interessante visto il tuo K3S</li>
</ul>
<p>&nbsp;</p>
<h3><strong>PRO E CONTRO DI PLANKA</strong></h3>
<h4></h4>
<h4><strong>Pro</strong></h4>
<ul>
<li>Leggero e veloce: footprint di risorse minimo, gira bene anche su una VM homelab modesta</li>
<li>Interfaccia pulita: nessun sovraccarico di funzionalità inutili, esperienza molto simile a Trello</li>
<li>Open source e self-hosted: controllo completo dei dati, nessuna dipendenza da servizi cloud terzi</li>
<li>Real-time collaboration affidabile: funziona bene senza configurazioni complesse</li>
<li>Community attiva: sviluppo continuo, immagini Docker aggiornate regolarmente</li>
</ul>
<h4><strong>Contro</strong></h4>
<ul>
<li>Funzionalità limitate rispetto a strumenti più completi: non ha Gantt chart, timeline, dashboard di reportistica avanzata, automazioni (tipo Trello Butler o Jira workflows)</li>
<li>Nessuna gestione avanzata di permessi/ruoli granulari: i controlli di accesso sono piuttosto semplici rispetto a strumenti enterprise</li>
<li>Nessuna app mobile nativa: è web-based, va bene ma manca l&#8217;esperienza mobile dedicata</li>
<li>Gestione admin utente cambiata di recente: dalla versione 1.13 non c&#8217;è più creazione automatica dell&#8217;admin, richiede uno step manuale in più (come abbiamo visto)</li>
<li>Meno adatto a project management &#8220;pesante&#8221;: se hai bisogno di dipendenze tra task, milestone, roadmap, conviene guardare altrove (es. Taiga, che hai citato come alternativa nella guida che abbiamo trovato)</li>
<li>Notifiche limitate: manca un sistema di notifiche via email/Slack robusto out-of-the-box</li>
</ul>
<p>&nbsp;</p>
<h3><strong>IN SINTESI</strong></h3>
<p>Planka è la scelta giusta se cerchi un Trello self-hosted semplice ed essenziale per organizzare task di un piccolo team o per uso personale esattamente il tipo di tool che si inserisce bene nel tuo stack homelab accanto a Portainer, Gitea, ecc.</p>
<p>Se invece hai bisogno di project management più strutturato con reportistica, automazioni o gestione risorse, è meglio orientarsi su alternative più feature-rich come Taiga o OpenProject.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-planka-su-ubuntu-server-26-04-con-docker-compose/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installazione e Configurazione Base di Vaultwarden su Ubuntu Server 26.04</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-vaultwarden-su-ubuntu-server-26-04/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-vaultwarden-su-ubuntu-server-26-04/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Mon, 27 Jul 2026 06:21:34 +0000</pubDate>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[VaultWarden]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[PasswordManager]]></category>
		<category><![CDATA[Waultwarden]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124297</guid>

					<description><![CDATA[&#160; Negli ultimi anni la gestione delle password è diventata un tema centrale per chiunque si occupi di sicurezza informatica, sia in ambito personale che professionale. Tra i tanti password manager disponibili, Bitwarden si è affermato come una delle soluzioni open source più apprezzate, grazie alla sua compatibilità multipiattaforma e alle funzionalità avanzate di condivisione [&#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>Negli ultimi anni la gestione delle password è diventata un tema centrale per chiunque si occupi di sicurezza informatica, sia in ambito personale che professionale.</p>
<p>Tra i tanti password manager disponibili, Bitwarden si è affermato come una delle soluzioni open source più apprezzate, grazie alla sua compatibilità multipiattaforma e alle funzionalità avanzate di condivisione e organizzazione dei dati.</p>
<p>Per chi, come me, preferisce mantenere il pieno controllo dei propri dati attraverso soluzioni self-hosted, Vaultwarden rappresenta l&#8217;alternativa ideale: si tratta di un&#8217;implementazione non ufficiale del server Bitwarden, scritta in Rust, estremamente leggera e perfettamente compatibile con tutti i client ufficiali (estensioni browser, app mobile, desktop).</p>
<p>Questo la rende una scelta particolarmente indicata per ambienti homelab, dove risorse hardware contenute e semplicità di gestione sono priorità assolute.</p>
<p>In questa guida vedremo passo per passo come installare e configurare Vaultwarden su Ubuntu Server 26.04, utilizzando Docker e Docker Compose per un deployment pulito e facilmente riproducibile.</p>
<p>Affronteremo l&#8217;installazione del container, la configurazione delle variabili d&#8217;ambiente essenziali, l&#8217;impostazione di un reverse proxy per l&#8217;accesso sicuro via HTTPS, e la gestione dei certificati in un contesto di laboratorio locale. Al termine della guida avrete un&#8217;istanza di Vaultwarden pienamente funzionante, pronta per essere utilizzata come gestore password centralizzato per la vostra infrastruttura.</p>
<p>&nbsp;</p>
<h3><strong>AGGIORNAMENTO DEL SISTEMA E PREREQUISITI</strong></h3>
<p>Eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update &amp;&amp; sudo apt upgrade -y

sudo apt install -y ca-certificates curl</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DI DOCKER</strong></h3>
<p>Ubuntu 26.04 supporta nativamente il repository ufficiale Docker. Docker CE 29.4.0 supporta Ubuntu 26.04 nativamente dal giorno del rilascio, senza bisogno di workaround o pinning a codename precedenti.</p>
<p>Installare la chiave GPG ufficiale 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>Confiugurare il repository (formato DEB822) con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo tee /etc/apt/sources.list.d/docker.sources &lt;&lt;EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release &amp;&amp; echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF</pre><p>Quindi eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</pre><p><strong>NOTA BENE</strong>: se ricevi un 404 sull&#8217;apt update (repository Docker non ancora popolato per resolute), puoi sostituire temporaneamente il codename con noble (Ubuntu 24.04), dato che i pacchetti sono compatibili a livello binario. In tal caso modifica il file docker.sources cambiando Suites: resolute in Suites: noble. Margrop Blog</p>
<p>Verificare l&#8217;installazione con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl enable --now docker

sudo docker run --rm hello-world</pre><p>Aggiungere il tuo utente al gruppo docker se vuoi eseguire comandi senza sudo con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo usermod -aG docker $USER

newgrp docker</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>STRUTTURA DIRECTORY PER VAULTWARDEN</strong></h3>
<p>Creare le cartelle con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo mkdir -p /opt/vaultwarden/data

cd /opt/vaultwarden</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CREAZIONE DEL FILE DOCKER-COMPOSE</strong></h3>
<p>Creare il file <strong>docker-compose.yml</strong> con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano /opt/vaultwarden/docker-compose.yml</pre><p>Quindi incollare il seguente contenuto:</p><pre class="urvanov-syntax-highlighter-plain-tag">services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.tuodominio.it"
SIGNUPS_ALLOWED: "false" # metti a true solo per il primo utente, poi disattiva
WEBSOCKET_ENABLED: "true"
ADMIN_TOKEN: "GENERA_UN_TOKEN_FORTE_QUI"
LOG_FILE: "/data/vaultwarden.log"
TZ: "Europe/Rome"
volumes:
- /opt/vaultwarden/data:/data
ports:
- "192.168.80.34:8080:80" # bind solo su localhost, esposto poi via NPM</pre><p>Salvare e chiudere il file di configurazione</p>
<p>Generare un <strong>ADMIN_TOKEN</strong> sicuro (per accedere al pannello admin di Vaultwarden) con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">openssl rand -base64 48</pre><p>Incollare il risultato al posto di <strong>GENERA_UN_TOKEN_FORTE_QUI.</strong></p>
<h3></h3>
<h3><strong>AVVIO DEL CONTAINER</strong></h3>
<p>Eseguire i comandi di seguito per avviare il container:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /opt/vaultwarden

sudo docker compose up -d</pre><p>Verificare il container con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo docker compose logs -f</pre><p>Se è tutto OK dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">vaultwarden | /--------------------------------------------------------------------\
vaultwarden | | Starting Vaultwarden |
vaultwarden | | Version 1.36.0 |
vaultwarden | |--------------------------------------------------------------------|
vaultwarden | | This is an *unofficial* Bitwarden implementation, DO NOT use the |
vaultwarden | | official channels to report bugs/features, regardless of client. |
vaultwarden | | Send usage/configuration questions or feature requests to: |
vaultwarden | | https://github.com/dani-garcia/vaultwarden/discussions or |
vaultwarden | | https://vaultwarden.discourse.group/ |
vaultwarden | | Report suspected bugs/issues in the software itself at: |
vaultwarden | | https://github.com/dani-garcia/vaultwarden/issues/new |
vaultwarden | \--------------------------------------------------------------------/
vaultwarden |
vaultwarden | [NOTICE] You are using a plain text `ADMIN_TOKEN` which is insecure.
vaultwarden | Please generate a secure Argon2 PHC string by using `vaultwarden hash` or `argon2`.
vaultwarden | See: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token
vaultwarden |
vaultwarden | [2026-07-12 00:02:59.873][vaultwarden::auth][INFO] Private key 'data/rsa_key.pem' created correctly
vaultwarden | [2026-07-12 00:02:59.975][start][INFO] Rocket has launched from http://0.0.0.0:80</pre><p>&nbsp;</p>
<h3></h3>
<h3><strong>CONFIGURAZIONE REVERSE PROXY (NGINX PROXY MANAGER)</strong></h3>
<p>In questo tutorial utlizzerò come Reverse Proxy NPM</p>
<p>Creare un nuovo Proxy Host con queste info:</p>
<p><strong>Domain</strong>: vault.lab.prv<br />
<strong>Scheme</strong>: http<br />
<strong>Forward Hostname/IP</strong>: IP del server dove gira Vaultwarden<br />
<strong>Forward Port</strong>: 8080<br />
Abilitare <strong>Websockets Support</strong> (fondamentale per la sync in tempo reale)<br />
<strong>Tab SSL</strong>: richiedi certificato Let&#8217;s Encrypt, forza HTTPS.</p>
<p><strong>ATTENZIONE:</strong> Vaultwarden richiede HTTPS per funzionare correttamente con le app client (browser extension, mobile), quindi il certificato non è opzionale.</p>
<p>&nbsp;</p>
<h3><strong>PRIMO ACCESSO TRAMITE WEB GUI E CREAZIONE UTENTE</strong></h3>
<p>Aprire un qualsiasi browser e richiamare <strong>https://vault.lab.prv</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124299 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-01-1024x419.png" alt="" width="1024" height="419" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-01-980x401.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-01-480x197.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>Crea Account</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124300 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-02-1024x403.png" alt="" width="1024" height="403" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-02-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-02-480x189.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;<strong>indirizzo email </strong>e il <strong>nome</strong> quindi cliccare <strong>Continua</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124301 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-03-1024x402.png" alt="" width="1024" height="402" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-03-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-03-480x188.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 <strong>Password</strong> quindi cliccare <strong>Create Account</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-04.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124302 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-04-1024x402.png" alt="" width="1024" height="402" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-04-980x384.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-04-480x188.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>Installare l&#8217;estensione o cliccare<strong> Più tardi</strong> per installarla in seguito</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-05.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124303 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-05-1024x402.png" alt="" width="1024" height="402" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-05-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-05-480x188.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> Vai a Bitwarden WEB</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-06.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124304 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-06-1024x402.png" alt="" width="1024" height="402" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-06-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-06-480x188.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 visualizzare la Dashboard di Vaultwarden come mostrato nell&#8217;immagine sovrastante</p>
<p>Dopo aver creato l&#8217;utente admin disattivare la possibilità di registrare utenti modificando all&#8217;interno del file <strong>docker-compose.yml</strong> il seguente valore:</p><pre class="urvanov-syntax-highlighter-plain-tag">SIGNUPS_ALLOWED: "false"</pre><p>Salvare e chiudere il file YAML</p>
<p>Quindi eseguire il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo docker compose up -d</pre><p>&nbsp;</p>
<h3></h3>
<h3><strong>ACCESSO AL PANNELLO DI AMMINISTRAZIONE</strong></h3>
<p>Raggiungibile su <strong>https://vault.lab.prv/admin </strong>richiede il token generato in precedenza.</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-07.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124306 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-07-1024x402.png" alt="" width="1024" height="402" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-07-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-07-480x188.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 <strong>Token</strong> quindi cliccare <strong>Enter</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-08.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124307 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-08-1024x401.png" alt="" width="1024" height="401" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-08-980x384.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-08-480x188.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 accedere all&#8217;interfaccia <strong>Admin di Vaultwarden</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-09.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124308 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-09-1024x401.png" alt="" width="1024" height="401" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-09-980x383.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-09-480x188.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>Dal tab <strong>Users</strong> è possibile aggiungere gli utenti</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-10.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124309 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-10-1024x403.png" alt="" width="1024" height="403" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-10-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-vaultwarden-ubuntu-10-480x189.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>Dal Tab <strong>Diagnostic</strong> è possibile vedere tutte le informazioni relative al server Vault</p>
<p>&nbsp;</p>
<h3><strong>BACKUP</strong></h3>
<p>Il volume <strong>/opt/vaultwarden/data</strong> contiene tutto (database SQLite, attachments, config).</p>
<p>Backup consigliato con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo tar czf vaultwarden-backup-$(date +%F).tar.gz /opt/vaultwarden/data</pre><p>Puoi integrarlo facilmente nel tuo stack Veeam/backup esistentem o schedularlo con un cron job verso il NAS.</p>
<p>&nbsp;</p>
<h3><strong>AGGIORNAMENTI DI VAULTWARDEN</strong></h3>
<p>Per eseguire gli aggiornamenti di VaultWarden eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /opt/vaultwarden

sudo docker compose pull

sudo docker compose up -d</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>FUNZIONALITA&#8217; PRINCIPALI</strong></h3>
<h4></h4>
<h4><strong>Gestione password e vault</strong></h4>
<ul>
<li>Password, note sicure, identità, carte di credito</li>
<li>Cartelle e organizzazione vault</li>
<li>Generatore di password/passphrase integrato</li>
<li>Ricerca full-text nel vault</li>
<li>Allegati ai singoli item (es. PDF, chiavi SSH)</li>
</ul>
<h4></h4>
<h4><strong>Sincronizzazione multi-dispositivo</strong></h4>
<ul>
<li>Estensioni browser (Chrome, Firefox, Edge, Safari, Brave)</li>
<li>App mobile (iOS/Android)</li>
<li>App desktop (Windows/Mac/Linux)</li>
<li>CLI ufficiale Bitwarden</li>
<li>Sync in tempo reale via WebSocket (quello che abbiamo abilitato con WEBSOCKET_ENABLED)</li>
</ul>
<h4></h4>
<h4><strong>Organizzazioni e condivisione (gratis su Vaultwarden, a pagamento su Bitwarden ufficiale)</strong></h4>
<ul>
<li>Creazione organizzazioni multiple</li>
<li>Condivisione password tra utenti/gruppi</li>
<li>Collections con permessi granulari</li>
<li>Questo è uno dei motivi principali per cui la gente sceglie Vaultwarden: su Bitwarden cloud le organizzazioni richiedono piano a pagamento, qui sono gratuite</li>
</ul>
<h4></h4>
<h4><strong>Autenticazione a due fattori (2FA)</strong></h4>
<ul>
<li>TOTP (Google Authenticator, Authy, ecc.)</li>
<li>WebAuthn/FIDO2 (chiavi hardware tipo YubiKey)</li>
<li>Duo (con configurazione aggiuntiva)</li>
<li>Email 2FA</li>
<li>Yubikey OTP</li>
</ul>
<h4></h4>
<h4><strong>Bitwarden Send</strong></h4>
<ul>
<li>Condivisione sicura e temporanea di testo/file con link, scadenza automatica, password opzionale</li>
</ul>
<h4></h4>
<h4><strong>Pannello admin (/admin)</strong></h4>
<ul>
<li>Gestione utenti (creazione, disabilitazione, eliminazione)</li>
<li>Statistiche generali istanza</li>
<li>Configurazione SMTP per invii email (inviti, reset password)</li>
<li>Diagnostica (test connessione, versione, ecc.)</li>
<li>Backup/export diagnostica</li>
</ul>
<h4></h4>
<h4><strong>Import/Export</strong></h4>
<ul>
<li>Import da centinaia di altri password manager (LastPass, 1Password, KeePass, Chrome, ecc.)</li>
<li>Export in formati cifrati o JSON/CSV</li>
</ul>
<h4></h4>
<h4><strong>Emergency Access</strong></h4>
<ul>
<li>Designazione di un contatto di emergenza che può richiedere accesso al vault dopo un periodo di attesa configurabile</li>
</ul>
<h3></h3>
<h3><strong>PRO E CONTRO</strong></h3>
<h4></h4>
<h4><strong>PRO</strong></h4>
<ul>
<li><strong>Leggerissimo</strong>: Un singolo binario Rust, consumo RAM/CPU minimo — perfetto per homelab, gira bene anche su Raspberry Pi</li>
<li><strong>Compatibilità client al 100%</strong>: Usa le stesse app/estensioni ufficiali Bitwarden, nessuna app custom da installareù</li>
<li><strong>Funzionalità premium gratis</strong>: Organizzazioni, 2FA avanzato, Send: tutto ciò che su Bitwarden cloud richiede abbonamento qui è gratuito</li>
<li><strong>Self-hosted</strong>: controllo totale datiNessun dato transita su server terzi, importante per compliance/privacy</li>
<li><strong>Community attiva</strong>: Sviluppo costante, rilasci frequenti, ben documentato</li>
<li><strong>Facile da backuppare</strong>: Tutto in un volume/cartella (SQLite di default), backup semplice da integrare in Veeam o script cron</li>
<li><strong>Basso attack surface</strong>: Codice compatto rispetto al server ufficiale Bitwarden (che è containerizzato in decine di microservizi via bitwarden/self-host)</li>
</ul>
<h4></h4>
<h4><strong>CONTRO</strong></h4>
<ul>
<li><strong>Non ufficiale/non supportato da Bitwarden Inc</strong>.: Se qualcosa si rompe, supporto solo community (GitHub issues, Discord), nessun SLA</li>
<li><strong>Rischio di rottura compatibilità</strong>: Bitwarden Inc. può cambiare API client senza preavviso; Vaultwarden deve rincorrere gli aggiornamenti a volte con ritardo di giorni/settimane</li>
<li><strong>SQLite come DB di default:</strong> Va benissimo per uso personale/piccolo team, ma non scala bene per centinaia di utenti simultanei (puoi comunque passare a MySQL/PostgreSQL se serve)</li>
<li><strong>Nessuna interfaccia &#8220;enterprise&#8221;</strong>: Manca SSO/SAML nativo enterprise-grade (esiste supporto limitato, non paragonabile a Bitwarden Enterprise)</li>
<li><strong>Responsabilità di gestione tutta tua</strong>: Backup, certificati, aggiornamenti, sicurezza del server: nessuno lo fa per te (a differenza di Bitwarden cloud)</li>
<li><strong>Alcune funzionalità arrivano in ritardo</strong>: Feature nuove lato client Bitwarden a volte non sono supportate lato server finché la community non le implementa</li>
<li><strong>Termini di servizio &#8220;grigi&#8221;</strong>: Bitwarden Inc. non garantisce che i client ufficiali continueranno a funzionare con implementazioni terze in futuro (per ora nessun blocco, ma è un rischio teorico da tenere presente)</li>
<li><strong>Single point of failure</strong>: Se il tuo server va giù, perdi accesso al vault (mitigabile con backup + export periodici offline)</li>
</ul>
<p>&nbsp;</p>
<h3></h3>
<h3><strong>CONSIDERAZIONI FINALI</strong></h3>
<ul>
<li><strong>Per uso personale/homelab</strong>: scelta quasi obbligata, SQLite basta e avanza</li>
<li><strong>Se in futuro pensi di offrirlo a clienti come servizio gestito</strong>: valuta il passaggio a PostgreSQL come backend (più robusto per multi-tenant) e assicurati SLA chiari con i clienti sul fatto che non è supporto ufficiale Bitwarden</li>
<li><strong>Backup</strong>: essendo SQLite, è un singolo file perfetto per backup incrementali veloci, ma verifica sempre la consistenza (evita backup &#8220;a caldo&#8221; senza dump, meglio uno stop breve o sqlite3 .backup)</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-vaultwarden-su-ubuntu-server-26-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installazione e Configurazione Base di Kener su Ubuntu Server 26.04</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-kener-su-ubuntu-server-26-04/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-kener-su-ubuntu-server-26-04/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 07:17:06 +0000</pubDate>
				<category><![CDATA[Kener]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Compose]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[monitoring]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124286</guid>

					<description><![CDATA[&#160; Quando un servizio va giù, la prima domanda che si pone chiunque lo utilizzi è sempre la stessa: &#8220;è un problema mio o il server è down?&#8221;. Una status page pubblica risolve elegantemente questo problema, dando visibilità trasparente sullo stato dei propri servizi senza dover rispondere a decine di messaggi durante un disservizio. Kener [&#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>Quando un servizio va giù, la prima domanda che si pone chiunque lo utilizzi è sempre la stessa: &#8220;è un problema mio o il server è down?&#8221;.</p>
<p>Una status page pubblica risolve elegantemente questo problema, dando visibilità trasparente sullo stato dei propri servizi senza dover rispondere a decine di messaggi durante un disservizio.</p>
<p>Kener è una soluzione open source per status page e uptime monitoring costruita su SvelteKit e pensata per essere leggera da self-hostare pur offrendo funzionalità che normalmente si trovano solo in prodotti SaaS a pagamento: gestione incidenti, finestre di manutenzione programmate, notifiche multi-canale, badge di stato incorporabili e supporto multilingua.</p>
<p>Il tutto distribuito con licenza MIT e un&#8217;immagine Docker pronta all&#8217;uso.</p>
<p>In questo articolo vedremo come installare Kener su una macchina Ubuntu Server 26.04 LTS tramite Docker Compose affiancandolo a Redis (dipendenza obbligatoria per cache e scheduler) e a un volume persistente per il database SQLite.</p>
<p>Copriremo anche alcuni accorgimenti pratici emersi direttamente durante l&#8217;installazione come la corretta gestione dei permessi sul volume dati e la scelta tra deployment in root o in subpath utili per evitare gli errori più comuni che si incontrano al primo avvio.</p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<ul>
<li>Ubuntu Server 26.04 aggiornato</li>
<li>Docker Engine + Docker Compose plugin installati</li>
<li>Una porta libera sull&#8217;host (default 3000)</li>
</ul>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DI DOCKER</strong></h3>
<p>Se Docker non è ancora installato eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update

sudo apt install -y ca-certificates curl gnupg

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
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

sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin</pre><p>&nbsp;</p>
<h3><strong>CREAZIONE STRUTTURA DELLE CARTELLE</strong></h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">mkdir -p /opt/kener/database

cd /opt/kener</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE FILE DOCKER COMPOSE</strong></h3>
<p>Creare il file di configurazione con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">nano /opt/kener/docker-compose.yml</pre><p>Quindi incollare il segente contenuto:</p><pre class="urvanov-syntax-highlighter-plain-tag">services:
kener-redis:
image: redis:7-alpine
container_name: kener-redis
restart: unless-stopped

kener:
image: docker.io/rajnandan1/kener:latest-status
container_name: kener-status
restart: unless-stopped
depends_on:
- kener-redis
ports:
- "3000:3000"
volumes:
- ./database:/app/database
environment:
- KENER_SECRET_KEY=CAMBIA_QUESTA_STRINGA_CASUALE
- ORIGIN=http://IP_O_DOMINIO:3000
- REDIS_URL=redis://kener-redis:6379
- TZ=Europe/Rome</pre><p>Salvare e chiudere il file di configurazione</p>
<p>Generare una secret key sicura con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">openssl rand -hex 32</pre><p>Sostituire il valore generato al posto di <strong>CAMBIA_QUESTA_STRINGA_CASUALE</strong>, e impostare <strong>ORIGIN</strong> con l&#8217;IP o il dominio reale che userai per accedere.</p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DEI PERMESSI</strong></h3>
<p>Eseguire i comandi in sequenza:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose down
sudo chown -R 1000:1000 /opt/kener/database
docker compose up -d</pre><p>&nbsp;</p>
<h3><strong>AVVIO DELLO STACK</strong></h3>
<p>Avviare lo stack con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /opt/kener

docker compose up -d</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">[+] up 35/35
<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 docker.io/rajnandan1/kener:latest-status Pulled 11.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;" /> Image redis:7-alpine Pulled 4.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 kener_default 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 kener-redis Started 5.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 kener-status Started</pre><p>Verificare lo stato di docker con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose ps</pre><p>Dovremmo vedere un output simile al seguente:</p><pre class="urvanov-syntax-highlighter-plain-tag">NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
kener-redis redis:7-alpine "docker-entrypoint.s…" kener-redis About a minute ago Up About a minute 6379/tcp
kener-status docker.io/rajnandan1/kener:latest-status "./docker-entrypoint…" kener About a minute ago Up About a minute (healthy) 0.0.0.0:3000-&gt;3000/tcp, [::]:3000-&gt;3000/tcp</pre><p>Eseguire quindi il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose logs -f kener</pre><p>Se è tutto OK dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">kener-status | [dotenv@17.2.4] injecting env (0) from .env -- tip: <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> enable debug logging with { debug: true }
kener-status | [dotenv@17.2.4] injecting env (0) from .env -- tip: <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> load multiple .env files with { path: ['.env.local', '.env'] }
kener-status | Configuring database with type sqlite
kener-status | [dotenv@17.2.4] injecting env (0) from .env -- tip: <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f511.png" alt="🔑" class="wp-smiley" style="height: 1em; max-height: 1em;" /> add access controls to secrets: https://dotenvx.com/ops
kener-status | [dotenv@17.2.4] injecting env (0) from .env -- tip: <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f511.png" alt="🔑" class="wp-smiley" style="height: 1em; max-height: 1em;" /> add access controls to secrets: https://dotenvx.com/ops
kener-status | [dotenv@17.2.4] injecting env (0) from .env -- tip: <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> encrypt with Dotenvx: https://dotenvx.com
kener-status | [dotenv@17.2.4] injecting env (0) from .env -- tip: <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> prevent committing .env to code: https://dotenvx.com/precommit
kener-status | Configuring database with type sqlite
kener-status | [dotenv@17.2.4] injecting env (0) from .env -- tip: <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> prevent committing .env to code: https://dotenvx.com/precommit
kener-status | [dotenv@17.2.4] injecting env (0) from .env -- tip: <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;" /> audit secrets and track compliance: https://dotenvx.com/ops
kener-status | Error running migrations: SqliteError: unable to open database file
kener-status | at new Database (/app/node_modules/better-sqlite3/lib/database.js:69:26)
kener-status | at Client_BetterSQLite3.acquireRawConnection (/app/node_modules/knex/lib/dialects/better-sqlite3/index.js:14:12)
kener-status | at create (/app/node_modules/knex/lib/client.js:262:39)
kener-status | at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
kener-status | code: 'SQLITE_CANTOPEN'
kener-status | }
kener-status | Running seed...
kener-status | Error running seed: Error: Error while executing "/app/seeds/generate_template.ts" seed: unable to open database file
kener-status | at Seeder._waterfallBatch (/app/node_modules/knex/lib/migrations/seed/Seeder.js:118:23)
kener-status | SqliteError: unable to open database file
kener-status | at new Database (/app/node_modules/better-sqlite3/lib/database.js:69:26)
kener-status | at Client_BetterSQLite3.acquireRawConnection (/app/node_modules/knex/lib/dialects/better-sqlite3/index.js:14:12)
kener-status | at create (/app/node_modules/knex/lib/client.js:262:39) {
kener-status | original: SqliteError: unable to open database file
kener-status | at new Database (/app/node_modules/better-sqlite3/lib/database.js:69:26)
kener-status | at Client_BetterSQLite3.acquireRawConnection (/app/node_modules/knex/lib/dialects/better-sqlite3/index.js:14:12)
kener-status | at create (/app/node_modules/knex/lib/client.js:262:39) {
kener-status | code: 'SQLITE_CANTOPEN'
kener-status | }
kener-status | }
kener-status | Kener is running on port 3000!
kener-status | Using option immediately with every does not affect the job's schedule. Job will run immediately anyway.
kener-status | Maintenance event scheduler started (runs every hour)
kener-status | Daily cleanup scheduler started (runs at 00:00 UTC)
kener-status | Running maintenance event scheduler...
kener-status | Error processing maintenances for event generation: SqliteError: unable to open database file
kener-status | at new Database (/app/node_modules/better-sqlite3/lib/database.js:69:26)
kener-status | at Client_BetterSQLite3.acquireRawConnection (/app/node_modules/knex/lib/dialects/better-sqlite3/index.js:14:12)
kener-status | at create (/app/node_modules/knex/lib/client.js:262:39)
kener-status | at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
kener-status | code: 'SQLITE_CANTOPEN'
kener-status | }
kener-status | Maintenance scheduler completed. Processed 0 maintenances, created 0 events.
kener-status | _ __ _ _ _ _
kener-status | | |/ /___ _ __ ___ _ __ __ _| || | / | / |
kener-status | | ' // _ \ '_ \ / _ \ '__| \ \ / / || |_ | | | |
kener-status | | . \ __/ | | | __/ | \ V /|__ _|| |_| |
kener-status | |_|\_\___|_| |_|\___|_| \_/ |_|(_)_(_)_|
kener-status |
kener-status | Kener version 4.1.1 is running!</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>PRIMO ACCESSO DA WEBGUI</strong></h3>
<p>Aprire il browser e richiamare il link:</p>
<p><strong>http://IP_DEL_SERVER:3000/status/account/signin</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-kener-ubuntu-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124287 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-kener-ubuntu-01-1024x401.png" alt="" width="1024" height="401" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-kener-ubuntu-01-980x384.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-kener-ubuntu-01-480x188.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>Al primo avvio partirà il wizard di setup per creare l&#8217;account amministratore.</p>
<p>Inserire il nome dell&#8217;utente, la mail e password quindi cliccare <strong>Create Account</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-kener-ubuntu-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124289 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-kener-ubuntu-02-1024x402.png" alt="" width="1024" height="402" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-kener-ubuntu-02-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-kener-ubuntu-02-480x189.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 visualizzare la <strong>Dashboard di Kener</strong></p>
<p>&nbsp;</p>
<h3><strong>CARATTERISTICHE DI KENER</strong></h3>
<p>Ecco l&#8217;elenco dettagliato delle caratteristiche di Kener organizzato per area funzionale:</p>
<h4></h4>
<h4><strong>Monitoraggio dei servizi</strong></h4>
<ul>
<li>11 tipi di monitor supportati: HTTP/API, TCP, Ping, DNS, SSL, SQL e altri protocolli comuni</li>
<li>Scheduling basato su cron, con intervallo minimo di 1 minuto per check</li>
<li>Configurazione flessibile via YAML: puoi definire tu stesso la logica che determina se un servizio è UP, DOWN o DEGRADED, non solo un semplice check binario</li>
<li>Stato di default configurabile per un monitor (es. defaultStatus=DOWN se non viene ricevuto un aggiornamento entro l&#8217;intervallo previsto)</li>
<li>Data Explorer: sezione per ispezionare lo storico dei check, analizzare i fallimenti e i trend di uptime nel tempo</li>
</ul>
<h4></h4>
<h4><strong>Gestione incidenti</strong></h4>
<ul>
<li>Creazione incidenti tramite GitHub Issues con rich text, oppure via API REST dedicate</li>
<li>Sistema di trigger: condizioni intelligenti per instradare automaticamente notifiche e automazioni operative in base agli eventi</li>
<li>Template di messaggistica: modelli riutilizzabili per standardizzare le comunicazioni di incidenti e notifiche</li>
</ul>
<h4></h4>
<h4><strong>Manutenzioni programmate</strong></h4>
<ul>
<li>Pianificazione di maintenance window con scheduler dedicato (nei log lo hai visto girare ogni ora)</li>
<li>Generazione automatica degli eventi di manutenzione associati ai monitor</li>
</ul>
<h4></h4>
<h4><strong>Notifiche</strong></h4>
<ul>
<li>Supporto nativo per Slack, Discord, webhook generici</li>
<li>Sistema di notifica per i subscriber della status page (utenti finali che vogliono essere avvisati sui disservizi)</li>
</ul>
<h4></h4>
<h4><strong>Interfaccia e personalizzazione</strong></h4>
<ul>
<li>Tema chiaro/scuro</li>
<li>Costruito su SvelteKit + shadcn-svelte, interfaccia moderna e reattiva</li>
<li>Responsive design per dispositivi mobili</li>
<li>100% accessibility score dichiarato</li>
<li>Supporto multilingua: 21 lingue disponibili</li>
<li>Badge generator per stato e uptime dei singoli monitor, embeddabili altrove</li>
<li>Widget/iframe embed per integrare un monitor in altre pagine/dashboard</li>
<li>Dominio personalizzato supportato</li>
<li>SEO e social media ready (meta tag automatici)</li>
</ul>
<h4></h4>
<h4><strong>Sicurezza e gestione accessi</strong></h4>
<ul>
<li>Vault/secret management: storage sicuro per chiavi e credenziali usate nelle integrazioni</li>
<li>API Key management: emissione e revoca di chiavi per automazioni e integrazioni di terze parti</li>
<li>KENER_SECRET_KEY dedicata per la sicurezza delle sessioni</li>
</ul>
<h4></h4>
<h4><strong>Analytics</strong></h4>
<ul>
<li>Integrazione con provider esterni: Google Analytics, Plausible, Mixpanel, Umami, Microsoft Clarity e altri</li>
</ul>
<h4></h4>
<h4><strong>Deployment e infrastruttura</strong></h4>
<ul>
<li>Immagine Docker ufficiale pronta all&#8217;uso, deploy dichiarato &#8220;in meno di 2 minuti&#8221; con Docker Compose</li>
<li>Redis obbligatorio come dipendenza per cache, sessioni e coda dei job di scheduling</li>
<li>Storage SQLite locale, senza necessità di un database esterno separato</li>
<li>Supporto base path per hosting sotto Kubernetes/subpath</li>
<li>Licenza MIT, quasi 5.000 star su GitHub</li>
<li>Nessun supporto commerciale/SLA ufficiale — progetto community-driven, quindi da valutare in ottica di rischio se lo porti in produzione critica</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-kener-su-ubuntu-server-26-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installazione e Configurazione Base di ZimaOS su una Virtual Machine VmWare</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-zimaos-su-una-virtual-machine-vmware/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-zimaos-su-una-virtual-machine-vmware/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Mon, 20 Jul 2026 05:58:23 +0000</pubDate>
				<category><![CDATA[VmWare]]></category>
		<category><![CDATA[ZimaOS]]></category>
		<category><![CDATA[esxi]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[storage]]></category>
		<category><![CDATA[vmware]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124250</guid>

					<description><![CDATA[&#160; Negli ultimi anni il mondo del self-hosting ha visto emergere alternative sempre più mature ai classici NAS OS commerciali. Tra queste, ZimaOS sviluppato da IceWhale, gli stessi dietro ZimaBoard e ZimaCube si propone come un sistema operativo NAS &#8220;semplice, focalizzato e open&#8221;, costruito su base CasaOS, pensato per unire in un&#8217;unica interfaccia storage, gestione [&#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>Negli ultimi anni il mondo del self-hosting ha visto emergere alternative sempre più mature ai classici NAS OS commerciali.</p>
<p>Tra queste, ZimaOS sviluppato da IceWhale, gli stessi dietro ZimaBoard e ZimaCube si propone come un sistema operativo NAS &#8220;semplice, focalizzato e open&#8221;, costruito su base CasaOS, pensato per unire in un&#8217;unica interfaccia storage, gestione container Docker, multimedia e servizi da personal cloud.</p>
<p>Se possiedi già un&#8217;infrastruttura di virtualizzazione che sia un homelab su ESXi, un server VMware Workstation o un ambiente di test più strutturato non è necessario acquistare hardware dedicato per valutare ZimaOS: il sistema può essere installato senza troppe difficoltà anche in una macchina virtuale, con qualche accorgimento specifico legato a firmware, controller disco e formato immagine.</p>
<p>In questo articolo vedremo passo passo come creare una VM VMware compatibile, quali parametri di configurazione sono critici per un boot corretto (spoiler: UEFI e controller SATA non sono opzionali), e come completare l&#8217;installazione e la configurazione di base di ZimaOS, così da avere un ambiente pronto su cui sperimentare prima di un eventuale deployment su hardware reale.</p>
<p>&nbsp;</p>
<h3><strong>DOWNLOAD DELL&#8217;IMMAGINE DI ZIMAOS</strong></h3>
<p>La pagina principale <a href="https://www.zimaspace.com/it/zimaos/download" target="_blank" rel="noopener">https://www.zimaspace.com/it/zimaos/download</a> offre solo il file .img (pensato per USB/hardware fisico).</p>
<p>L&#8217;ISO per VM si trova invece sulla pagina release di GitHub:</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://github.com/IceWhaleTech/ZimaOS/releases" target="_blank" rel="noopener">https://github.com/IceWhaleTech/ZimaOS/releases</a></p>
<p>Lì, per ogni versione, negli &#8220;Assets&#8221; in fondo dovresti trovare sia il file .img che (per le release più recenti) un file .iso.</p>
<p>Cercare qualcosa tipo <strong>zimaos-x86_64-*.iso</strong>.</p>
<p>Durante la stesura del seguente articolo la versione disponibile è: <strong>zimaos-x86_64-1.6.2_installer.iso</strong></p>
<p>&nbsp;</p>
<h3><strong>CREAZIONE DELLA VM SU ESXI</strong></h3>
<p><strong>New VM</strong> → <strong>Custom/Advanced</strong></p>
<p><strong>Guest OS</strong>: Linux → Other Linux 6.x (64-bit) (o Debian 64-bit, va bene lo stesso)</p>
<p><strong>RAM</strong>: almeno 4 GB (min. richiesto 2 GB)</p>
<p><strong>vCPU</strong>: 4 core consigliati</p>
<p><strong>Storage</strong>: almeno 32 GB</p>
<p><strong>Controller disco</strong>: utilizza SATA, non SCSI (default). Questo è importante perchè con SCSI l&#8217;installer spesso non vede il disco correttamente.</p>
<p><strong>Firmware</strong>: prima del primo boot, vai nelle Opzioni della VM e cambia da BIOS a UEFI. ZimaOS non si avvia in modalità BIOS legacy.</p>
<p><strong>CD/DVD virtuale</strong>: monta l&#8217;ISO scaricata come CD/DVD.</p>
<p>Accendere la VM: parte in automatico l&#8217;installer, il processo è completamente automatico e formatta il disco target (attenzione, cancella tutto). Al riaggio riparte già in ZimaOS.</p>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DI ZIMAOS</strong></h3>
<p>Inizio dell&#8217;installazione</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124264 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-01-1024x577.png" alt="" width="1024" height="577" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-01-1024x577.png 1024w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-01-980x552.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-01-480x270.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 <strong>Invio</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124265 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-02-1024x578.png" alt="" width="1024" height="578" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-02-1024x578.png 1024w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-02-980x553.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-02-480x271.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>Install ZimaOS</strong> quindi premere <strong>Invio</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124266 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-03-1024x579.png" alt="" width="1024" height="579" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-03-1024x579.png 1024w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-03-980x554.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-03-480x271.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 il disco dove installare ZimaOS quindi premere <strong>Invio</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-04.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124267 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-04-1024x576.png" alt="" width="1024" height="576" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-04-1024x576.png 1024w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-04-980x551.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-04-480x270.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>Yes</strong> e premere <strong>Invio</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-05.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124268 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-05-1024x578.png" alt="" width="1024" height="578" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-05-1024x578.png 1024w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-05-980x553.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-05-480x271.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>Yes</strong> e Premere<strong> Invio</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-06.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124269 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-06-1024x577.png" alt="" width="1024" height="577" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-06-1024x577.png 1024w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-06-980x552.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-06-480x270.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>Attendere qualche istante fino al termine del wipe del disco e alla creazione delle partizioni</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-07.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124270 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-07-1024x578.png" alt="" width="1024" height="578" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-07-1024x578.png 1024w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-07-980x553.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-07-480x271.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>Rimuovere la ISO agganciata alla VM quindi premere<strong> Invio</strong> per riavviare la VM</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-08.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124271 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-08-1024x679.png" alt="" width="1024" height="679" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-08-1024x679.png 1024w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-08-980x650.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-08-480x318.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 visualizzare la schermata di benvenuto di ZimaOS come mostrato nell&#8217;immagine sovrastante</p>
<p>&nbsp;</p>
<h3><strong>ACCESSO A ZIMAOS TRAMITE WEBGUI</strong></h3>
<p>Richiamare in un qualsiasi browser il link mostrato nell&#8217;immagine di benvenuto</p>
<p>Nel mio caso richiamaerò: <strong>http://192.168.80.98/</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-09.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124272 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-09-1024x400.png" alt="" width="1024" height="400" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-09-980x383.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-09-480x188.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 la <strong>Lingua</strong>, Accettare l&#8217;<strong>EULA</strong> quindi cliccare <strong>Avanti</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-10.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124274 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-10-1024x400.png" alt="" width="1024" height="400" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-10-980x383.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-10-480x187.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 utente con la relativa password quindi cliccare <strong>Next</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-11.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124275 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-11-1024x381.png" alt="" width="1024" height="381" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-11-980x364.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/inst-zimaos-vmware-11-480x178.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>A questo punto dovremmo visualizzare la Dashboard di ZimaOS</p>
<p>&nbsp;</p>
<h3><strong>FUNZIONALITA&#8217; DI ZIMAOS</strong></h3>
<p>Ecco un elenco delle feature di ZimaOS:</p>
<h4></h4>
<h4><strong>Gestione file e storage</strong></h4>
<ul>
<li>File manager unificato: gestisci in un&#8217;unica interfaccia file provenienti da telefono, cloud, drive esterni e USB, con anteprima e condivisione senza attriti</li>
<li>Mount istantaneo di dischi USB plug-and-play</li>
<li>Integrazione cloud diretta (mount di cloud drive esterni per sync/trasferimento senza cambiare piattaforma)</li>
<li>Accesso LAN/WAN da PC e Mac, con compatibilità verso NAS Synology/QNAP</li>
<li>Supporto Thunderbolt come DAS (al momento limitato a ZimaCube Pro)</li>
</ul>
<h4></h4>
<h4><strong>RAID e ridondanza storage</strong></h4>
<ul>
<li>Setup RAID in pochi click (JBOD, RAID 0, 1, 5, 6)</li>
<li>Calcolo dello spazio disponibile stimato in tempo reale</li>
<li>Vista d&#8217;insieme su salute dischi e spazio occupato</li>
</ul>
<h4></h4>
<h4><strong>Backup</strong></h4>
<ul>
<li>Strategia di backup basata sul modello 3-2-1</li>
<li>Dashboard centralizzata con stato dei backup, progresso task e storico sync</li>
<li>Backup/sync incrociato tra cloud, storage locale e LAN</li>
</ul>
<p>&nbsp;</p>
<h4><strong>Sincronizzazione e trasferimento file</strong></h4>
<ul>
<li>Zima Client per Mac/PC (sync locale, editing diretto di video 4K)</li>
<li>Zima Client per iOS/Android (backup e trasferimento mobile ad alta velocità</li>
<li>Interfaccia web con drag-and-drop</li>
<li>Condivisione file tramite link pubblico</li>
</ul>
<p>&nbsp;</p>
<h4><strong>Privacy e sicurezza</strong></h4>
<ul>
<li>Account locale: identità del dispositivo autogenerata, nessuna email/telefono richiesti, nessun login su piattaforme terze</li>
<li>Networking P2P criptato end-to-end, senza passare da server cloud intermedi</li>
<li>Multi-utente con permessi a livello di cartella (cartelle personali private di default)</li>
</ul>
<p>&nbsp;</p>
<h4><strong>App Store ed ecosistema</strong></h4>
<ul>
<li>Oltre 800 app installabili in un click</li>
<li>Supporto completo a container Docker di terze parti</li>
<li>App più popolari nella community: Immich (foto), Jellyfin/Plex/Emby (media server), Home Assistant (domotica), Paperless-ngx, Memos, Calibre, KaraKeep, n8n, Dashy, Pi-hole, Redroid, Nextcloud, Swing Music, Pinchflat, WordPress, Cloudflared</li>
</ul>
<p>&nbsp;</p>
<h4><strong>Funzionalità aggiuntive nate dalla community</strong></h4>
<ul>
<li>DLNA per streaming wireless verso TV/speaker compatibili</li>
<li>ZVM: hypervisor leggero integrato per VM Windows/Linux one-click</li>
<li>Supporto UPS per shutdown sicuro in caso di blackout</li>
<li>Btop integrato per monitoraggio risorse in tempo reale (CPU, RAM, disco, rete)</li>
</ul>
<p>&nbsp;</p>
<h4><strong>Localizzazione</strong></h4>
<ul>
<li>Interfaccia disponibile in 28 lingue, italiano incluso</li>
</ul>
<p>&nbsp;</p>
<h4><strong>Licensing</strong></h4>
<ul>
<li>Versione Free: funzionalità core, Zima Client, Thunderbolt, Developer Mode, limite di 4 dischi e 3 utenti</li>
<li>Licenza lifetime a $29: dischi e utenti illimitati</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-zimaos-su-una-virtual-machine-vmware/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installazione e Configurazione Base di CrowdSec su Ubuntu Server 26.04</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-crowdsec-su-ubuntu-server-26-04/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-crowdsec-su-ubuntu-server-26-04/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 06:32:40 +0000</pubDate>
				<category><![CDATA[CrowdSec]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124251</guid>

					<description><![CDATA[&#160; CrowdSec si è ormai affermato come alternativa moderna e collaborativa a Fail2ban: non si limita a bloccare IP sospetti in base ai log locali, ma sfrutta un modello di intelligence condivisa costruita dalla community quando un IP viene segnalato come malevolo su una macchina, l&#8217;informazione (in forma anonimizzata) arriva a tutti gli altri utenti [&#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>CrowdSec si è ormai affermato come alternativa moderna e collaborativa a Fail2ban: non si limita a bloccare IP sospetti in base ai log locali, ma sfrutta un modello di intelligence condivisa costruita dalla community quando un IP viene segnalato come malevolo su una macchina, l&#8217;informazione (in forma anonimizzata) arriva a tutti gli altri utenti del network CrowdSec, permettendo un blocco preventivo ancora prima che l&#8217;attacco arrivi sui propri sistemi.</p>
<p>L&#8217;architettura si basa su un motore che analizza i log in tempo reale tramite scenari e parser configurabili, un sistema di bouncer che applica il blocco effettivo (a livello di firewall, reverse proxy, o altro), e una console centralizzata opzionale per la gestione multi-macchina.</p>
<p>In questo articolo vedremo come installare CrowdSec su una macchina Ubuntu Server 26.04 pulita, quali collection attivare per un primo hardening (SSH, log di sistema, eventuali servizi web esposti), come configurare il bouncer firewall di base, e alcuni accorgimenti pratici per verificare che tutto funzioni correttamente prima di portarlo in produzione su un ambiente multi-sito come il mio.</p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<ul>
<li>Ubuntu Server 26.04 LTS</li>
<li>Accesso root o sudo</li>
<li>Connessione internet attiva</li>
<li>Minimo 1 GB RAM, 10 GB storage</li>
</ul>
<p>&nbsp;</p>
<h3><strong>AGGIORNAMENTO DEL SISTEMA</strong></h3>
<p>Prima di tutto 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>
<h3><strong>AGGIUNTA DEL REPOSITORY UFFICIALE DI CROWDSEC</strong></h3>
<p>CrowdSec distribuisce i pacchetti tramite il proprio repository APT. Aggiungilo con lo script ufficiale:</p><pre class="urvanov-syntax-highlighter-plain-tag">curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash</pre><p>Lo script importa la chiave GPG, registra il repository e aggiorna la cache APT.</p>
<p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">Detected operating system as Ubuntu/resolute.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Detected apt version as 3.2.0
Running apt-get update... done.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/crowdsec_crowdsec.list...done.
Importing packagecloud gpg key... Packagecloud gpg key imported to /etc/apt/keyrings/crowdsec_crowdsec-archive-keyring.gpg
done.
Running apt-get update... done.

The repository is setup! You can now install packages.</pre><p>&nbsp;</p>
<p><strong>NOTA BENE:</strong> se preferisci non fare pipe di curl direttamente in bash, puoi scaricare lo script, esaminarlo e poi eseguirlo manualmente.</p>
<p><strong>ATTENZIONE:</strong> Per Ubuntu Pro/ESM, se hai i repository universe abilitati, il sistema potrebbe proporre CrowdSec 1.4.6 (versione obsoleta). Crea un pinning per forzare il repo ufficiale:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo tee /etc/apt/preferences.d/crowdsec &lt;&lt; 'EOF'
Package: crowdsec*
Pin: origin packagecloud.io
Pin-Priority: 900
EOF
sudo apt update</pre><p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DELL&#8217;AGENT</strong></h3>
<p>Installare l&#8217;agent con il seguente comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y crowdsec</pre><p>Durante l&#8217;installazione CrowdSec rileva automaticamente i servizi in esecuzione (sshd, nginx, ecc.) e scarica le relative collection di default dal CrowdSec Hub.</p>
<p>Al termine dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">The following packages were automatically installed and are no longer required:
linux-headers-7.0.0-14 linux-image-unsigned-7.0.0-14-generic linux-modules-7.0.0-14-generic linux-tools-7.0.0-14-generic
linux-headers-7.0.0-14-generic linux-main-modules-zfs-7.0.0-14-generic linux-tools-7.0.0-14
Use 'sudo apt autoremove' to remove them.

Installing:
crowdsec

Summary:
Upgrading: 0, Installing: 1, Removing: 0, Not Upgrading: 2
Download size: 42.2 MB
Space needed: 140 MB / 40.1 GB available

Get:1 http://archive.ubuntu.com/ubuntu resolute/universe amd64 crowdsec amd64 1.4.6-10.1 [42.2 MB]
Fetched 42.2 MB in 2s (23.9 MB/s)
Selecting previously unselected package crowdsec.
(Reading database… 180436 files and directories currently installed.)
Preparing to unpack …/crowdsec_1.4.6-10.1_amd64.deb…
Unpacking crowdsec (1.4.6-10.1)…
Setting up crowdsec (1.4.6-10.1)…
I: Registering to LAPI (/etc/crowdsec/local_api_credentials.yaml)
I: Registering to CAPI (/etc/crowdsec/online_api_credentials.yaml)
I: Setting up offline hub (see README.Debian)
I: Enabling upstream-recommended items, first installation (via symlinks from /etc/crowdsec)
I: Enabling WAL for SQLite [fstype=ext4] (see README.Debian)
Created symlink '/etc/systemd/system/multi-user.target.wants/crowdsec.service' → '/usr/lib/systemd/system/crowdsec.service'.
W: Restarting manually to force a CAPI pull (upstream #2120)
Scanning processes...
Scanning linux images...

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.</pre><p>Verificare cosa è stato installato con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli collections list</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">COLLECTIONS
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Name <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Status Version Local Path
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
crowdsecurity/apache2 <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;" /> enabled 0.1 /etc/crowdsec/collections/apache2.yaml
crowdsecurity/base-http-scenarios <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;" /> enabled 0.6 /etc/crowdsec/collections/base-http-scenarios.yaml
crowdsecurity/http-cve <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;" /> enabled 1.9 /etc/crowdsec/collections/http-cve.yaml
crowdsecurity/linux <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;" /> enabled 0.2 /etc/crowdsec/collections/linux.yaml
crowdsecurity/nginx <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;" /> enabled 0.2 /etc/crowdsec/collections/nginx.yaml
crowdsecurity/sshd <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;" /> enabled,tainted 0.2 /etc/crowdsec/collections/sshd.yaml
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</pre><p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DEL FIREWALL BOUNCER</strong></h3>
<p>Il bouncer è il componente che applica concretamente i blocchi. Scegli la versione corretta in base al tuo stack firewall:</p>
<p>Se si utilizza iptables (default su Ubuntu):</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y crowdsec-firewall-bouncer-iptables</pre><p>Se si utilizza nftables nativo:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install -y crowdsec-firewall-bouncer-nftables</pre><p><strong>ATTENZIONE</strong>: se il tuo sistema usa nftables nativo e installi il bouncer iptables, sembrerà funzionare ma non bloccherà nulla.</p>
<p>Verificare con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nft list ruleset</pre><p>Se il comando restituisce output, stai usando nftables.</p>
<p>Il bouncer si registra automaticamente con l&#8217;agent locale e inizia subito ad applicare blocchi, inclusa la community blocklist sincronizzata dal cloud CrowdSec.</p>
<p>&nbsp;</p>
<h3><strong>VERIFICA DEL FUNZIONAMENTO</strong></h3>
<p>Abilita il servizio all&#8217;avvio e verifica lo stato con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl enable crowdsec

sudo systemctl status crowdsec</pre><p>Se è tutto OK dovremmo visualizzre il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">● crowdsec.service - Crowdsec agent
Loaded: loaded (/usr/lib/systemd/system/crowdsec.service; enabled; preset: enabled)
Active: active (running) since Sat 2026-07-11 14:14:40 UTC; 3min 55s ago
Invocation: 10a04e4e854f49e5b1388a0b56db5afc
Main PID: 2909 (crowdsec)
Tasks: 9 (limit: 6227)
Memory: 49.3M (peak: 50.5M)
CPU: 3.144s
CGroup: /system.slice/crowdsec.service
├─2909 /usr/bin/crowdsec -c /etc/crowdsec/config.yaml
└─2916 journalctl --follow -n 0 _SYSTEMD_UNIT=ssh.service

Jul 11 14:14:39 vm-srv-test systemd[1]: Starting crowdsec.service - Crowdsec agent...
Jul 11 14:14:40 vm-srv-test systemd[1]: Started crowdsec.service - Crowdsec agent.</pre><p>Controllare le metriche di acquisizione log con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli metrics</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">Acquisition Metrics:
╭────────────────────────┬────────────┬──────────────┬────────────────┬────────────────────────╮
│ Source │ Lines read │ Lines parsed │ Lines unparsed │ Lines poured to bucket │
├────────────────────────┼────────────┼──────────────┼────────────────┼────────────────────────┤
│ file:/var/log/auth.log │ 21 │ - │ 21 │ - │
│ file:/var/log/syslog │ 20 │ - │ 20 │ - │
╰────────────────────────┴────────────┴──────────────┴────────────────┴────────────────────────╯

Parser Metrics:
╭─────────────────────────────────┬──────┬────────┬──────────╮
│ Parsers │ Hits │ Parsed │ Unparsed │
├─────────────────────────────────┼──────┼────────┼──────────┤
│ child-crowdsecurity/syslog-logs │ 41 │ 41 │ - │
│ crowdsecurity/syslog-logs │ 41 │ 41 │ - │
╰─────────────────────────────────┴──────┴────────┴──────────╯

Local Api Metrics:
╭────────────────────┬────────┬──────╮
│ Route │ Method │ Hits │
├────────────────────┼────────┼──────┤
│ /v1/heartbeat │ GET │ 4 │
│ /v1/watchers/login │ POST │ 2 │
╰────────────────────┴────────┴──────╯

Local Api Machines Metrics:
╭──────────────────────────────────┬───────────────┬────────┬──────╮
│ Machine │ Route │ Method │ Hits │
├──────────────────────────────────┼───────────────┼────────┼──────┤
│ 85a4c273f3ce42408c076d300194eca0 │ /v1/heartbeat │ GET │ 4 │
╰──────────────────────────────────┴───────────────┴────────┴──────╯

Local Api Decisions:
╭─────────────────┬────────┬────────┬───────╮
│ Reason │ Origin │ Action │ Count │
├─────────────────┼────────┼────────┼───────┤
│ ssh:bruteforce │ CAPI │ ban │ 2702 │
│ http:bruteforce │ CAPI │ ban │ 538 │
│ http:crawl │ CAPI │ ban │ 6042 │
│ http:dos │ CAPI │ ban │ 585 │
│ http:exploit │ CAPI │ ban │ 4671 │
│ http:scan │ CAPI │ ban │ 460 │
╰─────────────────┴────────┴────────┴───────╯</pre><p>Se i contatori di acquisizione crescono mentre i log si riempiono, l&#8217;agent sta leggendo correttamente.</p>
<p>Se rimangono a zero, il problema è quasi sempre un percorso log non standard: controllare e correggere <strong>/etc/crowdsec/acquis.yaml.</strong></p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DELLE COLLECTION</strong></h3>
<p>Le collection sono bundle di parser e scenari per uno specifico servizio. Installare solo quelle relative ai servizi realmente in esecuzione sulla macchina.</p>
<h4><strong>Collection base (consigliate per tutti i server)</strong></h4>
<p>bash# Rilevamento pattern SSH brute-force (già inclusa di default)</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli collections install crowdsecurity/sshd</pre><p># Pattern HTTP per exploit CVE generici (/.env, /wp-config.php.bak, ecc.)</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli collections install crowdsecurity/http-cve</pre><p># Pattern privilege escalation locale da auth.log</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli collections install crowdsecurity/linux-lpe</pre><p></p>
<h4></h4>
<h4><strong>Collection aggiuntive (in base ai servizi installati)</strong></h4>
<p>bash# Solo se usi Nginx</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli collections install crowdsecurity/nginx</pre><p># Solo se usi Apache</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli collections install crowdsecurity/apache2</pre><p># Solo se usi WordPress</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli collections install crowdsecurity/wordpress</pre><p># Solo se MariaDB/MySQL è esposto in rete (non localhost)</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli collections install crowdsecurity/mariadb</pre><p># Solo se usi il tarpit SSH endlessh</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli collections install crowdsecurity/endlessh</pre><p>Regola pratica: non installare collection per servizi che non hai. Ogni parser aggiunge overhead e rumore nel log delle decisioni. Tratta le collection come le regole firewall: minima superficie, intento esplicito.</p>
<p>Dopo l&#8217;installazione di nuove collection, riavvia l&#8217;agent con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl restart crowdsec</pre><p>Verificare gli scenari attivi con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli collections list

sudo cscli scenarios list</pre><p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DELLE SORGENTI LOG (ACQUIS.YAML)</strong></h3>
<p>Se hai percorsi log non standard o vuoi aggiungere manualmente delle sorgenti, modificare <strong>/etc/crowdsec/acquis.yaml</strong> con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano /etc/crowdsec/acquis.yaml</pre><p>Esempio di configurazione per SSH e Nginx:</p><pre class="urvanov-syntax-highlighter-plain-tag">yaml---
# Log SSH
filenames:
- /var/log/auth.log
labels:
type: syslog
---
# Log Nginx
filenames:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
labels:
type: nginx</pre><p>Dopo le modifiche eseguire il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl restart crowdsec</pre><p>&nbsp;</p>
<h3><strong>COLLEGAMENTO ALLA CROWDSEC CONSOLE (OPZIONALE MA CONSIGLIATO)</strong></h3>
<p>La console web gratuita su <strong>app.crowdsec.net</strong> offre un dashboard centralizzato con alert, decisioni, statistiche e mappa geografica degli attacchi.</p>
<p>La procedura di enrollment prevede i seguenti passaggi:</p>
<p>Creare un account su <strong>app.crowdsec.net</strong></p>
<p>Andare su <strong>Security Engines → Add</strong> → copiare il comando di enrollment</p>
<p>Eseguilo sul server:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli console enroll &lt;IL_TUO_TOKEN&gt;</pre><p>Approvare l&#8217;istanza dalla Console web</p>
<p>Riavviare l&#8217;agent (passaggio obbligatorio):</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo systemctl restart crowdsec</pre><p><strong>ATTENZIONE</strong>: senza il riavvio, l&#8217;istanza risulta enrollata ma non trasmette dati alla Console.</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-crowsec-01.jpg"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124252 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-crowsec-01-1024x817.jpg" alt="" width="1024" height="817" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-crowsec-01-980x782.jpg 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/07/install-crowsec-01-480x383.jpg 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 Dashboard di Crowdsec come mostrato nell&#8217;immagine sovrastante</p>
<p>&nbsp;</p>
<h3><strong>COMANDI UTILI PER LA GESTIONE QUOTIDIANA</strong></h3>
<p>bash# Visualizza le decisioni attive (IP bannati)</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli decisions list</pre><p># Visualizza gli alert recenti</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli alerts list</pre><p># Aggiungi manualmente un ban</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli decisions add --ip 1.2.3.4 --duration 24h --reason "test ban"</pre><p># Rimuovi un ban</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli decisions delete --ip 1.2.3.4</pre><p># Whitelist permanente di un IP</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli allowlists add mywhitelist --ip 192.168.1.100</pre><p># Aggiorna hub (parser, scenari, collection)</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli hub update
sudo cscli hub upgrade</pre><p># Stato dei bouncer registrati</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli bouncers list</pre><p># Metriche dettagliate</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo cscli metrics</pre><p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-crowdsec-su-ubuntu-server-26-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>