Compare commits

...

5 Commits

Author SHA1 Message Date
abb69fac66 Merge pull request 'blog/scaleway_migration' (#22) from blog/scaleway_migration into main
Add new blog post :
Migration from GitHub to Gitea and AWS to Scaleway
2025-11-21 17:39:12 +00:00
darnodo
d3307429a6 Fix: Correct typo "automation" to "automatisation"
All checks were successful
Build and Deploy Hugo / Deploy Hugo Website (pull_request) Successful in 26s
2025-11-21 18:37:36 +01:00
darnodo
ee68666b0a Fix SVG visibility in dark mode
Invert SVG colors in dark mode to improve visibility. Also, override
OS-level dark mode when the site is in light mode to ensure the correct
theme is used.
2025-11-21 17:29:34 +01:00
darnodo
b25b8ccbe9 Update deployment workflow for Gitea
Use a self-hosted runner and deploy to Scaleway.
2025-11-20 17:38:21 +01:00
darnodo
b093c5a6b4 feat: Add Proxmox and Gitea images to tech banner 2025-11-20 17:37:03 +01:00
7 changed files with 130 additions and 95 deletions

109
README.md
View File

@@ -9,88 +9,55 @@ Enjoy your reading!
## Deploiment
This GitHub page is based on Hugo and deployed using GitHub Actions
This Gitea page is based on Hugo and deployed using GitHub Actions
For more details about [HowTo](https://gohugo.io/hosting-and-deployment/hosting-on-github/)
Workflow used :
```yaml
# Sample workflow for building and deploying a Hugo site to GitHub Pages
name: Deploy Hugo site to Pages
name: Build and Deploy Hugo
on:
# Runs on pushes targeting the default branch
push:
pull_request:
types: [closed]
branches:
- main
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
# Default to bash
defaults:
run:
shell: bash
jobs:
# Build job
build:
runs-on: ubuntu-latest
env:
HUGO_VERSION: 0.141.0
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Install Dart Sass
run: sudo snap install dart-sass
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Setup Pages
id: pages
uses: actions/configure-pages@v5
- name: Install Node.js dependencies
run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
- name: Build with Hugo
env:
HUGO_CACHEDIR: ${{ runner.temp }}/hugo_cache
HUGO_ENVIRONMENT: production
TZ: Europe/Paris
run: |
hugo \
--gc \
--minify \
--baseURL "${{ steps.pages.outputs.base_url }}/"
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./public
build_and_deploy:
if: github.event.pull_request.merged == true
name: Deploy Hugo Website
runs-on: self-hosted
container:
image: debian:bookworm-slim
# Deployment jobs
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
- name: Install dependencies
run: |
apt-get update
apt-get install -y git curl ca-certificates wget
- name: Install Hugo
run: |
wget https://github.com/gohugoio/hugo/releases/download/v0.152.2/hugo_extended_withdeploy_0.152.2_linux-amd64.deb -O /tmp/hugo.deb
dpkg -i /tmp/hugo.deb
- name: Checkout code
run: |
git clone --recurse-submodules https://gitea.arnodo.fr/Damien/Notebook.git /tmp/workspace
cd /tmp/workspace
git checkout ${{ github.sha }}
- name: Build site
run: /usr/local/bin/hugo
working-directory: /tmp/workspace
- name: Deploy to Scaleway
run: /usr/local/bin/hugo deploy --force --maxDeletes -1
working-directory: /tmp/workspace
env:
AWS_ACCESS_KEY_ID: ${{ secrets.SCW_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SCW_SECRET_KEY }}
```

23
assets/css/custom.css Normal file
View File

@@ -0,0 +1,23 @@
/* Fix SVG visibility in dark mode by inverting colors */
.dark svg {
filter: invert(1) hue-rotate(180deg);
}
/* Counter-invert images within SVGs to preserve their original colors */
.dark svg image {
filter: invert(1) hue-rotate(180deg);
}
/* Fix tech-banner gradient overlays to respect site theme, not OS theme */
:root {
--color-bg: #ffffff;
}
.dark {
--color-bg: #111111 !important;
}
/* Override OS-level dark mode when site is in light mode */
html:not(.dark) {
--color-bg: #ffffff !important;
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -11,7 +11,7 @@ tags:
- Network Engineering
---
Retour d'expérience sur la construction de mon infrastructure personnelle hybride : migration de GitHub vers Gitea auto-hébergé, et déploiement de labs réseau éphémères sur Scaleway. Le tout avec Proxmox, Wireguard et beaucoup d'automation.
Retour d'expérience sur la construction de mon infrastructure personnelle : migration de GitHub vers Gitea auto-hébergé, et déploiement de labs réseau éphémères sur Scaleway. Le tout avec Proxmox et Wireguard.
<!--more-->
@@ -28,7 +28,7 @@ Mais plusieurs envies ont émergé :
## L'Architecture Globale
![Architecture](global_architecture.fr.svg)
### Stack Technique
@@ -52,7 +52,7 @@ Mais plusieurs envies ont émergé :
### Pourquoi Gitea ?
[Gitea](https://gitea.io/) est un serveur Git leger, parfaite pour du self-hosting :
[Gitea](https://gitea.io/) est un serveur Git leger, parfait pour du self-hosting :
- **Léger** : Idéal pour un LXC sur Proxmox
- **Compatible GitHub Actions** : Migration des workflows sans réécriture
@@ -125,25 +125,25 @@ Pour maintenir Gitea à jour et gérer les configurations, j'utilise Ansible.
hosts: gitea
become: yes
tasks:
- name: Stop Gitea service
- name: Update apt cache
apt:
update_cache: yes
cache_valid_time: 3600
- name: Upgrade Gitea and system packages
apt:
upgrade: dist
autoremove: yes
autoclean: yes
- name: Restart Gitea service
systemd:
name: gitea
state: stopped
- name: Download latest Gitea binary
get_url:
url: https://dl.gitea.com/gitea/latest/gitea-latest-linux-amd64
dest: /usr/local/bin/gitea
mode: '0755'
- name: Start Gitea service
systemd:
name: gitea
state: started
state: restarted
enabled: yes
- name: Check Gitea version
command: /usr/local/bin/gitea --version
command: gitea --version
register: gitea_version
- debug:
@@ -158,7 +158,8 @@ ansible-playbook -i inventory.ini update-gitea.yml
### Monitoring avec Grafana
Gitea expose des métriques Prometheus. Configuration :
Gitea expose des métriques Prometheus (https://docs.gitea.com/administration/config-cheat-sheet#metrics-metrics)
Configuration :
**Dans Gitea (`app.ini`)** :
@@ -179,7 +180,7 @@ scrape_configs:
- targets: ['<gitea_lxc_ip>:3000']
```
**Dashboard Grafana** :
**Dashboard Grafana** (https://grafana.com/docs/grafana-cloud/monitor-infrastructure/integrations/integration-reference/integration-gitea/#gitea-integration-for-grafana-cloud) :
- Nombre de repositories, utilisateurs
- Requêtes HTTP (rate, latence)
- État des runners CI/CD
@@ -187,8 +188,7 @@ scrape_configs:
### Migration du Code depuis GitHub
Simple et rapide :
Simple et rapide :
Utiliser la fonction d'import de Gitea (Settings > New Migration > GitHub) qui migre aussi les issues et releases.
### CI/CD : Déploiement Hugo vers Scaleway Object Storage
@@ -565,8 +565,8 @@ En tant que professionnel du réseau (Arista, BGP/EVPN, automation), self-hoster
- **Haute disponibilité** : Seconde Dedibox pour du failover
- **Backup automatique** : Scripts pour sauvegarder Gitea vers Scaleway Object Storage
- **Plus d'automation** : Terraform pour provisionner toute l'infra Scaleway
- **MCP Arista** : Développer un serveur MCP pour interagir avec les équipements réseau via Claude
- **Plus d'automatisation** : Terraform pour provisionner toute l'infra Scaleway
- **MCP Arista** : Développer un serveur MCP pour interagir avec les équipements réseau via LLM Locaux
- **Intégration Netbox** : Webhook depuis Netbox vers pipeline de validation réseau
## Conclusion

View File

@@ -32,7 +32,7 @@ menu:
params:
theme:
default: light
displayToggle: false
displayToggle: true
# Navbar
navbar:
displayTitle: true

View File

@@ -76,6 +76,13 @@
onmouseover="this.style.filter='grayscale(0%)'; this.style.opacity='1';"
onmouseout="this.style.filter='grayscale(100%)'; this.style.opacity='0.7';"
/>
<img
src="/images/tech-banner/proxmox-color.svg"
alt="Proxmox"
style="height: {{ $height }}; width: auto; filter: grayscale(100%); opacity: 0.7; transition: all 0.3s ease;"
onmouseover="this.style.filter='grayscale(0%)'; this.style.opacity='1';"
onmouseout="this.style.filter='grayscale(100%)'; this.style.opacity='0.7';"
/>
<img
src="/images/tech-banner/scaleway-color.svg"
alt="Scaleway"
@@ -125,6 +132,13 @@
onmouseover="this.style.filter='grayscale(0%)'; this.style.opacity='1';"
onmouseout="this.style.filter='grayscale(100%)'; this.style.opacity='0.7';"
/>
<img
src="/images/tech-banner/proxmox-color.svg"
alt="Proxmox"
style="height: {{ $height }}; width: auto; filter: grayscale(100%); opacity: 0.7; transition: all 0.3s ease;"
onmouseover="this.style.filter='grayscale(0%)'; this.style.opacity='1';"
onmouseout="this.style.filter='grayscale(100%)'; this.style.opacity='0.7';"
/>
<img
src="/images/tech-banner/scaleway-color.svg"
alt="Scaleway"

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Created with Inkscape (http://www.inkscape.org/) by Marsupilami -->
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg4060"
version="1.1"
width="1024"
height="162"
viewBox="-1.8685548 -1.8685548 418.4656296 66.0222696">
<defs
id="defs4057" />
<path
id="path55"
d="M 19.35157,0 C 17.87755,0 16.59295,0.26384 15.34571,0.79297 14.13626,1.3221 13.0777,2.0395 12.13282,2.98438 L 35.98243,29.13867 59.79297,2.98438 C 58.84809,2.0395 57.78895,1.3221 56.50391,0.79297 55.33226,0.26384 53.97265,0 52.57422,0 51.10021,0 49.70233,0.30221 48.45508,0.86914 47.17004,1.43607 46.11159,2.26732 45.12891,3.25 L 35.98243,13.37891 26.72266,3.25 C 25.77778,2.26732 24.71932,1.43607 23.39649,0.86914 22.22484,0.30221 20.82558,0 19.35157,0 Z M 35.98243,33.10742 12.13282,59.30078 c 0.94488,0.90709 2.00344,1.66228 3.21289,2.19141 1.24724,0.52913 2.53321,0.79297 3.93164,0.79297 1.5496,0 2.87189,-0.34001 4.11914,-0.86914 1.32283,-0.60473 2.45551,-1.39818 3.40039,-2.38086 l 9.18555,-10.12891 9.18359,10.12891 c 0.94488,0.98268 2.00402,1.77613 3.28906,2.38086 1.24725,0.52913 2.60733,0.86914 4.11914,0.86914 1.39843,0 2.75804,-0.26384 3.92969,-0.79297 1.28504,-0.52913 2.34418,-1.28432 3.28906,-2.19141 z"
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1.06665826;stroke-linejoin:round" />
<path
id="path69"
d="M 7.86133,7.86133 C 6.34952,7.89913 4.87557,8.20065 3.55274,8.76758 2.19211,9.33451 1.02048,10.12865 0,11.11133 L 18.21875,31.14258 0,51.13672 c 1.02048,1.02047 2.19211,1.81325 3.55274,2.41797 1.32283,0.60472 2.79678,0.86972 4.30859,0.94531 1.6252,-0.0756 3.13869,-0.33921 4.53711,-1.01953 1.39843,-0.64252 2.60648,-1.51331 3.62695,-2.60937 L 33.97852,31.14258 16.02539,11.45117 C 14.92933,10.39291 13.7578,9.52407 12.35938,8.84375 10.96095,8.20123 9.48653,7.89913 7.86133,7.86133 Z m 56.08985,0 c -1.6252,0.0378 -3.06252,0.3399 -4.46094,0.98242 -1.39843,0.68032 -2.60775,1.54916 -3.66602,2.60742 L 37.94727,31.14258 55.82422,50.8711 c 1.05827,1.09606 2.26759,1.96685 3.66602,2.60937 1.39842,0.68032 2.83574,0.94394 4.46094,1.01953 1.62519,-0.0756 3.02286,-0.34059 4.3457,-0.94531 1.43622,-0.60472 2.53226,-1.3975 3.55273,-2.41797 L 53.66993,31.14258 71.84961,11.11133 C 70.82914,10.12865 69.7331,9.33451 68.29688,8.76758 66.97404,8.20065 65.57637,7.89913 63.95118,7.86133 Z m 161.30858,3.40039 c -2.57007,0 -4.98798,1.05829 -6.72656,2.79688 l 15.60938,17.04687 -15.60938,17.19531 c 1.73858,1.73859 4.15649,2.83594 6.72656,2.83594 2.83465,0 5.29267,-1.17205 7.03125,-3.09961 l 8.61719,-9.52539 8.61719,9.52539 c 1.73858,1.92756 4.19534,3.09961 6.99219,3.09961 2.60787,0 4.98798,-1.09735 6.72656,-2.83594 L 247.63476,31.10547 263.24414,14.0586 c -1.73858,-1.73859 -4.11869,-2.79688 -6.72656,-2.79688 -2.79685,0 -5.25361,1.17274 -6.99219,3.0625 l -8.61719,9.44727 -8.69336,-9.44727 c -1.81417,-1.92756 -4.12043,-3.0625 -6.95508,-3.0625 z m 151.56055,0 c -2.68346,0 -5.06552,1.05829 -6.72851,2.79688 l 15.53515,17.04687 -15.53515,17.19531 c 1.66299,1.73859 4.04505,2.83594 6.72851,2.83594 2.72126,0 5.17743,-1.17205 6.91602,-3.09961 l 8.61718,-9.52539 8.6543,9.52539 c 1.66299,1.92756 4.12112,3.09961 6.91797,3.09961 2.60787,0 5.06415,-1.09735 6.80273,-2.83594 L 399.08203,31.10547 414.72851,14.0586 c -1.73858,-1.73859 -4.19486,-2.79688 -6.80273,-2.79688 -2.79685,0 -5.25498,1.17274 -6.91797,3.0625 l -8.6543,9.44727 -8.69336,-9.44727 c -1.70078,-1.92756 -4.04299,-3.0625 -6.83984,-3.0625 z"
style="fill:#e57000;fill-rule:evenodd;stroke:none;stroke-width:1.06665826;stroke-linejoin:round" />
<path
id="path83"
d="m 85.49414,11.1875 c -2.00314,0 -3.74218,1.6615 -3.74218,3.74024 v 36.20898 c 5.44252,0 9.93946,-4.45972 9.93946,-10.01562 h 20.03319 c 5.51811,0 9.97656,-4.45972 9.97656,-10.01563 v -9.90234 c 0,-5.55591 -4.45845,-10.01563 -9.97656,-10.01563 z m 45.58008,0 c -2.00315,0 -3.66602,1.6615 -3.66602,3.74024 v 36.20898 c 5.48032,0 10.01563,-4.45972 10.01563,-10.01562 v -2.53321 h 11.30078 l 5.7832,8.24024 c 1.88977,2.64567 4.72401,4.30859 8.20117,4.30859 1.663,0 3.2885,-0.37817 4.61133,-1.17187 l -8.08789,-11.45313 c 4.61102,-0.94488 8.08789,-4.98769 8.08789,-9.86328 v -7.44531 c 0,-5.55591 -4.45972,-10.01563 -10.01562,-10.01563 z m 51.85547,0 c -5.51811,0 -9.90235,4.45972 -9.90235,10.01563 V 41.1211 c 0,5.5559 4.38424,10.01562 9.90235,10.01562 h 19.99414 c 5.51811,0 9.97851,-4.45972 9.97851,-10.01562 V 21.20313 c 0,-5.55591 -4.4604,-10.01563 -9.97851,-10.01563 z m 89.76367,0 c -2.15433,0 -3.81641,1.6615 -3.81641,3.74024 v 36.20898 c 5.48032,0 10.01563,-4.45972 10.01563,-10.01562 v -19.125 c 0,-0.49134 0.30221,-0.86914 0.86914,-0.86914 0.26456,0 0.56757,0.26414 0.71875,0.45312 l 11.11133,24.45313 c 0.37795,0.86929 1.32269,1.51171 2.26757,1.51171 0.98268,0 1.85115,-0.60336 2.30469,-1.47265 l 11.07422,-24.49219 c 0.15118,-0.18898 0.41697,-0.45312 0.79492,-0.45312 0.41575,0 0.83008,0.3778 0.83008,0.86914 v 19.125 c 0,5.5559 4.45982,10.01562 9.90234,10.01562 V 14.92774 c 0,-2.07874 -1.66286,-3.74024 -3.66601,-3.74024 h -6.23633 c -4.08189,0 -7.55908,2.45506 -9.14648,6.00781 v -0.15039 l -5.85743,12.88868 -5.82031,-12.88868 v 0.15039 c -1.51181,-3.55275 -5.10239,-6.00781 -9.14648,-6.00781 z m 61.79492,0 c -5.55591,0 -10.01563,4.45972 -10.01563,10.01563 V 41.1211 c 0,5.5559 4.45972,10.01562 10.01563,10.01562 h 19.88086 c 5.5559,0 10.01562,-4.45972 10.01562,-10.01562 V 21.20313 c 0,-5.55591 -4.45972,-10.01563 -10.01562,-10.01563 z M 91.69142,21.20313 h 17.49999 c -1e-5,0 2.5332,-0.002 2.5332,2.45508 v 6.19921 c 0,0 -9.2e-4,2.53321 -2.5332,2.53321 H 91.69142 Z m 45.73241,0 h 17.42382 c 0,0 2.45704,-0.002 2.45704,2.45508 v 3.78125 c 0,0 -3.4e-4,2.41796 -2.45704,2.41796 h -17.42382 z m 48.03906,0 h 14.92773 c 0,0 2.53321,-0.002 2.53321,2.45508 v 14.92968 c 0,0 -9.2e-4,2.53321 -2.53321,2.53321 h -14.92773 c 0,0 -2.5332,-9.2e-4 -2.5332,-2.53321 V 23.65821 c 0,0 9.2e-4,-2.45508 2.5332,-2.45508 z m 151.48242,0 h 14.9668 c 0,0 2.45703,-0.002 2.45703,2.45508 v 14.92968 c 0,0 -3.4e-4,2.53321 -2.45703,2.53321 h -14.9668 c 0,0 -2.45703,-9.2e-4 -2.45703,-2.53321 V 23.65821 c 0,0 3.4e-4,-2.45508 2.45703,-2.45508 z"
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1.06665826;stroke-linejoin:round" />
</svg>
<!-- version: 20171223, original size: 414.72852 62.28516, border: 3% -->

After

Width:  |  Height:  |  Size: 6.4 KiB