diff --git a/2024/06/11/backup-minio.html b/2024/06/11/backup-minio.html index 9b0904e..0e467ca 100644 --- a/2024/06/11/backup-minio.html +++ b/2024/06/11/backup-minio.html @@ -98,13 +98,13 @@

Les différentes étapes de l’article sont :

-

Faire ses backups simplement

+

Faire ses backups simplement

Restic est une excellente alternative à BorgBackup, implémentée en Go. Il permet l’utilisation de plusieurs types de backend de stockage, dont du SFTP, une API REST, ou divers protocols cloud comme AWS S3 et l’équivalent chez la concurrence, au prix d’une compression moindre et d’un plus gros usage en ressources, notamment en RAM, que BorgBackup.

@@ -159,7 +159,7 @@ restic forget --prune --keep-dailyLe fichier .env, qui contient les informations de connexion au backend de stockage, sera créé par la suite. Il est justement temps de choisir ce backend.

-

Stocker ses backups quelque part

+

Stocker ses backups quelque part

Parmi les différents backends possible, j’ai fait le choix d’utiliser MinIO. Ce n’est pas un outil que j’aime beaucoup utiliser, mais sa compatibilité à l’API S3 le rend très pratique, et je voulais construire une solution entièrement auto-hébergée.

@@ -217,7 +217,7 @@ Tue Jun 11 08:55:45 UTC 2024 Backup and Prune finished successfully

Techniquement, un Timer Systemd est mieux et a plus de fonctionnalités, mais la force de l’habitude est forte.

-

Et ma SSO dans tout ça ?

+

Et ma SSO dans tout ça ?

Une fois un service de SSO configuré sur MinIO (laissé à titre d’exercice au lecteur),

diff --git a/2024/08/28/xmpp-server.html b/2024/08/28/xmpp-server.html index 2bb0938..ec41fc3 100644 --- a/2024/08/28/xmpp-server.html +++ b/2024/08/28/xmpp-server.html @@ -98,14 +98,14 @@

Les différentes étapes de cet article sont :

-

Environnement

+

Environnement

Pour monter un serveur XMPP, il est nécessaire d’avoir au moins un nom de domaine public, et si possible plusieurs sous-domaines dédiés au projet. Il est également nécessaire d’avoir une ip publique, avec a minima les ports tcp 5222 et 5269 accessibles.

@@ -117,7 +117,7 @@

Pour installer Prosody, j’utilise un serveur Debian 11, avec 2 vCPU, 2Go de ram et 32Go de disque (à titre purement indicatif, je n’ai pas fait de benchmark pour vérifier la pertinence de ces ressources).

-

Installation et configuration initiale

+

Installation et configuration initiale

L’installation sous debian se fait via le repo officiel de Prosody :

@@ -177,7 +177,7 @@ Checking certificate for chat.example.org
$ prosodyctl adduser user@chat.example.org
 
-

File sharing et MUC

+

File sharing et MUC

Afin de rajouter quelques fonctionnalités à notre serveur, nous allons rajouter un vrai service de partage de fichier (actuellement, le partage de fichiers fonctionne, mais uniquement en peer-to-peer), ainsi que la possibilité de créer des rooms de discussion.

@@ -225,7 +225,7 @@ Checking certificate for chat.example.org }; -

Fichier de configuration final

+

Fichier de configuration final

external_addresses = { "198.51.100.5" }
 
diff --git a/2024/09/08/blog-workflow.html b/2024/09/08/blog-workflow.html
new file mode 100644
index 0000000..b171d77
--- /dev/null
+++ b/2024/09/08/blog-workflow.html
@@ -0,0 +1,180 @@
+
+
+    
+    
+  
+    
+      
+        Workflow de déploiement de mon blog avec Forgejo Actions
+      
+    
+  
+    
+    
+  
+  
+  
+  
+    
+
+
+ + +
+ +

Workflow de déploiement de mon blog avec Forgejo Actions

+ +
+

Ce blog est un blog statique, construit à partir de Jekyll. Il peut donc être construit à l’avance, afin de générer des fichiers entièrement statiques, qui seront déployés sur un serveur web qui les servira sur internet. C’est donc une excellente occasion pour mettre en place une CI avec Forgejo Actions, afin d’automatiser le build de ce blog.

+ +
+

Je ne fais ici que de la CI, pas de CD (je ne déploie pas automatiquement sur mon serveur web), car j’utilise NixOS pour mon serveur web, et je préfère donc définir manuellement le commit exact du blog que je déploie.

+
+ +

Je travaille avec deux dépots de code : blog, qui contient les sources du blog, et blog-static, qui contient le résultat du build du blog (et qui est concrètement ce qui est servi par mon serveur web). La CI a donc pour but de récupérer les sources, compiler le blog, et push le résultat sur le deuxième dépot.

+ +
# .forgejo/workflows/main.yml
+
+# We execute this workflow on each commit pushed
+on:
+  push:
+
+jobs:
+  build:
+    runs-on: docker
+    container:
+      # the Checkout Action needs node to run
+      image: node:bookworm
+
+    steps:
+      # First, clone the source repo
+      - name: Clone repo
+        uses: actions/checkout@v4
+
+      # Then, clone the static repo on the build output path
+      - name: Clone static repo
+        uses: actions/checkout@v4
+        with:
+          repository: chapeau/blog-static
+          path: _site
+          # This repo needs a token because we will push on it later
+          token: ${{ secrets.GH_PAT }}
+          ref: main
+
+      - name: Setup
+        env:
+          MAIL: ${{ secrets.MAIL }}
+        shell: bash
+        run: |
+          # Install some dependencies for the blog
+          apt update
+          apt install -y bundler git apt-utils
+
+          # This configuration is mandatory to make commits
+          git config --global user.email "$MAIL"
+          git config --global user.name "CI Builder"
+          
+          # Install ruby dependencies
+          bundle install
+
+          # Build the blog
+          bundle exec jekyll build
+          
+          # Commit and push
+          cd _site
+          git add --all
+          git commit -m "Build"
+          git push -u origin main     
+
+ +

Pour utiliser ce workflow, deux choses sont nécessaires : un runner Forgejo bien sur, et quelques secrets.

+ +

J’utilise un simple runner docker, installé en suivant la documentation officielle.

+ +

Les secrets se définissent dans l’interface web de Forgejo, pour le projet, dans Paramètres -> Actions -> Secrets. Deux sont nécessaires pour ce workflow : MAIL, qui contient simplement l’adresse mail utilisée pour les commits, et GH_PAT, qui contient un token d’authentification associé à votre compte, avec des droits d’accès en écriture sur les dépots. Pour le générer, allez dans Configuration -> Applications.

+ + + + +
+ Theme forked from Moonwalk, mixed with Catppuccin +
+
+
+ + diff --git a/blog.html b/blog.html index 3d9a28b..49c91c1 100644 --- a/blog.html +++ b/blog.html @@ -94,6 +94,13 @@
    +
  • + + 08-09-2024» + + Workflow de déploiement de mon blog avec Forgejo Actions +
  • +
  • 28-08-2024» diff --git a/feed.xml b/feed.xml index a621038..d2f4941 100644 --- a/feed.xml +++ b/feed.xml @@ -1,19 +1,85 @@ -Jekyll2024-09-08T08:18:06+00:00https://chapoline.me/feed.xmlBlog de ChapolineBlog, articles, et pensées non ordonnées -Caroline CanebierRemplacer la conversation Whatsapp familiale par un serveur XMPP2024-08-28T00:00:00+00:002024-08-28T00:00:00+00:00https://chapoline.me/2024/08/28/xmpp-server<p>Tout le monde aujourd’hui a, dans sa famille, une conversation Whatsapp/Telegram/Messenger/autre, en remplacement des SMS de la décennie précédente. Mais avec l’enshitification ambiante d’Internet, il devient de plus en plus essentiel d’avoir des options pour rester en contact avec ses proches sans passer par des applications propriétaires peu respectueuses de la vie privée. XMPP est une excellente solution à ça, et en installer un serveur est un projet sympathique et assez facile.</p> +Jekyll2024-09-08T12:43:55+00:00https://chapoline.me/feed.xmlBlog de ChapolineBlog, articles, et pensées non ordonnées +Caroline CanebierWorkflow de déploiement de mon blog avec Forgejo Actions2024-09-08T00:00:00+00:002024-09-08T00:00:00+00:00https://chapoline.me/2024/09/08/blog-workflow<p>Ce blog est un blog statique, construit à partir de <a href="https://jekyllrb.com/">Jekyll</a>. Il peut donc être construit à l’avance, afin de générer des fichiers entièrement statiques, qui seront déployés sur un serveur web qui les servira sur internet. C’est donc une excellente occasion pour mettre en place une CI avec <a href="https://forgejo.org/docs/latest/user/actions/">Forgejo Actions</a>, afin d’automatiser le build de ce blog.</p> + +<blockquote> + <p>Je ne fais ici que de la CI, pas de CD (je ne déploie pas automatiquement sur mon serveur web), car j’utilise NixOS pour mon serveur web, et je préfère donc définir manuellement le commit exact du blog que je déploie.</p> +</blockquote> + +<p>Je travaille avec deux dépots de code : <a href="https://git.chapoline.me/chapeau/blog">blog</a>, qui contient les sources du blog, et <a href="https://git.chapoline.me/chapeau/blog-static">blog-static</a>, qui contient le résultat du build du blog (et qui est concrètement ce qui est servi par mon serveur web). La CI a donc pour but de récupérer les sources, compiler le blog, et push le résultat sur le deuxième dépot.</p> + +<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># .forgejo/workflows/main.yml</span> + +<span class="c1"># We execute this workflow on each commit pushed</span> +<span class="na">on</span><span class="pi">:</span> + <span class="na">push</span><span class="pi">:</span> + +<span class="na">jobs</span><span class="pi">:</span> + <span class="na">build</span><span class="pi">:</span> + <span class="na">runs-on</span><span class="pi">:</span> <span class="s">docker</span> + <span class="na">container</span><span class="pi">:</span> + <span class="c1"># the Checkout Action needs node to run</span> + <span class="na">image</span><span class="pi">:</span> <span class="s">node:bookworm</span> + + <span class="na">steps</span><span class="pi">:</span> + <span class="c1"># First, clone the source repo</span> + <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Clone repo</span> + <span class="na">uses</span><span class="pi">:</span> <span class="s">actions/checkout@v4</span> + + <span class="c1"># Then, clone the static repo on the build output path</span> + <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Clone static repo</span> + <span class="na">uses</span><span class="pi">:</span> <span class="s">actions/checkout@v4</span> + <span class="na">with</span><span class="pi">:</span> + <span class="na">repository</span><span class="pi">:</span> <span class="s">chapeau/blog-static</span> + <span class="na">path</span><span class="pi">:</span> <span class="s">_site</span> + <span class="c1"># This repo needs a token because we will push on it later</span> + <span class="na">token</span><span class="pi">:</span> <span class="s">${{ secrets.GH_PAT }}</span> + <span class="na">ref</span><span class="pi">:</span> <span class="s">main</span> + + <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Setup</span> + <span class="na">env</span><span class="pi">:</span> + <span class="na">MAIL</span><span class="pi">:</span> <span class="s">${{ secrets.MAIL }}</span> + <span class="na">shell</span><span class="pi">:</span> <span class="s">bash</span> + <span class="na">run</span><span class="pi">:</span> <span class="pi">|</span> + <span class="s"># Install some dependencies for the blog</span> + <span class="s">apt update</span> + <span class="s">apt install -y bundler git apt-utils</span> + + <span class="s"># This configuration is mandatory to make commits</span> + <span class="s">git config --global user.email "$MAIL"</span> + <span class="s">git config --global user.name "CI Builder"</span> + + <span class="s"># Install ruby dependencies</span> + <span class="s">bundle install</span> + + <span class="s"># Build the blog</span> + <span class="s">bundle exec jekyll build</span> + + <span class="s"># Commit and push</span> + <span class="s">cd _site</span> + <span class="s">git add --all</span> + <span class="s">git commit -m "Build"</span> + <span class="s">git push -u origin main </span> +</code></pre></div></div> + +<p>Pour utiliser ce workflow, deux choses sont nécessaires : un runner Forgejo bien sur, et quelques secrets.</p> + +<p>J’utilise un simple runner docker, installé en suivant la <a href="https://forgejo.org/docs/latest/admin/actions/#forgejo-runner">documentation officielle</a>.</p> + +<p>Les secrets se définissent dans l’interface web de Forgejo, pour le projet, dans <code class="language-plaintext highlighter-rouge">Paramètres -&gt; Actions -&gt; Secrets</code>. Deux sont nécessaires pour ce workflow : <code class="language-plaintext highlighter-rouge">MAIL</code>, qui contient simplement l’adresse mail utilisée pour les commits, et <code class="language-plaintext highlighter-rouge">GH_PAT</code>, qui contient un token d’authentification associé à votre compte, avec des droits d’accès en écriture sur les dépots. Pour le générer, allez dans <code class="language-plaintext highlighter-rouge">Configuration -&gt; Applications</code>.</p>Caroline CanebierCe blog est un blog statique, construit à partir de Jekyll. Il peut donc être construit à l’avance, afin de générer des fichiers entièrement statiques, qui seront déployés sur un serveur web qui les servira sur internet. C’est donc une excellente occasion pour mettre en place une CI avec Forgejo Actions, afin d’automatiser le build de ce blog.Remplacer la conversation Whatsapp familiale par un serveur XMPP2024-08-28T00:00:00+00:002024-08-28T00:00:00+00:00https://chapoline.me/2024/08/28/xmpp-server<p>Tout le monde aujourd’hui a, dans sa famille, une conversation Whatsapp/Telegram/Messenger/autre, en remplacement des SMS de la décennie précédente. Mais avec l’enshitification ambiante d’Internet, il devient de plus en plus essentiel d’avoir des options pour rester en contact avec ses proches sans passer par des applications propriétaires peu respectueuses de la vie privée. XMPP est une excellente solution à ça, et en installer un serveur est un projet sympathique et assez facile.</p> <p>XMPP est un protocol décentralisé d’échange de données en temps réel. Plus simplement, c’est un très bon protocol pour construire des systèmes fédérés de discussion instantannée, ce qui est exactement ce que l’on va faire. Le protocol est défini via quelques RFC, et définit également des extensions à travers des <a href="https://xmpp.org/extensions/">XEP</a>. Plusieurs de ces XEP sont aujourd’hui très standard et sont installées et activées par défaut (comme la <a href="https://xmpp.org/extensions/xep-0012.html">XEP-0012</a>). Enfin, XMPP propose aujourd’hui du chiffrement bout-en-bout mature et automatique (<a href="https://xmpp.org/extensions/xep-0384.html">XEP-0384</a>).</p> <blockquote> <p>Les différentes étapes de cet article sont :</p> <ul> - <li><a href="#environnement">Une description de l’environnement dans lequel le serveur XMPP va être déployé</a></li> - <li><a href="#installation-et-configuration-initiale">L’installation et la configuration du serveur XMPP en lui-même</a></li> - <li><a href="#file-sharing-et-muc">La configuration de quelques fonctionnalités supplémentaires (partage de fichier et rooms)</a></li> - <li><a href="#fichier-de-configuration-final">La configuration finale du serveur</a></li> + <li><a href="#env">Une description de l’environnement dans lequel le serveur XMPP va être déployé</a></li> + <li><a href="#install">L’installation et la configuration du serveur XMPP en lui-même</a></li> + <li><a href="#file">La configuration de quelques fonctionnalités supplémentaires (partage de fichier et rooms)</a></li> + <li><a href="#config">La configuration finale du serveur</a></li> </ul> </blockquote> -<h2 id="environnement">Environnement</h2> +<h2 id="env">Environnement</h2> <p>Pour monter un serveur XMPP, il est nécessaire d’avoir au moins un nom de domaine public, et si possible plusieurs sous-domaines dédiés au projet. Il est également nécessaire d’avoir une ip publique, avec a minima les ports tcp 5222 et 5269 accessibles.</p> @@ -25,7 +91,7 @@ <p>Pour installer Prosody, j’utilise un serveur Debian 11, avec 2 vCPU, 2Go de ram et 32Go de disque (à titre purement indicatif, je n’ai pas fait de benchmark pour vérifier la pertinence de ces ressources).</p> -<h2 id="installation-et-configuration-initiale">Installation et configuration initiale</h2> +<h2 id="install">Installation et configuration initiale</h2> <p>L’installation sous debian se fait via le repo officiel de Prosody :</p> @@ -85,7 +151,7 @@ Checking certificate for chat.example.org <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>prosodyctl adduser user@chat.example.org </code></pre></div></div> -<h2 id="file-sharing-et-muc">File sharing et MUC</h2> +<h2 id="file">File sharing et MUC</h2> <p>Afin de rajouter quelques fonctionnalités à notre serveur, nous allons rajouter un vrai service de partage de fichier (actuellement, le partage de fichiers fonctionne, mais uniquement en peer-to-peer), ainsi que la possibilité de créer des rooms de discussion.</p> @@ -133,7 +199,7 @@ Checking certificate for chat.example.org <span class="p">};</span> </code></pre></div></div> -<h2 id="fichier-de-configuration-final">Fichier de configuration final</h2> +<h2 id="config">Fichier de configuration final</h2> <div class="language-lua highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">external_addresses</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"198.51.100.5"</span> <span class="p">}</span> @@ -251,13 +317,13 @@ Checking certificate for chat.example.org <blockquote> <p>Les différentes étapes de l’article sont :</p> <ul> - <li><a href="#faire-ses-backups-simplement">Installer restic et écrire un script pour le lancer</a></li> - <li><a href="#stocker-ses-backups-quelque-part">Installer MinIO, et tester que restic fonctionne avec MinIO</a></li> - <li><a href="#et-ma-sso-dans-tout-ça-">Configurer restic pour fonctionner avec MinIO en SSO</a></li> + <li><a href="#restic">Installer restic et écrire un script pour le lancer</a></li> + <li><a href="#minio">Installer MinIO, et tester que restic fonctionne avec MinIO</a></li> + <li><a href="#sso">Configurer restic pour fonctionner avec MinIO en SSO</a></li> </ul> </blockquote> -<h2 id="faire-ses-backups-simplement">Faire ses backups simplement</h2> +<h2 id="restic">Faire ses backups simplement</h2> <p><a href="https://restic.net/">Restic</a> est une excellente alternative à BorgBackup, implémentée en Go. Il permet l’utilisation de plusieurs types de backend de stockage, dont du SFTP, une API REST, ou divers protocols cloud comme AWS S3 et l’équivalent chez la concurrence, au prix d’une compression moindre et d’un plus gros usage en ressources, notamment en RAM, que BorgBackup.</p> @@ -312,7 +378,7 @@ restic forget <span class="nt">--prune</span> <span cla <p>Le fichier <code class="language-plaintext highlighter-rouge">.env</code>, qui contient les informations de connexion au backend de stockage, sera créé par la suite. Il est justement temps de choisir ce backend.</p> -<h2 id="stocker-ses-backups-quelque-part">Stocker ses backups quelque part</h2> +<h2 id="minio">Stocker ses backups quelque part</h2> <p>Parmi les différents backends possible, j’ai fait le choix d’utiliser <a href="https://min.io/">MinIO</a>. Ce n’est pas un outil que j’aime beaucoup utiliser, mais sa compatibilité à l’API S3 le rend très pratique, et je voulais construire une solution entièrement auto-hébergée.</p> @@ -370,7 +436,7 @@ Tue Jun 11 08:55:45 UTC 2024 Backup and Prune finished successfully <p>Techniquement, un Timer Systemd est mieux et a plus de fonctionnalités, mais la force de l’habitude est forte.</p> </blockquote> -<h2 id="et-ma-sso-dans-tout-ça-">Et ma SSO dans tout ça ?</h2> +<h2 id="sso">Et ma SSO dans tout ça ?</h2> <p>Une fois un service de SSO configuré sur MinIO (laissé à titre d’exercice au lecteur),</p> diff --git a/index.html b/index.html index 4705aad..cd02237 100644 --- a/index.html +++ b/index.html @@ -101,6 +101,13 @@