<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>~&#x2F;magostinelli - opensource</title>
      <link>https://www.agostinelli.eu</link>
      <description>La casa delle mie passioni</description>
      <generator>Zola</generator>
      <language>it</language>
      <atom:link href="https://www.agostinelli.eu/tags/opensource/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sun, 11 Jan 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Nuovo sito - Parte 1</title>
          <pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/nuovo_sito_1/</link>
          <guid>https://www.agostinelli.eu/nuovo_sito_1/</guid>
          <description xml:base="https://www.agostinelli.eu/nuovo_sito_1/">&lt;h1 id=&quot;nuovo-sito-2026&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#nuovo-sito-2026&quot; aria-label=&quot;Anchor link for: nuovo-sito-2026&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Nuovo sito 2026&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;prima-parte&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#prima-parte&quot; aria-label=&quot;Anchor link for: prima-parte&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Prima parte&lt;&#x2F;h2&gt;
&lt;p&gt;Benvenuti nel primo articolo della serie.
Non appena mi sono messo a scrivere due righe sul nuovo sito, mi sono accorto che non ne sarebbe bastato uno solo.
Un&#x27;attività di per se banale, un piccolo sito personale con blog e galleria immagini, in realtà si è rivelata una piccola sfida.&lt;&#x2F;p&gt;
&lt;p&gt;Ma partiamo con ordine:
prima di questo &lt;em&gt;&quot;restyling&quot;&lt;&#x2F;em&gt; avevo due siti, uno statico (con galleria immagini) e un blog con &lt;a href=&quot;&#x2F;tag&#x2F;writefreely&quot;&gt;writefreely&lt;&#x2F;a&gt;.
Da qui sono partito e mi sono detto, facciamo un sito unico, almeno ne ho uno solo da manutenere!&lt;&#x2F;p&gt;
&lt;p&gt;Cosi inizia la prima sfida: &lt;strong&gt;quale software&lt;&#x2F;strong&gt; usare?
&lt;em&gt;Writefreely&lt;&#x2F;em&gt; ormai sembra abbandonato, peccato perchè, se pur semplice, integrava nativamente activity pub.
Per le fotografie volevo trovare qualcosa che le potesse suddividere in cartelle, ma allo stesso tempo che la visualizzazione delle immagini fosse fruibile da tutti i dispositivi.&lt;&#x2F;p&gt;
&lt;p&gt;Infine come prerequisiti volevo anche:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;feed rss&lt;&#x2F;li&gt;
&lt;li&gt;sito snello (non pesante da caricare)&lt;&#x2F;li&gt;
&lt;li&gt;grafica responsive (banale, ma non sempre è cosi)&lt;&#x2F;li&gt;
&lt;li&gt;scrittura delle pagine in linguaggio MarkDown&lt;&#x2F;li&gt;
&lt;li&gt;tenere traccia delle modifiche effettuate&lt;&#x2F;li&gt;
&lt;li&gt;usare più automatismi possibili&lt;&#x2F;li&gt;
&lt;li&gt;statistiche sulle pagine più lette&lt;&#x2F;li&gt;
&lt;li&gt;multilingua (integrare inglese in futuro)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Insomma senza tenervi sulle spiena, alla fine ho scelto &lt;a href=&quot;&#x2F;tag&#x2F;zola&quot;&gt;Zola&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche-zola&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-zola&quot; aria-label=&quot;Anchor link for: perche-zola&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perchè Zola&lt;&#x2F;h2&gt;
&lt;p&gt;Di recente ho avuto un&#x27;eperienza con Hugo (altro generatore di siti statici), perchè abbiamo rimesso in piedi il sito del &lt;a href=&quot;https:&#x2F;&#x2F;prato.linux.it&quot;&gt;PLUG&lt;&#x2F;a&gt; e per alcune cose mi ha incuriosito, sono rimasto &quot;affascinato&quot; anche dalla CI di gitlab, che abbiamo usato per quel progetto.
Infine, in questo ultimo periodo mi sono &quot;innamorato&quot; di &lt;a href=&quot;&#x2F;tag&#x2F;forgejo&quot;&gt;Forgejo&lt;&#x2F;a&gt;.
Quindi ho messo insieme queste cose, ho fatto una navigata sul web, e ho scoperto &lt;a href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;.
Ho trovato anche un tema (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;welpo&#x2F;tabi&quot;&gt;tabi&lt;&#x2F;a&gt;) che mi è piaciuto subito, e quindi la decisione era già presa!&lt;&#x2F;p&gt;
&lt;p&gt;Nelle prossime puntate della serie ci addentreremo nelle singole problematiche che ho trovato e vedremo quali soluzioni (=software) ho deciso di implementare e perché.&lt;&#x2F;p&gt;
&lt;p&gt;Vi aspetto nelle prossime puntate!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Forgejo Runner</title>
          <pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/forgejo-runner/</link>
          <guid>https://www.agostinelli.eu/blog/forgejo-runner/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/forgejo-runner/">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2025&#x2F;forgejo-logo.png&quot; alt=&quot;Forgejo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;che-cos-e-forgejo-runner&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#che-cos-e-forgejo-runner&quot; aria-label=&quot;Anchor link for: che-cos-e-forgejo-runner&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Che cos&#x27;è Forgejo Runner&lt;&#x2F;h2&gt;
&lt;p&gt;Se usi #forgejo e desideri automatizzare i processi di sviluppo, &lt;strong&gt;Forgejo Runner&lt;&#x2F;strong&gt; è uno strumento che non puoi perderti.&lt;&#x2F;p&gt;
&lt;p&gt;Se, invece, non sai cos&#x27;è #forgejo, clicca sulla parola e leggi l&#x27;articolo che avevo pubblicato qui sul blog.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definizione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#definizione&quot; aria-label=&quot;Anchor link for: definizione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Definizione&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo Runner è un sistema di automazione che &lt;strong&gt;esegue compiti&lt;&#x2F;strong&gt; in background quando &lt;strong&gt;accadono determinati eventi&lt;&#x2F;strong&gt; nel tuo repository. In altre parole, ti permette di automatizzare il flusso di lavoro del tuo progetto senza intervento manuale.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;come-funziona&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-funziona&quot; aria-label=&quot;Anchor link for: come-funziona&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come funziona&lt;&#x2F;h2&gt;
&lt;p&gt;Quando effettui un push, apri una pull request, o altro ancora, Forgejo Runner può automaticamente:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Eseguire test del codice&lt;&#x2F;li&gt;
&lt;li&gt;Compilare il progetto&lt;&#x2F;li&gt;
&lt;li&gt;Distribuire l&#x27;applicazione&lt;&#x2F;li&gt;
&lt;li&gt;Generare documentazione&lt;&#x2F;li&gt;
&lt;li&gt;Eseguire controlli di qualità&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Il tutto accade in automatico dietro le quinte, senza che tu debba fare nulla.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche-e-utile&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-e-utile&quot; aria-label=&quot;Anchor link for: perche-e-utile&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché è utile&lt;&#x2F;h2&gt;
&lt;p&gt;Immagina di dover controllare manualmente che il tuo codice non abbia errori ogni volta che lo carichi. Sarebbe noioso, vero? Forgejo Runner elimina questo problema. Puoi definire una volta le regole che desideri applicare, e il sistema le seguirà automaticamente per ogni nuovo commit.&lt;&#x2F;p&gt;
&lt;p&gt;Questo significa codice più pulito, meno errori e molto meno lavoro manuale.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;un-esempio-pratico&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#un-esempio-pratico&quot; aria-label=&quot;Anchor link for: un-esempio-pratico&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Un esempio pratico&lt;&#x2F;h2&gt;
&lt;p&gt;Vogliamo che che ogni volta che qualcuno contribuisce al progetto, il codice venga testato automaticamente. Con Forgejo Runner, puoi impostare una regola che dice: &quot;Quando ricevi un nuovo push, esegui i test&quot;. Se i test falliscono, riceverai una notifica. Se passano, tutto procede normalmente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;forgejo-runner-e-docker&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#forgejo-runner-e-docker&quot; aria-label=&quot;Anchor link for: forgejo-runner-e-docker&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Forgejo Runner e Docker&lt;&#x2F;h2&gt;
&lt;p&gt;Una delle migliori pratiche è eseguire i compiti dentro &lt;strong&gt;container Docker&lt;&#x2F;strong&gt;. Questo è diventato, ormai, lo standard di fatto nel settore.&lt;&#x2F;p&gt;
&lt;p&gt;Utilizzare Docker con Forgejo Runner offre numerosi vantaggi: isolamento completo tra i vari compiti (un test non interferisce con un altro), ambienti di esecuzione riproducibili e coerenti, e la certezza che il codice funzionerà allo stesso modo sia sulla tua macchina che sui server di produzione.&lt;&#x2F;p&gt;
&lt;p&gt;In pratica, invece di &lt;em&gt;eseguire i compiti direttamente sul sistema operativo host&lt;&#x2F;em&gt;, Forgejo Runner li avvia all&#x27;interno di container Docker preconfigurati. Questo significa che puoi definire esattamente quali dipendenze, librerie e versioni delle applicazioni servono per i tuoi test o per la compilazione, senza doverti preoccupare di conflitti con altre configurazioni.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pratica&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#pratica&quot; aria-label=&quot;Anchor link for: pratica&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Pratica&lt;&#x2F;h2&gt;
&lt;p&gt;Premesso quanto detto sopra, eseguire il nostro workflow in un container docker ci permette di avere un alto livello di sicurezza, sopratutto in un server condiviso.
Per rendere semplice l&#x27;esecuzione, ho pensato di realizzare un file &lt;strong&gt;docker compose&lt;&#x2F;strong&gt; (e un &lt;em&gt;.env&lt;&#x2F;em&gt;) con tutto il necessario: registrazione, aggiornamento automatico e avvio automatico.
Trovate il codice di questo mini progetto qui (ovviemente sempre ospitato su forgejo): https:&#x2F;&#x2F;forgejo.it&#x2F;magostinelli&#x2F;forgejo-runner-docker&lt;&#x2F;p&gt;
&lt;h3 id=&quot;configurazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione&quot; aria-label=&quot;Anchor link for: configurazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione&lt;&#x2F;h3&gt;
&lt;p&gt;Per prima cosa assicuratevi che la vostra istanza di forgejo abbia le action abilitate (altrimenti non vedrete la voce del menù).
Per poter aggiungere un runner al vostro workflow, sarà necessario generare un token.
Andate su &lt;em&gt;Forgejo Admin Panel → Runner (o Runners)&lt;&#x2F;em&gt;
(in alternativa potete aggiungere il runner al singolo progetto git)&lt;&#x2F;p&gt;
&lt;p&gt;Seguite le istruzioni presenti nel link sopra, compilando le varibili (file .env) con i vostri parametri, e lanciate (&lt;em&gt;docker compose up&lt;&#x2F;em&gt;) il vostro container.
Se tutto ha funzionato, vedrete il runner attivo nella schermata web di forgejo.&lt;&#x2F;p&gt;
&lt;p&gt;Adesso passiamo ad utilizzarlo.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;utilizzo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#utilizzo&quot; aria-label=&quot;Anchor link for: utilizzo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Utilizzo&lt;&#x2F;h3&gt;
&lt;p&gt;Vedi documentazione al link: https:&#x2F;&#x2F;forgejo.org&#x2F;docs&#x2F;latest&#x2F;user&#x2F;actions&#x2F;overview&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;Crea il file &lt;em&gt;forgejo&#x2F;workflows&#x2F;test.yml&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;esempio-di-workflow&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#esempio-di-workflow&quot; aria-label=&quot;Anchor link for: esempio-di-workflow&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Esempio di workflow&lt;&#x2F;h4&gt;
&lt;p&gt;forgejo&#x2F;workflows&#x2F;test.yml&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yml&quot; class=&quot;language-yml z-code&quot;&gt;&lt;code class=&quot;language-yml&quot; data-lang=&quot;yml&quot;&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Test Workflow&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;run-name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Eseguito da ${{ forgejo.actor }}&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-constant z-language z-boolean z-yaml&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-flow-sequence z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-sequence z-begin z-yaml&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-in z-yaml&quot;&gt;push&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-sequence z-end z-yaml&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;jobs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;test-job&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Qui specifichi su quale runner deve girare il job
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Deve corrispondere a una delle etichette in RUNNER_LABELS
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;runs-on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;docker&lt;&#x2F;span&gt; 
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;steps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;      &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Stampa un messaggio&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;        &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;echo &amp;quot;Ciao mondo! Questo job sta girando sul mio runner Docker.&amp;quot;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;      &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Mostra informazioni sul sistema&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;        &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-flow z-block-scalar z-literal z-yaml&quot;&gt;|&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml&quot;&gt;          echo &amp;quot;Utente corrente: $(whoami)&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml&quot;&gt;          echo &amp;quot;Directory corrente: $(pwd)&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml&quot;&gt;          uname -a
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;conclusione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusione&quot; aria-label=&quot;Anchor link for: conclusione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusione&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo Runner è essenzialmente un assistente che automatizza i compiti ripetitivi nel tuo flusso di lavoro di sviluppo. È perfetto se desideri risparmiare tempo, ridurre errori umani e mantenere la qualità del tuo codice consistente nel tempo.&lt;&#x2F;p&gt;
&lt;p&gt;Se stai già usando Forgejo, integrarvi Forgejo Runner (preferibilmente con Docker) potrebbe aiutarti ad incrementare la produttività grazie alle automazioni.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Forgejo con Docker: Git self-hosted senza fronzoli</title>
          <pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/forgejo-con-docker-git-self-hosted-senza-fronzoli/</link>
          <guid>https://www.agostinelli.eu/blog/forgejo-con-docker-git-self-hosted-senza-fronzoli/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/forgejo-con-docker-git-self-hosted-senza-fronzoli/">&lt;p&gt;Da tempo utilizzo Git per gestire i miei progetti personali, sia software che di configurazione. Per anni mi sono affidato al pc di qualcunaltro (es: Gitlab o GitHub), ma la dipendenza da un servizio centralizzato, per quanto comodo, inizia a starmi stretta. Così ho cercato una soluzione più allineata alla mia filosofia: &lt;strong&gt;Forgejo&lt;&#x2F;strong&gt;, un fork comunitario di Gitea, leggero e facilmente self-hostabile.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2025&#x2F;forgejo-logo.png&quot; alt=&quot;Forgejo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche-forgejo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-forgejo&quot; aria-label=&quot;Anchor link for: perche-forgejo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché Forgejo&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo nasce da una comunità che punta alla trasparenza e all’autonomia, senza il rischio che un progetto venga assorbito o piegato a logiche commerciali. La compatibilità con Gitea è totale, e i requisiti minimi lo rendono perfetto per VPS o server casalinghi.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;veniamo-subito-al-dunque-e-facciamolo-partire-cosi-potremo-provarlo-con-mano&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#veniamo-subito-al-dunque-e-facciamolo-partire-cosi-potremo-provarlo-con-mano&quot; aria-label=&quot;Anchor link for: veniamo-subito-al-dunque-e-facciamolo-partire-cosi-potremo-provarlo-con-mano&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Veniamo subito al dunque e facciamolo partire, cosi potremo provarlo con mano!&lt;&#x2F;h2&gt;
&lt;h2 id=&quot;setup-con-docker&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#setup-con-docker&quot; aria-label=&quot;Anchor link for: setup-con-docker&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Setup con Docker&lt;&#x2F;h2&gt;
&lt;p&gt;Ci affidiamo a Docker Compose, cosi con un solo file di configurazione abbiamo tutto il necessario.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-compose-yaml&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#docker-compose-yaml&quot; aria-label=&quot;Anchor link for: docker-compose-yaml&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
docker-compose.yaml&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;services:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;  &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;forgejo:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;image:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; codeberg.org&#x2F;forgejo&#x2F;forgejo:latest&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;container_name:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; forgejo&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;restart:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; always&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;environment:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; USER_UID=1000&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; USER_GID=1000&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;volumes:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; .&#x2F;data:&#x2F;data&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;etc&#x2F;timezone:&#x2F;etc&#x2F;timezone:ro&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;etc&#x2F;localtime:&#x2F;etc&#x2F;localtime:ro&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; .&#x2F;robots.txt:&#x2F;data&#x2F;gitea&#x2F;public&#x2F;robots.txt:ro&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;expose:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;3000&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;networks:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; forgejo_net&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;networks:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;  &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;forgejo_net:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;driver:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; bridge&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;reverse-proxy&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#reverse-proxy&quot; aria-label=&quot;Anchor link for: reverse-proxy&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Reverse Proxy&lt;&#x2F;h3&gt;
&lt;p&gt;E&#x27; possibile usare il web server che preferiamo, come ad esempio traefik, caddy, apache o nginx, in questo articolo vedremo un esempio con quest&#x27;ultimo.&lt;&#x2F;p&gt;
&lt;p&gt;Qui una configurazione base con https (via Let&#x27;s Encrypt, gestito esternamente):&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;etc&#x2F;nginx&#x2F;sites-available&#x2F;forgejo.conf
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;server {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    listen 80;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    server_name git.miodominio.it;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    return 301 https:&#x2F;&#x2F;$host$request_uri;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;server {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    listen 443 ssl;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    server_name git.miodominio.it;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ssl_certificate &#x2F;etc&#x2F;letsencrypt&#x2F;live&#x2F;git.miodominio.it&#x2F;fullchain.pem;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ssl_certificate_key &#x2F;etc&#x2F;letsencrypt&#x2F;live&#x2F;git.miodominio.it&#x2F;privkey.pem;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    location &#x2F; {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_pass http:&#x2F;&#x2F;localhost:3000;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header Host $host;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header X-Real-IP $remote_addr;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header X-Forwarded-Proto $scheme;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    }
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Dopo aver creato il file, attivare con:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;ln&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;s&lt;&#x2F;span&gt; &#x2F;etc&#x2F;nginx&#x2F;sites-available&#x2F;forgejo.conf &#x2F;etc&#x2F;nginx&#x2F;sites-enabled&#x2F;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-and z-shell&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;systemctl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; reload nginx&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;backup-automatico&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#backup-automatico&quot; aria-label=&quot;Anchor link for: backup-automatico&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Backup automatico&lt;&#x2F;h2&gt;
&lt;p&gt;Il backup rappresenta un step fondamentale del nostro setup, conviene implementarne subito uno all&#x27;avvio del servizio, cosi non ce ne dimenticvheremo e terremo i nostri dati al sicuro. Ricordiamoci che qui salveremo il risultato di diverse ore di programmazione, studio e prove!&lt;&#x2F;p&gt;
&lt;p&gt;I nostri dati si trovano nel volume data di cui sopra, quindi sarà sufficiente salvare il docker file e la directory data.
Io consiglio di usare #borg ma potete usare il softwsre che preferite, trovo particolarmente utile aggiungere questa nuova directory alle procedure di salvataggio che sicuremante avrete già per tutto il resto.
(se non le avete potete anche smettere di leggere questo blog, tornate quando ne avrete implementata una).&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;configurazioni-iniziali&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazioni-iniziali&quot; aria-label=&quot;Anchor link for: configurazioni-iniziali&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazioni iniziali&lt;&#x2F;h2&gt;
&lt;p&gt;A questo punto, dopo l&#x27;installazione, non ci resta che accedere via web al nostro software e fare le prime configurazioni.
È possibile creare utenti, organizzazioni, concedere permessi e creare tutti i repository che si desiderano.&lt;&#x2F;p&gt;
&lt;p&gt;Ciascun progetto può essere impostato ad accesso &lt;em&gt;privatp&lt;&#x2F;em&gt; o &lt;em&gt;pubblico&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;In questo modo sarà semplicissimo collaborare in più persone allo stesso progetto, tenendo traccia delle varie modifiche.&lt;&#x2F;p&gt;
&lt;p&gt;Infine è anche possibile importare direttamente altri repository git.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;runner-e-action&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#runner-e-action&quot; aria-label=&quot;Anchor link for: runner-e-action&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Runner e Action&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo, essendo un fork di Gitea, supporta un sistema di &lt;em&gt;CI&#x2F;CD&lt;&#x2F;em&gt; integrato chiamato Actions, simile a GitHub Actions, e permette di eseguire job di build o deploy tramite runner personalizzati.&lt;&#x2F;p&gt;
&lt;p&gt;Io stesso ne faccio uso, è uno dei motivi per cui mi sto trovando benissimo con forgejo! Ho varie configurazione a seconda del progetto ospitato, ma essenzialmente queste si occupano di effettuare il &quot;deploy&quot; del codice, cioé copiano a destinazione (server di sviluppo o di produzione a seconda dei casi), il codice modificato, cosi che sia pronto all&#x27;uso.
In questo modo, grazie alla history di git, sarà sempre possibile tornare indietro, nonché tenere traccia delle modifiche nel tempo.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;come-funziona&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-funziona&quot; aria-label=&quot;Anchor link for: come-funziona&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come funziona&lt;&#x2F;h3&gt;
&lt;p&gt;Le Actions sono definite da file YAML nei repository (.forgejo&#x2F;workflows&#x2F;), e possono contenere job con step eseguiti su runner registrati.&lt;&#x2F;p&gt;
&lt;p&gt;I runner sono agent installati su macchine (stessa VPS o remote), che si collegano al server Forgejo e attendono job da eseguire.&lt;&#x2F;p&gt;
&lt;p&gt;Una volta definita la condizione scatenante (es: commit su ramo main, rilascio di una nuova versione, ecc) partirà il worksflow che abbiamo definito, con la possibilità di verificarne lo stato di esecuzione in tempo reale. Infine è anche possibile andare a vedere i log delle esecuzione precedenti.&lt;&#x2F;p&gt;
&lt;p&gt;All&#x27;interno di una action si possono usare #secret e #variabili, in modo da poter riusare il codice della action e allo stesso tempo mantenere al sicuro le credenziali.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;setup-runner-base&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#setup-runner-base&quot; aria-label=&quot;Anchor link for: setup-runner-base&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Setup runner base&lt;&#x2F;h3&gt;
&lt;p&gt;Vediamo come creare un nuovo runner, passo passo:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-shell&quot;&gt;export&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;RUNNER_VERSION&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;&lt;span class=&quot;z-meta z-group z-expansion z-command z-parens z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-shell&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;curl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;X&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;GET&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; https:&#x2F;&#x2F;data.forgejo.org&#x2F;api&#x2F;v1&#x2F;repos&#x2F;forgejo&#x2F;runner&#x2F;releases&#x2F;latest&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-pipe z-shell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;jq&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; .name&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;r&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-pipe z-shell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;cut&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;c&lt;&#x2F;span&gt; 2-&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-shell&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;wget&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;O&lt;&#x2F;span&gt; forgejo-runner https:&#x2F;&#x2F;code.forgejo.org&#x2F;forgejo&#x2F;runner&#x2F;releases&#x2F;download&#x2F;v&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;RUNNER_VERSION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&#x2F;forgejo-runner-&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;RUNNER_VERSION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;-linux-amd64&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;chmod&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; +x forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; mv forgejo-runner &#x2F;usr&#x2F;local&#x2F;bin&#x2F;forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; useradd&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;m&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;s&lt;&#x2F;span&gt; &#x2F;bin&#x2F;bash forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; usermod&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;aG&lt;&#x2F;span&gt; docker forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Rechiamoci sull&#x27;interfaccia web di Forgejo:
&lt;em&gt;Forgejo &amp;gt; Repository &amp;gt; Settings &amp;gt; Actions &amp;gt; Runners &amp;gt; &quot;Generate new token&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;i&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;u&lt;&#x2F;span&gt; forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;forgejo-runner&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; register&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;avvio-automatico-del-runner&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#avvio-automatico-del-runner&quot; aria-label=&quot;Anchor link for: avvio-automatico-del-runner&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Avvio automatico del runner&lt;&#x2F;h4&gt;
&lt;p&gt;Io ho usato uno script systemd per l&#x27;avvio automatico, ve lo riporto di seguito&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; echo &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;[Unit]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Description=Forgejo Act Runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;After=network.target docker.service
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Requires=docker.service
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;[Service]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;User=forgejo-runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Group=forgejo-runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;ExecStart=&#x2F;usr&#x2F;local&#x2F;bin&#x2F;forgejo-runner daemon
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Restart=always
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;WorkingDirectory=&#x2F;home&#x2F;forgejo-runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;[Install]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;WantedBy=multi-user.target&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-redirection z-shell&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;forgejo-runner.service&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; systemctl daemon-reload&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; systemctl enable forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; systemctl start forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;systemctl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; status forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;vantaggi-in-breve&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vantaggi-in-breve&quot; aria-label=&quot;Anchor link for: vantaggi-in-breve&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vantaggi in breve&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Repository del proprio codice, diviso come si preferisce: singoli progetti, organizzazioni, ecc.&lt;&#x2F;li&gt;
&lt;li&gt;Possibilità di creare utenti per collaboratori&#x2F;amici con controllo sugli accessi&#x2F;permessi.&lt;&#x2F;li&gt;
&lt;li&gt;Automatizzo test, build, deploy senza dipendere da servizi esterni.&lt;&#x2F;li&gt;
&lt;li&gt;Nessuna dipendenza da fornitori terzi e nessun limite di spazio, esecuzioni, personalizzazioni.&lt;&#x2F;li&gt;
&lt;li&gt;Versionamento del codice, e nel caso di ci&#x2F;cd garanzia di riproducibilità&lt;&#x2F;li&gt;
&lt;li&gt;Pocchissime risorse necessarie lato server&lt;&#x2F;li&gt;
&lt;li&gt;Vuoi mettere quanto è figo avere il proprio servizio di versionamento?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;uso-quotidiano&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#uso-quotidiano&quot; aria-label=&quot;Anchor link for: uso-quotidiano&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Uso quotidiano&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo supporta #git via #ssh, Web UI e #webhooks. Ho configurato alcuni repository con CI locale usando le Actions e i runner integrati. L’interfaccia è leggera e pulita, senza funzionalità inutili.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusioni&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusioni&quot; aria-label=&quot;Anchor link for: conclusioni&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusioni&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo è una soluzione Git solida, coerente con un approccio decentralizzato. Semplice da gestire, veloce da installare, e adatta anche per chi – come me – preferisce sapere dove stanno i propri dati. Per ora lo utilizzo solo per progetti personali, ma potrei iniziare a usarlo anche per collaborazioni future.&lt;&#x2F;p&gt;
&lt;p&gt;Non vi resta che provarlo, fatemi sapere le vostre impressioni con un commento nel #fediverso su questo articolo.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Upgrade Home Server </title>
          <pubDate>Mon, 09 Dec 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/upgrade-home-server/</link>
          <guid>https://www.agostinelli.eu/blog/upgrade-home-server/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/upgrade-home-server/">&lt;p&gt;Alla fine ho ceduto, ho acquistato un &lt;strong&gt;mini pc&lt;&#x2F;strong&gt; usato di qualche anno fa.
Come molti si voi sapranno, da anni il pc sempre acceso di casa mia è un raspberry pi 4, dove gira la domotica di casa (#homeassistant) e qualche altro (piccolo) servizio.&lt;&#x2F;p&gt;
&lt;p&gt;Da tempo ero arrivato un po&#x27; al limite, perché ho un sacco di sensori e vorrei conservare un po&#x27; di storico (comodo ad esempio per analizzare consumi), ho quindi iniziato a guardarmi intorno.&lt;&#x2F;p&gt;
&lt;p&gt;Per primo ho pensato al pi 5, a cui però vanno aggiunti alimentatore, case, memorie, e quindi il prezzo quasi raddoppia. Da lì sono passato a guardare cosa offriva il mercato dell&#x27;usato, ed eccomi giunto a questa riflessione che condivido con voi.&lt;&#x2F;p&gt;
&lt;p&gt;Innanzi tutto i minipc, grazie ai nuovi dischi &lt;strong&gt;nvme&lt;&#x2F;strong&gt; sono sia &lt;strong&gt;compatti&lt;&#x2F;strong&gt;, ma anche &lt;strong&gt;silenziosi&lt;&#x2F;strong&gt;, e poi finalmente da qualche anno a questa parte, non si guarda solo all&#x27;evoluzione in termini di prestazioni, ma anche all&#x27; &lt;strong&gt;efficienza energetica&lt;&#x2F;strong&gt;.
Anche l&#x27;ormai affermata architettura &lt;strong&gt;x86&lt;&#x2F;strong&gt; è stata costretta a correre ai ripari nei confronti di &lt;strong&gt;arm&lt;&#x2F;strong&gt;, molto più efficiente sotto questo punto di vista.&lt;&#x2F;p&gt;
&lt;p&gt;Altra cosa da considerare è che negli ultimi 4-5 anni non c&#x27;è stata chissà quale &lt;strong&gt;rivoluzione sull&#x27;hardware&lt;&#x2F;strong&gt; e quindi un pc di qualche anno fa è più che sufficiente per i miei scopi (e quelli di molti) .
Il sistema operativo #GnuLinux è molto &lt;strong&gt;efficiente&lt;&#x2F;strong&gt; nel &quot;ridare&quot; vita a vecchi pc, è in pratica un matrimonio perfetto!&lt;&#x2F;p&gt;
&lt;p&gt;In rete (ebay, subito, amazon) si trovano molti di questi pc ricondizionati, in quanto spesso sono usati, o meglio noleggiati, da aziende per pc ad uso ufficio.&lt;&#x2F;p&gt;
&lt;p&gt;Ovviamente questi mini pc hanno un tdp (= consumo) più alto di un raspberry pi, ma anche molta più potenza di calcolo!
Potete addirittura metterci sopra #proxmox e vari server virtuali, a patto di avere memoria ram a sufficienza.
Io penso che opterò per #debian su cui userò un po&#x27; di software nativi (pacchetti ufficiali) e un po&#x27; di immagini #docker alla bisogna.&lt;&#x2F;p&gt;
&lt;p&gt;Il modello che ho scelto (&lt;strong&gt;Lenovo m900 tiny&lt;&#x2F;strong&gt;) è dotato di processore Intel Core i5 6500T, dove la T finale, appunto, strizza l&#x27;occhio ai bassi consumi.&lt;&#x2F;p&gt;
&lt;p&gt;Il pc è anche dotato di varie uscite video e può anche essere montato dietro ad uno schermo, ma io lo userò in modalità #headless, cioè senza monitor collegato.&lt;&#x2F;p&gt;
&lt;p&gt;L&#x27;interno hardware del dispositivo è tale e quale ad un portatile, stesso processore, stessa scheda madre, ecc ecc.
Ritengo che per uso ufficio e casa è perfetto, basta collegare un monitor (o una tv), tastiera, mouse e via.
Per questi usi, va più che bene (con linux), ed è poco rumoroso.&lt;&#x2F;p&gt;
&lt;p&gt;Quindi, per concludere, adesso aspetto che mi arrivi e dopo ci vorrà qualche giorno (non vi nascondo che mi fa un po&#x27; fatica) per trasferire tutto quello che avevo sul vecchio sul nuovo!&lt;&#x2F;p&gt;
&lt;p&gt;Spero di avervi fornito qualche spunto di riflessione interessante, soprattutto riguardo al &lt;strong&gt;riciclo&lt;&#x2F;strong&gt; dell&#x27;hardware, e voi ci avete mai fatto un pensierino?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Upgrade Home Server </title>
          <pubDate>Mon, 09 Dec 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/upgrade-home-server/</link>
          <guid>https://www.agostinelli.eu/blog/upgrade-home-server/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/upgrade-home-server/">&lt;p&gt;Alla fine ho ceduto, ho acquistato un &lt;strong&gt;mini pc&lt;&#x2F;strong&gt; usato di qualche anno fa.
Come molti si voi sapranno, da anni il pc sempre acceso di casa mia è un raspberry pi 4, dove gira la domotica di casa (#homeassistant) e qualche altro (piccolo) servizio.&lt;&#x2F;p&gt;
&lt;p&gt;Da tempo ero arrivato un po&#x27; al limite, perché ho un sacco di sensori e vorrei conservare un po&#x27; di storico (comodo ad esempio per analizzare consumi), ho quindi iniziato a guardarmi intorno.&lt;&#x2F;p&gt;
&lt;p&gt;Per primo ho pensato al pi 5, a cui però vanno aggiunti alimentatore, case, memorie, e quindi il prezzo quasi raddoppia. Da lì sono passato a guardare cosa offriva il mercato dell&#x27;usato, ed eccomi giunto a questa riflessione che condivido con voi.&lt;&#x2F;p&gt;
&lt;p&gt;Innanzi tutto i minipc, grazie ai nuovi dischi &lt;strong&gt;nvme&lt;&#x2F;strong&gt; sono sia &lt;strong&gt;compatti&lt;&#x2F;strong&gt;, ma anche &lt;strong&gt;silenziosi&lt;&#x2F;strong&gt;, e poi finalmente da qualche anno a questa parte, non si guarda solo all&#x27;evoluzione in termini di prestazioni, ma anche all&#x27; &lt;strong&gt;efficienza energetica&lt;&#x2F;strong&gt;.
Anche l&#x27;ormai affermata architettura &lt;strong&gt;x86&lt;&#x2F;strong&gt; è stata costretta a correre ai ripari nei confronti di &lt;strong&gt;arm&lt;&#x2F;strong&gt;, molto più efficiente sotto questo punto di vista.&lt;&#x2F;p&gt;
&lt;p&gt;Altra cosa da considerare è che negli ultimi 4-5 anni non c&#x27;è stata chissà quale &lt;strong&gt;rivoluzione sull&#x27;hardware&lt;&#x2F;strong&gt; e quindi un pc di qualche anno fa è più che sufficiente per i miei scopi (e quelli di molti) .
Il sistema operativo #GnuLinux è molto &lt;strong&gt;efficiente&lt;&#x2F;strong&gt; nel &quot;ridare&quot; vita a vecchi pc, è in pratica un matrimonio perfetto!&lt;&#x2F;p&gt;
&lt;p&gt;In rete (ebay, subito, amazon) si trovano molti di questi pc ricondizionati, in quanto spesso sono usati, o meglio noleggiati, da aziende per pc ad uso ufficio.&lt;&#x2F;p&gt;
&lt;p&gt;Ovviamente questi mini pc hanno un tdp (= consumo) più alto di un raspberry pi, ma anche molta più potenza di calcolo!
Potete addirittura metterci sopra #proxmox e vari server virtuali, a patto di avere memoria ram a sufficienza.
Io penso che opterò per #debian su cui userò un po&#x27; di software nativi (pacchetti ufficiali) e un po&#x27; di immagini #docker alla bisogna.&lt;&#x2F;p&gt;
&lt;p&gt;Il modello che ho scelto (&lt;strong&gt;Lenovo m900 tiny&lt;&#x2F;strong&gt;) è dotato di processore Intel Core i5 6500T, dove la T finale, appunto, strizza l&#x27;occhio ai bassi consumi.&lt;&#x2F;p&gt;
&lt;p&gt;Il pc è anche dotato di varie uscite video e può anche essere montato dietro ad uno schermo, ma io lo userò in modalità #headless, cioè senza monitor collegato.&lt;&#x2F;p&gt;
&lt;p&gt;L&#x27;interno hardware del dispositivo è tale e quale ad un portatile, stesso processore, stessa scheda madre, ecc ecc.
Ritengo che per uso ufficio e casa è perfetto, basta collegare un monitor (o una tv), tastiera, mouse e via.
Per questi usi, va più che bene (con linux), ed è poco rumoroso.&lt;&#x2F;p&gt;
&lt;p&gt;Quindi, per concludere, adesso aspetto che mi arrivi e dopo ci vorrà qualche giorno (non vi nascondo che mi fa un po&#x27; fatica) per trasferire tutto quello che avevo sul vecchio sul nuovo!&lt;&#x2F;p&gt;
&lt;p&gt;Spero di avervi fornito qualche spunto di riflessione interessante, soprattutto riguardo al &lt;strong&gt;riciclo&lt;&#x2F;strong&gt; dell&#x27;hardware, e voi ci avete mai fatto un pensierino?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Writefreely: il blog della semplicità</title>
          <pubDate>Sun, 15 Sep 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/writefreely-il-blog-della-semplicita/</link>
          <guid>https://www.agostinelli.eu/blog/writefreely-il-blog-della-semplicita/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/writefreely-il-blog-della-semplicita/">&lt;p&gt;Questo #blog è realizzato con il software #writefreely, la più semplice piattaforma per scrivere contenuti permanenti sul web.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_logo.png&quot; alt=&quot;Writefreely Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;caratteristiche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#caratteristiche&quot; aria-label=&quot;Anchor link for: caratteristiche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Caratteristiche&lt;&#x2F;h2&gt;
&lt;p&gt;Si tratta di un software minimalista con cui creare un Blog, o anche un&#x27;intera comunità di più blog.&lt;&#x2F;p&gt;
&lt;p&gt;Tra le funzionalità, abbiamo l&#x27;&lt;strong&gt;autosaving&lt;&#x2F;strong&gt;, un editor lineare, senza distrazioni, con il supporto di #markup language.
Quella che può sembrare una limitazione, invece è un vantaggio: ci si concentra sul contenuto, e non sull&#x27;apparenza.&lt;&#x2F;p&gt;
&lt;p&gt;Ci sono sia il supporto per il feed rss che la federazione con il #fediverso.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_updates.png&quot; alt=&quot;Rss Fediverso&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;federazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#federazione&quot; aria-label=&quot;Anchor link for: federazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Federazione&lt;&#x2F;h2&gt;
&lt;p&gt;I vostri post saranno federati con il fediverso, per cui, ad esempio, chiunque abbiamo un account su #mastodon potrà seguire il vostro blog.
Se non sapete cos&#x27;è il #fediverso, potete approfondire qui: https:&#x2F;&#x2F;fediverso.it&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installazione-e-configurazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione-e-configurazione&quot; aria-label=&quot;Anchor link for: installazione-e-configurazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione e configurazione&lt;&#x2F;h2&gt;
&lt;p&gt;Software leggerissimo, occupa pochissime risorse ed è un solo semplice eseguibile, con l&#x27;unico requisito di un database #mysql, che \e dove saranno salvati i contenuti.&lt;&#x2F;p&gt;
&lt;p&gt;Se volete cimentarvi nell&#x27;installazione e configurazione, seguita la guida ufficiale, davvero molto semplice, ma esaustiva:
https:&#x2F;&#x2F;writefreely.org&#x2F;start&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gestione-immagini&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#gestione-immagini&quot; aria-label=&quot;Anchor link for: gestione-immagini&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Gestione Immagini&lt;&#x2F;h2&gt;
&lt;p&gt;Dopo averlo provato, l&#x27;unica cose di cui sentivo la mancanza era una gestione delle #immagini, ma ho risolto in maniera molto semplice e utile, vi lascio all&#x27;articolo che avevo scritto a tal proposito (basterà cliccare sul tag #immagini).&lt;&#x2F;p&gt;
&lt;p&gt;##Personalizzazione
E&#x27; possibile configurarlo per gestire più blog o uno soltanto (il sito sui cui vi trovato è in modalità mono).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_publicity.png&quot; alt=&quot;Pubblicazione post&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ciascun blog, può essere configurato i 3 modalità:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pubblico&lt;&#x2F;strong&gt;: tutti leggono i vostri articoli.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Privato&lt;&#x2F;strong&gt;: accessibile solo agli utenti registrati&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Protetto da password&lt;&#x2F;strong&gt;: unica per tutti per poter leggere&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Riguardo al punto 1, starà poi a voi decidere se renderlo &lt;strong&gt;indicizzabile dai motori di ricerca&lt;&#x2F;strong&gt; oppure no, semplicemente configurando il file #robots.txt&lt;&#x2F;p&gt;
&lt;p&gt;Esistono 3 &lt;strong&gt;modalità di visualizzazione&lt;&#x2F;strong&gt; dei post:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Blog&lt;&#x2F;strong&gt;: vengono mostrate le data degli articoli che saranno visualizzati dal più recente.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Novel&lt;&#x2F;strong&gt;: nessuna data degli articoli, ordinamento dal primo post in poi&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Notebook&lt;&#x2F;strong&gt;: nessuna data degli articoli, ordinamento dal post più recente.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_display_post.png&quot; alt=&quot;Display post&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Infine è disponibile un campo per la firma da personalizzare, questo &lt;em&gt;&quot;pezzetto&quot;&lt;&#x2F;em&gt; di testo, o codice, sarà presente in calce a tutti gli articoli.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;css&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#css&quot; aria-label=&quot;Anchor link for: css&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Css&lt;&#x2F;h3&gt;
&lt;p&gt;Le uniche &lt;strong&gt;personalizzazioni grafiche&lt;&#x2F;strong&gt; realizzabili sono tramite il #css, è possibile trovare in rete dei temi giù pronti da cui partire, tramite i quali personalizzare colori, stili, dimensioni e distanze della pagina, in pieno spirito minimalista.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusioni&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusioni&quot; aria-label=&quot;Anchor link for: conclusioni&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusioni&lt;&#x2F;h2&gt;
&lt;p&gt;Personalmente trovo sia davvero piacevole aprire la schermata di nuovo articolo e trovare un schermo pulito, vuoto, in cui concentrarsi sulla scrittura e quindi sul contenuto, &lt;em&gt;less is more&lt;&#x2F;em&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;Ho scelto questo software perché non avevo bisogno di fare chissà quale cose strabilianti, ma appunto la necessità era quella di scrivere qualcosa utile per gli altri, ma anche per me (scrivere mi rilassa).&lt;&#x2F;p&gt;
&lt;p&gt;Costa aspettate a provarlo? Per chi non si vuol sbattere (o non ha dove farlo) nell&#x27;installazione, consiglio questo sito dove potete aprire il vostro blog writefreely: https:&#x2F;&#x2F;noblogo.org&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Retropie</title>
          <pubDate>Fri, 03 May 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/retropie/</link>
          <guid>https://www.agostinelli.eu/blog/retropie/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/retropie/">&lt;p&gt;RetroPie è un software gratuito che è possibile installare su Raspberry Pi, Odroid e sistemi x86 e permette di emulare i videogiochi del passato!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;RetroPie-Logo.svg.png&quot; alt=&quot;Retropie logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Si basa su retroarch, che è un frontend per vari emulatori, uno dei suoi punti di forza è la possibilità di avere una configurazione unificata per tutte le piattaforme.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;RetroArch&#x2F;Libretro&lt;&#x2F;em&gt; è un progetto di frontend e backend che si propone di creare un proprio ecosistema software che giri come codice dinamico.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;1004000479.png&quot; alt=&quot;cadillac&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;1889398773.jpg&quot; alt=&quot;mortal kombat&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;360801805.jpg&quot; alt=&quot;street fighter&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;guida-brevissima&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#guida-brevissima&quot; aria-label=&quot;Anchor link for: guida-brevissima&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Guida brevissima&lt;&#x2F;h2&gt;
&lt;p&gt;Perché una guida brevissima? Il web è pieno di guide per installare retropie, non ha senso scriverne un&#x27;altra, quindi, fate una ricerca: &lt;a href=&quot;https:&#x2F;&#x2F;librey.devol.it&#x2F;search.php?q=installare+retropie&amp;amp;p=0&amp;amp;t=0&quot;&gt;installare retropie&lt;&#x2F;a&gt;.
In breve: si scarica immagine della scheda SE, con un software come balena etcher (o dd) la si scrive sulla scheda, si copiano i giochi in nostro possesso, e, infine, si inserisce e via!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;come-si-gioca&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-si-gioca&quot; aria-label=&quot;Anchor link for: come-si-gioca&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come si gioca&lt;&#x2F;h2&gt;
&lt;p&gt;E&#x27; possibile collegare joypad usb o bluetooth, o usare una tastiera (magari meccanica) per navigare tra i menù e giocare.
Date un&#x27;occhiata ai joypad della &lt;a href=&quot;https:&#x2F;&#x2F;www.8bitdo.com&quot;&gt;8bitdo&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Essendo un sistema estremamente portatile, è l&#x27;ideale da portare ad una cena tra amici e trascorrere la serata a ricordare i giochi che hanno caratterizzato la nostra adolescenza! Sarà sufficiente trovare un tv dotato di porta HDMI, una presa di alimentazione e il divertimento è assicurato.&lt;&#x2F;p&gt;
&lt;p&gt;Se emulate giochi &lt;em&gt;&quot;pesanti&quot;&lt;&#x2F;em&gt; potrebbe essere necessario montare una ventola e dei buoi dissipatori sul vostro raspberry.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;raspberry-pi-retropie.jpg&quot; alt=&quot;Raspberry e Retropie&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;configurazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione&quot; aria-label=&quot;Anchor link for: configurazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione&lt;&#x2F;h2&gt;
&lt;p&gt;Le personalizzazioni alla configurazione e il caricamento di nuovi file può essere effettuato in due modi:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Collegando direttamente la scheda sd ad un altro computer&lt;&#x2F;li&gt;
&lt;li&gt;Configurare il sistema per collegarsi alla rete (wifi, ethernet), in modo da poter accedere alle cartelle condivise (già configurate di default).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Il secondo metodo è molto utile anche per applicare aggiornamenti o per fare lo &lt;em&gt;scraping&lt;&#x2F;em&gt; delle copertine.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;emulationstation&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#emulationstation&quot; aria-label=&quot;Anchor link for: emulationstation&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
EmulationStation&lt;&#x2F;h3&gt;
&lt;p&gt;Si tratta del frontend (menù) che ci accoglie dopo aver acceso il sistema. Da qui si fanno partire i vari giochi (e programmi), è altamente personalizzabile, sia come temi che come immagini.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;retroarch&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#retroarch&quot; aria-label=&quot;Anchor link for: retroarch&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Retroarch&lt;&#x2F;h3&gt;
&lt;p&gt;Trattandosi di un unico frontend per i vari emulatori, è possibile accedere al menu e cambiare le configurazioni (es mappatura tasti) per il singolo gioco o come globali e quindi per tutti i giochi che andremo a provare successivamente&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;retroarch_logo.png&quot; alt=&quot;Retroarch&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sistemi-emulati&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#sistemi-emulati&quot; aria-label=&quot;Anchor link for: sistemi-emulati&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Sistemi emulati&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;3do&lt;&#x2F;li&gt;
&lt;li&gt;Amiga&lt;&#x2F;li&gt;
&lt;li&gt;Amstrad CPC&lt;&#x2F;li&gt;
&lt;li&gt;Apple II&lt;&#x2F;li&gt;
&lt;li&gt;Atari 2600&lt;&#x2F;li&gt;
&lt;li&gt;Atari 5200&lt;&#x2F;li&gt;
&lt;li&gt;Arari 7800&lt;&#x2F;li&gt;
&lt;li&gt;Atari Jaguar&lt;&#x2F;li&gt;
&lt;li&gt;Atari Lynx&lt;&#x2F;li&gt;
&lt;li&gt;Atari ST, STE, TT, Falcon&lt;&#x2F;li&gt;
&lt;li&gt;Coco&lt;&#x2F;li&gt;
&lt;li&gt;Colevovision&lt;&#x2F;li&gt;
&lt;li&gt;Commodore 64, Vic-20&lt;&#x2F;li&gt;
&lt;li&gt;Daphne&lt;&#x2F;li&gt;
&lt;li&gt;Dragon 32&lt;&#x2F;li&gt;
&lt;li&gt;Dreamcast&lt;&#x2F;li&gt;
&lt;li&gt;FinalBurn Neo&lt;&#x2F;li&gt;
&lt;li&gt;Famicon Disk System&lt;&#x2F;li&gt;
&lt;li&gt;GameCube&lt;&#x2F;li&gt;
&lt;li&gt;Game &amp;amp; Watch&lt;&#x2F;li&gt;
&lt;li&gt;Game Gear&lt;&#x2F;li&gt;
&lt;li&gt;Game Boy&lt;&#x2F;li&gt;
&lt;li&gt;Game Boy Color&lt;&#x2F;li&gt;
&lt;li&gt;Game Boy Advance&lt;&#x2F;li&gt;
&lt;li&gt;Intellivision&lt;&#x2F;li&gt;
&lt;li&gt;Macintosh&lt;&#x2F;li&gt;
&lt;li&gt;MAME&lt;&#x2F;li&gt;
&lt;li&gt;Master System&lt;&#x2F;li&gt;
&lt;li&gt;Mega-Cd&#x2F;Sega Cd&lt;&#x2F;li&gt;
&lt;li&gt;Megadrive &#x2F; Genesis&lt;&#x2F;li&gt;
&lt;li&gt;MESS&lt;&#x2F;li&gt;
&lt;li&gt;MSX&lt;&#x2F;li&gt;
&lt;li&gt;Neo Geo&lt;&#x2F;li&gt;
&lt;li&gt;Neo Geo Pocket&lt;&#x2F;li&gt;
&lt;li&gt;Neo Geo Pocket Color&lt;&#x2F;li&gt;
&lt;li&gt;Nintendo 64&lt;&#x2F;li&gt;
&lt;li&gt;Nintendo DS&lt;&#x2F;li&gt;
&lt;li&gt;Nintendo Entertainment System&lt;&#x2F;li&gt;
&lt;li&gt;Oriuc&#x2F;Armos&lt;&#x2F;li&gt;
&lt;li&gt;PC&lt;&#x2F;li&gt;
&lt;li&gt;PC-8800&lt;&#x2F;li&gt;
&lt;li&gt;PC-9800&lt;&#x2F;li&gt;
&lt;li&gt;PC Engine&lt;&#x2F;li&gt;
&lt;li&gt;PC Engine 2&lt;&#x2F;li&gt;
&lt;li&gt;Playstation 1&lt;&#x2F;li&gt;
&lt;li&gt;Playstation 2&lt;&#x2F;li&gt;
&lt;li&gt;Pokemon Mini&lt;&#x2F;li&gt;
&lt;li&gt;PSP&lt;&#x2F;li&gt;
&lt;li&gt;ResidualVM&lt;&#x2F;li&gt;
&lt;li&gt;SAM Coupé&lt;&#x2F;li&gt;
&lt;li&gt;Saturn&lt;&#x2F;li&gt;
&lt;li&gt;ScummVM&lt;&#x2F;li&gt;
&lt;li&gt;Sega 32x&lt;&#x2F;li&gt;
&lt;li&gt;Sega SG-1000&lt;&#x2F;li&gt;
&lt;li&gt;Sharp X1&lt;&#x2F;li&gt;
&lt;li&gt;Sharp X68000&lt;&#x2F;li&gt;
&lt;li&gt;Super Nintendo Entertainment System&lt;&#x2F;li&gt;
&lt;li&gt;TI-99&lt;&#x2F;li&gt;
&lt;li&gt;TRS-80&lt;&#x2F;li&gt;
&lt;li&gt;Vectrex&lt;&#x2F;li&gt;
&lt;li&gt;Videopac&lt;&#x2F;li&gt;
&lt;li&gt;Virtual Boy&lt;&#x2F;li&gt;
&lt;li&gt;Wii&lt;&#x2F;li&gt;
&lt;li&gt;WonderSwan&lt;&#x2F;li&gt;
&lt;li&gt;WonderSwan Color&lt;&#x2F;li&gt;
&lt;li&gt;ZX-81&lt;&#x2F;li&gt;
&lt;li&gt;ZX Spectrum&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;rom-e-licenze-disclaimer&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#rom-e-licenze-disclaimer&quot; aria-label=&quot;Anchor link for: rom-e-licenze-disclaimer&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Rom e licenze (disclaimer)&lt;&#x2F;h2&gt;
&lt;p&gt;Attenzione al fatto che molte delle rom anche ancora il copyright in vigore, per cui è necessario possedere una copia acquistata dei giochi che andrete a caricare sul vostro sistema.
Usare copie pirata dei giochi è un reato&lt;&#x2F;p&gt;
&lt;h2 id=&quot;approfondimenti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#approfondimenti&quot; aria-label=&quot;Anchor link for: approfondimenti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Approfondimenti&lt;&#x2F;h2&gt;
&lt;p&gt;Se ne volete sapere ancora di più vi lascio qualche sito:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;retropie.org.uk (sito ufficiale)&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.retropie.it (sito italiano non ufficiale)&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;t.me&#x2F;retropie_it (gruppo telegram in italiano)&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;mastodon.uno&#x2F;tags&#x2F;retropie (mastodon)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;per-veri-nerd&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#per-veri-nerd&quot; aria-label=&quot;Anchor link for: per-veri-nerd&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Per veri nerd&lt;&#x2F;h2&gt;
&lt;p&gt;Se ho incuriosito, lo avete provato, vi siete divertiti il passo successivo è quello di costruire un cabinet personalizzato!&lt;&#x2F;p&gt;
&lt;p&gt;Vi lascio a qualche immagine presa in giro sul web, giusto per farvi un&#x27;idea.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;5li7ikzmf1w11.jpg&quot; alt=&quot;cabinet1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;pi-inside.jpg&quot; alt=&quot;cabinet2&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Final.jpg&quot; alt=&quot;cabinet3&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;maxresdefault.jpg&quot; alt=&quot;cabinet4&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nes-case&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#nes-case&quot; aria-label=&quot;Anchor link for: nes-case&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Nes Case&lt;&#x2F;h3&gt;
&lt;p&gt;Io ho questo come case per il raspberry che uso con retropie. Il disco ssd si trova in quella che era la cartuccia del videogioco!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nespi4_case.jpg&quot; alt=&quot;nespi4&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nespi4_case_2.webp&quot; alt=&quot;nespi42&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Nextcloud</title>
          <pubDate>Fri, 23 Feb 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/nextcloud/</link>
          <guid>https://www.agostinelli.eu/blog/nextcloud/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/nextcloud/">&lt;p&gt;&lt;em&gt;Nota Introduttiva: questo articolo sarà solo un&#x27;introduzione, seguiranno approfondimenti sui singoli componenti.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cos-e-nextcloud&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e-nextcloud&quot; aria-label=&quot;Anchor link for: cos-e-nextcloud&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è nextcloud&lt;&#x2F;h2&gt;
&lt;p&gt;Software open source che permette di realizzare  un servizio Cloud personale per i propri dati.  Ambiente collaborativo e può anche essere federato con altre installazioni.
È possibile installarlo su un proprio dispositivo o usare quello messo a disposizione da alcune aziende o associazioni.
L&#x27;architettura è modulare, questo ci permette di attivare solo le funzionalità che ci servono e se ne possono aggiungere di nuove (via via che gli sviluppatori le rilasciano). C&#x27;è un plugin per ogni esigenza!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Nextcloud_Logo.svg.png&quot; alt=&quot;Nextcloud Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;caratteristiche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#caratteristiche&quot; aria-label=&quot;Anchor link for: caratteristiche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Caratteristiche&lt;&#x2F;h2&gt;
&lt;p&gt;Il suo punto di forza è la &lt;strong&gt;condivisione&lt;&#x2F;strong&gt; e la &lt;strong&gt;sincronizzazione&lt;&#x2F;strong&gt; dei file, che può avvenire tramite semplice browser web o utilizzando l&#x27;applicazione disponibile per tutti i sistemi operativi. Possiamo considerarlo un&#x27;alternativa a Dropbox, Google drive o onedrive.
Ci sono anche numerosi &lt;strong&gt;servizi aggiuntivi&lt;&#x2F;strong&gt;, che coprono diverse esigenze, come ad esenpio:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;calendario&lt;&#x2F;li&gt;
&lt;li&gt;contatti&lt;&#x2F;li&gt;
&lt;li&gt;webmail&lt;&#x2F;li&gt;
&lt;li&gt;attività (task)&lt;&#x2F;li&gt;
&lt;li&gt;note (markup language)&lt;&#x2F;li&gt;
&lt;li&gt;chat interna&lt;&#x2F;li&gt;
&lt;li&gt;suite per l&#x27;ufficio (via web, basata su libreoffice)&lt;&#x2F;li&gt;
&lt;li&gt;galleria immagini&lt;&#x2F;li&gt;
&lt;li&gt;ebook reader&lt;&#x2F;li&gt;
&lt;li&gt;password manager&lt;&#x2F;li&gt;
&lt;li&gt;gestione bookmark (con possibilità di sync con plugin per il browser)&lt;&#x2F;li&gt;
&lt;li&gt;podcast&lt;&#x2F;li&gt;
&lt;li&gt;libro di ricette&lt;&#x2F;li&gt;
&lt;li&gt;ricerca&lt;&#x2F;li&gt;
&lt;li&gt;forms&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Questi servizi possono essere usati via web, o con i vari client, con il vantaggio di avere tutto &lt;strong&gt;sincronizzato tra più dispositivi&lt;&#x2F;strong&gt;.
Nextcloud diventa così il proprio hub personale dove ci sono tutti i propri dati e le proprie attività.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_dashboard.png&quot; alt=&quot;Nextcloud Dashboard&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vantaggi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vantaggi&quot; aria-label=&quot;Anchor link for: vantaggi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vantaggi&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;self hosting: possiamo installarlo su un nostro pc o su una #vps in modo che i &lt;strong&gt;nostri dati&lt;&#x2F;strong&gt; siano sempre sotto il nostro controllo.&lt;&#x2F;li&gt;
&lt;li&gt;nel caso si voglia affidarsi al lavoro di altri, possiamo scegliere il provider che vogliamo e cambiarlo in qualsiasi momento (esportando i dati)&lt;&#x2F;li&gt;
&lt;li&gt;tra utenti dello stesso server (o federati) è possibile collaborare&lt;&#x2F;li&gt;
&lt;li&gt;condivisione di file (e immagini) avendo sempre tutto sotto controllo, vedi paragrafo dedicato sotto.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;ricerca globale&lt;&#x2F;strong&gt;: usando la casella di ricerca, questa verrà effettuata ovunque: file, note, contatti, calendario, ecc. ecc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_passwordmanager.webp&quot; alt=&quot;Nextcloud Dashboard&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;backup&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#backup&quot; aria-label=&quot;Anchor link for: backup&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Backup&lt;&#x2F;h2&gt;
&lt;p&gt;Come abbiamo visto nextcloud è la nostra casa personale di tutti i dati e attività, diventa quindi fondentale prevedere un sistema di backup affidabile, a cui far ricorso in caso di problemi.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cosa-salvare&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cosa-salvare&quot; aria-label=&quot;Anchor link for: cosa-salvare&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cosa salvare&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;Database: dipende da quello che avete scelto, ma solitamente si tratta di &lt;em&gt;Mysql&lt;&#x2F;em&gt; (o &lt;em&gt;MariaDB&lt;&#x2F;em&gt;). Le procedure di salvataggio sono quelle consuete (&lt;em&gt;mysqldump&lt;&#x2F;em&gt;), che potete trovare in rete o in questo blog (in futuro).&lt;&#x2F;li&gt;
&lt;li&gt;File: salvataggio della directory nextcloud ospitata dal webserver, che contiene sia il software che i nostri dati&lt;&#x2F;li&gt;
&lt;li&gt;Se non siamo gli unici utilizzatori dell&#x27;istanza, è consigliabile impostare l&#x27;istanza in &lt;strong&gt;modalità manutenzione&lt;&#x2F;strong&gt; durante le operazioni di salvataggio, in modo da avere la consistenza dei dati.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Vi consiglio di usare un sistema come #borg, il quale può essere usato in modalità &lt;strong&gt;incrementale&lt;&#x2F;strong&gt; così vi garantisce di poter recuperare sempre una certa versione dei vostri documenti e ha il vantaggio che, dopo la prima esecuzione, i backup successivi trasferiranno solo le nuove modifiche sul backup, saranno così molto veloci e occuperanno solo lo spazio strettamente necessario!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;condivisione-di-file&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#condivisione-di-file&quot; aria-label=&quot;Anchor link for: condivisione-di-file&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Condivisione di file&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;cartelle (e file) in sola lettura per utenti anonimi anche protetti da password&lt;&#x2F;li&gt;
&lt;li&gt;possibilità di poter ricevere file da altri (upload)&lt;&#x2F;li&gt;
&lt;li&gt;galleria foto&lt;&#x2F;li&gt;
&lt;li&gt;cartelle collaborative con altri utenti del server (o istanze federate)&lt;&#x2F;li&gt;
&lt;li&gt;supporto nativo a #webdav&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;applicazione desktop&lt;&#x2F;strong&gt; per sincronizzazione automatica dei file.&lt;&#x2F;li&gt;
&lt;li&gt;supporto al versionamento&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;calendario-e-contatti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#calendario-e-contatti&quot; aria-label=&quot;Anchor link for: calendario-e-contatti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Calendario e contatti&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;configurando un app come #davx5 vi permette di sincronizzare contatti e calendario del vostro smartphone&lt;&#x2F;li&gt;
&lt;li&gt;È possibile sincronizzare anche i client desktop, sfruttando i protocolli standard #caldav e #carddav&lt;&#x2F;li&gt;
&lt;li&gt;import e export da e verso altri sistemi&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;app-mobile&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#app-mobile&quot; aria-label=&quot;Anchor link for: app-mobile&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
App mobile&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;accesso a tutti i propri file in mobilità&lt;&#x2F;li&gt;
&lt;li&gt;auto upload delle foto scattate&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;task&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#task&quot; aria-label=&quot;Anchor link for: task&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Task&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;gestione categorie&lt;&#x2F;li&gt;
&lt;li&gt;sotto task&lt;&#x2F;li&gt;
&lt;li&gt;date di inizio e scadenza&lt;&#x2F;li&gt;
&lt;li&gt;percentuale avanzamento&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;note&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#note&quot; aria-label=&quot;Anchor link for: note&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Note&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;accesso web&lt;&#x2F;li&gt;
&lt;li&gt;markup language&lt;&#x2F;li&gt;
&lt;li&gt;categorie&lt;&#x2F;li&gt;
&lt;li&gt;app mobile&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;nota-personale&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#nota-personale&quot; aria-label=&quot;Anchor link for: nota-personale&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Nota personale&lt;&#x2F;h3&gt;
&lt;p&gt;Io sto usando tantissimo le note, per segnarmi di tutto: appunti, comandi, persino le bozze che scrivo per il blog. Trovo che sia la vera killer application, ritrovo sempre tutto e l&#x27;impaginazione è semplice e funzionale.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_notes.png&quot; alt=&quot;Nextcloud Note&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_postit.jpeg&quot; alt=&quot;Nextcloud PostIt&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;suite-ufficio&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#suite-ufficio&quot; aria-label=&quot;Anchor link for: suite-ufficio&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Suite ufficio&lt;&#x2F;h2&gt;
&lt;p&gt;E&#x27; possibile &lt;strong&gt;editare i documenti&lt;&#x2F;strong&gt; office anche via interfaccia web:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Software basato sul diffuso libreoffice&lt;&#x2F;li&gt;
&lt;li&gt;Editing collaborativo real time (è necessario installare &lt;strong&gt;Collabora office&lt;&#x2F;strong&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;utenti-di-mastodon-uno&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#utenti-di-mastodon-uno&quot; aria-label=&quot;Anchor link for: utenti-di-mastodon-uno&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Utenti di mastodon.uno&lt;&#x2F;h2&gt;
&lt;p&gt;Se vi ho incuriosito e volete provare ad usarlo, vi segnalo che gli utenti di mastodon.uno posso richiedere un account da qui:
https:&#x2F;&#x2F;cloud.mastodon.uno&#x2F;apps&#x2F;forms&#x2F;s&#x2F;YSCoCC37D9omTN8iXSKkQqz9
(sul server sono già preinstallati diversi software aggiuntivi)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_photos.webp&quot; alt=&quot;Nextcloud Photos&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_cookbook.jpg&quot; alt=&quot;Nextcloud Cookbook&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Wireguard - VPN per tutti</title>
          <pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/wireguard-vpn-per-tutti/</link>
          <guid>https://www.agostinelli.eu/blog/wireguard-vpn-per-tutti/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/wireguard-vpn-per-tutti/">&lt;h2 id=&quot;definizione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#definizione&quot; aria-label=&quot;Anchor link for: definizione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Definizione&lt;&#x2F;h2&gt;
&lt;p&gt;WireGuard è un programma &lt;strong&gt;open source&lt;&#x2F;strong&gt; che implementa una connessione &lt;strong&gt;VPN&lt;&#x2F;strong&gt; per creare connessioni sicure punto-punto&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Logo_of_WireGuard.svg&quot; alt=&quot;Wireguard Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-cosa-serve&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#a-cosa-serve&quot; aria-label=&quot;Anchor link for: a-cosa-serve&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
A cosa serve?&lt;&#x2F;h2&gt;
&lt;p&gt;Sicuramente avrete già sentito parlare di vpn, qualora ne siate a digiuno provo a scriverlo brevemente. Attivando questa connessione tra due dispositivi, collegati entrambi alla rete internet, permette loro, in modo &lt;strong&gt;sixuro&lt;&#x2F;strong&gt;,  di comunicare tra di loro.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vantaggi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vantaggi&quot; aria-label=&quot;Anchor link for: vantaggi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vantaggi&lt;&#x2F;h2&gt;
&lt;p&gt;Wireguard si distingue da altri programmi simili per la sua leggerezza, occupa pochissime risorse, e per le prestazioni.
Se lo provate, con una buona connessione da ambo i lati, vi sembrerà davvero di essere in rete locale.
La connessione tra i due punti è cifrata e quindi sicura.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche-usarlo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-usarlo&quot; aria-label=&quot;Anchor link for: perche-usarlo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché usarlo&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Collegarsi alla propria rete domestica da fuori casa (senza esporre pubblicamente i servizi, ma solo la porta della vpn)&lt;&#x2F;li&gt;
&lt;li&gt;Amministrare &#x2F; gestire dispositivi di: amici &#x2F; parenti &#x2F; clienti&lt;&#x2F;li&gt;
&lt;li&gt;Condividere risorse locali solo con chi si vuole&lt;&#x2F;li&gt;
&lt;li&gt;Anonimato (navigare sul web come se fisicamente si ci trovasse nella rete del server vpn)&lt;&#x2F;li&gt;
&lt;li&gt;Sicurezza: se si è connessi ad una rete pubblica il nostro traffico sarà comunque cifrato&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;blocco pubblicità su smartphone&lt;&#x2F;strong&gt; se usato in accoppiata a #pihole (seguirà articolo dedicato)&lt;&#x2F;li&gt;
&lt;li&gt;Supporto dello &lt;strong&gt;split tunnel&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;caratteristiche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#caratteristiche&quot; aria-label=&quot;Anchor link for: caratteristiche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Caratteristiche&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Si basa su protocollo udp, e non tcp per avere prestazioni migliori&lt;&#x2F;li&gt;
&lt;li&gt;Disponibile per svariati sistemi operativi&lt;&#x2F;li&gt;
&lt;li&gt;Funziona su tutti i dispositivi mobili&lt;&#x2F;li&gt;
&lt;li&gt;Risorse richieste quasi nulle, funziona benissimo su vecchi pc o su #raspberrypi&lt;&#x2F;li&gt;
&lt;li&gt;Configurazione facile con un &lt;strong&gt;file unico&lt;&#x2F;strong&gt; (portatile)&lt;&#x2F;li&gt;
&lt;li&gt;Configurazione tramite &lt;strong&gt;qr code&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Possibilità di avere più &lt;strong&gt;vpn attive contemporaneamente&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wireguard-roadwarrior-splittunnel.png&quot; alt=&quot;Wireguard Connections&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;creare-una-nuova-connessione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#creare-una-nuova-connessione&quot; aria-label=&quot;Anchor link for: creare-una-nuova-connessione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Creare una nuova connessione&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Installare il software&lt;&#x2F;li&gt;
&lt;li&gt;Scgliere una porta udp dedicata&lt;&#x2F;li&gt;
&lt;li&gt;Abllitare il forwarding della porta sul nostro router&lt;&#x2F;li&gt;
&lt;li&gt;Scelta di una subnet (dedicata)&lt;&#x2F;li&gt;
&lt;li&gt;Abilitare il forwarding dei pacchetti ip&lt;&#x2F;li&gt;
&lt;li&gt;Creare la configurazione&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;configurazione-manuale-da-riga-di-comando&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione-manuale-da-riga-di-comando&quot; aria-label=&quot;Anchor link for: configurazione-manuale-da-riga-di-comando&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione manuale (da riga di comando)&lt;&#x2F;h3&gt;
&lt;p&gt;Di seguito vari comandi, divisi per argomento, che permettono di attivare la nostra prima vpn.
La preshared key &lt;strong&gt;non è obbligatoria&lt;&#x2F;strong&gt; ma se la si usa si renderà la connessione ancora piuù sicura.
Negli esempi sottostanti abbiamo scelto 92.168.20.0&#x2F;24 come subnet per la nostra vpn.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;installazione-debian&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione-debian&quot; aria-label=&quot;Anchor link for: installazione-debian&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione (debian)&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo apt update
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo apt install wireguard
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo vi &#x2F;etc&#x2F;sysctl.conf
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;	net.ipv4.ip_forward=1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo sysctl -p
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;generazione-chiavi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#generazione-chiavi&quot; aria-label=&quot;Anchor link for: generazione-chiavi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Generazione chiavi&lt;&#x2F;h3&gt;
&lt;p&gt;Le chiavi generate vanno sia per una configurazione come server che come client&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;umask 077
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;wg genkey &amp;gt; privatekey
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;wg pubkey &amp;lt; privatekey &amp;gt; publickey
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;wg genpsk &amp;gt; preshared.keys
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;esempio-di-file-conf-del-server&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#esempio-di-file-conf-del-server&quot; aria-label=&quot;Anchor link for: esempio-di-file-conf-del-server&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Esempio di file conf del server&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;etc&#x2F;wireguard&#x2F;wg0.conf
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = chiave_privata_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 192.168.20.1&#x2F;24
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;ListenPort = 52001
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;SaveConfig = true
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = chiave_pub_client_1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = 192.168.20.2&#x2F;32
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;esempio-di-file-conf-del-client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#esempio-di-file-conf-del-client&quot; aria-label=&quot;Anchor link for: esempio-di-file-conf-del-client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Esempio di file conf del client&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = chiave_priv_client1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 192.168.20.2&#x2F;24
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = chiave_pub_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = 0.0.0.0&#x2F;0, ::&#x2F;0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Endpoint = hostname_pubblico_server:52001
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;comandi-per-la-connessione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#comandi-per-la-connessione&quot; aria-label=&quot;Anchor link for: comandi-per-la-connessione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Comandi per la connessione&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo wg-quick up wg1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo wg-quick down wg1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo wh show
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;avvio-automatico-con-systemd&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#avvio-automatico-con-systemd&quot; aria-label=&quot;Anchor link for: avvio-automatico-con-systemd&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Avvio automatico con systemd&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo systemctl enable wg-quick@wg0.service
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo systemctl start wg-quick@wg0.service
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo systemctl status wg-quick@wg0.service
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;generare-qr-code&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#generare-qr-code&quot; aria-label=&quot;Anchor link for: generare-qr-code&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Generare Qr code&lt;&#x2F;h4&gt;
&lt;p&gt;Installare il software qrencode&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;qrencode -t ansiutf8 &amp;lt; &#x2F;etc&#x2F;wireguard&#x2F;clients&#x2F;client1.conf
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wireguard_show.jpg&quot; alt=&quot;Wireguard Command Line&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aggiunta-nuovi-client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#aggiunta-nuovi-client&quot; aria-label=&quot;Anchor link for: aggiunta-nuovi-client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Aggiunta nuovi client&lt;&#x2F;h2&gt;
&lt;p&gt;Per aggiungere un nuovo client, conviene spengere la vpn del server (wg down), aggiungere le nuove righe al file di configurazione, e riattivare la connessione (wg up)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;configurazione-guidata&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione-guidata&quot; aria-label=&quot;Anchor link for: configurazione-guidata&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione guidata&lt;&#x2F;h3&gt;
&lt;p&gt;Vedi i due frontend web  suggeriti sotto per la parte server.
Per la configurazione come client è sufficiente importare il file conf generato o in alternativa il qr code.
Per la connessione è sufficiente utilizzare un client;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Su linux è possibile usare li strumenti integrati nel desktop in uso attraverso NetworkManager (kde, gnome, ecc)&lt;&#x2F;li&gt;
&lt;li&gt;Su windows è sufficiente scaricare il client dal sito ufficiale (https:&#x2F;&#x2F;www.wireguard.com)&lt;&#x2F;li&gt;
&lt;li&gt;Android Play store: https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.wireguard.android&lt;&#x2F;li&gt;
&lt;li&gt;Apple store: https:&#x2F;&#x2F;apps.apple.com&#x2F;it&#x2F;app&#x2F;wireguard&#x2F;id1441195209&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;programmi-accessori-frontend&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#programmi-accessori-frontend&quot; aria-label=&quot;Anchor link for: programmi-accessori-frontend&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Programmi accessori (frontend)&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;ngoduykhanh&#x2F;wireguard-ui&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;wg-easy&#x2F;wg-easy&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;subspacecloud&#x2F;subspace&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.wireguardconfig.com&#x2F;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;funzioni-avanzate&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#funzioni-avanzate&quot; aria-label=&quot;Anchor link for: funzioni-avanzate&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Funzioni avanzate&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;dns&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#dns&quot; aria-label=&quot;Anchor link for: dns&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Dns&lt;&#x2F;h3&gt;
&lt;p&gt;Nella configurazione del client è anche possibile indicare quale server dns utilizzare&lt;&#x2F;p&gt;
&lt;h3 id=&quot;firewall-per-i-client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#firewall-per-i-client&quot; aria-label=&quot;Anchor link for: firewall-per-i-client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Firewall per i client&lt;&#x2F;h3&gt;
&lt;p&gt;Nalle configurazione server è possibile aggiungere più righe di PostUp con &lt;strong&gt;iptables&lt;&#x2F;strong&gt;, e quindi configurare il firewall con assoluta personalizzazione: è possibile, quindi, limitare la risorse da accedere a specifici indirizzi&lt;&#x2F;p&gt;
&lt;h3 id=&quot;limitare-la-banda&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#limitare-la-banda&quot; aria-label=&quot;Anchor link for: limitare-la-banda&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Limitare la banda&lt;&#x2F;h3&gt;
&lt;p&gt;Sempre grazie ai comandi postup è possibile anche limitare, qualora si voglia, la banda passante per i client (sia in upload che ion download), ad esempio:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = tc qdisc add dev wg0 ingress; tc filter add dev wg1 protocol ip ingress prio 2 u32 match ip dst 0.0.0.0&#x2F;0 action police
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;rate 10mbit burst 10mbit; tc filter add dev wg0 protocol ip ingress prio 2 u32 match ip src 0.0.0.0&#x2F;0 action police rate 10mbit burst 10mbit
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = tc qdisc add dev wg0 parent root handle 1: hfsc default 1; tc class add dev wg0 parent 1: classid 1:1 hfsc sc rate 10mbit ul rate 10mbit
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wireguard_network.png&quot; alt=&quot;Wireguard Network&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>moodeaudio: post su mastodon</title>
          <pubDate>Thu, 18 Jan 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/moodeaudio-post-su-mastodon/</link>
          <guid>https://www.agostinelli.eu/blog/moodeaudio-post-su-mastodon/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/moodeaudio-post-su-mastodon/">&lt;p&gt;In questo brevvisimo articolo  vedremo uno #script che preleva il &lt;strong&gt;brano&lt;&#x2F;strong&gt; attualmente in &lt;strong&gt;riproduzione&lt;&#x2F;strong&gt; su moOde e lo pubblica (come &lt;strong&gt;toot&lt;&#x2F;strong&gt;) su #mastodon.
(se non sapete cos&#x27;è #moodeaudio trovate articolo dedicato cliccando sul tag)&lt;&#x2F;p&gt;
&lt;p&gt;Io lancio lo script di seguito manualmente per non pubblicare troppi toot (ad ogni cambio brano), ma potete integrarlo facilmente in vari automatismi (ad esempio usando #homeassistant).&lt;&#x2F;p&gt;
&lt;p&gt;Dato che lei formazioni vengono recuperate via rete, potete eseguirlo da un qualsiasi pc della vostra rete casalinga.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;prerequisiti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#prerequisiti&quot; aria-label=&quot;Anchor link for: prerequisiti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Prerequisiti&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Curl: di solito è già installato, qualora non lo fosse potete farlo semplicemente usando l&#x27;utility di gestione del software della vostra distribuzione (apt, dnf, pacman)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ihabunek&#x2F;toot&quot;&gt;Toot&lt;&#x2F;a&gt;: client da riga di comando per mastodon (trovate tutti i dettagli e le istruzioni per installarlo sul sito qui indicato, anche se come sopra probabilmente sarà già incluso nella distribuzione che usate)&lt;&#x2F;li&gt;
&lt;li&gt;Jq: utility, da riga di comando, in grado di processare (e visualizzare) file json&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;script&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#script&quot; aria-label=&quot;Anchor link for: script&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Script&lt;&#x2F;h2&gt;
&lt;p&gt;Di seguito lo script che ho realizzato in linguaggio bash:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-begin z-shell&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;testo&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Sto ascoltando: &lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;testo&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;&lt;span class=&quot;z-meta z-group z-expansion z-command z-parens z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-shell&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;curl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;s&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;http:&#x2F;&#x2F;moode.local&#x2F;command&#x2F;?cmd=get_currentsong&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-pipe z-shell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;jq&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;r&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;.artist + &amp;quot; - &amp;quot; + .title&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-shell&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;testo&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt; #musica #moodeaudio #hifi #raspberrypi&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;toot&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; post &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;testo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>Matrix</title>
          <pubDate>Mon, 08 Jan 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/matrix/</link>
          <guid>https://www.agostinelli.eu/blog/matrix/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/matrix/">&lt;h2 id=&quot;cos-e&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e&quot; aria-label=&quot;Anchor link for: cos-e&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è?&lt;&#x2F;h2&gt;
&lt;p&gt;Protocollo &lt;strong&gt;aperto&lt;&#x2F;strong&gt; e &lt;strong&gt;decentralizzato&lt;&#x2F;strong&gt; per la &lt;strong&gt;messaggistica&lt;&#x2F;strong&gt;.
I suoi punti di forza sono, a mio avviso, la &lt;strong&gt;crittografia&lt;&#x2F;strong&gt; (e2ee), il fatto che essendo decenrrallizato ci sono più server che comunicano tra loro e quindi si può, non solo, scegliere il server che si vuole, ma anche installarne uno proprio con cui comunicare con gli altri.&lt;&#x2F;p&gt;
&lt;p&gt;Su matrix troverete molte stanze tematiche, questo è un altro dei suoi punti di forza, molti progetti opensource hanno la propria stanza tramite la quale parlare direttamente con gli sviluppatori.
Cercando di semplificare, potremmo definirlo come il sostituto di #irc.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;matrix_logo.png&quot; alt=&quot;Matrix Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;server-pubblici&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#server-pubblici&quot; aria-label=&quot;Anchor link for: server-pubblici&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Server pubblici&lt;&#x2F;h2&gt;
&lt;p&gt;Trovate qui la lista:
https:&#x2F;&#x2F;servers.joinmatrix.org&#x2F;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sellf-hosting&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#sellf-hosting&quot; aria-label=&quot;Anchor link for: sellf-hosting&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Sellf hosting&lt;&#x2F;h2&gt;
&lt;p&gt;È possibile installare e configurare un proprio server, così sarete voi stessi a deciderne le &lt;strong&gt;regole&lt;&#x2F;strong&gt;, ma soprattutto potete affiancarci vari bridge e bot (vedremo in seguito cosa sono).
In un prossimo articolo vedremo nel dettaglio un esempio concreto di installazione e configurazione.
Personalmente, in uno dei setup che ho seguito ho utilizzato &lt;strong&gt;docker&lt;&#x2F;strong&gt;, sia per il il server matrix, ma anche per tutti gli altri componenti aggiuntivi (che vedrete di seguito).
Per il momento vi lascio una semplice lista di software che potete utilizzare.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;server-software&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#server-software&quot; aria-label=&quot;Anchor link for: server-software&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Server software&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;synapse (stabile, supporta tutte le funzioni, ma è un po&#x27; pesante)&lt;&#x2F;li&gt;
&lt;li&gt;dendrite (scritto in go, rappresenta la nuova generazione di server, molto più leggero come risorse, supporta il 99% delle funzioni matrix, ma non è ancora stabile)&lt;&#x2F;li&gt;
&lt;li&gt;conduit (leggerissimo, ottimo per uso personale, non supporta a pieno tutte le funzioni di matrix)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;bridge&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#bridge&quot; aria-label=&quot;Anchor link for: bridge&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Bridge&lt;&#x2F;h2&gt;
&lt;p&gt;Grazie ai bridge potete usare Matrix per dialogare con le altre app di messaggistica, come dice il nome stesso questi faranno da &lt;em&gt;ponte&lt;&#x2F;em&gt; tra le varie App.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Facebook messenger&lt;&#x2F;li&gt;
&lt;li&gt;Telegram&lt;&#x2F;li&gt;
&lt;li&gt;WhatsApp&lt;&#x2F;li&gt;
&lt;li&gt;Irc&lt;&#x2F;li&gt;
&lt;li&gt;signal&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Trovate &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;ecosystem&#x2F;bridge&quot;&gt;qui&lt;&#x2F;a&gt; un elenco molto più esaustivo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bot&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#bot&quot; aria-label=&quot;Anchor link for: bot&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Bot&lt;&#x2F;h2&gt;
&lt;p&gt;Esistono anche molti bot già pronti all&#x27;uso, ma anche delle basi da cui partire per poter scrivere il proprio.
Qui ne trovate alcuni:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.org&#x2F;ecosystem&#x2F;integrations&#x2F;&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;topics&#x2F;matrix-bot&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#client&quot; aria-label=&quot;Anchor link for: client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Client&lt;&#x2F;h2&gt;
&lt;p&gt;Essendo matrix un protocollo aperto, esistono vari client che possono essere utilizzati.
Sono disponibili per tutti i sistemi operativi, ma anche per Android e iPhone.
Molti dei client che seguono sono disponibili anche in modalità web, compatibile con tutti i browser:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Element (il client più usato, pesante, ma ricco di funzionalità)&lt;&#x2F;li&gt;
&lt;li&gt;Cinny (client web molto pratico e leggero)&lt;&#x2F;li&gt;
&lt;li&gt;Fluffy (client mobile molto leggero)&lt;&#x2F;li&gt;
&lt;li&gt;Elementx (client di nuova generazione, ancora in beta, ma che promette di essere leggerissimo)&lt;&#x2F;li&gt;
&lt;li&gt;SchildiChat (un fork di element, con in più alcune ottimizzazioni, specialmente in ambito mobile)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;element_screen.png&quot; alt=&quot;Element&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;cinny_screen.png&quot; alt=&quot;Cinny&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;fluffy_screen.png&quot; alt=&quot;Fluffy&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;schildi_screen.png&quot; alt=&quot;Schildichat&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stanze-consigliate&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#stanze-consigliate&quot; aria-label=&quot;Anchor link for: stanze-consigliate&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Stanze consigliate&lt;&#x2F;h2&gt;
&lt;p&gt;L&#x27; elenco sarebbe lunghissimo, e ciascuno segue quelle relative ai propri interessi, ne indico alcune, giusto per farci un giro se chi legge questo articolo deciderà di iscriversi.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#lealternativegruppo:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#mozilla-italia:mozilla.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#mastodon:mozilla.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#pixelfed:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#Debian-Italia:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#vaultwarden:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#Raspberryita:matrix.org&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Poi ci sono ovviamente tutte le stanze dedicate ai software sopra menzionati (sia client che server), in cui, ad esempio, potete aiuto in caso di problemi.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Home Assistant rsync backup</title>
          <pubDate>Mon, 18 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/home-assistant-rsync-backup/</link>
          <guid>https://www.agostinelli.eu/blog/home-assistant-rsync-backup/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/home-assistant-rsync-backup/">&lt;p&gt;Ho scritto un plugin per home assistant!
Ma ce n&#x27;era davvero bisogno? Purtroppo si, perchè avevo una particolare necessità che sotto vi spiego.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contesto&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#contesto&quot; aria-label=&quot;Anchor link for: contesto&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Contesto&lt;&#x2F;h2&gt;
&lt;p&gt;A casa ho un NAS che tengo quasi sempre spento, e che accendono alla bisogna. Quando lo accendo, ci sono delle procedure&#x2F;software installati che partono e aggiornarnano i dati.
Avevo, quindi, la necessità di trovare una soluzione simile anche con #homeassistant. Ho provato vari plugin esistenti, ma nessuno faceva al caso mio.
Dato che implementare questo tipo di plugin sulla carta sembrava molto semplice, ho deciso, quasi per gioco, di scriverne uno.&lt;&#x2F;p&gt;
&lt;p&gt;Lo trovate qui: https:&#x2F;&#x2F;github.com&#x2F;magostinelli&#x2F;hassio-addons-rsync-key&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cosa-fa&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cosa-fa&quot; aria-label=&quot;Anchor link for: cosa-fa&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cosa fa?&lt;&#x2F;h3&gt;
&lt;p&gt;Sincronizza i backup locali con quelli remoti via ssh con scambio chiave (senza password).
Al primo avvio del componente aggiuntivo viene mostrata la chiave (pubblica) creata, tale chiave dovrà essere abilitata per l&#x27;accesso sul nas al percorso in cui vogliamo depositare la copia dei nostri backup.&lt;&#x2F;p&gt;
&lt;p&gt;Il plugin ha alcune opzioni di configurazione:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;home_rsync_conf.jpg&quot; alt=&quot;schermata di configurazione&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;E nella schermata dei log è possibile monitorare la sua ultima esecuzione.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;home_rsync_log.jpg&quot; alt=&quot;schermata di configurazione&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;come-lo-uso&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-lo-uso&quot; aria-label=&quot;Anchor link for: come-lo-uso&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come lo uso?&lt;&#x2F;h3&gt;
&lt;p&gt;Ho creato un automazione che fa partire questo componente aggiuntivo 1 minuto dopo aver rilevato che il mio nas è stato acceso.
Una volta che il componente avrà eseguito il suo lavoro si &lt;strong&gt;spengerà automaticamente&lt;&#x2F;strong&gt;, così il &lt;strong&gt;consumo&lt;&#x2F;strong&gt; di risorse è davvero &lt;strong&gt;inesistente&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;#homeassistant #hass #rsync #linux #backup #nas&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Pi-hole</title>
          <pubDate>Sun, 10 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/pi-hole/</link>
          <guid>https://www.agostinelli.eu/blog/pi-hole/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/pi-hole/">&lt;p&gt;Fa parte dei software indispensabili: vi consiglio di installarlo sul vostro #raspberrypi, sul vostro #NAS o su &lt;strong&gt;qualsiasi dispositivo&lt;&#x2F;strong&gt; (su base #linux) che terrete sempre acceso.
Il mio consiglio va in direzione del raspberry, viste i consumi e dimensioni ridotte, ma ciascuno rimane libero di fare le proprie scelte.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;Pi-hole_vector_logo.svg&quot; alt=&quot;Pi-hole Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cos-e&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e&quot; aria-label=&quot;Anchor link for: cos-e&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è&lt;&#x2F;h2&gt;
&lt;p&gt;Pi-hole è un&#x27;applicazione **Linux ** pensata per bloccare la pubblicità e il tracciamento degli utenti su Internet a livello di rete locale.  Pi-hole agisce come un DNS sinkhole[ e, opzionalmente, come un server DHCP.
Fonte: https:&#x2F;&#x2F;it.wikipedia.org&#x2F;wiki&#x2F;Pi-hole&lt;&#x2F;p&gt;
&lt;h2 id=&quot;come-funziona&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-funziona&quot; aria-label=&quot;Anchor link for: come-funziona&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come funziona&lt;&#x2F;h2&gt;
&lt;p&gt;Si affianca al vostro router per la connettività Internet ed è in grado di bloccare  le pubblicità e i traccianti per  tutti i dispositivi di casa. Può funzionare come server #DHCP (in questo caso dovrete disattivare quello presente sul vostro router), oppure può affiancarlo (nelle impostaziooni dhcp del router dovrete indicare là indirizzo ip di pi-hole come server dns per i client).
Una volta fatta questa configurazione non dovrete fare niente sui vostri dispositivi, che siano computer, telefoni o smarttv, facile no?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;M0AWS-PiHole-Management-interface-768x612&quot; alt=&quot;Pi-hole Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione&quot; aria-label=&quot;Anchor link for: installazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;standalone&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#standalone&quot; aria-label=&quot;Anchor link for: standalone&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Standalone&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;curl -sSL https:&#x2F;&#x2F;install.pi-hole.net | bash&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;prerequisiti-e-sistemi-supportati&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#prerequisiti-e-sistemi-supportati&quot; aria-label=&quot;Anchor link for: prerequisiti-e-sistemi-supportati&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Prerequisiti e sistemi supportati&lt;&#x2F;h4&gt;
&lt;p&gt;Consultate la pagina ufficiale qui: https:&#x2F;&#x2F;docs.pi-hole.net&#x2F;main&#x2F;prerequisites&#x2F;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#docker&quot; aria-label=&quot;Anchor link for: docker&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Docker&lt;&#x2F;h3&gt;
&lt;p&gt;Consiglio di usare docker-compose, di seguito una configurazione di base che potete personalizzare a voswtro piacimento
version: &quot;3&quot;&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;version: &amp;quot;3&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;services:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  pihole:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    container_name: pihole
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    image: pihole&#x2F;pihole:latest
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    # For DHCP it is recommended to remove these ports and instead add: network_mode: &amp;quot;host&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ports:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;53:53&#x2F;tcp&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;53:53&#x2F;udp&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;67:67&#x2F;udp&amp;quot; # Only required if you are using Pi-hole as your DHCP server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;80:80&#x2F;tcp&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    environment:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      TZ: &amp;#39;Europe&#x2F;Rome&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      # WEBPASSWORD: &amp;#39;set a secure password here or it will be random&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    # Volumes store your data between container upgrades
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    volumes:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;#39;.&#x2F;etc-pihole:&#x2F;etc&#x2F;pihole&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;#39;.&#x2F;etc-dnsmasq.d:&#x2F;etc&#x2F;dnsmasq.d&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    #   https:&#x2F;&#x2F;github.com&#x2F;pi-hole&#x2F;docker-pi-hole#note-on-capabilities
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    cap_add:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    restart: unless-stopped 
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;personalizzazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#personalizzazione&quot; aria-label=&quot;Anchor link for: personalizzazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Personalizzazione&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;aggiunta-di-liste-di-blocco&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#aggiunta-di-liste-di-blocco&quot; aria-label=&quot;Anchor link for: aggiunta-di-liste-di-blocco&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Aggiunta di liste di blocco&lt;&#x2F;h3&gt;
&lt;p&gt;Le liste si configurano dall&#x27;interfaccia web alla voce AdList, eccone alcune che potete aggiungere:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.github.developerdan.com&#x2F;hosts&#x2F;lists&#x2F;ads-and-tracking-extended.txt&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;s3.amazonaws.com&#x2F;lists.disconnect.me&#x2F;simple_tracking.txt&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;s3.amazonaws.com&#x2F;lists.disconnect.me&#x2F;simple_ad.txt&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;StevenBlack&#x2F;hosts&#x2F;master&#x2F;hosts&lt;&#x2F;li&gt;
&lt;li&gt;http:&#x2F;&#x2F;sysctl.org&#x2F;cameleon&#x2F;hosts&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;L&#x27; elenco non è certo esaustivo, esistono sicuramente altre liste, le potrete trovare con una semplice ricerca sul web.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;pihole-dashboard-1024x640.webp&quot; alt=&quot;Pi-hole Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;utilizzo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#utilizzo&quot; aria-label=&quot;Anchor link for: utilizzo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Utilizzo&lt;&#x2F;h2&gt;
&lt;p&gt;Una volta che avete configurato la porta dell&#x27;&lt;strong&gt;interfaccia web&lt;&#x2F;strong&gt;, collegatevi a quest&#x27;ultima, e gestirete tutto da li.
Dal menu, in Tools -&amp;gt; Update Gravity potete &lt;strong&gt;aggiornare le liste&lt;&#x2F;strong&gt; d ei blocchi (come quelle indicate sopra).
Attraverso la voce disable blocking potete intemrrompere temporaneamente (o meno) il blocco.
Da query log vedrete tutte le varie &lt;strong&gt;richieste&lt;&#x2F;strong&gt; e se i siti richiesti sono bloccati o meno, da qui potete anche aggiungerli manualmente alla &lt;strong&gt;whitelist&lt;&#x2F;strong&gt;, come nel caso venga bloccato un sito che a voi serve.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;consiglio-importante&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#consiglio-importante&quot; aria-label=&quot;Anchor link for: consiglio-importante&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Consiglio importante&lt;&#x2F;h3&gt;
&lt;p&gt;Una volta installato funzionerà tutto in automatico e senza che ci sia bisogno di particolari interventi, proprio per questo vi consiglio di avere solo questa &lt;strong&gt;unica e semplice accortezza&lt;&#x2F;strong&gt;: Ricordatevi che lo avete installato, e nel caso abbiate qualche sito mal funzionante, tenete presente che potrebbe essere per questo che qualcosa non vi funziona!&lt;&#x2F;p&gt;
&lt;p&gt;A me personalmente è successo qualche volta, ma sono prontamente intervenuto (whitelist o disabilitazione temporanea) e ho risolto velocemente e facilmente.
I &lt;strong&gt;malfunzionamenti dipendono&lt;&#x2F;strong&gt; sempre &lt;strong&gt;dal tipo&lt;&#x2F;strong&gt; e numero di &lt;strong&gt;liste&lt;&#x2F;strong&gt; che inserite.
Alcuni esempi di malfunzionamenti che mi sono capitati:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;app amazon&lt;&#x2F;li&gt;
&lt;li&gt;rai play sulla tv&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;dns-consigliati&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#dns-consigliati&quot; aria-label=&quot;Anchor link for: dns-consigliati&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
DNS Consigliati&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.dns0.eu&#x2F;it&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.opendns.com&#x2F;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;companion-app&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#companion-app&quot; aria-label=&quot;Anchor link for: companion-app&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Companion app&lt;&#x2F;h2&gt;
&lt;p&gt;Per la sua gestione da pc non avrete problemi, basterà usare la sua comodissima interfaccia web (la porta dipende dal tipo di installazione&#x2F;configurazione che avete effettuato).
Per Il vostro tablet&#x2F;smartphone vi consiglio queste applicazioni:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.tien.piholeconnect&quot;&gt;Pi-hole Connect&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;f-droid.org&#x2F;it&#x2F;packages&#x2F;friimaind.piholedroid&#x2F;&quot;&gt;Pi-hole Droid&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.jgeek00.droid_hole&quot;&gt;DroidHole&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Se volete curiosare, questo è il sito ufficiale: https:&#x2F;&#x2F;pi-hole.net&#x2F;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Commenti su writefreely </title>
          <pubDate>Sat, 09 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/commenti-su-writefreely/</link>
          <guid>https://www.agostinelli.eu/blog/commenti-su-writefreely/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/commenti-su-writefreely/">&lt;h2 id=&quot;come-interagire-con-il-blog&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-interagire-con-il-blog&quot; aria-label=&quot;Anchor link for: come-interagire-con-il-blog&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come interagire con il blog&lt;&#x2F;h2&gt;
&lt;p&gt;Puoi &lt;strong&gt;interagire&lt;&#x2F;strong&gt; con questo (ma anche altri) blog tramite il fediverso, dove il software più diffuso è sicuramente #mastodon (almeno nel momento in cui sto scrivendo).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;Mastodon_Logo.png&quot; alt=&quot;Mastodon Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;come-avviene&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-avviene&quot; aria-label=&quot;Anchor link for: come-avviene&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come avviene?&lt;&#x2F;h2&gt;
&lt;p&gt;Cosa permette a livello tecnico questa &lt;strong&gt;integrazione&lt;&#x2F;strong&gt;?
In tutti gli articoli del blog è presente una firma, dove c&#x27;è il &lt;strong&gt;riferimento&lt;&#x2F;strong&gt; al mio &lt;strong&gt;account mastodon&lt;&#x2F;strong&gt; (&lt;em&gt;vedi sotto&lt;&#x2F;em&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Rispondendo a questo post, riceverò una notifica, da lì potremo confrontarci su questo, o altri, articoli.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;Social-media-comments-final-2.png&quot; alt=&quot;Commenti social&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;evoluzioni-future&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#evoluzioni-future&quot; aria-label=&quot;Anchor link for: evoluzioni-future&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Evoluzioni future&lt;&#x2F;h2&gt;
&lt;p&gt;Al momento l&#x27;unica cosa che è rimasta fuori è la &lt;strong&gt;visualizzazione&lt;&#x2F;strong&gt; dei &lt;strong&gt;commenti&lt;&#x2F;strong&gt; sotto gli articoli, chissà che non venga implementata nelle &lt;strong&gt;future versioni&lt;&#x2F;strong&gt;, io ci spero!
In alternativa continuo a studiare, magari riesco a trovare un modo per farli visualizzare io sotto ad ogni articolo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;Fediverse_logo_proposal.png&quot; alt=&quot;Fediverso Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Home Assistant</title>
          <pubDate>Fri, 08 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/home-assistant/</link>
          <guid>https://www.agostinelli.eu/blog/home-assistant/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/home-assistant/">&lt;p&gt;Quello che segue sarà il primo di una serie di articoli che troverete sul blog. Questo è quello introduttivo diciamo. Iniziamo!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cos-e-a-che-serve&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e-a-che-serve&quot; aria-label=&quot;Anchor link for: cos-e-a-che-serve&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è? A che serve?&lt;&#x2F;h2&gt;
&lt;p&gt;È un software per la &lt;strong&gt;domotica&lt;&#x2F;strong&gt; (personale). &lt;strong&gt;Ma c&#x27;è ne&#x27;era bisogno?&lt;&#x2F;strong&gt; Decisamente si!
Vedremo, nelle puntate successive, quante cose è in grado di fare!
Come descrizione generale possiamo dire che è un Hub tramite il quale comandare tutti i nostri dispostivi domotici, non solo da un unico punto di controllo, ma è possibile creare delle automazioni usando tutti gli altri nostri dispositivi.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;homeassistant.png&quot; alt=&quot;homeassistant logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche&quot; aria-label=&quot;Anchor link for: perche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché&lt;&#x2F;h2&gt;
&lt;p&gt;Se dovessi scegliere alcuni dei suoi punti di forza per convincerli a provarlo direi:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Indipendenza&lt;&#x2F;strong&gt; (il vostro impianto domotico funzionerà anche senza internet, e anche se i vari provider chiudessero i loro servizi)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Leggero&lt;&#x2F;strong&gt;: funziona (alla grande) su un piccolo SBC come #raspberrypi&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Espandibile&lt;&#x2F;strong&gt;: impossibile elencare tutte le integrazioni e plugin supportati&lt;&#x2F;li&gt;
&lt;li&gt;In &lt;strong&gt;continuo sviluppo&lt;&#x2F;strong&gt;: ogni mese escono nuove funzionalità, e i bug fixing escono con una frequenza anche maggiore.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supporto&lt;&#x2F;strong&gt;: c&#x27;è una vastissima comunità di utilizzatori&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Facilità d&#x27;uso&lt;&#x2F;strong&gt;: la configurazione avviene tramite una semplice interfaccia web&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;App mobile&lt;&#x2F;strong&gt;: esiste sia per Android che per iPhone ed è fatta benissimo&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Backup&lt;&#x2F;strong&gt;: ha una procedura di salvataggio configurazioni automatizzata, se la salviamo altrove (lo vedremo) saremo in grado di ripristinare la configurazione con un click.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Multiutente&lt;&#x2F;strong&gt;: potete creare un account per tutta la famiglia&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Open source&lt;&#x2F;strong&gt;: distribuito con licenza apache 2.0&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;e-ora&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#e-ora&quot; aria-label=&quot;Anchor link for: e-ora&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
E ora?&lt;&#x2F;h2&gt;
&lt;p&gt;Continua a seguire gli articoli di questa serie, ne vedremo delle belle!&lt;&#x2F;p&gt;
&lt;p&gt;Clicca qui per vedere gli altri approfondimenti: #nextcloud #domotica&lt;&#x2F;p&gt;
&lt;p&gt;Vi lascio qualche immagine di esempio prese dal web.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;536249767.png&quot; alt=&quot;homeassistant1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;556378040.jpg&quot; alt=&quot;homeassistant2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;home-assistant-energy-management-dashboard.png&quot; alt=&quot;homeassistant3&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Writefreely e uso delle immagini </title>
          <pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/writefreely-e-uso-delle-immagini/</link>
          <guid>https://www.agostinelli.eu/blog/writefreely-e-uso-delle-immagini/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/writefreely-e-uso-delle-immagini/">&lt;p&gt;Quando ho deciso di riaprire un blog, ho optato per il software #writefreely, per due buone ragioni: la prima per la sua &lt;strong&gt;semplicità&lt;&#x2F;strong&gt;, la seconda perché si integra con il #fediverso (#actvitypub).&lt;&#x2F;p&gt;
&lt;p&gt;Una delle cont indicazioni della sua semplicità è il suo limite con le immagini, infatti &lt;strong&gt;non supporta&lt;&#x2F;strong&gt;, nativamente, il &lt;strong&gt;caricamento delle immagini&lt;&#x2F;strong&gt;, cosa che trovo un po&#x27; scomoda per un blog.&lt;&#x2F;p&gt;
&lt;p&gt;Quindi mi sono messo a pensare cercando di fare necessità virtù.
Dato che ho un mio #server personale (dove è ospitato anche questo blog), mi è venuto naturale creare un nuovo #virtualhost su #apache (il webserver che uso).
In questo modo posso caricare tutte le &lt;strong&gt;immagini&lt;&#x2F;strong&gt; che voglio &lt;strong&gt;senza limiti&lt;&#x2F;strong&gt;.
Alla soluzione mancava un ultima cosa, ovvero come gestire il caricamento delle immagini. Esistono vari software opensource da poter installare (es: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ldidry&#x2F;lutim&quot;&gt;lutim&lt;&#x2F;a&gt;), ma ho scartato questa ipotesi perché si sarebbe trattato dell&#x27;ennesimo software da gestire, solo per poter caricare una manciata di immagini.
Dato su questo stesso server uso &lt;strong&gt;#nextcloud&lt;&#x2F;strong&gt;, mi è venuta un&#x27;idea geniale: montare la directory usata per il virtual host come &lt;strong&gt;archivio esterno!&lt;&#x2F;strong&gt;
In questo modo il caricamento dei file è comunque protetto all&#x27;accesso nextcloud, il quale mi fornisce anche una &lt;strong&gt;semplice interfaccia&lt;&#x2F;strong&gt; per il caricamento delle #immagini!&lt;&#x2F;p&gt;
&lt;p&gt;Prima la salutarvi, proviamola questa soluzione per le immagini!
Ecco qua due immagini, scaricate dal web a aggiunte a nextcloud direttamente da dispositivo mobile!
(addirottura la seconda è in formato #svg)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;nextcloud.png&quot; alt=&quot;nextcloud logo&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;writefreely.svg&quot; alt=&quot;writefreely logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A presto.&lt;&#x2F;p&gt;
&lt;p&gt;P. S. Questo articolo è allo stesso tempo un test, ho provato ad inserire un po&#x27; di hashtag in giro, vediamo come funziona.&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
