Merge pull request 'MàJ générale' (#18) from maj-generale-2022 into main

Reviewed-on: #18
This commit is contained in:
Alex 2022-12-25 10:39:17 +00:00
commit 8364e4bcb5
30 changed files with 556 additions and 365 deletions

View File

@ -33,20 +33,19 @@ Il n'est pas nécessaire d'être opérateur·ice pour gérer une de ces machines
En fonction des propriétés voulues, nous pouvons être amenés à répartir les serveurs d'un rôle spécifique entre plusieurs lieux géographiques,
que nous appelons des zones.
Nous avons 2 zones pour la production :
- Rennes 1 (Atuin)
Nous avons 3 zones pour la production :
- Orsay (Neptune)
- Lyon (Orion)
- Bruxelles (Bespin)
Nous avons 2 zones pour le support :
- Suresnes (Mercure)
- Rennes 2 (Jupiter)
- Rennes (Jupiter)
Nous avons 1 zones pour le développement :
- Roubaix
- Bruxelles (Bespin)
Nous avons plusieurs zones pour l'expérimentation :
- Orsay (Neptune)
- Lyon (Aurora)
- Rennes 3
- Bruxelles (Bespin)
- Rennes (Jupiter)

View File

@ -8,23 +8,25 @@ Les serveurs de développement hébergent les outils qui nous permettent de trav
les configurations, les tickets, ou la compilation. Ils ne contiennent pas de données personnelles mais peuvent être utilisés pour
des attaques de chaine d'approvisionnement (*supply chain attack*).
**Feuille de route :** À court terme, nous voulons trouver une alternative auto-hébergée à notre machine en datacenter. À terme, ces services
pourraient être intégrés dans la production et possiblement offertes comme service.
# Roubaix
![Photo du Datacenter OVH à Roubaix](/img/serv_ovh.jpg)
Ce serveur est le seul que nous ayons en datacenter. Il gère la forge Git.
| Désignation | Rôle | Quantité | Détails |
| -- | -- | -- | -- |
| Kimsufi | Serveur | x1 | Intel i3-2130 CPU @ 3.40GHz (4 cœurs)<br>8Go RAM, 2TB HDD |
| | | | `ssh hammerhead.machine.deuxfleurs.fr` |
# Bruxelles (bespin)
# Bruxelles (Bespin)
| Désignation | Rôle | Quantité | Détails |
| -- | -- | -- | -- |
| Forge Gitea | VM | x1 | ? |
| Runner Drone | VM | x1 | 16 cœurs, 8Go RAM, 25Go + 25Go + 50Go|
| | | | `ssh 2a02:1811:3612:b300:e99c:c591:a17f:210` |
# Autres runners Drone
## Rennes (Jupiter)
(information à rajouter)
## Lyon (Aurora)
![Photo d'illustration du PC portable utilisé](/img/serv_easynotebg46.jpg)
| Désignation | Rôle | Quantité | Détails |
| -- | -- | -- | -- |
| Packard Bell EasyNote BG46 (2007) | Serveur | x1 | Intel T5750 @ 2.00Ghz (2 cœurs), 3Go RAM, HDD 500Go |
| Freebox Mini 4k | Routeur | x1 | 4 ports @ 1Gbit/s, WAN Fibre 1 Gbit/s symétrique |

View File

@ -1,256 +0,0 @@
+++
title = "(Obsolète)"
description = "Documentation obsolète"
weight = 99
+++
**ATTENTION** - Cette page est obsolète, de nombreuses informations ici ne sont plus d'actualité.
Merci donc de ne pas en tenir compte, elle est conservée temporairement le temps d'assurer qu'aucune
information pertinente ne soit perdue dans le processus.
Un site est constitué de l'ensemble du matériel à un lieu donné géré par une (ou plusieurs) personne donnée.
Le lieu géographique peut évoluer dans le temps, comme par exemple lors d'un déménagement.
Le nommage du site est donc arbitraire, nous recommandons le choix d'un corps céleste, tout aussi étrange soit-il.
Ce découpage en sites est important pour certaines de nos applications.
![inframap.jpg](/img/infra_map.jpg)
# Production
## 🐢 atuin.site
Informations générales :
| Caractéristiques | Détails |
| --: | :-- |
| Administration | Alex et Quentin |
| Hébergement | 🏡 Erwan |
| Région | Bretagne |
| FAI | Free - 1Gbps, ✅ IPv4 publique, ✅ IPv4 fixe, ✅ IPv6 publique, ✅ IPv6 fixe, ✅ SMTP, ❌ Reverse DNS |
Liste du matériel :
| Désignation | Rôle | Quantité | Détails | Image |
| -- | -- | -- | -- | -- |
| Lenovo Thinkcentre M82 | Serveur | x3 | Intel G3420 @ 3.20GHz (2 cœurs), 8Go RAM, 128GB SSD, 1TB HDD | ![photo serveur](/img/infra/lenovo.jpg =x100)
| Freebox Mini 4k | Routeur | x1 | 4 ports @ 1Gbit/s, WAN Fibre 1 Gbit/s symétrique |![photo freebox](/img/infra/fbx.jpg =x70)
Services hébergés :
| Service | Description |
| -- | -- |
| [deuxfleurs.fr](https://deuxfleurs.fr) | Site principal de Deuxfleurs |
| [garagehq.deuxfleurs.fr](https://garagehq.deuxfleurs.fr) | Site web de Garage |
| [Synapse](https://im.deuxfleurs.fr) | Serveur Matrix |
| [Element](https://riot.deuxfleurs.fr) | Client web pour Matrix |
| [Jitsi](https://jitsi.deuxfleurs.fr) | Service de visioconférence |
| [SoGo](https://sogo.deuxfleurs.fr) | Client mail SoGo |
| [Alps](https://alps.deuxfleurs.fr) | Client mail Alps (plus léger) |
| [Plume](https://plume.deuxfleurs.fr) | Blog collaboratif et fédéré |
| [Platôo](https://platoo.deuxfleurs.fr) | Jeux de plateau en ligne |
| [Drone](https://drone.deuxfleurs.fr) | Serveur d'intégration continue |
| [Garage](https://garage.deuxfleurs.fr) | Serveur de stockage de données |
## ♆ neptune.site
Informations générales :
| Caractéristiques | Détails |
| --: | :-- |
| Administration | Alex |
| Hébergement | 🏡 Alex |
| Région | Île-de-France |
| FAI | Free - ✅ IPv4 publique, ✅ IPv4 fixe, ✅ IPv6 fixe, ✅ IPv6 publique, (✅) SMTP, ❌ Reverse DNS |
Liste du matériel ([photo](/img/infra/neptune.jpg)) :
| Désignation | Rôle | Quantité | Détails | Image |
| -- | -- | -- | -- | -- |
| ThinkCentre M73 Tiny | Serveur | x1 | 4 cœurs, 8Go RAM, SSD 120Go | ![m73tiny.jpg](/infra/m73tiny.jpg =x70) |
| ThinkCentre M73 Tiny | Serveur | x2 | 4 cœurs, 8Go RAM, SSD 240Go | ![m73tiny.jpg](/infra/m73tiny.jpg =x70) |
| ThinkCentre M73 Tiny | Serveur | x3 | 2 cœurs, 8Go RAM, HDD 500Go | ![m73tiny.jpg](/infra/m73tiny.jpg =x70) |
| D-Link DGS-108gl | Switch | x1 | 8 ports gigabit ethernet | N/A |
| Freebox Mini 4k | Routeur | x1 | N/A | ![photo freebox](/img/infra/fbx.jpg) |
Services hébergés :
| Service | Description |
| -- | -- |
| Garage | Noeuds du cluster de production |
| Wireguard, Nomad, Consul | Cluster multi-site de test |
| Garage | Noeuds du cluster de test (staging) |
| Drone (runner) | Worker pour l'intégration continue |
# Surveillance & Sauvegardes
## ✉️ mercure.site
Informations générales :
| Caractéristiques | Détails |
| --: | :-- |
| Administration | Quentin et Maximilien |
| Hébergement | 🏡 Maximilien |
| Région | Île-de-France |
| FAI | Free 10Gbps/700Mbps - ✅ IPv4 publique, ✅ IPv4 fixe, ✅ IPv6 fixe, ✅ IPv6 publique, ❌ SMTP, ❌ Reverse DNS |
Liste du matériel :
| Désignation | Rôle | Quantité | Détails | Image |
| -- | -- | -- | -- | -- |
| [Microtik RB4011iGS+RM](https://mikrotik.com/product/rb4011igs_rm) | Routeur | x1 | Routeur et pare-feu, ports 1x10G SFP+ et 10x1G | ![mikrotik.jpg](/infra/mikrotik.jpg =x100) |
| Serveur Dell R710 | Hyperviseur | x3 | 2 socket, Xeon E5520 (4c8t @ 2.26Ghz), 80Go RAM, 500GB NVMe, 1TB RAID matériel, réseau LACP 2x1G | ![dellr710.jpg](/infra/dellr710.jpg =x70) |
| metro.mercure.site | LXC | x1 | 2 CPU, 2Go RAM, 25 GB NVMe | N/A |
| bkp.mercure.site | VM | x1 | 4 vCPU, 8Go RAM, 40 GB Block Storage | N/A |
Services hébergés :
| Service | Description |
| -- | -- |
| [Grafana](https://grafana.home.mricher.fr) | Interface de monitoring de l'infrastructure |
| `ssh bkp.mercure.site` | Target de backups (Consul) |
| s3.deuxfleurs.shirokumo.net | Target de backups restic |
# Développements & Tests
## ☁️ bespin.site
Informations générales :
| Caractéristiques | Détails |
| --: | :-- |
| Administration | Quentin et Maximilien |
| Hébergement | 🏡 Maximilien |
| Région | 🇧🇪 Belgique |
| FAI | Telenet 1Gbps/40Mbps - ✅ IPv4 publique, (✅) IPv4 fixe, (✅) IPv6 fixe, ✅ IPv6 publique, ❌ SMTP, ❌ Reverse DNS |
Liste du matériel :
| Désignation | Rôle | Quantité | Détails | Image |
| -- | -- | -- | -- | -- |
| Tour recyclé en NAS | Hyperviseur Proxmox | x1 | i5-3570k (4c@4.3Ghz), 16Go RAM, 500Go SSD RAID1, HDD RAID6 14Tio | ![p280_front.jpg](/infra/p280_front.jpg =x70) |
| ThinkCentre M73 Tiny | Serveur | x1 | `df-pw5` G1840T 2c@2.50GHz, 8Go RAM, HDD 500Go | ![m73tiny.jpg](/infra/m73tiny.jpg =x70) |
| ThinkCentre M710q | Serveur | x3 | `df-ymf`, `df-ymk`, `df-ykl` G3930T 2c@2.70GHz, 8Go RAM, HDD 500Go, SSD NVMe 500Go | ![m710q.jpg](/infra/m710q_front_and_back.jpg =x90) |
| Service | Description |
| -- | -- |
| Drone (runner) | Worker pour l'intégration continue |
## ♃ jupiter.site
Informations générales :
| Caractéristiques | Détails |
| --: | :-- |
| Administration | Jill, Alex et Quentin |
| Hébergement | 🏡 Jill |
| Région | Bretagne |
| FAI | Free - (✅) IPv4 publique, (✅) IPv4 fixe, ✅ IPv6 fixe, ✅ IPv6 publique, (✅) SMTP, ❌ Reverse DNS |
Liste du matériel :
| Désignation | Rôle | Quantité | Détails | Image |
| -- | -- | -- | -- | -- |
| Tour un peu vieille | Serveur | x1 | 4 cœurs, 4Go RAM, SSD 250Go + HDD 2To | [ici](/img/infra/io.jpg) |
| Freebox | Routeur | x1 | N/A | N/A |
Services hébergés :
| Service | Description |
| -- | -- |
| Garage | Serveur de stockage de données |
## 🤖 aurora.site
Informations générales :
| Caractéristiques | Détails |
| --: | :-- |
| Administration | Quentin |
| Hébergement | 🏡 Quentin |
| Région | Rhône-Alpes |
| FAI | Free - 1Gbps, ❌ IPv4 publique, ✅ IPv4 fixe, ✅ IPv6 publique, ✅ IPv6 fixe, ✅ SMTP, ❌ Reverse DNS |
| Désignation | Rôle | Quantité | Détails | Image |
| -- | -- | -- | -- | -- |
| Packard Bell EasyNote BG46 (2007) | Serveur | x1 | Intel T5750 @ 2.00Ghz (2 cœurs), 3Go RAM, HDD 500Go | ![easynotebg46.jpg](/infra/easynotebg46.jpg =x150) |
| Freebox Mini 4k | Routeur | x1 | 4 ports @ 1Gbit/s, WAN Fibre 1 Gbit/s symétrique |![photo freebox](/img/infra/fbx.jpg =x70)
Services hébergés :
| Service | Description |
| -- | -- |
| Drone (runner) | Worker pour l'intégration continue |
## ♇ pluton.site
Informations générales :
| Caractéristiques | Détails |
| --: | :-- |
| Administration | Adrien et Alex |
| Hébergement | 🏡 Adrien |
| Région | Hauts de France |
| FAI | ???? - ADSL, ❌ IPv4 publique, ✅ IPv4 fixe, ❌ IPv6 publique, ❌ IPv6 fixe, ❌ SMTP, ❌ Reverse DNS |
| Désignation | Rôle | Quantité | Détails | Image |
| -- | -- | -- | -- | -- |
| ? | Serveur | x1 | Intel(R) Core(TM)2 CPU 6300 @ 1.86GHz, 4Go RAM, HDD 1To | N/A |
Services hébergés :
| Service | Description |
| -- | -- |
| Wireguard, Nomad, Consul | Cluster multi-site de test |
# En datacenter
## ⚔️ mars.site
Informations générales :
| Caractéristiques | Détails |
| --: | :-- |
| Administration | Adrien (et Quentin) |
| Hébergement | 🏢 Kimsufi (filiale d'OVH) |
| Région | Hauts-de-France |
| FAI | Gandi - ✅ IPv4 publique, ✅ IPv4 fixe, ❓ IPv6 publique, ❓ IPv6 fixe, ❓ SMTP, ❓ Reverse DNS |
Liste du matériel :
| Désignation | Rôle | Quantité | Détails | Image |
| -- | -- | -- | -- | -- |
| VPS | Serveur | x1 | 1 vCPU, 3Go RAM, 70 GB Block Storage | N/A |
Services hébergés :
| Service | Description |
| -- | -- |
| [Gitea](https://git.deuxfleurs.fr) | Forge logicielle |
## 🪐 saturne.site
Informations générales :
| Caractéristiques | Détails |
| --: | :-- |
| Administration | Alex |
| Hébergement | 🏢 Kimsufi (filiale d'OVH) |
| Région | Hauts-de-France |
| FAI | OVH - ✅ IPv4 publique, ✅ IPv4 fixe, ✅ IPv6 publique, ✅ IPv6 fixe, ✅ SMTP, ✅ Reverse DNS |
Liste du matériel :
| Désignation | Rôle | Quantité | Détails | Image |
| -- | -- | -- | -- | -- |
| Kimsufi | Serveur | x1 | Intel Atom N2800 @ 1.86Ghz (4 cœurs), 4Go RAM, 2TB HDD, réseau 100Mbit/s | N/A |
Services hébergés :
| Service | Description |
| -- | -- |
| [Cryptpad](https://p.adnab.me) | Suite bureautique chiffrée de bout en bout |

View File

@ -8,40 +8,57 @@ Les serveurs de productions sont ceux qui font tourner les services accédés pa
Si ils sont innaccessibles, alors les services ne fonctionnent plus. Et si une personne malveillante y accède, elle peut avoir accès à des données
personnelles des usager·es. C'est donc le rôle le plus critique.
**Feuille de route :** Afin de maximiser la résilience de nos services, nous visons à terme d'installer 3 zones distantes avec 3 machines à chaque fois,
pour un total de 9 serveurs.
**Feuille de route :** Bien que nous disposions aujourd'hui de 3 sites pour le cluster de production,
la résilience des services publiquement n'est pas assurés lorsque l'un des sites recevant du traffic
(Neptune, Orion) devient indisponible. La prochaine étape est de rendre ces deux sites mutuellement
redondants en assurant une bascule automatisée de l'un à l'autre par une mise à jour du DNS en cas
d'indisponibilité.
# Rennes 1 (atuin)
![Photos des 3 serveurs à Rennes](/img/serv_atuin.jpg)
Les serveurs sont situés à domicile derrière une connexion FTTH Free.
Ils gèrent une grande partie des services de production de Deuxfleurs.
| Désignation | Rôle | Quantité | Détails |
| -- | -- | -- | -- |
| Lenovo Thinkcentre M82 | Serveur | x3 | Intel G3420 @ 3.20GHz (2 cœurs) <br> 8Go RAM, ~128GB SSD, ~1TB HDD |
| | | | `ssh datura.machine.deuxfleurs.fr` |
| | | | `ssh digitale.machine.deuxfleurs.fr` |
| | | | `ssh drosera.machine.deuxfleurs.fr` |
| HP 1405-8G | Switch | x1 | 8 ports ethernet @ 1Gbit/s |
| Freebox Mini 4k | Routeur | x1 | 4 ports ethernet @ 1Gbit/s, WAN Fibre 1 Gbit/s symétrique |
# Orsay 1 (neptune)
# Orsay (Neptune)
![Photo des 3 serveurs à Orsay](/img/serv_neptune.jpg)
Les serveurs sont situés à domicile derrière une connexion FTTH SFR (la photo montre une box Free qui date d'avant le changement de FAI).
Cette grappe est plus récente et ne gère que Cryptpad à l'heure actuelle.
À terme, les services seront répartis entre les grappes de manière équitable.
Cette grappe gère certains services de manière exclusive: Jitsi, CryptPad.
D'autres services comme Garage sont répartis entre les grappes.
| Désignation | Rôle | Quantité | Détails |
| -- | -- | -- | -- |
| ThinkCentre M73 Tiny | Serveur | x3 | 2 cœurs, 8Go RAM, HDD 500Go |
| ThinkCentre M710q Tiny | Serveur | x1 | 2 cœurs, 4Go RAM, HDD 500Go |
| | | | `ssh celeri.machine.deuxfleurs.fr` |
| ThinkCentre M73 Tiny | Serveur | x2 | 2 cœurs, 8Go RAM, HDD 500Go |
| | | | `ssh concombre.machine.deuxfleurs.fr` |
| | | | `ssh courgette.machine.deuxfleurs.fr` |
| ThinkCentre M73 Tiny | Bridge IPv6 | x1 | 2 cœurs, 4Go RAM, HDD 500Go |
| D-Link DGS-108gl | Switch | x1 | 8 ports ethernet @ 1Gbit/s |
| Box SFR | Routeur | x1 | N/A |
# Lyon (Orion)
![Photo des 3 serveurs à Lyon](/img/serv_orion.jpg)
Les serveurs sont situés à domicile derrière une connexion FTTH Free.
Cette grappe gère certains services de manière exclusive: E-mails, Matrix, Guichet, Plume.
D'autres services comme Garage sont répartis entre les grappes.
| Désignation | Rôle | Quantité | Détails |
| -- | -- | -- | -- |
| ThinkCentre M710q Tiny | Serveur | x3 | 2 cœurs, 4Go RAM, SSD 500Go + HDD 500Go |
| | | | `ssh dahlia.machine.deuxfleurs.fr` |
| | | | `ssh doradille.machine.deuxfleurs.fr` |
| | | | `ssh diplotaxis.machine.deuxfleurs.fr` |
| Freebox | Routeur | x1 | N/A |
# Bruxelles (Bespin)
![Photo des 3 serveurs à Bruxelles](/img/serv_bespin.jpg)
Cette grappe ne gère aucun service accessible publiquement, mais elle fait partie intégrante du cluster Garage.
| Désignation | Rôle | Quantité | Détails |
| -- | -- | -- | -- |
| ThinkCentre M710q Tiny | Serveur | x3 | 2 cœurs, 8Go RAM, SSD 500Go + HDD 500Go |
| | | | `ssh df-ymk.machine.deuxfleurs.fr` |
| | | | `ssh df-ymf.machine.deuxfleurs.fr` |
| | | | `ssh df-ykl.machine.deuxfleurs.fr` |

View File

@ -12,7 +12,7 @@ et les sauvegardes, bien qu'elles soient chiffrées, contiennent tout de même d
**Feuille de route :** Il est prévu de rationaliser l'usage de ces serveurs, c'est à dire voir si on peut mobiliser moins de ressources matériels tout en continuant
d'assurer le service de support.
# Suresnes (mercure)
# Suresnes (Mercure)
![Image d'illustration du serveur](/img/serv_dellr710.jpg)
@ -32,7 +32,7 @@ Seulement une partie du serveur est mise à dispsition de Deuxfleurs :
| bkp.mercure.site (deprecated) | VM | x1 | 4 vCPU, 8Go RAM, 40 GB Block Storage |
| minio | S3 | x1 | Sert pour les sauvegardes |
# Rennes 2 (jupiter)
# Rennes (Jupiter)
![Photo de la tour à Rennes](/img/serv_io.jpg)
@ -45,3 +45,4 @@ Il est en charge des sauvegardes de Garage.
| | | | `ssh io.machine.deuxfleurs.fr` |
| Freebox Mini 4k | Routeur | x1 | 4 ports ethernet @ 1Gbit/s, WAN Fibre 1 Gbit/s symétrique |

View File

@ -9,11 +9,12 @@ et le nouveau matériel. Ils permettent aux opérateur·ices de se familiariser
et donc sur la disponibilité des services. Ces machines ne contiennent pas de données personnelles et ne sont pas critiques, elles n'ont pas besoin de rester tout le temps allumées.
Il n'est pas nécessaire d'être opérateur·ice pour gérer une de ces machines.
# Orsay 2
# Orsay (Neptune)
![Photo d'illustration du Lenovo Tiny](/img/serv_m73tiny.jpg)
Cluster staging pour Garage. Cluster staging Nix. Runners Drone.
Cluster staging: expérimentations avec NixOS et de nouveaux déploiements dans Nomad, avant de les mettre en service sur le cluster de production.
Cluster de test de Garage.
| Désignation | Rôle | Quantité | Détails |
| -- | -- | -- | -- |
@ -23,31 +24,12 @@ Cluster staging pour Garage. Cluster staging Nix. Runners Drone.
| | | | `ssh carcajou.machine.deuxfleurs.fr` |
| | | | `ssh cariacou.machine.deuxfleurs.fr` |
# Lyon (aurora)
![Photo d'illustration du PC portable utilisé](/img/serv_easynotebg46.jpg)
# Rennes (Jupiter)
Runner Drone.
Cluster staging (idem).
| Désignation | Rôle | Quantité | Détails |
| -- | -- | -- | -- |
| Packard Bell EasyNote BG46 (2007) | Serveur | x1 | Intel T5750 @ 2.00Ghz (2 cœurs), 3Go RAM, HDD 500Go |
| Freebox Mini 4k | Routeur | x1 | 4 ports @ 1Gbit/s, WAN Fibre 1 Gbit/s symétrique |
# Rennes 3
Runner Drone
(information à rajouter)
# Bruxelles (bespin)
| Désignation | Rôle | Quantité | Détails |
| -- | -- | -- | -- |
| ThinkCentre M73 Tiny | Serveur | x1 | 2 cœurs, 8Go RAM, HDD 500Go |
| | | | `ssh df-pw5.machine.deuxfleurs.fr` |
| ThinkCentre M710q Tiny | Serveur | x3 | 2 cœurs, 8Go RAM, SSD 500Go |
| | | | `ssh df-ykl.machine.deuxfleurs.fr` |
| | | | `ssh df-ymf.machine.deuxfleurs.fr` |
| | | | `ssh df-ymk.machine.deuxfleurs.fr` |
| ThinkCentre M73 Tiny | Serveur | x1 | 2 cœurs, 4Go RAM, HDD 500Go |
| | | | `ssh origan.df.trinity.fr.eu.org` |

View File

@ -9,30 +9,41 @@ rôles identifiés : production, développement, expérimentation, etc.
| Service | Rôle | Site | Description |
| -- | -- | -- | -- |
| [deuxfleurs.fr](https://deuxfleurs.fr) | production | `atuin` | Site principal de Deuxfleurs |
| [guide.deuxfleurs.fr](https://guide.deuxfleurs.fr) | production | `atuin` | Ce site |
| [Garage HQ](https://garagehq.deuxfleurs.fr) | production | `atuin` | Site web de Garage |
| [Guichet](https://guichet.deuxfleurs.fr) | production | `atuin` | Interface de gestion des utilisateurs |
| [Synapse](https://im.deuxfleurs.fr) | production | `atuin` | Serveur Matrix |
| [Element](https://riot.deuxfleurs.fr) | production | `atuin` | Client web pour Matrix |
| [Jitsi](https://jitsi.deuxfleurs.fr) | production | `atuin` | Service de visioconférence |
| Postfix | production | `atuin` | Serveur SMTP |
| Dovecot | production | `atuin` | Serveur IMAP |
| [SoGo](https://sogo.deuxfleurs.fr) | production | `atuin` | Client mail SoGo |
| [Alps](https://alps.deuxfleurs.fr) | production | `atuin` | Client mail Alps (plus léger) |
| [Plume](https://plume.deuxfleurs.fr) | production | `atuin` | Blog collaboratif et fédéré |
| [Platôo](https://platoo.deuxfleurs.fr) | production | `atuin` | Jeux de plateau en ligne |
| [Garage](https://garage.deuxfleurs.fr) | production | `atuin`, `neptune`, `jupiter` | Serveur de stockage de données |
| [CryptPad](https://pad.deuxfleurs.fr) | production | `neptune` | Éditeur de documents collaboratif chiffré |
| [Grafana](https://grafana.home.mricher.fr) | production | `mercure` | Interface de monitoring de l'infrastructure |
| [Gitea](https://git.deuxfleurs.fr) | développement | `mars` | Forge logicielle |
| [Drone](https://drone.deuxfleurs.fr) | développement | `atuin` | Serveur d'intégration continue |
| Drone (runner) | développement | `neptune` | Worker pour l'intégration continue |
| SSH | sauvegarde | `mercure` | Target de backups (Consul) |
| [Minio](https://s3.deuxfleurs.shirokumo.net) | sauvegarde | `mercure` | Target de backups restic |
| [cron rclone](@/operations/sauvegardes/rclone.md) | sauvegarde | `jupiter` | Backup régulier du contenu de Garage |
| [staging.deuxfleurs.org](https://staging.deuxfleurs.org) | expérimentation | `neptune` | Site statique de test |
| Garage ([S3](https://garage.staging.deuxfleurs.org), [K2V](https://k2v.staging.deuxfleurs.org)) | expérimentation | `neptune` | Beta-test serveur de stockage de données |
| [Guichet](https://guichet.staging.deuxfleurs.org) | expérimentation | `neptune` | Beta-test interface de gestion des utilisateurs |
| [Grafana](https://grafana.staging.deuxfleurs.org) | expérimentation | `neptune` | Interface de monitoring |
| [Kibana](https://kibana.staging.deuxfleurs.org) | expérimentation | `neptune` | Interface de monitoring |
| [Garage](https://garage.deuxfleurs.fr) | production | Orion + Neptune, Bespin, Jupiter | Serveur de stockage de données |
| [deuxfleurs.fr](https://deuxfleurs.fr) | production | *cf.* Garage | Site principal de Deuxfleurs |
| [guide.deuxfleurs.fr](https://guide.deuxfleurs.fr) | production | *cf.* Garage | Ce site |
| Autres sites web | production | *cf.* Garage | Autres sites statiques servis par Garage |
| [Synapse](https://im.deuxfleurs.fr) | production | Orion | Serveur Matrix |
| [Element](https://riot.deuxfleurs.fr) | production | Orion | Client web pour Matrix |
| Postfix | production | Orion | Serveur SMTP |
| Dovecot | production | Orion | Serveur IMAP |
| [SoGo](https://sogo.deuxfleurs.fr) | production | Orion | Client mail SoGo |
| [Alps](https://alps.deuxfleurs.fr) | production | Orion | Client mail Alps (plus léger) |
| [Plume](https://plume.deuxfleurs.fr) | production | Orion | Blog collaboratif et fédéré |
| [Jitsi](https://jitsi.deuxfleurs.fr) | production | Neptune | Service de visioconférence |
| [CryptPad](https://pad.deuxfleurs.fr) | production | Neptune | Éditeur de documents collaboratif chiffré |
| [Guichet](https://guichet.deuxfleurs.fr) | production | Neptune | Interface de gestion des utilisateurs |
| Prometheus | production | Neptune, Bespin | Interface de monitoring de l'infrastructure |
| [Grafana](https://grafana.deuxfleurs.fr) | production | Neptune | Interface de monitoring de l'infrastructure |
| [Gitea](https://git.deuxfleurs.fr) | développement | Bespin | Forge logicielle |
| [Drone](https://drone.deuxfleurs.fr) | développement | Neptune | Serveur d'intégration continue |
| Drone (runner) | développement | Bespin | Worker pour l'intégration continue |
| SSH | sauvegarde | Mercure | Target de backups (Consul) |
| [Minio](https://s3.deuxfleurs.shirokumo.net) | sauvegarde | Mercure | Target de backups restic |
| [cron rclone](@/operations/sauvegardes/rclone.md) | sauvegarde | Jupiter | Backup régulier du contenu de Garage |
| [staging.deuxfleurs.org](https://staging.deuxfleurs.org) | expérimentation | Neptune, Jupiter | Site statique de test |
| Garage ([S3](https://garage.staging.deuxfleurs.org), [K2V](https://k2v.staging.deuxfleurs.org)) | expérimentation | Neptune, Jupiter | Beta-test serveur de stockage de données |
| [Guichet](https://guichet.staging.deuxfleurs.org) | expérimentation | Neptune/Jupiter | Beta-test interface de gestion des utilisateurs |
| Prometheus | expérimentation | Neptune, Jupiter | Interface de monitoring |
| [Grafana](https://grafana.staging.deuxfleurs.org) | expérimentation | Neptune/Jupiter | Interface de monitoring |
| [Jaeger](https://jaeger.staging.deuxfleurs.org) | expérimentation | Neptune/Jupiter | Interface de monitoring |
Une liste de sites séparés par des virgules (e.g. Neptune, Orion) indique un service qui stocke des données
et dont le fonctionnement est simultanément assuré par plusieurs sites pour garantir la disponibilité des données
lorsqu'un des sites est indisponible.
Une liste de sites séparés par des slash (e.g. Neptune/Jupiter) indique un service qui ne stocke pas lui-même
de données, et dont le basculement d'un site à un autre est automatisé en cas de panne.
Sur le cluster de production, notre serveur Garage stocke des données sur les 4 sites (Neptune, Orion, Jupiter, Bespin),
mais l'accès extérieur se fait uniquement par les noeuds de Orion.

View File

@ -0,0 +1,6 @@
+++
title = "Opérations courantes"
description = "Opérations courantes"
weight = 15
sort_by = "weight"
+++

View File

@ -0,0 +1,32 @@
+++
title = "Plume"
description = "Plume"
date = 2022-12-22
dateCreated = 2022-12-22
weight = 11
+++
## Bug and debug
If you can't follow a new user and have this error:
```
2022-04-23T19:26:12.639285Z WARN plume::routes::errors: Db(DatabaseError(UniqueViolation, "duplicate key value violates unique constraint \"follows_unique_ap_url\""))
```
You might have an empty field in your database:
```
plume=> select * from follows where ap_url='';
id | follower_id | following_id | ap_url
------+-------------+--------------+--------
2118 | 20 | 238 |
(1 row)
```
Simply set the `ap_url` as follows:
```
plume=> update follows set ap_url='https://plume.deuxfleurs.fr/follows/2118' where id=2118;
UPDATE 1
```

View File

@ -2,6 +2,7 @@
title = "Applications"
description = "Déploiement d'une application"
sort_by = "weight"
date = 2022-12-22
weight = 30
+++

View File

@ -0,0 +1,34 @@
+++
title = "Créer une BDD"
description = "Création d'une base de données pour une nouvelle application"
date = 2022-12-22
dateCreated = 2022-12-22
weight = 11
+++
## 1. Create a LDAP user and assign a password for your service
Go to guichet.deuxfleurs.fr
1. Everything takes place in `ou=services,ou=users,dc=deuxfleurs,dc=fr`
2. Create a new user, like `johny`
3. Generate a random password with `openssl rand -base64 32`
4. Hash it with `slappasswd`
5. Add a `userpassword` entry with the hash
This step can also be done using the automated tool `secretmgr.py` in the app folder.
## 2. Connect to postgres with the admin users
```bash
# 1. Launch ssh tunnel given in the README
# 2. Make sure you have postregsql client installed locally
psql -h localhost -U postgres -W postgres
```
## 3. Create the binded users with LDAP in postgres + the database
```sql
CREATE USER sogo;
Create database sogodb with owner sogo encoding 'utf8' LC_COLLATE = 'C' LC_CTYPE = 'C' TEMPLATE template0;
```

View File

@ -2,6 +2,8 @@
title = "Grappe"
description = "Grappe"
weight = 20
date = 2022-12-22
sort_by = "weight"
+++
# Installation

View File

@ -0,0 +1,95 @@
+++
title = "Stolon"
description = "Comment déployer Stolon"
date = 2022-12-22
dateCreated = 2022-12-22
weight = 11
+++
Spawn container:
```bash
docker run \
-ti --rm \
--name stolon-config \
--user root \
-v /var/lib/consul/pki/:/certs \
superboum/amd64_postgres:v11
```
Init with:
```
stolonctl \
--cluster-name chelidoine \
--store-backend=consul \
--store-endpoints https://consul.service.prod.consul:8501 \
--store-ca-file /certs/consul-ca.crt \
--store-cert-file /certs/consul2022-client.crt \
--store-key /certs/consul2022-client.key \
init \
'{ "initMode": "new",
"usePgrewind" : true,
"proxyTimeout" : "120s",
"pgHBA": [
"host all postgres all md5",
"host replication replicator all md5",
"host all all all ldap ldapserver=bottin.service.prod.consul ldapbasedn=\"ou=users,dc=deuxfleurs, dc=fr\" ldapbinddn=\"<bind_dn>\" ldapbindpasswd=\"<bind_pwd>\" ldapsearchattribute=\"cn\""
]
}'
```
Then set appropriate permission on host:
```
mkdir -p /mnt/{ssd,storage}/postgres/
chown -R 999:999 /mnt/{ssd,storage}/postgres/
```
(102 is the id of the postgres user used in Docker)
It might be improved by staying with root, then chmoding in an entrypoint and finally switching to user 102 before executing user's command.
Moreover it would enable the usage of the user namespace that shift the UIDs.
## Upgrading the cluster
To retrieve the current stolon config:
```
stolonctl spec --cluster-name chelidoine --store-backend consul --store-ca-file ... --store-cert-file ... --store-endpoints https://consul.service.prod.consul:8501
```
The important part for the LDAP:
```
{
"pgHBA": [
"host all postgres all md5",
"host replication replicator all md5",
"host all all all ldap ldapserver=bottin.service.2.cluster.deuxfleurs.fr ldapbasedn=\"ou=users,dc=deuxfleurs,dc=fr\" ldapbinddn=\"cn=admin,dc=deuxfleurs,dc=fr\" ldapbindpasswd=\"<REDACTED>\" ldapsearchattribute=\"cn\""
]
}
```
Once a patch is writen:
```
stolonctl --cluster-name pissenlit --store-backend consul --store-endpoints http://consul.service.2.cluster.deuxfleurs.fr:8500 update --patch -f /tmp/patch.json
```
## Log
- 2020-12-18 Activate pg\_rewind in stolon
```
stolonctl --cluster-name pissenlit --store-backend consul --store-endpoints http://consul.service.2.cluster.deuxfleurs.fr:8500 update --patch '{ "usePgrewind" : true }'
```
- 2021-03-14 Increase proxy timeout to cope with consul latency spikes
```
stolonctl --cluster-name pissenlit --store-backend consul --store-endpoints http://consul.service.2.cluster.deuxfleurs.fr:8500 update --patch '{ "proxyTimeout" : "120s" }'
```

View File

@ -0,0 +1,101 @@
+++
title = "MàJ Matrix"
description = "Mise à jour de Matrix (Synapse/Element)"
date = 2022-12-22
dateCreated = 2022-12-22
weight = 11
+++
How to update Matrix?
=====================
## 1. Build the new containers
Often, I update Riot Web and Synapse at the same time.
* Open `app/docker-compose.yml` and locate `riot` (the Element Web service) and `synapse` (the Matrix Synapse server). There are two things you need to do for each service:
* Set the `VERSION` argument to the target service version (e.g. `1.26.0` for Synapse). This argument is then used to template the Dockerfile.
The `VERSION` value should match a github release, the link to the corresponding release page is put as a comment next to the variable in the compose file;
* Tag the image with a new incremented version tag. For example: `superboum/amd64_riotweb:v17` will become `superboum/amd64_riotweb:v18`.
We use the docker hub to store our images. So, if you are not `superboum` you must change the name with your own handle, eg. `john/amd64_riotweb:v18`. This requires that you registered an account (named `john`) on https://hub.docker.com.
So, from now we expect you have:
* changed the `VERSION` value and `image` name/tag of `riot`
* changed the `VERSION` value and `image` name/tag of `synapse`
From the `/app` folder, you can now simply build and push the new images:
```bash
docker-compose build riot synapse
```
And then send them to the docker hub:
```
docker-compose push riot synapse
```
Don't forget to commit and push your changes before doing anything else!
## 2. Deploy the new containers
Now, we will edit the deployment file `app/im/deploy/im.hcl`.
Find where the image is defined in the file, for example Element-web will look like that:
```hcl
group "riotweb" {
count = 1
task "server" {
driver = "docker"
config {
image = "superboum/amd64_riotweb:v17"
port_map {
web_port = 8043
}
```
And replace the `image =` entry with its new version created above.
Do the same thing for the `synapse` service.
Now, you need a way to access the cluster to deploy this file.
To do this, you must bind nomad on your machine through a SSH tunnel.
Check the end of [the parent `README.md`](../README.md) to do it.
If you have access to the Nomad web UI when entering http://127.0.0.1:4646
you are ready to go.
You must have installed the Nomad command line tool on your machine (also explained in [the parent `README.md`](../README.md)).
Now, on your machine and from the `app/im/deploy` folder, you must be able to run:
```
nomad plan im.hcl
```
Check that the proposed diff corresponds to what you have in mind.
If it seems OK, just copy paste the `nomad job run ... im.hcl` command proposed as part of the output of the `nomad plan` command.
From now, it will take around ~2 minutes to deploy the new images.
You can follow the deployment from the Nomad UI.
Bear in mind that, once the deployment is done on Nomad, you may still need to wait some minutes that Traefik refreshes its configuration.
If everythings worked as intended, you can commit and push your deployment file.
If something went wrong, you must rollback your deployment.
1. First, find a working deployment with [nomad job history](https://www.nomadproject.io/docs/commands/job/history)
2. Revert to this deployment with [nomad job revert](https://www.nomadproject.io/docs/commands/job/revert)
Now, if the deployment failed, you should probably investigate what went wrong offline.
I built a test stack with docker-compose in `app/<service>/integration` that should help you out (for now, test suites are only written for plume and jitsi).

View File

@ -0,0 +1,53 @@
+++
title = "Janvier 2020"
description = "Janvier 2020: changement imprévu d'adresses IP"
date = 2022-12-22
dateCreated = 2022-12-22
weight = 10
+++
Le 20 janvier free a changé mon IP, un peu comme partout en France.
Ça concerne l'IPv4 et le préfixe IPv6.
Ici le bon vieux Bortzmoinsbien qui tweet : https://twitter.com/bortzmeyer/status/1351434290916155394
Max a update tout de suite l'IPv4 mais avec un TTL de 4h le temps de propagation est grand.
J'ai réduit les entrées sur les IP à 300 secondes, soit 5 minutes, le minimum chez Gandi, à voir si c'est une bonne idée.
Reste à update les IPv6, moins critiques pour le front facing mais utilisées pour le signaling en interne...
## Le fameux signaling
Ça pose un gros problème avec Nomad (et en moindre mesure avec Consul).
En effet, Nomad utilise l'IPv6 pour communiquer, il faut donc changer les IPs de tous les noeuds.
Problème ! On peut pas faire la migration au fur et à mesure car, changeant d'IP, les noeuds ne seront plus en mesure de communiquer.
On n'a pas envie de supprimer le cluster et d'en créer un nouveau car ça voudrait dire tout redéployer ce qui est long également (tous les fichiers HCL pour Nomad, tout le KV pour consul).
On ne peut pas non plus la faire à la bourrin en stoppant tous les cluster, changer son IP, puis redémarrer.
Enfin si, Consul accepte mais pas Nomad, qui lui va chercher à communiquer avec les anciennes IP et n'arrivera jamais à un consensus.
Au passage j'en ai profité pour changer le nom des noeuds car la dernière fois, Nomad n'avait PAS DU TOUT apprécié qu'un noeud ayant le même nom change d'IP. Ceci dit, si on utilise de facto le `peers.json` c'est peut être pas problématique. À tester.
Du coup, après moult réflexions, la silver bullet c'est la fonction outage recovery de nomad (consul l'a aussi au besoin).
Elle est ici : https://learn.hashicorp.com/tutorials/consul/recovery-outage
En gros, il faut arrêter tous les nodes.
Ensuite créer un fichier à ce path : `/var/lib/nomad/server/raft/peers.json`
Ne vous laissez pas perturber par le fichier `peers.info` à côté, il ne faut pas le toucher.
Après la grande question c'est de savoir si le cluster est en Raft v2 ou Raft v3.
Bon ben nous on était en Raft v2. Si vous vous trompez, au redémarrage Nomad va crasher avec une sale erreur :
```
nomad: failed to start Raft: error="recovery failed to parse peers.json: json: cannot unmarshal string into Go value of type raft.configEntry"
```
(je me suis trompé bien sûr).
Voilà, après il ne vous reste plus qu'à redémarrer et suivre les logs, cherchez bien la ligne où il dit qu'il a trouvé le peers.json.
## Les trucs à pas oublier
- Reconfigurer le backend KV de traefik (à voir à utiliser des DNS plutôt du coup)
- Reconfigurer l'IPv4 publique annoncée à Jitsi
## Ce qui reste à faire
- Mettre à jour les entrées DNS IPv6, ce qui devrait créer :
- digitale.machine.deuxfleurs.fr
- datura.machine.deuxfleurs.fr
- drosera.machine.deuxfleurs.fr
- Mettre à jour l'instance garage sur io

View File

@ -0,0 +1,22 @@
+++
title = "Juillet 2021"
description = "Juillet 2021: la BDD Synapse remplit nos disques"
date = 2022-12-22
dateCreated = 2022-12-22
weight = 20
+++
# La BDD synapse rempli nos disques
Todo: finir ce blog post et le dupliquer ici https://quentin.dufour.io/blog/2021-07-12/chroniques-administration-synapse/
Le WAL qui grossissait à l'infini était également du à un SSD défaillant dont les écritures était abyssalement lentes.
Actions mises en place :
- Documentation de comment ajouter de l'espace sur un disque différent avec les tablespaces
- Interdiction de rejoindre les rooms avec une trop grande complexité
- nettoyage de la BDD à la main (rooms vides, comptes non utilisés, etc.)
- Remplacement du SSD défaillant
Actions à mettre en place :
- Utiliser les outils de maintenance de base de données distribuées par le projet matrix

View File

@ -0,0 +1,36 @@
+++
title = "Janvier 2022"
description = "Janvier 2022: Corruptions GlusterFS"
date = 2022-12-22
dateCreated = 2022-12-22
weight = 30
+++
# Corruption GlusterFS
Suite au redémarrage d'un serveur, les emails ne sont plus disponibles.
Il apparait que GlusterFS ne répliquait plus correctement les données depuis un certain temps.
Suite à ce problème, il a renvoyé des dossiers Dovecot corrompu.
Dovecot a reconstruit un index sans les emails, ce qui a désynchronisé les bàl des gens.
À la fin, certaines boites mails ont perdu tous leurs emails.
Aucune sauvegarde des emails n'était réalisée.
Le problème a été créé cet été quand j'ai réinstallé un serveur.
J'ai installé sur une version de Debian différente.
La version de GlusterFS était pinnée dans un sources.list, en pointant vers le repo du projet gluster
Mais le pinning était pour la version de debian précédente.
Le sources.list a été ignoré, et c'est le gluster du projet debian plus récent qui a été installé.
Ces versions étaient incompatibles mais silencieusement.
GlusterFS n'informe pas proactivement non plus que les volumes sont désynchronisées.
Il n'y a aucune commande pour connaitre l'état du cluster.
Après plusieurs jours de travail, il m'a été impossible de remonter les emails.
Action mise en place :
- Suppression de GlusterFS
- Sauvegardes journalière des emails
- Les emails sont maintenant directement sur le disque (pas de haute dispo)
Action en cours de mise en place :
- Développement d'un serveur IMAP sur Garage

View File

@ -0,0 +1,27 @@
+++
title = "Petits incidents"
description = "Petits incidents"
date = 2022-12-22
dateCreated = 2022-12-22
weight = 1000
+++
- **2020** Publii efface le disque dur d'un de nos membres. Il a changé le dossier de sortie vers /home qui a été effacé
- **2021-07-27** Panne de courant à Rennes - 40 000 personnes sans électricité pendant une journée - nos serveurs de prod étant dans la zone coupée, deuxfleurs.fr est dans le noir - https://www.francebleu.fr/infos/faits-divers-justice/rennes-plusieurs-quartiers-prives-d-electricite-1627354121
- **2021-12:** Tentative de migration un peu trop hâtive vers Tricot pour remplacer Traefik qui pose des soucis. Downtime et manque de communication sur les causes, confusion généralisée.
*Actions à envisager:* prévoir à l'avance toute intervention de nature à impacter la qualité de service sur l'infra Deuxfleurs. Tester en amont un maximum pour éviter de devoir tester en prod. Lorsque le test en prod est inévitable, s'organiser pour impacter le moins de monde possible.
- **2022-03-28:** Coupure d'électricité au site Jupiter, `io` ne redémarre pas toute seule. T est obligée de la rallumer manuellement. `io` n'est pas disponible durant quelques heures.
*Actions à envisager:* reconfigurer `io` pour s'allumer toute seule quand le courant démarre.
- **2022-03-28:** Grafana (hébergé par M) n'est pas disponible. M est le seul à pouvoir intervenir.
*Actions à envisager:* cartographier l'infra de monitoring et s'assurer que plusieurs personnes ont les accès.
- **2022-12-23:** Les backups de la production ne s'effectuaient pas correctement car Nomad ne voulait pas lancer les jobs pour cause de ressources épuisées (pas assez de CPU).
*Action menée:* La préemption des jobs a été activée pour tous les schedulers Nomad, ce qui permet aux jobs de backup de virer les jobs de plus faible priorité pour pouvoir se lancer (ces derniers seront relancés sur une autre machine automatiquement).

View File

@ -10,7 +10,7 @@ Gandi
# Pont IPv6
Route 48
FDN
# Paquets

View File

@ -301,6 +301,31 @@ docker exec -ti postgres psql
rsync --progress -av /tmp/sql/{*.tar.gz,backup_manifest,dump-*} backup/target
```
## Garbage collect old backups
```
mc ilm import deuxfleurs/${BUCKET_NAME} <<EOF
{
"Rules": [
{
"Expiration": {
"Days": 62
},
"ID": "PurgeOldBackups",
"Status": "Enabled"
}
]
}
EOF
```
Check that it has been activated:
```
mc ilm ls deuxfleurs/${BUCKET_NAME}
```
## Ref
- https://philipmcclarence.com/backing-up-and-restoring-postgres-using-pg_basebackup/

View File

@ -169,3 +169,9 @@ I propose:
```
restic forget --prune --keep-within 1m1d --keep-within-weekly 3m --keep-within-monthly 1y
```
Also try to restore a snapshot:
```
restic restore <snapshot id> --target /tmp/$SERVICE_NAME
```

View File

@ -1,6 +0,0 @@
+++
title = "Support"
description = "Support"
weight = 50
sort_by = "weight"
+++

View File

@ -1,7 +1,7 @@
+++
title = "Assemblées Générales"
description = "Assemblées Générales"
weight = 50
weight = 20
sort_by = "weight"
+++

View File

@ -1,7 +1,7 @@
+++
title = "Charte opérateur·ice"
description = "Charte opérateur·ice"
weight = 10
weight = 30
+++
*Ce document est inspiré de [la charte du Parti Pirate](https://wiki.partipirate.org/images/4/45/Charte_de_l%27administrateur_-_Type.pdf)*.

View File

@ -1,7 +1,7 @@
+++
title = "Groupes d'intérêts"
description = "Groupes d'intérêts"
weight = 30
weight = 10
+++
# Conseil d'administration

View File

@ -1,6 +1,7 @@
+++
title = "Base de connaissance"
description = "Base de connaissance"
weight = 100
+++
Une base de connaissance contient des recettes en vrac, des procédés, des retours d'expériences, etc.

View File

@ -1,7 +1,7 @@
+++
title = "Statuts"
description = "Statuts de l'association"
weight = 100
weight = 40
+++
# Article 1. Constitution et dénomination

BIN
static/img/serv_bespin.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
static/img/serv_orion.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB