Compare commits
58 Commits
83f19d28f1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| abb69fac66 | |||
|
|
d3307429a6 | ||
|
|
ee68666b0a | ||
|
|
b25b8ccbe9 | ||
|
|
b093c5a6b4 | ||
|
|
0125eecb4a | ||
| f6cb68945c | |||
|
|
62e1d134ed | ||
|
|
e944ac175b | ||
|
|
e6bc9fe80e | ||
| 7bc92e0923 | |||
|
|
3964d23b00 | ||
| c9143bc108 | |||
| 2653b3d3a3 | |||
|
|
1aca706a4e | ||
| 1959778062 | |||
| 921bd00faf | |||
|
|
894e259c33 | ||
| 16918d2614 | |||
| d2e177e9f8 | |||
|
|
ab68a5952c | ||
| 8b39e2c8ad | |||
| b15474de3f | |||
|
|
d2fa4f8ee3 | ||
| dcdacfa034 | |||
| 3a75628454 | |||
|
|
a001a57528 | ||
| 189241002c | |||
| 76423ee1fd | |||
| 6cc362b85a | |||
|
|
4372dae142 | ||
| 6eae2592ed | |||
| 6c8c364399 | |||
|
|
264c7faee1 | ||
| b8b9aca5ae | |||
| 8ffaceded7 | |||
|
|
332c02e544 | ||
| caa3f2e617 | |||
| 6b9655f0b1 | |||
|
|
6c5debee3f | ||
| fb863f9b78 | |||
|
|
a44b42eb97 | ||
| e259d05121 | |||
| 5ad89847c6 | |||
| adaa7b9db1 | |||
| 4c91280811 | |||
| 9351624142 | |||
| 077d424e67 | |||
| 1bf32c7507 | |||
| f506db32af | |||
| d0c5203173 | |||
| bbe1a5d05d | |||
| af4df87d1a | |||
| 7431e861be | |||
| 2649b60762 | |||
| 67b08b6124 | |||
| 3b8a4461c7 | |||
| 946fa0dafe |
@@ -1,4 +1,4 @@
|
||||
name: Deploy to Scaleway
|
||||
name: Build and Deploy Hugo
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
@@ -7,40 +7,38 @@ on:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
build_and_deploy:
|
||||
if: github.event.pull_request.merged == true
|
||||
name: Deploy Hugo Website
|
||||
runs-on: self-hosted
|
||||
|
||||
container:
|
||||
image: scaleway/cli:latest
|
||||
image: debian:bookworm-slim
|
||||
|
||||
steps:
|
||||
- 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
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Hugo
|
||||
uses: peaceiris/actions-hugo@v2
|
||||
with:
|
||||
hugo-version: "latest"
|
||||
extended: true
|
||||
|
||||
- name: Build Hugo site
|
||||
run: hugo --minify
|
||||
|
||||
- name: Configure Scaleway CLI
|
||||
run: |
|
||||
scw init access-key=${{ secrets.SCW_ACCESS_KEY }} \
|
||||
secret-key=${{ secrets.SCW_SECRET_KEY }} \
|
||||
default-organization-id=${{ secrets.SCW_ORGANIZATION_ID }} \
|
||||
default-region=fr-par
|
||||
git clone --recurse-submodules https://gitea.arnodo.fr/Damien/Notebook.git /tmp/workspace
|
||||
cd /tmp/workspace
|
||||
git checkout ${{ github.sha }}
|
||||
|
||||
- name: Deploy to Object Storage
|
||||
run: |
|
||||
scw object cp public/ s3://notebook-arnodo-fr/ --recursive
|
||||
- name: Build site
|
||||
run: /usr/local/bin/hugo
|
||||
working-directory: /tmp/workspace
|
||||
|
||||
- name: Purge CDN Cache (optional)
|
||||
run: |
|
||||
scw edge-services pipeline purge pipeline-id=${{ secrets.SCW_PIPELINE_ID }}
|
||||
- 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 }}
|
||||
|
||||
109
README.md
@@ -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: America/Los_Angeles
|
||||
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 job
|
||||
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
@@ -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;
|
||||
}
|
||||
@@ -42,11 +42,71 @@ layout: hextra-home
|
||||
imageClass="hx:top-[40%] hx:left-[36px] hx:w-[180%] hx:sm:w-[110%] hx:dark:opacity-80"
|
||||
style="background: radial-gradient(ellipse at 50% 80%,rgba(203, 28, 66, 0.1),hsla(0,0%,100%,0));"
|
||||
>}}
|
||||
{{< hextra/feature-card
|
||||
title="Blog"
|
||||
subtitle="Retours d'expérience et articles techniques"
|
||||
link="blog"
|
||||
class="hx:aspect-auto hx:md:aspect-[1.1/1] hx:max-md:min-h-[340px]"
|
||||
image="/images/blog.png"
|
||||
imageClass="hx:top-[40%] hx:left-[36px] hx:w-[180%] hx:sm:w-[110%] hx:dark:opacity-80"
|
||||
style="background: radial-gradient(ellipse at 50% 80%,rgba(142, 68, 173, 0.1),hsla(0,0%,100%,0));"
|
||||
>}}
|
||||
{{< /hextra/feature-grid >}}
|
||||
|
||||
<div style="margin-top: 8rem; margin-bottom: 1.5rem;">
|
||||
<h2 class="hx:text-right hx:text-3xl hx:font-semibold hx:text-gray-900 hx:dark:text-gray-100" style="margin-bottom: 1.5rem;">
|
||||
Technologies utilisés
|
||||
<div style="text-align: center; margin-bottom: 3rem;">
|
||||
<h2 class="tech-title" style="
|
||||
font-size: clamp(2rem, 5vw, 3.5rem);
|
||||
font-weight: 800;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
|
||||
background-size: 200% 200%;
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
animation: gradient-shift 4s ease infinite;
|
||||
letter-spacing: -0.02em;
|
||||
margin: 0;
|
||||
padding: 0.5rem 0;
|
||||
">
|
||||
Technologies utilisées
|
||||
</h2>
|
||||
<img src="images/tech-banner.png" alt="Technologies utilisées" class="hx:mx-auto hx:max-w-full hx:h-auto" />
|
||||
<p style="
|
||||
color: #6b7280;
|
||||
font-size: 1rem;
|
||||
margin-top: 0.75rem;
|
||||
font-weight: 400;
|
||||
" class="dark:text-gray-400">
|
||||
Les outils et plateformes avec lesquels je travaille
|
||||
</p>
|
||||
</div>
|
||||
{{< tech-banner speed="60s" height="80px" gap="4rem" >}}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
@keyframes gradient-shift {
|
||||
0%, 100% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
50% {
|
||||
background-position: 100% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.tech-title {
|
||||
background: linear-gradient(135deg, #a78bfa 0%, #ec4899 50%, #fbbf24 100%) !important;
|
||||
background-size: 200% 200% !important;
|
||||
-webkit-background-clip: text !important;
|
||||
-webkit-text-fill-color: transparent !important;
|
||||
background-clip: text !important;
|
||||
}
|
||||
}
|
||||
|
||||
[data-theme="dark"] .tech-title {
|
||||
background: linear-gradient(135deg, #a78bfa 0%, #ec4899 50%, #fbbf24 100%) !important;
|
||||
background-size: 200% 200% !important;
|
||||
-webkit-background-clip: text !important;
|
||||
-webkit-text-fill-color: transparent !important;
|
||||
background-clip: text !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
5
content/blog/_index.fr.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Blog"
|
||||
---
|
||||
|
||||
Mes articles et retours d'expérience sur le réseau, les systèmes et le DevOps.
|
||||
|
After Width: | Height: | Size: 21 KiB |
602
content/blog/migration-gitlab-gitea/index.fr.md
Normal file
@@ -0,0 +1,602 @@
|
||||
---
|
||||
title: "Self-Hosting et Cloud Hybride : Mon Infrastructure Perso avec Gitea et Scaleway"
|
||||
date: 2025-11-20
|
||||
authors:
|
||||
- name: Damien
|
||||
link: https://gitea.arnodo.fr/Damien
|
||||
tags:
|
||||
- Homelab
|
||||
- DevOps
|
||||
- Self-Hosting
|
||||
- Network Engineering
|
||||
---
|
||||
|
||||
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-->
|
||||
|
||||
## Contexte et Motivations
|
||||
|
||||
En tant qu'ingénieur réseau travaillant dans le domaine de l'automatisation et de l'orchestration, j'ai toujours eu besoin d'un environnement pour expérimenter et apprendre. Jusqu'à récemment, j'utilisais GitHub pour mon code et ContainerLab en local/AWS via [DevPod](/documentation/devpod/) pour mes simulations réseau.
|
||||
|
||||
Mais plusieurs envies ont émergé :
|
||||
|
||||
- **Apprentissage** : Déployer et gérer un serveur Git complet avec CI/CD
|
||||
- **Souveraineté** : Héberger mes données en France (à minima en Europe), contrôler mon infrastructure
|
||||
- **Flexibilité** : Pouvoir lancer des labs réseau à la demande sans saturer ma machine locale
|
||||
- **Automatisation** : Scripter le provisionnement complet de mes environnements
|
||||
|
||||
## L'Architecture Globale
|
||||
|
||||

|
||||
|
||||
### Stack Technique
|
||||
|
||||
**Homelab** :
|
||||
- **Proxmox VE** : Hyperviseur pour VMs et LXC
|
||||
- **LXC Containers** : Gitea, runners, services divers
|
||||
- **Ansible** : Gestion des configurations et mises à jour
|
||||
- **Grafana/Prometheus/Loki** : Monitoring et supervision
|
||||
|
||||
**Exposition publique** :
|
||||
- **Dedibox Scaleway** : Instance dédiée avec IP fixe
|
||||
- **Nginx Proxy Manager** : Reverse proxy avec SSL automatique
|
||||
- **Wireguard VPN** : Tunnel sécurisé entre Scaleway et homelab
|
||||
|
||||
**Cloud Scaleway** :
|
||||
- **Object Storage** : Hébergement du blog Hugo (S3-compatible)
|
||||
- **Instances** : Labs réseau éphémères provisionnés à la demande
|
||||
- **Scaleway CLI** : Automatisation complète
|
||||
|
||||
## Partie 1 : Migration GitHub → Gitea Auto-Hébergé
|
||||
|
||||
### Pourquoi Gitea ?
|
||||
|
||||
[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
|
||||
- **Complet** : Issues, PRs, CI/CD, webhooks
|
||||
- **Open-source** : Communauté active
|
||||
|
||||
### Déploiement avec Proxmox Helper Scripts
|
||||
|
||||
Plutôt que de tout configurer manuellement, j'utilise les excellents [Proxmox Helper Scripts](https://community-scripts.github.io/ProxmoxVE/) qui automatisent la création de LXC préconfigurés.
|
||||
|
||||
**Installation de Gitea** :
|
||||
|
||||
```bash
|
||||
# Sur le nœud Proxmox, exécuter le script
|
||||
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/gitea.sh)"
|
||||
```
|
||||
|
||||
Le script :
|
||||
- Crée un LXC Debian 12
|
||||
- Installe Gitea et sqlite
|
||||
- Configure les services systemd
|
||||
- Prépare l'environnement avec les bonnes permissions
|
||||
|
||||
**Configuration post-installation** :
|
||||
- Accès web : `http://<IP_LXC>:3000`
|
||||
- Configuration initiale via l'interface
|
||||
- URL du site : `https://gitea.arnodo.fr`
|
||||
|
||||
### Architecture Réseau : Wireguard + Nginx Proxy Manager
|
||||
|
||||
**Le problème** : Gitea tourne dans mon homelab (IP privée), mais je veux y accéder depuis Internet.
|
||||
|
||||
**La solution** :
|
||||
1. **Dedibox Scaleway** avec IP publique fixe et Nginx Proxy Manager
|
||||
2. **Wireguard VPN** entre la Dedibox et le homelab
|
||||
3. Le reverse proxy route `gitea.arnodo.fr` vers l'IP privée du LXC via le tunnel
|
||||
|
||||
**Configuration Wireguard (côté homelab)** :
|
||||
|
||||
```ini
|
||||
[Interface]
|
||||
Address = 10.0.0.1/24
|
||||
PrivateKey = <private_key>
|
||||
ListenPort = 51820
|
||||
|
||||
[Peer]
|
||||
# Dedibox Scaleway
|
||||
PublicKey = <dedibox_public_key>
|
||||
AllowedIPs = 10.0.0.2/32
|
||||
Endpoint = <dedibox_public_ip>:51820
|
||||
PersistentKeepalive = 25
|
||||
```
|
||||
|
||||
**Nginx Proxy Manager** :
|
||||
- Proxy Host : `gitea.arnodo.fr`
|
||||
- Forward Hostname/IP : `10.0.0.x` (IP du LXC Gitea via Wireguard)
|
||||
- Forward Port : `3000`
|
||||
- SSL : Let's Encrypt automatique
|
||||
- Websockets : Activés
|
||||
|
||||
### Gestion avec Ansible
|
||||
|
||||
Pour maintenir Gitea à jour et gérer les configurations, j'utilise Ansible.
|
||||
|
||||
**Playbook de mise à jour** (`update-gitea.yml`) :
|
||||
|
||||
```yaml
|
||||
---
|
||||
- name: Update Gitea
|
||||
hosts: gitea
|
||||
become: yes
|
||||
tasks:
|
||||
- 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: restarted
|
||||
enabled: yes
|
||||
|
||||
- name: Check Gitea version
|
||||
command: gitea --version
|
||||
register: gitea_version
|
||||
|
||||
- debug:
|
||||
msg: "{{ gitea_version.stdout }}"
|
||||
```
|
||||
|
||||
**Exécution** :
|
||||
|
||||
```bash
|
||||
ansible-playbook -i inventory.ini update-gitea.yml
|
||||
```
|
||||
|
||||
### Monitoring avec Grafana
|
||||
|
||||
Gitea expose des métriques Prometheus (https://docs.gitea.com/administration/config-cheat-sheet#metrics-metrics)
|
||||
Configuration :
|
||||
|
||||
**Dans Gitea (`app.ini`)** :
|
||||
|
||||
```ini
|
||||
[metrics]
|
||||
ENABLED = true
|
||||
TOKEN = <secret_token>
|
||||
```
|
||||
|
||||
**Prometheus scrape config** :
|
||||
|
||||
```yaml
|
||||
scrape_configs:
|
||||
- job_name: 'gitea'
|
||||
metrics_path: /metrics
|
||||
bearer_token: '<secret_token>'
|
||||
static_configs:
|
||||
- targets: ['<gitea_lxc_ip>:3000']
|
||||
```
|
||||
|
||||
**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
|
||||
- Utilisation CPU/RAM du LXC
|
||||
|
||||
### Migration du Code depuis GitHub
|
||||
|
||||
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
|
||||
|
||||
Mon blog Hugo se déploie automatiquement sur Scaleway Object Storage à chaque push.
|
||||
|
||||
**Installation de Gitea Runner** (https://docs.gitea.com/usage/actions/act-runner)
|
||||
|
||||
Créer l’utilisateur système runner :
|
||||
|
||||
```bash
|
||||
useradd -r -m -d /var/lib/gitea-runner -s /bin/bash gitea-runner
|
||||
```
|
||||
|
||||
Voici un petit script qui peut aider à installer le runner directement dans un LXC:
|
||||
|
||||
```bash
|
||||
sudo apt install -y jq curl tar # si pas déjà
|
||||
|
||||
LATEST=$(curl -s 'https://gitea.com/api/v1/repos/gitea/act_runner/releases' | jq -r '.[0].tag_name')
|
||||
echo "Latest act_runner: $LATEST"
|
||||
|
||||
# construire URL de binaire (nommage used: act_runner-<os>-<arch>)
|
||||
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
||||
ARCH=$(uname -m)
|
||||
# Certains serveurs distribuent binaire sans tar; adapter si archive
|
||||
URL="https://gitea.com/gitea/act_runner/releases/download/${LATEST}/act_runner-${LATEST#v}-${OS}-${ARCH}"
|
||||
|
||||
# essayer télécharger binaire
|
||||
curl -fL "$URL" -o /tmp/act_runner || {
|
||||
echo "Téléchargement direct échoué — vérifier le nom exact sur la page release." >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
sudo mv /tmp/act_runner /usr/local/bin/act_runner
|
||||
sudo chmod +x /usr/local/bin/act_runner
|
||||
```
|
||||
|
||||
et pour valider
|
||||
|
||||
```bash
|
||||
/usr/local/bin/act_runner --version
|
||||
```
|
||||
|
||||
>[!NOTE]
|
||||
> Il est important d'enregistrer le runner pour qu'il soit reconnu par Gitea.
|
||||
> Pour plus d'informations sur la configuration du runner, consultez la documentation officielle de Gitea.
|
||||
> https://docs.gitea.io/fr/docs/usage/actions/runner/
|
||||
|
||||
**Workflow Gitea Actions** (`.gitea/workflows/deploy.yml`) :
|
||||
|
||||
```yaml
|
||||
name: Build and Deploy Hugo
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [closed]
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build_and_deploy:
|
||||
if: github.event.pull_request.merged == true
|
||||
name: Deploy Hugo Website
|
||||
runs-on: self-hosted
|
||||
|
||||
container:
|
||||
image: debian:bookworm-slim
|
||||
|
||||
steps:
|
||||
- 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 }}
|
||||
|
||||
```
|
||||
|
||||
**Configuration Hugo** (`hugo.yaml`) :
|
||||
|
||||
```yaml
|
||||
deployment:
|
||||
targets:
|
||||
- name: "notebook-arnodo-fr"
|
||||
URL: "s3://notebook-arnodo-fr?endpoint=https://s3.fr-par.scw.cloud®ion=fr-par"
|
||||
```
|
||||
|
||||
**Configuration Scaleway Object Storage** :
|
||||
1. Créer un bucket `notebook-arnodo-fr`
|
||||
2. Activer le mode "Static Website Hosting"
|
||||
3. Générer les credentials API (Access Key + Secret Key)
|
||||
4. Les ajouter comme secrets dans Gitea (Settings > Secrets > Actions)
|
||||
|
||||
**Déploiement** :
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "New blog post"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
Le workflow se déclenche automatiquement, Hugo génère le site, et le déploie sur Scaleway Object Storage. Le site est accessible instantanément via le CDN.
|
||||
|
||||
## Partie 2 : Labs Réseau sur Scaleway
|
||||
|
||||
### Le Problème
|
||||
|
||||
ContainerLab avec plusieurs Arista EOS en local, c'est :
|
||||
- **Gourmand** : 4-8 GB RAM par conteneur cEOS
|
||||
- **Local** : Pas d'accès depuis l'extérieur
|
||||
- **Conflits** : Avec d'autres services Docker/K8s
|
||||
|
||||
### La Solution : Instances Scaleway à la Demande
|
||||
|
||||
**Concept** :
|
||||
- Créer une instance Scaleway quand j'ai besoin d'un lab
|
||||
- Installer automatiquement ContainerLab/le VPN via cloud-init
|
||||
- Détruire l'instance après utilisation
|
||||
- Facturation à l'heure (< 1€ pour quelques heures de lab)
|
||||
|
||||
### Script d'Automatisation : Scaleway CLI
|
||||
|
||||
J'ai développé un script Bash qui gère tout le cycle de vie d'une instance de lab.
|
||||
|
||||
**Fonctionnalités** :
|
||||
- **Création** : Instance + Security Group (SSH depuis mon IP uniquement)
|
||||
- **Start/Stop** : Gestion de l'instance
|
||||
- **Suppression** : Nettoyage complet (instance, volumes, IP, SG)
|
||||
|
||||
**Structure du script** (`scaleway-instance.sh`) :
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# Configuration
|
||||
INSTANCE_NAME="NetLab"
|
||||
ZONE="fr-par-1"
|
||||
IMAGE="debian_bookworm"
|
||||
VOLUME_SIZE=20 # GB
|
||||
USER_DATA_FILE="user_data.txt"
|
||||
SECURITY_GROUP_NAME="${INSTANCE_NAME}-SG"
|
||||
|
||||
# Détecte l'IP publique actuelle
|
||||
get_public_ip() {
|
||||
curl -4 -s ifconfig.me
|
||||
}
|
||||
|
||||
# Crée un Security Group limitant SSH à l'IP publique
|
||||
create_or_update_security_group() {
|
||||
PUBLIC_IP=$(get_public_ip)
|
||||
# Crée le SG avec inbound SSH uniquement depuis PUBLIC_IP/32
|
||||
# ...
|
||||
}
|
||||
|
||||
# Actions : create, start, stop, delete
|
||||
case "$1" in
|
||||
start)
|
||||
# Démarre l'instance existante
|
||||
scw instance server start "$INSTANCE_ID" --wait
|
||||
;;
|
||||
stop)
|
||||
# Arrête l'instance
|
||||
scw instance server stop "$INSTANCE_ID" --wait
|
||||
;;
|
||||
delete)
|
||||
# Supprime instance + volumes + IP + SG
|
||||
scw instance server terminate "$INSTANCE_ID" --with-ip --with-block
|
||||
scw instance security-group delete "$SG_ID"
|
||||
;;
|
||||
*)
|
||||
# Crée une nouvelle instance
|
||||
create_instance "$1" # Type d'instance (DEV1-S, GP1-XS, ...)
|
||||
;;
|
||||
esac
|
||||
```
|
||||
|
||||
### Cloud-Init : Configuration Automatique
|
||||
|
||||
Le fichier `user_data.txt` contient les instructions cloud-init pour provisionner l'instance automatiquement.
|
||||
|
||||
**Exemple** (`user_data.txt`) :
|
||||
|
||||
```yaml
|
||||
#cloud-config
|
||||
package_update: true
|
||||
package_upgrade: true
|
||||
|
||||
packages:
|
||||
- git
|
||||
- curl
|
||||
- docker.io
|
||||
- docker-compose
|
||||
|
||||
runcmd:
|
||||
# Installation de ContainerLab
|
||||
- bash -c "$(curl -sL https://get.containerlab.dev)"
|
||||
|
||||
# Clone d'un repo avec des topologies
|
||||
- git clone https://gitea.arnodo.fr/Damien/network-labs.git /root/labs
|
||||
|
||||
# Démarrage d'une topologie par défaut
|
||||
- cd /root/labs && containerlab deploy -t spine-leaf.clab.yml
|
||||
```
|
||||
|
||||
### Utilisation Pratique
|
||||
|
||||
**Créer un lab** :
|
||||
|
||||
```bash
|
||||
# Crée une instance DEV1-S avec 20 GB de stockage
|
||||
./scaleway-instance.sh DEV1-S 20
|
||||
|
||||
# Attend quelques minutes pour cloud-init
|
||||
# Récupère l'IP publique
|
||||
scw instance server list name=NetLab -o json | jq -r '.servers[0].public_ip.address'
|
||||
|
||||
# SSH vers l'instance
|
||||
ssh root@<IP_PUBLIQUE>
|
||||
|
||||
# ContainerLab est déjà lancé !
|
||||
containerlab inspect
|
||||
```
|
||||
|
||||
**Détruire le lab** :
|
||||
|
||||
```bash
|
||||
./scaleway-instance.sh delete
|
||||
```
|
||||
|
||||
### Intégration avec Raycast
|
||||
|
||||
Pour simplifier encore plus, j'ai créé un script Raycast qui me permet de gérer mes instances directement depuis mon Mac.
|
||||
|
||||
**Script Raycast** :
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# @raycast.schemaVersion 1
|
||||
# @raycast.title Scaleway Instance
|
||||
# @raycast.mode silent
|
||||
# @raycast.icon 🖥️
|
||||
# @raycast.argument1 { "type": "text", "placeholder": "Action or instance type" }
|
||||
# @raycast.argument2 { "type": "text", "placeholder": "Volume size", "optional": true }
|
||||
# @raycast.packageName NetLab
|
||||
|
||||
/path/to/scaleway-instance.sh "$1" "$2"
|
||||
```
|
||||
|
||||
**Utilisation** :
|
||||
- `⌘ + Space` → "Scaleway Instance DEV1-S" → Crée l'instance
|
||||
- `⌘ + Space` → "Scaleway Instance delete" → Supprime l'instance
|
||||
|
||||
### Cas d'Usage : Lab BGP/EVPN avec Arista
|
||||
|
||||
**Topologie ContainerLab** (`spine-leaf.clab.yml`) :
|
||||
|
||||
```yaml
|
||||
name: evpn-lab
|
||||
|
||||
topology:
|
||||
nodes:
|
||||
spine1:
|
||||
kind: ceos
|
||||
image: ceos:latest
|
||||
spine2:
|
||||
kind: ceos
|
||||
image: ceos:latest
|
||||
leaf1:
|
||||
kind: ceos
|
||||
image: ceos:latest
|
||||
leaf2:
|
||||
kind: ceos
|
||||
image: ceos:latest
|
||||
|
||||
links:
|
||||
- endpoints: ["spine1:eth1", "leaf1:eth1"]
|
||||
- endpoints: ["spine1:eth2", "leaf2:eth1"]
|
||||
- endpoints: ["spine2:eth1", "leaf1:eth2"]
|
||||
- endpoints: ["spine2:eth2", "leaf2:eth2"]
|
||||
```
|
||||
|
||||
**Workflow** :
|
||||
1. Créer l'instance Scaleway
|
||||
2. Cloud-init déploie la topologie
|
||||
3. Configurer BGP/EVPN via Ansible ou manuellement
|
||||
4. Tester, expérimenter
|
||||
5. Détruire l'instance
|
||||
|
||||
**Coût** : Instance DEV1-S (2 vCPU, 2GB) = ~0.015€/heure. 4 heures de lab = 0.06€.
|
||||
|
||||
## Souveraineté Numérique : Pourquoi C'est Important
|
||||
|
||||
Cette infrastructure hybride reflète une conviction personnelle sur la souveraineté numérique.
|
||||
|
||||
### Le Contexte
|
||||
|
||||
Dans mon travail d'ingénieur réseau, je vois l'importance de la maîtrise de ses infrastructures.
|
||||
|
||||
Choisir Scaleway (groupe Iliad, français) et self-hoster Gitea, c'est :
|
||||
- **Soutenir l'écosystème tech européen**
|
||||
- **Garantir la protection RGPD** : Juridiction française
|
||||
- **Réduire la latence** : Datacenters à Paris
|
||||
- **Comprendre** : Maîtriser sa chaîne complète
|
||||
|
||||
### Apprentissage par la Pratique
|
||||
|
||||
En tant que professionnel du réseau (Arista, BGP/EVPN, automation), self-hoster me permet de :
|
||||
- Appliquer les principes Infrastructure as Code
|
||||
- Comprendre en profondeur les mécanismes CI/CD
|
||||
- Expérimenter sans limite
|
||||
- Reproduire des environnements professionnels
|
||||
|
||||
## Bilan
|
||||
|
||||
### Ce qui Fonctionne Bien
|
||||
|
||||
**Gitea auto-hébergé** :
|
||||
- Très rapide et stable
|
||||
- Proxmox Helper Scripts = installation en 5 minutes
|
||||
- Ansible gère les mises à jour proprement
|
||||
- Grafana surveille tout
|
||||
|
||||
**Wireguard + Nginx Proxy Manager** :
|
||||
- Exposition sécurisée du homelab
|
||||
- Performances excellentes
|
||||
- Configuration simple
|
||||
|
||||
**Labs Scaleway** :
|
||||
- Provisionnement en 3 minutes
|
||||
- Flexibilité totale (taille, durée)
|
||||
- Coûts prévisibles (facturation à l'heure)
|
||||
|
||||
**CI/CD Hugo → Scaleway Object Storage** :
|
||||
- Push to deploy en 2 minutes
|
||||
- Gratuit (quelques centimes/mois pour le stockage)
|
||||
- CDN intégré = site ultra rapide
|
||||
|
||||
### Les Défis
|
||||
|
||||
**Complexité initiale** :
|
||||
- Wireguard + reverse proxy = courbe d'apprentissage
|
||||
- Première configuration Proxmox/LXC = quelques heures
|
||||
|
||||
**Maintenance** :
|
||||
- Responsabilité des mises à jour (heureusement Ansible aide !)
|
||||
- Monitoring à configurer soi-même
|
||||
- Sauvegardes à automatiser
|
||||
|
||||
**Dépendances** :
|
||||
- Si la Dedibox tombe, Gitea n'est plus accessible
|
||||
- Solution : Failover avec une 2e Dedibox ou VPS (à venir)
|
||||
|
||||
## Prochaines Étapes
|
||||
|
||||
- **Haute disponibilité** : Seconde Dedibox pour du failover
|
||||
- **Backup automatique** : Scripts pour sauvegarder Gitea vers Scaleway Object Storage
|
||||
- **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
|
||||
|
||||
Cette infrastructure hybride (homelab Proxmox + cloud Scaleway) offre le meilleur des deux mondes :
|
||||
|
||||
- **Contrôle** : Données sensibles (code, configurations) dans le homelab
|
||||
- **Flexibilité** : Ressources cloud pour les besoins ponctuels
|
||||
- **Apprentissage** : Environnement complet pour expérimenter
|
||||
- **Souveraineté** : Tout hébergé en France, chez des acteurs européens
|
||||
|
||||
Le self-hosting n'est pas qu'une question de coûts (spoiler : je paie autant qu'avant, voire plus), mais d'apprentissage, de maîtrise et de compréhension profonde des systèmes.
|
||||
|
||||
Pour un ingénieur réseau ou DevOps, c'est l'environnement idéal pour reproduire des cas d'usage professionnels et monter en compétences.
|
||||
|
||||
## Ressources
|
||||
|
||||
### Documentation
|
||||
- [Gitea](https://docs.gitea.io/)
|
||||
- [Proxmox Helper Scripts](https://community-scripts.github.io/ProxmoxVE/)
|
||||
- [Scaleway CLI](https://www.scaleway.com/en/cli/)
|
||||
- [ContainerLab](https://containerlab.dev/)
|
||||
- [Nginx Proxy Manager](https://nginxproxymanager.com/)
|
||||
|
||||
### Mes Repos
|
||||
- [Blog Hugo](https://gitea.arnodo.fr/Damien/blog)
|
||||
- [Network Labs](https://gitea.arnodo.fr/Damien/arista-evpn-vxlan-clab) (topologies ContainerLab)
|
||||
- [Scaleway Scripts](https://gitea.arnodo.fr/Damien/scaleway-automation)
|
||||
|
||||
### Communauté
|
||||
- [Proxmox Forum](https://forum.proxmox.com/)
|
||||
- [r/homelab](https://reddit.com/r/homelab)
|
||||
- [ContainerLab Slack](https://containerlab.dev/)
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: "VXLAN"
|
||||
sidebar:
|
||||
open: true
|
||||
cascade:
|
||||
type: docs
|
||||
---
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: "Sécurité"
|
||||
sidebar:
|
||||
open: true
|
||||
cascade:
|
||||
type: docs
|
||||
---
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: "Automatisation réseau"
|
||||
sidebar:
|
||||
open: true
|
||||
cascade:
|
||||
type: docs
|
||||
---
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
title: "Mon Premier Lab"
|
||||
date: 2025-02-14T12:00:00+02:00
|
||||
weight: 2
|
||||
sidebar:
|
||||
open: true
|
||||
cascade:
|
||||
type: docs
|
||||
---
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: "Sécurité"
|
||||
sidebar:
|
||||
open: true
|
||||
cascade:
|
||||
type: docs
|
||||
---
|
||||
|
||||
@@ -116,3 +116,4 @@ hugo: <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="cu
|
||||
html: <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M1.5 0h21l-1.91 21.563L11.977 24l-8.564-2.438L1.5 0zm7.031 9.75l-.232-2.718 10.059.003.23-2.622L5.412 4.41l.698 8.01h9.126l-.326 3.426-2.91.804-2.955-.81-.188-2.11H6.248l.33 4.171L12 19.351l5.379-1.443.744-8.157H8.531z"/></svg>
|
||||
mdbook: <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M22.77 5.343c.023.337 0 .613-.073.817l-4.314 14.227c-.072.252-.24.445-.504.6a1.67 1.67 0 0 1-.805.23H3.772c-1.154 0-1.839-.337-2.079-1.01-.096-.264-.096-.469.012-.625.108-.144.288-.216.553-.216h12.52c.89 0 1.514-.168 1.85-.493.337-.324.686-1.07 1.034-2.21l3.954-13.05c.216-.71.12-1.334-.265-1.875-.384-.54-.937-.817-1.646-.817H8.735c-.12 0-.373.048-.734.132l.012-.048A2.458 2.458 0 0 0 7.33.933a.979.979 0 0 0-.517.168 1.794 1.794 0 0 0-.385.337c-.096.12-.18.264-.276.456a5.76 5.76 0 0 0-.228.517 7.95 7.95 0 0 1-.217.505c-.084.18-.156.324-.24.444-.06.073-.144.18-.24.3-.096.121-.193.241-.265.337a.776.776 0 0 0-.132.265c-.024.084-.012.216.024.384.036.168.048.289.048.373-.036.36-.168.829-.396 1.394-.229.564-.433.973-.613 1.213a5.201 5.201 0 0 1-.312.325c-.169.168-.277.312-.313.444-.036.048-.036.18-.012.409.036.216.048.372.036.456-.036.325-.156.757-.36 1.298a9.47 9.47 0 0 1-.601 1.322c-.024.06-.108.168-.24.336-.133.168-.217.3-.24.409-.025.072-.013.216.011.408.024.193.024.337-.012.433-.072.36-.216.805-.432 1.322-.217.516-.433.949-.65 1.321-.06.097-.131.205-.24.337-.096.132-.18.24-.24.336a.927.927 0 0 0-.12.3.53.53 0 0 0 .048.277c.036.132.048.228.048.313-.012.132-.024.312-.06.528-.024.216-.048.349-.048.385-.216.576-.204 1.19.024 1.826.264.745.745 1.382 1.43 1.899.685.516 1.406.769 2.139.769H17.05c.625 0 1.214-.205 1.767-.625.553-.42.925-.937 1.105-1.55l3.966-13.05c.216-.696.12-1.31-.265-1.862-.204-.3-.48-.505-.853-.649ZM7.16 15.677l1.707-5.143h1.297c.457 0 3.46-.204 3.052 2.103-.408 2.307-2.259 3.028-4.422 3.052-2.162.024-1.634-.012-1.634-.012zm2.283-.721c.565-.012 2.271-.349 2.656-2.055.384-1.706-1.382-1.61-1.382-1.61h-1.07l-1.225 3.665c.012.012.469.012 1.021 0zm-.396-5.78 1.646-5.107h1.178l.096 4.086 2.835-4.086h1.19l-1.634 5.107h-.853l1.502-4.253-2.944 4.253h-.817l-.096-4.205-1.298 4.205z"/></svg>
|
||||
nuxt: <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M13.4642 19.8295h8.9218c.2834 0 .5618-.0723.8072-.2098a1.5899 1.5899 0 0 0 .5908-.5732 1.5293 1.5293 0 0 0 .216-.783 1.529 1.529 0 0 0-.2167-.7828L17.7916 7.4142a1.5904 1.5904 0 0 0-.5907-.573 1.6524 1.6524 0 0 0-.807-.2099c-.2833 0-.5616.0724-.807.2098a1.5904 1.5904 0 0 0-.5907.5731L13.4642 9.99l-2.9954-5.0366a1.5913 1.5913 0 0 0-.591-.573 1.6533 1.6533 0 0 0-.8071-.2098c-.2834 0-.5617.0723-.8072.2097a1.5913 1.5913 0 0 0-.591.573L.2168 17.4808A1.5292 1.5292 0 0 0 0 18.2635c-.0001.2749.0744.545.216.783a1.59 1.59 0 0 0 .5908.5732c.2454.1375.5238.2098.8072.2098h5.6003c2.219 0 3.8554-.9454 4.9813-2.7899l2.7337-4.5922L16.3935 9.99l4.3944 7.382h-5.8586ZM7.123 17.3694l-3.9083-.0009 5.8586-9.8421 2.9232 4.921-1.9572 3.2892c-.7478 1.1967-1.5972 1.6328-2.9163 1.6328z"/></svg>
|
||||
gitea: <svg version="1.1" id="main_outline" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" style="enable-background:new 0 0 640 640;" xml:space="preserve" viewBox="5.67 143.05 628.65 387.55"> <g> <path id="teabag" style="fill:#FFFFFF" d="M395.9,484.2l-126.9-61c-12.5-6-17.9-21.2-11.8-33.8l61-126.9c6-12.5,21.2-17.9,33.8-11.8 c17.2,8.3,27.1,13,27.1,13l-0.1-109.2l16.7-0.1l0.1,117.1c0,0,57.4,24.2,83.1,40.1c3.7,2.3,10.2,6.8,12.9,14.4 c2.1,6.1,2,13.1-1,19.3l-61,126.9C423.6,484.9,408.4,490.3,395.9,484.2z"></path> <g> <g> <path style="fill:#000000" d="M622.7,149.8c-4.1-4.1-9.6-4-9.6-4s-117.2,6.6-177.9,8c-13.3,0.3-26.5,0.6-39.6,0.7c0,39.1,0,78.2,0,117.2 c-5.5-2.6-11.1-5.3-16.6-7.9c0-36.4-0.1-109.2-0.1-109.2c-29,0.4-89.2-2.2-89.2-2.2s-141.4-7.1-156.8-8.5 c-9.8-0.6-22.5-2.1-39,1.5c-8.7,1.8-33.5,7.4-53.8,26.9C-4.9,212.4,6.6,276.2,8,285.8c1.7,11.7,6.9,44.2,31.7,72.5 c45.8,56.1,144.4,54.8,144.4,54.8s12.1,28.9,30.6,55.5c25,33.1,50.7,58.9,75.7,62c63,0,188.9-0.1,188.9-0.1s12,0.1,28.3-10.3 c14-8.5,26.5-23.4,26.5-23.4s12.9-13.8,30.9-45.3c5.5-9.7,10.1-19.1,14.1-28c0,0,55.2-117.1,55.2-231.1 C633.2,157.9,624.7,151.8,622.7,149.8z M125.6,353.9c-25.9-8.5-36.9-18.7-36.9-18.7S69.6,321.8,60,295.4 c-16.5-44.2-1.4-71.2-1.4-71.2s8.4-22.5,38.5-30c13.8-3.7,31-3.1,31-3.1s7.1,59.4,15.7,94.2c7.2,29.2,24.8,77.7,24.8,77.7 S142.5,359.9,125.6,353.9z M425.9,461.5c0,0-6.1,14.5-19.6,15.4c-5.8,0.4-10.3-1.2-10.3-1.2s-0.3-0.1-5.3-2.1l-112.9-55 c0,0-10.9-5.7-12.8-15.6c-2.2-8.1,2.7-18.1,2.7-18.1L322,273c0,0,4.8-9.7,12.2-13c0.6-0.3,2.3-1,4.5-1.5c8.1-2.1,18,2.8,18,2.8 l110.7,53.7c0,0,12.6,5.7,15.3,16.2c1.9,7.4-0.5,14-1.8,17.2C474.6,363.8,425.9,461.5,425.9,461.5z"></path> <path style="fill:#000000" d="M326.8,380.1c-8.2,0.1-15.4,5.8-17.3,13.8c-1.9,8,2,16.3,9.1,20c7.7,4,17.5,1.8,22.7-5.4 c5.1-7.1,4.3-16.9-1.8-23.1l24-49.1c1.5,0.1,3.7,0.2,6.2-0.5c4.1-0.9,7.1-3.6,7.1-3.6c4.2,1.8,8.6,3.8,13.2,6.1 c4.8,2.4,9.3,4.9,13.4,7.3c0.9,0.5,1.8,1.1,2.8,1.9c1.6,1.3,3.4,3.1,4.7,5.5c1.9,5.5-1.9,14.9-1.9,14.9 c-2.3,7.6-18.4,40.6-18.4,40.6c-8.1-0.2-15.3,5-17.7,12.5c-2.6,8.1,1.1,17.3,8.9,21.3c7.8,4,17.4,1.7,22.5-5.3 c5-6.8,4.6-16.3-1.1-22.6c1.9-3.7,3.7-7.4,5.6-11.3c5-10.4,13.5-30.4,13.5-30.4c0.9-1.7,5.7-10.3,2.7-21.3 c-2.5-11.4-12.6-16.7-12.6-16.7c-12.2-7.9-29.2-15.2-29.2-15.2s0-4.1-1.1-7.1c-1.1-3.1-2.8-5.1-3.9-6.3c4.7-9.7,9.4-19.3,14.1-29 c-4.1-2-8.1-4-12.2-6.1c-4.8,9.8-9.7,19.7-14.5,29.5c-6.7-0.1-12.9,3.5-16.1,9.4c-3.4,6.3-2.7,14.1,1.9,19.8 C343.2,346.5,335,363.3,326.8,380.1z"></path> </g> </g> </g> </svg>
|
||||
|
||||
32
hugo.yaml
@@ -13,20 +13,26 @@ menu:
|
||||
- name: Netlab
|
||||
pageRef: /netlab
|
||||
weight: 2
|
||||
- name: Blog
|
||||
pageRef: /blog
|
||||
weight: 3
|
||||
- name: About
|
||||
pageRef: /about
|
||||
weight: 3
|
||||
- name: Search
|
||||
weight: 4
|
||||
- name: Search
|
||||
weight: 5
|
||||
params:
|
||||
type: search
|
||||
- name: GitHub
|
||||
weight: 5
|
||||
url: "https://github.com/darnodo"
|
||||
- name: Gitea
|
||||
weight: 6
|
||||
url: "https://gitea.arnodo.fr/Damien"
|
||||
params:
|
||||
icon: github
|
||||
icon: gitea
|
||||
|
||||
params:
|
||||
theme:
|
||||
default: light
|
||||
displayToggle: true
|
||||
# Navbar
|
||||
navbar:
|
||||
displayTitle: true
|
||||
@@ -43,8 +49,22 @@ params:
|
||||
flexsearch:
|
||||
# index page by: content | summary | heading | title
|
||||
index: heading
|
||||
# Blog
|
||||
blog:
|
||||
list:
|
||||
displayTags: true
|
||||
sortBy: date
|
||||
sortOrder: desc
|
||||
pagerSize: 10
|
||||
article:
|
||||
displayPagination: true
|
||||
|
||||
markup:
|
||||
goldmark:
|
||||
renderer:
|
||||
unsafe: true
|
||||
|
||||
deployment:
|
||||
targets:
|
||||
- name: "notebook-arnodo-fr"
|
||||
URL: "s3://notebook-arnodo-fr?endpoint=https://s3.fr-par.scw.cloud®ion=fr-par"
|
||||
|
||||
188
layouts/shortcodes/tech-banner.html
Normal file
@@ -0,0 +1,188 @@
|
||||
{{- $speed := .Get "speed" | default "30s" -}} {{- $gap := .Get "gap" | default
|
||||
"4rem" -}} {{- $height := .Get "height" | default "80px" -}}
|
||||
|
||||
<div
|
||||
class="tech-banner-wrapper"
|
||||
style="overflow: hidden; width: 100%; position: relative; margin: 2rem 0"
|
||||
>
|
||||
<!-- Gradient overlays for smooth fade effect -->
|
||||
<div
|
||||
style="
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 150px;
|
||||
height: 100%;
|
||||
background: linear-gradient(to right, var(--color-bg), transparent);
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
"
|
||||
></div>
|
||||
<div
|
||||
style="
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 150px;
|
||||
height: 100%;
|
||||
background: linear-gradient(to left, var(--color-bg), transparent);
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
"
|
||||
></div>
|
||||
|
||||
<!-- Scrolling container -->
|
||||
<div
|
||||
class="tech-banner-scroll"
|
||||
style="display: flex; gap: {{ $gap }}; will-change: transform;"
|
||||
>
|
||||
<!-- First set of logos -->
|
||||
<div
|
||||
class="tech-banner-track"
|
||||
style="display: flex; gap: {{ $gap }}; align-items: center; flex-shrink: 0; animation: scroll-left {{ $speed }} linear infinite;"
|
||||
>
|
||||
<img
|
||||
src="/images/tech-banner/arista-color.svg"
|
||||
alt="Arista"
|
||||
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/aws-color.svg"
|
||||
alt="AWS"
|
||||
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/containerlab-color.svg"
|
||||
alt="ContainerLab"
|
||||
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/k8s-color.svg"
|
||||
alt="Kubernetes"
|
||||
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/nokia-color.svg"
|
||||
alt="Nokia"
|
||||
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/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"
|
||||
style="height: {{ $height }}; width: 200px; object-fit: contain; 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';"
|
||||
/>
|
||||
</div>
|
||||
<!-- Duplicate set for seamless loop -->
|
||||
<div
|
||||
class="tech-banner-track"
|
||||
style="display: flex; gap: {{ $gap }}; align-items: center; flex-shrink: 0; animation: scroll-left {{ $speed }} linear infinite;"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<img
|
||||
src="/images/tech-banner/arista-color.svg"
|
||||
alt="Arista"
|
||||
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/aws-color.svg"
|
||||
alt="AWS"
|
||||
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/containerlab-color.svg"
|
||||
alt="ContainerLab"
|
||||
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/k8s-color.svg"
|
||||
alt="Kubernetes"
|
||||
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/nokia-color.svg"
|
||||
alt="Nokia"
|
||||
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/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"
|
||||
style="height: {{ $height }}; width: 200px; object-fit: contain; 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';"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
:root {
|
||||
--color-bg: #ffffff;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--color-bg: #111111;
|
||||
}
|
||||
}
|
||||
|
||||
[data-theme="dark"] {
|
||||
--color-bg: #111111;
|
||||
}
|
||||
|
||||
[data-theme="light"] {
|
||||
--color-bg: #ffffff;
|
||||
}
|
||||
|
||||
@keyframes scroll-left {
|
||||
0% {
|
||||
transform: translateX(0);
|
||||
}
|
||||
100% {
|
||||
transform: translateX(calc(-100% - {{$gap}}));
|
||||
}
|
||||
}
|
||||
|
||||
.tech-banner-track:hover {
|
||||
animation-play-state: paused;
|
||||
}
|
||||
|
||||
.tech-banner-scroll:hover .tech-banner-track {
|
||||
animation-play-state: paused;
|
||||
}
|
||||
</style>
|
||||
BIN
static/images/blog.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
29
static/images/tech-banner/arista-color.svg
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="1115px" height="175px" viewBox="0 0 1115 175" enable-background="new 0 0 1115 175" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#16325B" d="M391.027,103.426c36.994,0,55.491-25.688,55.491-51.378c0-25.688-18.498-50.353-57.546-50.353
|
||||
c-28.773-1.029-134.617-1.029-134.617-1.029v173.668h32.879V28.413c25.691,0,90.43,0,103.79,0
|
||||
c18.496,0,27.745,6.163,27.745,23.635c0,14.385-9.247,22.606-26.718,22.606h-86.315l102.761,98.648h40.078l-73.991-71.932
|
||||
C381.78,103.426,390,103.426,391.027,103.426z"/>
|
||||
<rect x="480.429" y="0.669" fill="#16325B" width="31.856" height="173.665"/>
|
||||
<polygon fill="#16325B" points="916.137,27.387 916.137,0.669 848.313,0.669 816.457,0.669 759.938,0.669 741.441,27.387
|
||||
816.457,27.387 816.457,174.334 848.313,174.334 848.313,27.387 "/>
|
||||
<path fill="#16325B" d="M678.756,72.6c-16.441,0-57.543,0-81.182,0c-16.438,0-25.689-7.192-25.689-21.58
|
||||
c0-16.44,11.305-23.633,25.689-23.633c22.609,0,110.98,0,110.98,0l14.387-26.718c0,0-107.898,0-126.395,0
|
||||
c-28.775,0-52.407,21.577-52.407,51.382c0,26.715,22.608,48.294,53.434,48.294c17.473,0,69.877,0,81.182,0
|
||||
c18.5,0,28.775,8.224,28.775,23.637c0,13.357-11.305,22.608-28.775,22.608H566.748l-16.44,27.744c0,0,98.649,0,132.558,0
|
||||
c33.912,0,52.406-24.658,52.406-52.404C735.275,96.233,713.695,72.6,678.756,72.6z"/>
|
||||
<path fill="#16325B" d="M104.325,11.972C97.133,23.272,1.564,174.334,1.564,174.334h33.91l31.858-51.381h67.822l17.47-27.746
|
||||
H84.8l36.993-59.602l86.321,137.697h33.911c0,0-94.542-149.001-102.765-162.359C130.013-2.413,113.574-1.387,104.325,11.972z"/>
|
||||
<path fill="#16325B" d="M1079.523,174.334h33.912c0,0-94.539-149.003-102.764-162.362c-9.244-15.415-25.689-14.385-34.938-1.028
|
||||
c-7.195,11.301-102.762,162.359-102.762,162.359h33.91l31.855-51.378h68.852l17.467-27.746h-67.82l36.996-59.603
|
||||
L1079.523,174.334z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
38
static/images/tech-banner/aws-color.svg
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 304 182" style="enable-background:new 0 0 304 182;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#252F3E;}
|
||||
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#FF9900;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M86.4,66.4c0,3.7,0.4,6.7,1.1,8.9c0.8,2.2,1.8,4.6,3.2,7.2c0.5,0.8,0.7,1.6,0.7,2.3c0,1-0.6,2-1.9,3l-6.3,4.2
|
||||
c-0.9,0.6-1.8,0.9-2.6,0.9c-1,0-2-0.5-3-1.4C76.2,90,75,88.4,74,86.8c-1-1.7-2-3.6-3.1-5.9c-7.8,9.2-17.6,13.8-29.4,13.8
|
||||
c-8.4,0-15.1-2.4-20-7.2c-4.9-4.8-7.4-11.2-7.4-19.2c0-8.5,3-15.4,9.1-20.6c6.1-5.2,14.2-7.8,24.5-7.8c3.4,0,6.9,0.3,10.6,0.8
|
||||
c3.7,0.5,7.5,1.3,11.5,2.2v-7.3c0-7.6-1.6-12.9-4.7-16c-3.2-3.1-8.6-4.6-16.3-4.6c-3.5,0-7.1,0.4-10.8,1.3c-3.7,0.9-7.3,2-10.8,3.4
|
||||
c-1.6,0.7-2.8,1.1-3.5,1.3c-0.7,0.2-1.2,0.3-1.6,0.3c-1.4,0-2.1-1-2.1-3.1v-4.9c0-1.6,0.2-2.8,0.7-3.5c0.5-0.7,1.4-1.4,2.8-2.1
|
||||
c3.5-1.8,7.7-3.3,12.6-4.5c4.9-1.3,10.1-1.9,15.6-1.9c11.9,0,20.6,2.7,26.2,8.1c5.5,5.4,8.3,13.6,8.3,24.6V66.4z M45.8,81.6
|
||||
c3.3,0,6.7-0.6,10.3-1.8c3.6-1.2,6.8-3.4,9.5-6.4c1.6-1.9,2.8-4,3.4-6.4c0.6-2.4,1-5.3,1-8.7v-4.2c-2.9-0.7-6-1.3-9.2-1.7
|
||||
c-3.2-0.4-6.3-0.6-9.4-0.6c-6.7,0-11.6,1.3-14.9,4c-3.3,2.7-4.9,6.5-4.9,11.5c0,4.7,1.2,8.2,3.7,10.6
|
||||
C37.7,80.4,41.2,81.6,45.8,81.6z M126.1,92.4c-1.8,0-3-0.3-3.8-1c-0.8-0.6-1.5-2-2.1-3.9L96.7,10.2c-0.6-2-0.9-3.3-0.9-4
|
||||
c0-1.6,0.8-2.5,2.4-2.5h9.8c1.9,0,3.2,0.3,3.9,1c0.8,0.6,1.4,2,2,3.9l16.8,66.2l15.6-66.2c0.5-2,1.1-3.3,1.9-3.9c0.8-0.6,2.2-1,4-1
|
||||
h8c1.9,0,3.2,0.3,4,1c0.8,0.6,1.5,2,1.9,3.9l15.8,67l17.3-67c0.6-2,1.3-3.3,2-3.9c0.8-0.6,2.1-1,3.9-1h9.3c1.6,0,2.5,0.8,2.5,2.5
|
||||
c0,0.5-0.1,1-0.2,1.6c-0.1,0.6-0.3,1.4-0.7,2.5l-24.1,77.3c-0.6,2-1.3,3.3-2.1,3.9c-0.8,0.6-2.1,1-3.8,1h-8.6c-1.9,0-3.2-0.3-4-1
|
||||
c-0.8-0.7-1.5-2-1.9-4L156,23l-15.4,64.4c-0.5,2-1.1,3.3-1.9,4c-0.8,0.7-2.2,1-4,1H126.1z M254.6,95.1c-5.2,0-10.4-0.6-15.4-1.8
|
||||
c-5-1.2-8.9-2.5-11.5-4c-1.6-0.9-2.7-1.9-3.1-2.8c-0.4-0.9-0.6-1.9-0.6-2.8v-5.1c0-2.1,0.8-3.1,2.3-3.1c0.6,0,1.2,0.1,1.8,0.3
|
||||
c0.6,0.2,1.5,0.6,2.5,1c3.4,1.5,7.1,2.7,11,3.5c4,0.8,7.9,1.2,11.9,1.2c6.3,0,11.2-1.1,14.6-3.3c3.4-2.2,5.2-5.4,5.2-9.5
|
||||
c0-2.8-0.9-5.1-2.7-7c-1.8-1.9-5.2-3.6-10.1-5.2L246,52c-7.3-2.3-12.7-5.7-16-10.2c-3.3-4.4-5-9.3-5-14.5c0-4.2,0.9-7.9,2.7-11.1
|
||||
c1.8-3.2,4.2-6,7.2-8.2c3-2.3,6.4-4,10.4-5.2c4-1.2,8.2-1.7,12.6-1.7c2.2,0,4.5,0.1,6.7,0.4c2.3,0.3,4.4,0.7,6.5,1.1
|
||||
c2,0.5,3.9,1,5.7,1.6c1.8,0.6,3.2,1.2,4.2,1.8c1.4,0.8,2.4,1.6,3,2.5c0.6,0.8,0.9,1.9,0.9,3.3v4.7c0,2.1-0.8,3.2-2.3,3.2
|
||||
c-0.8,0-2.1-0.4-3.8-1.2c-5.7-2.6-12.1-3.9-19.2-3.9c-5.7,0-10.2,0.9-13.3,2.8c-3.1,1.9-4.7,4.8-4.7,8.9c0,2.8,1,5.2,3,7.1
|
||||
c2,1.9,5.7,3.8,11,5.5l14.2,4.5c7.2,2.3,12.4,5.5,15.5,9.6c3.1,4.1,4.6,8.8,4.6,14c0,4.3-0.9,8.2-2.6,11.6
|
||||
c-1.8,3.4-4.2,6.4-7.3,8.8c-3.1,2.5-6.8,4.3-11.1,5.6C264.4,94.4,259.7,95.1,254.6,95.1z"/>
|
||||
<g>
|
||||
<path class="st1" d="M273.5,143.7c-32.9,24.3-80.7,37.2-121.8,37.2c-57.6,0-109.5-21.3-148.7-56.7c-3.1-2.8-0.3-6.6,3.4-4.4
|
||||
c42.4,24.6,94.7,39.5,148.8,39.5c36.5,0,76.6-7.6,113.5-23.2C274.2,133.6,278.9,139.7,273.5,143.7z"/>
|
||||
<path class="st1" d="M287.2,128.1c-4.2-5.4-27.8-2.6-38.5-1.3c-3.2,0.4-3.7-2.4-0.8-4.5c18.8-13.2,49.7-9.4,53.3-5
|
||||
c3.6,4.5-1,35.4-18.6,50.2c-2.7,2.3-5.3,1.1-4.1-1.9C282.5,155.7,291.4,133.4,287.2,128.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
33
static/images/tech-banner/containerlab-color.svg
Normal file
@@ -0,0 +1,33 @@
|
||||
<svg id="svg" width="218.89" height="198.42" version="1.1" viewBox="0 0 178.89 153.42" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(-104.26 -97.654)">
|
||||
<g fill="none" stroke="#00c9ff" stroke-width=".8">
|
||||
<path d="m197.09 165.86a1.7578 1.7829 0 0 1-1.7578 1.7829 1.7578 1.7829 0 0 1-1.7578-1.7829 1.7578 1.7829 0 0 1 1.7578-1.7829 1.7578 1.7829 0 0 1 1.7578 1.7829"/>
|
||||
<path d="m189.62 161.66a2.7588 2.653 0 0 1-2.7588 2.653 2.7588 2.653 0 0 1-2.7588-2.653 2.7588 2.653 0 0 1 2.7588-2.653 2.7588 2.653 0 0 1 2.7588 2.653"/>
|
||||
<path d="m196.49 152.41a4.1043 3.961 0 0 1-4.1043 3.961 4.1043 3.961 0 0 1-4.1043-3.961 4.1043 3.961 0 0 1 4.1043-3.961 4.1043 3.961 0 0 1 4.1043 3.961"/>
|
||||
</g>
|
||||
<path d="m184.69 168.96c-0.505 0.213-1.528 0.852-2.273 1.42-1.43 1.091-3.156 1.362-5.308 0.834-1.553-0.381-1.663 0.068-0.59 2.401 6.631 14.42 26.848 14.896 33.88 0.799 1.579-3.165 1.433-3.72-0.818-3.098-1.9 0.524-3.18 0.227-4.972-1.157-2.436-1.881-5.696-1.883-7.396-4e-3 -1.702 1.881-5.361 1.793-7.477-0.178-1.199-1.118-3.639-1.609-5.046-1.017" fill="#00c9ff"/>
|
||||
</g>
|
||||
<g transform="translate(-104.26 -97.654)">
|
||||
<g aria-label="CONTAINERlab">
|
||||
<g fill="#001135">
|
||||
<path d="m121.53 224.9q-2.712 0-4.2 1.896-1.488 1.872-1.488 5.568 0 3.792 1.488 5.544 1.488 1.728 4.2 1.728 0.792 0 1.44-0.144 0.672-0.144 1.224-0.36t0.984-0.48 0.744-0.504l0.696 1.08q-0.816 0.696-2.16 1.224-1.32 0.528-3.024 0.528-3.672 0-5.424-2.232t-1.752-6.384q0-1.968 0.432-3.576 0.456-1.632 1.344-2.784 0.912-1.152 2.256-1.776 1.368-0.648 3.192-0.648 0.984 0 1.8 0.192t1.44 0.48q0.624 0.264 1.056 0.576 0.456 0.288 0.72 0.528l-0.768 1.08q-0.6-0.504-1.632-1.008-1.032-0.528-2.568-0.528z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
<path d="m129.19 232.27q0-1.968 0.456-3.576 0.48-1.632 1.392-2.784t2.256-1.776q1.344-0.648 3.072-0.648t3.048 0.648q1.344 0.624 2.232 1.776 0.912 1.152 1.368 2.784 0.48 1.608 0.48 3.576t-0.48 3.6q-0.456 1.608-1.368 2.784-0.888 1.152-2.232 1.8-1.344 0.624-3.072 0.624t-3.072-0.624q-1.344-0.648-2.256-1.8-0.888-1.176-1.368-2.784-0.456-1.632-0.456-3.6zm1.584 0q0 1.68 0.336 3.048 0.336 1.344 1.032 2.328 0.696 0.96 1.728 1.488 1.056 0.528 2.472 0.528t2.448-0.528q1.056-0.528 1.752-1.488 0.696-0.984 1.032-2.328 0.336-1.368 0.336-3.048t-0.336-3.024q-0.336-1.368-1.032-2.328t-1.752-1.488q-1.032-0.528-2.448-0.528t-2.472 0.528q-1.032 0.528-1.728 1.488t-1.032 2.328q-0.336 1.344-0.336 3.024z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
<path d="m149.63 226.34v14.376h-1.464v-16.872h1.584l8.376 14.304v-14.304h1.464v16.872h-1.464z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
<path d="m168.63 225.26h-5.184v-1.416h11.856v1.416h-5.16v15.456h-1.512z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
<path d="m185 236.01h-6.936l-1.512 4.704h-1.44l5.64-16.872h1.68l5.664 16.872h-1.56zm-6.528-1.32h6.096l-3.024-9.12z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
<path d="m193.05 240.72h-1.512v-16.872h1.512z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
<path d="m199.71 226.34v14.376h-1.464v-16.872h1.584l8.376 14.304v-14.304h1.464v16.872h-1.464z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
<path d="m214.89 223.85h9.312v1.392h-7.8v6h6.096v1.392h-6.096v6.696h8.04v1.392h-9.552z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
<path d="m238.98 240.72h-1.752l-4.128-6.936h-3.408v6.936h-1.488v-16.872h4.44q1.512 0 2.52 0.432 1.032 0.432 1.656 1.152 0.624 0.696 0.888 1.584 0.288 0.864 0.288 1.752 0 0.936-0.264 1.704t-0.72 1.344-1.08 0.984q-0.6 0.408-1.272 0.648zm-2.472-11.88q0-1.68-0.96-2.664-0.936-0.984-3.072-0.984h-2.784v7.272h2.88q2.04 0 2.976-0.984 0.96-0.984 0.96-2.64z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
</g>
|
||||
<g fill="#00c9ff">
|
||||
<path d="m242.42 222.72h2.136v18h-2.136z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
<path d="m255.97 235.13q-0.024 0-0.312-0.048t-0.72-0.072q-0.432-0.048-0.936-0.072-0.504-0.048-0.936-0.048-0.768 0-1.32 0.192-0.528 0.192-0.864 0.528-0.336 0.312-0.504 0.744-0.144 0.432-0.144 0.936 0 1.032 0.672 1.536 0.696 0.504 1.8 0.504 0.6 0 1.176-0.192t1.032-0.528q0.48-0.36 0.768-0.816 0.288-0.48 0.288-1.056zm0.144 5.592-0.096-1.344q-0.552 0.768-1.608 1.224-1.056 0.432-2.184 0.432-0.72 0-1.44-0.192t-1.296-0.624-0.96-1.152q-0.36-0.72-0.36-1.776 0-1.848 1.2-2.952t3.6-1.104q0.384 0 0.864 0.024t0.912 0.072q0.432 0.024 0.768 0.072 0.336 0.024 0.456 0.048v-0.744q0-1.32-0.792-1.896-0.768-0.576-2.208-0.576-1.296 0-2.208 0.288-0.888 0.288-1.296 0.528l-0.648-1.512q0.216-0.144 0.6-0.336t0.936-0.36q0.576-0.192 1.296-0.312 0.744-0.12 1.656-0.12 2.184 0 3.456 1.08 1.272 1.056 1.272 3.096v8.136z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
<path d="m262.19 222.72h2.136v7.488q0.096-0.216 0.36-0.504 0.288-0.312 0.744-0.6t1.08-0.48q0.624-0.216 1.44-0.216 1.32 0 2.304 0.48t1.632 1.32 0.96 1.968q0.312 1.104 0.312 2.4 0 1.776-0.48 3-0.48 1.2-1.248 1.944t-1.752 1.08q-0.96 0.312-1.944 0.312-0.72 0-1.296-0.144-0.552-0.12-0.984-0.312t-0.744-0.408q-0.288-0.216-0.456-0.408l-0.096 1.08h-1.968zm5.256 16.344q1.608 0 2.544-1.056 0.96-1.08 0.96-3.432 0-0.912-0.192-1.68-0.192-0.792-0.6-1.344-0.408-0.576-1.032-0.888-0.6-0.312-1.44-0.312-1.656 0-2.52 1.152t-0.864 3.552v2.616q0.336 0.456 1.128 0.936 0.816 0.456 2.016 0.456z" style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="translate(-104.26 -97.654)">
|
||||
<path d="m183.88 108.03c-0.905 0.306-3.497 1.651-5.761 2.99-3.853 2.278-11.013 6.385-15.117 8.672-8.91 4.965-12.222 7.24-13.6 9.34l-1.4 2.135v48l1.495 2.234c0.981 1.466 2.149 2.604 3.4 3.311 1.048 0.593 2.175 1.249 2.505 1.457 1.427 0.901 6.882 3.998 7.041 3.998 0.096 0 0.936 0.49 1.867 1.09 0.931 0.599 2.068 1.293 2.527 1.543 5.118 2.775 6.456 3.543 6.996 4.015 0.348 0.304 0.74 0.552 0.873 0.552 0.212 0 9.511 5.359 11.096 6.393 5.064 3.308 9.284 3.556 14.2 0.837 1.76-0.974 3.56-1.969 4-2.211s1.571-0.936 2.513-1.542c0.942-0.607 2.472-1.495 3.4-1.974s3.257-1.823 5.175-2.987 3.571-2.116 3.672-2.116c0.102 0 2.852-1.576 6.112-3.503 3.261-1.927 6.572-3.841 7.359-4.254 3.027-1.588 4.616-2.952 5.869-5.041l1.3-2.167-4e-3 -23.617-4e-3 -23.618-1.184-2.066c-0.652-1.136-1.865-2.541-2.697-3.121-1.795-1.254-11.567-6.951-17.111-9.976-0.44-0.241-1.07-0.642-1.4-0.892-0.33-0.251-1.5-0.935-2.6-1.522-1.1-0.586-2.353-1.281-2.785-1.544-8.786-5.357-11.014-5.889-12.998-3.103-0.792 1.112-0.817 1.669-0.817 18.206v17.059l1.5 0.597c4.535 1.807 5.276 2.209 7.885 4.278 2.305 1.829 6.8138 8.3577 6.8138 9.5617 0 0.294-0.3468-0.45073-0.0378 0.0363 2.087 3.297 1.569 11.373-1.053 16.415-11.76 22.613-45.493 10.5-40.146-14.417 1.433-6.678 10.132-15.569 15.126-15.712 1.959-0.0561 1.912-0.784 1.912-17.909 0-17.017-0.033-17.352-1.859-18.936-1.119-0.97-2.246-1.106-4.063-0.492m1.577 15.374c0.012 5.81 4e-3 12.291-0.017 14.402l-0.038 3.839-2.978 1.472c-24.133 11.927-15.697 48.374 11.178 48.29 27.377-0.085 35.47-36.1 10.913-48.565l-2.513-1.275v-29.2l0.979 0.109c0.538 0.06 1.258 0.35 1.6 0.644 0.341 0.293 1.855 1.203 3.364 2.021 1.508 0.818 3.896 2.193 5.307 3.056 1.41 0.864 2.635 1.57 2.723 1.57 0.256 0 13.012 7.427 15.599 9.082 4.237 2.712 4.013 1.291 4.122 26.118l0.095 21.4-0.925 1.8c-0.913 1.775-2.523 3.137-5.664 4.789-1.661 0.873-2.502 1.365-4.198 2.454-0.551 0.354-2.082 1.239-3.402 1.966-3.727 2.053-4.401 2.44-10.8 6.195-3.3 1.937-6.72 3.909-7.6 4.382s-3.058 1.705-4.839 2.737c-4.924 2.853-5.013 2.831-16.36-4.006-0.44-0.265-1.234-0.677-1.764-0.914-0.529-0.237-1.753-0.965-2.72-1.617-0.966-0.652-1.893-1.186-2.059-1.186s-1.192-0.569-2.28-1.265c-2.108-1.349-9.385-5.535-9.622-5.535-0.077 0-1.093-0.585-2.258-1.3s-2.473-1.518-2.908-1.785c-0.434-0.267-1.56-0.886-2.501-1.376s-2.201-1.532-2.8-2.315l-1.089-1.424v-45.62l0.91-1.156c0.844-1.073 5.119-4.187 5.783-4.213 0.161-6e-3 1.469-0.731 2.907-1.611s2.708-1.6 2.823-1.6 0.697-0.335 1.293-0.744c1.13-0.775 10.813-6.383 14.284-8.271 1.1-0.599 2.27-1.317 2.6-1.596 0.744-0.628 2.094-0.941 2.517-0.583 0.174 0.147 0.326 5.021 0.338 10.831" fill="#001135" fill-rule="evenodd"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.7 KiB |
27
static/images/tech-banner/k8s-color.svg
Normal file
|
After Width: | Height: | Size: 11 KiB |
1
static/images/tech-banner/nokia-color.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="301.178" viewBox="0 0 338.667 79.687" fill="#005aff" xmlns:v="https://vecta.io/nano"><path d="M114.194 1.145c-21.865 0-38.831 15.914-38.831 38.698 0 23.81 16.965 38.699 38.831 38.698s38.866-14.889 38.831-38.698c-.032-21.587-16.965-38.698-38.831-38.698zm0 10.654c15.258 0 27.627 11.484 27.627 28.044 0 16.867-12.369 28.045-27.627 28.045S86.567 56.709 86.567 39.843c0-16.561 12.369-28.044 27.627-28.044zm119.913-9.376v74.839h11.224V2.423zm-30.985 0l-41.655 37.419 41.655 37.42h16.702l-41.718-37.42 41.718-37.419zM296.843 0l-6.092 11.252 20.667 38.388h-41.447l-14.953 27.623h12.348l9.03-16.573h40.895l9.029 16.573h12.347zM0 0v77.263h11.455v-51.06L70.98 79.686V63.667z"/></svg>
|
||||
|
After Width: | Height: | Size: 734 B |
27
static/images/tech-banner/proxmox-color.svg
Normal 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 |
13
static/images/tech-banner/scaleway-color.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg width="410" height="80" viewBox="0 0 410 80" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M24.9107 54.3209C24.9274 56.8686 27.0181 58.9206 29.5804 58.9042L42.1861 58.8841C45.0739 58.5267 47.2897 56.164 47.4468 53.2747V35.2209C47.4468 32.6897 45.3831 30.6377 42.8374 30.6377C40.2917 30.6377 38.228 32.6897 38.228 35.2209V46.6889C38.228 48.3397 36.8821 49.6779 35.2219 49.6779H29.5202C26.9579 49.6944 24.8942 51.7731 24.9107 54.3209Z" fill="#521094"/>
|
||||
<path d="M22.035 45.4135C19.4893 45.4135 17.4256 43.3616 17.4256 40.8304V22.7666C17.5772 19.8767 19.7889 17.5098 22.6763 17.1472H35.292C37.8416 17.1523 39.9179 19.1858 39.9616 21.7204C39.9749 22.9464 39.4958 24.1271 38.6305 25.0005C37.7652 25.874 36.5852 26.3681 35.3522 26.3734H29.6405C27.9803 26.3734 26.6344 27.7116 26.6344 29.3624V40.8304C26.6344 43.3577 24.5768 45.4081 22.035 45.4135Z" fill="#521094"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.4796 4.55169e-05H37.3562C44.5954 -0.0131325 51.5429 2.83563 56.6684 7.91884C61.7938 13.002 64.6767 19.9027 64.682 27.1007V63.2382C63.944 70.0767 58.4198 75.4272 51.5252 75.9815H27.3358C20.0878 75.992 13.1333 73.1359 8.00535 68.0428C2.87745 62.9496 -0.00266304 56.0377 1.84766e-06 48.831V14.4172C0.00551173 6.4649 6.48177 0.0165653 14.4796 4.55169e-05ZM50.1458 14.5586C46.7362 11.1591 42.1046 9.25081 37.2761 9.25614L14.8303 9.21629C11.7215 9.25996 9.22756 11.7841 9.23882 14.8755V48.6616C9.2362 53.4532 11.1494 58.0494 14.5569 61.4375C17.9645 64.8257 22.5869 66.728 27.4059 66.7254H50.6333C53.0728 66.3869 55.015 64.5241 55.4433 62.1123V27.3697C55.4618 22.5687 53.5554 17.9582 50.1458 14.5586Z" fill="#521094"/>
|
||||
<path d="M104.493 67.7317C100.27 67.7021 96.1195 66.6378 92.4086 64.6331C88.5532 62.6416 85.2129 59.7909 82.6487 56.3036C82.3105 55.8858 82.1561 55.35 82.2202 54.8175C82.2843 54.285 82.5616 53.8006 82.9894 53.474L87.6589 49.3491C88.0366 49.0076 88.5312 48.8223 89.0417 48.831H89.3824C89.9862 48.9245 90.5216 49.2686 90.8554 49.7775C92.4311 52.3094 94.5919 54.4307 97.1583 55.9648C99.6108 57.4255 102.416 58.1969 105.275 58.1967C108.381 58.1967 110.716 57.5889 112.179 56.3036C113.616 55.0959 114.387 53.278 114.253 51.4115C114.408 49.4054 113.571 47.45 112.009 46.1708C110.192 44.7958 107.256 43.5072 103.201 42.3049C91.1761 39.3856 85.1638 33.7164 85.1638 25.3671C85.1638 20.216 86.8873 16.1808 90.3444 13.3511C93.8014 10.5215 98.2906 9.22626 103.992 9.22626C111.809 8.99634 119.263 12.5093 124.033 18.6716C124.739 19.5593 124.625 20.8408 123.773 21.5909L119.233 25.377C118.86 25.7249 118.362 25.9112 117.851 25.8951H117.59C116.999 25.8392 116.463 25.5253 116.127 25.0383C114.738 23.0268 112.908 21.3543 110.776 20.1462C108.661 19.0881 106.32 18.5549 103.952 18.5919C101.601 18.4991 99.2774 19.1288 97.2986 20.3953C95.8526 21.4259 95.0124 23.1004 95.054 24.8689C94.9621 26.6539 95.7328 28.3752 97.1282 29.5019C98.7716 30.8769 101.708 31.9928 105.846 33.019C111.467 34.5733 115.866 36.6258 119.063 39.296C122.43 42.2153 124.163 46.2704 124.163 51.4016C124.179 54.4298 123.275 57.3923 121.568 59.9004C119.831 62.4462 117.397 64.4445 114.554 65.6593C111.406 67.1128 107.963 67.8221 104.493 67.7317Z" fill="#521094"/>
|
||||
<path d="M149.205 67.9011C145.557 67.9905 141.961 67.036 138.843 65.1511C135.81 63.3472 133.354 60.725 131.759 57.5889C130.027 54.247 129.166 50.5268 129.254 46.7686C129.157 43.038 130.019 39.3444 131.759 36.0379C133.359 32.908 135.814 30.2903 138.843 28.4856C141.961 26.6794 145.506 25.7303 149.114 25.7357C152.134 25.6691 155.117 26.4088 157.752 27.8778C160.285 29.3689 162.512 31.3228 164.315 33.6367C165.002 34.5447 164.852 35.8286 163.975 36.556L160.177 39.5451C159.797 39.8179 159.343 39.9707 158.874 39.9834H158.534C157.97 39.903 157.467 39.5878 157.151 39.1166C155.466 36.3527 152.455 34.6612 149.205 34.653C147.321 34.6582 145.474 35.1638 143.854 36.1176C142.227 37.1265 140.934 38.5886 140.136 40.3222C138.322 44.427 138.322 49.1001 140.136 53.205C140.931 54.9639 142.223 56.4557 143.854 57.4992C145.437 58.5355 147.311 59.0448 149.205 58.9539C150.933 59.0546 152.658 58.7115 154.215 57.9575C155.628 57.1916 156.864 56.1394 157.842 54.8688C158.537 54.0159 159.771 53.8301 160.688 54.4404L164.756 57.27C165.214 57.5893 165.525 58.0765 165.621 58.6242C165.717 59.172 165.59 59.7351 165.267 60.1893C165.27 60.2121 165.263 60.2351 165.248 60.2523C165.232 60.2694 165.21 60.2792 165.187 60.279C163.312 62.5875 160.952 64.4611 158.273 65.7689C155.462 67.1814 152.354 67.9121 149.205 67.9011Z" fill="#521094"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M170.628 57.5889C173.948 64.0489 180.689 68.0542 187.984 67.9011C190.817 67.9399 193.614 67.261 196.11 65.9283C196.892 65.46 197.663 64.9818 198.445 64.4637V64.5533C198.461 65.684 199.382 66.5951 200.519 66.6058H205.7C206.837 66.5951 207.758 65.684 207.774 64.5533V28.9938C207.758 27.8614 206.839 26.9474 205.7 26.9313H200.509C199.37 26.9474 198.451 27.8614 198.435 28.9938V29.1731C197.685 28.5749 196.876 28.0542 196.02 27.6188C193.47 26.3623 190.659 25.7174 187.813 25.7357C180.569 25.598 173.887 29.6036 170.628 36.0379C167.251 42.8292 167.251 50.7977 170.628 57.5889ZM182.543 36.1276C184.129 35.1626 185.954 34.6554 187.813 34.663C189.747 34.5783 191.657 35.1202 193.254 36.2073C194.859 37.2433 196.143 38.7024 196.962 40.4218C198.782 44.522 198.782 49.1945 196.962 53.2946C196.177 55.057 194.888 56.5505 193.254 57.5889C191.6 58.5412 189.725 59.0462 187.813 59.0535C185.943 59.1455 184.094 58.6316 182.543 57.5889C180.909 56.5484 179.617 55.0558 178.825 53.2946C177.86 51.256 177.39 49.0208 177.452 46.7686C177.427 44.5487 177.896 42.3508 178.825 40.3322C179.68 38.6361 180.96 37.1879 182.543 36.1276Z" fill="#521094"/>
|
||||
<path d="M216.662 9.52515H221.843C222.982 9.54121 223.901 10.4553 223.917 11.5876V64.5733C223.901 65.7056 222.982 66.6196 221.843 66.6357H216.662C215.523 66.6196 214.604 65.7056 214.588 64.5733V11.5876C214.568 11.0348 214.78 10.4987 215.174 10.1075C215.567 9.71639 216.106 9.50544 216.662 9.52515Z" fill="#521094"/>
|
||||
<path d="M305.423 65.2408C305.673 66.128 306.502 66.7295 307.427 66.6955L312.768 66.6855C313.681 66.6792 314.488 66.0936 314.772 65.2308L326.516 29.6513C326.853 28.6109 326.324 27.4884 325.304 27.0808C325.025 26.987 324.736 26.9268 324.442 26.9014H319.512C318.597 26.9122 317.791 27.5013 317.508 28.366L310.424 50.2857L303.409 28.366C303.164 27.4749 302.334 26.8685 301.405 26.9014H296.305C295.39 26.9122 294.584 27.5013 294.301 28.366L287.026 50.5547L279.851 28.3959C279.605 27.5047 278.776 26.8984 277.847 26.9313H272.366C271.977 26.9353 271.594 27.0237 271.244 27.1904C270.351 27.6733 269.93 28.7194 270.242 29.6812L282.076 65.2408C282.325 66.128 283.154 66.7295 284.08 66.6955H289.26C290.164 66.7394 290.985 66.1761 291.264 65.3205L298.599 44.0286L305.423 65.2408Z" fill="#521094"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M347.589 67.9011C340.299 68.0398 333.565 64.0387 330.234 57.5889C326.868 50.7952 326.868 42.8316 330.234 36.0379C333.509 29.5756 340.233 25.5656 347.509 25.7357C350.336 25.7447 353.12 26.428 355.626 27.7284C356.481 28.1616 357.29 28.679 358.041 29.2727V29.1034C358.05 27.953 358.959 27.0093 360.115 26.9512H365.386C366.525 26.9673 367.444 27.8814 367.46 29.0137V64.5733C367.444 65.7039 366.523 66.615 365.386 66.6257H360.205C359.068 66.615 358.147 65.7039 358.131 64.5733V64.4836C357.383 65.0178 356.603 65.5068 355.796 65.9482C353.265 67.2633 350.445 67.9343 347.589 67.9011ZM347.509 34.663C345.65 34.6554 343.825 35.1626 342.238 36.1276C340.654 37.1855 339.373 38.6343 338.521 40.3322C337.546 42.336 337.072 44.5438 337.138 46.7686C337.079 49.0215 337.553 51.2568 338.521 53.2946C339.313 55.0558 340.605 56.5484 342.238 57.5889C343.79 58.6316 345.639 59.1455 347.509 59.0535C349.394 59.0577 351.243 58.5514 352.86 57.5889C354.494 56.5484 355.786 55.0558 356.578 53.2946C358.398 49.1945 358.398 44.522 356.578 40.4218C355.78 38.6856 354.487 37.2202 352.86 36.2073C351.296 35.1217 349.415 34.5789 347.509 34.663Z" fill="#521094"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M259.319 54.5899C260.083 53.6547 261.445 53.4675 262.436 54.1615L265.973 56.7221C265.973 56.7716 266.013 56.8117 266.063 56.8117C266.555 57.1866 266.877 57.7407 266.958 58.3519C267.039 58.9631 266.872 59.5811 266.494 60.0698C264.778 62.2739 262.635 64.1135 260.191 65.4799C256.86 67.2044 253.143 68.0613 249.389 67.9708C245.753 67.9799 242.179 67.0347 239.028 65.2309C236.018 63.3986 233.568 60.7837 231.943 57.6686C230.218 54.3245 229.357 50.6059 229.438 46.8483C229.405 43.1244 230.264 39.4462 231.943 36.1176C233.512 32.9861 235.945 30.3631 238.958 28.5554C242.042 26.7403 245.564 25.79 249.148 25.8055C256.149 25.7488 262.604 29.5547 265.913 35.6892C267.593 38.7702 268.452 42.2277 268.408 45.7324C268.429 46.5336 268.402 47.3355 268.328 48.1336C268.239 49.206 267.336 50.0303 266.253 50.0266H239.198C239.629 52.2116 240.612 54.2517 242.054 55.9549C243.894 58.0468 246.597 59.1849 249.389 59.0436C251.666 59.1174 253.925 58.6134 255.952 57.5789C257.251 56.7988 258.393 55.7852 259.319 54.5899ZM249.309 34.5833C246.83 34.4938 244.423 35.4236 242.655 37.1538C241.363 38.3715 240.375 39.8728 239.769 41.5378H258.548C258.145 39.7527 257.246 38.1162 255.952 36.8151C254.399 35.2608 252.155 34.5833 249.309 34.5833Z" fill="#521094"/>
|
||||
<path d="M409.686 27.8778C409.269 27.3513 408.637 27.0372 407.963 27.021H403.043C402.152 27.0212 401.355 27.5684 401.038 28.3959L390.938 54.3009L381.348 28.2764C380.995 27.4912 380.209 26.9872 379.344 26.991H373.903C373.202 26.9849 372.548 27.3439 372.18 27.9376C371.774 28.5251 371.706 29.2803 371.999 29.9303L386.068 66.8649C385.837 68.2296 385.096 69.4574 383.994 70.3022C382.702 71.1585 380.199 71.2486 378.816 71.2985L378.813 71.2986C377.613 71.3567 376.668 72.3361 376.659 73.5304V77.0475C376.653 77.641 376.888 78.2118 377.31 78.6316C377.732 79.0513 378.306 79.2847 378.903 79.2793C379.105 79.2793 379.319 79.2808 379.544 79.2824L379.546 79.2824C381.718 79.2975 384.865 79.3194 387.371 78.0737C392.405 75.43 393.598 72.2252 394.943 68.6108C395.119 68.1389 395.297 67.6592 395.487 67.1737L409.907 29.731C410.085 29.1088 410.006 28.4415 409.686 27.8778Z" fill="#521094"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.9 KiB |