From fe27af7a16d9bc56b0767f63d8f0490fcd2f13d1 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 22 Dec 2022 17:56:58 +0100 Subject: =?UTF-8?q?Migration=20des=20derniers=20documents=20depuis=20op=5F?= =?UTF-8?q?guide=20(d=C3=A9p=C3=B4t=20infrastructure)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/operations/courantes/_index.md | 6 ++ content/operations/courantes/email.md | 31 +++++++ content/operations/courantes/plume.md | 52 +++++++++++ content/operations/deploiement/app.md | 32 ------- content/operations/deploiement/app/_index.md | 33 +++++++ .../operations/deploiement/app/create_database.md | 34 +++++++ content/operations/deploiement/grappe.md | 17 ---- content/operations/deploiement/grappe/_index.md | 19 ++++ content/operations/deploiement/grappe/stolon.md | 95 +++++++++++++++++++ content/operations/maintien_en_condition/matrix.md | 101 +++++++++++++++++++++ .../operations/pannes/2020-01-20-changement-ip.md | 53 +++++++++++ .../pannes/2021-07-12-synapse-bdd-rempli-disque.md | 22 +++++ .../pannes/2022-01-xx-glusterfs-corruption.md | 36 ++++++++ content/operations/pannes/petits-incidents.md | 23 +++++ content/operations/prestataires/_index.md | 2 +- content/operations/sauvegardes/pg_basebackup.md | 25 +++++ content/operations/sauvegardes/restic.md | 6 ++ content/operations/support/_index.md | 6 -- content/operations/support/email.md | 31 ------- 19 files changed, 537 insertions(+), 87 deletions(-) create mode 100644 content/operations/courantes/_index.md create mode 100644 content/operations/courantes/email.md create mode 100644 content/operations/courantes/plume.md delete mode 100644 content/operations/deploiement/app.md create mode 100644 content/operations/deploiement/app/_index.md create mode 100644 content/operations/deploiement/app/create_database.md delete mode 100644 content/operations/deploiement/grappe.md create mode 100644 content/operations/deploiement/grappe/_index.md create mode 100644 content/operations/deploiement/grappe/stolon.md create mode 100644 content/operations/maintien_en_condition/matrix.md create mode 100644 content/operations/pannes/2020-01-20-changement-ip.md create mode 100644 content/operations/pannes/2021-07-12-synapse-bdd-rempli-disque.md create mode 100644 content/operations/pannes/2022-01-xx-glusterfs-corruption.md create mode 100644 content/operations/pannes/petits-incidents.md delete mode 100644 content/operations/support/_index.md delete mode 100644 content/operations/support/email.md diff --git a/content/operations/courantes/_index.md b/content/operations/courantes/_index.md new file mode 100644 index 0000000..1cf3b95 --- /dev/null +++ b/content/operations/courantes/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Opérations courantes" +description = "Opérations courantes" +weight = 15 +sort_by = "weight" ++++ diff --git a/content/operations/courantes/email.md b/content/operations/courantes/email.md new file mode 100644 index 0000000..d28608e --- /dev/null +++ b/content/operations/courantes/email.md @@ -0,0 +1,31 @@ ++++ +title = "Emails" +description = "Emails" +weight = 10 ++++ + +# Support d'un nom de domaine personnalisé + + 1. xxx + 1. Communiquez lui votre nom de domaine pour qu'il l'ajoute dans `ou=domains,ou=groups,dc=deuxfleurs,dc=fr` + 2. Communiquez lui l'adresse email que vous souhaitez pour qu'il change l'entrée `mail` dans votre profil utilisateur + 3. Si vous souhaitez avoir une boite mais plusieurs alias, demandez un champs `uid` dans votre profil utilisateur + + 2. Vous devez ensuite rajouter les entrées pour votre nom de domaine en éditant votre zone : + 1. L'entrée MX pour recevoir les emails +```bind +@ MX 10 email-in.deuxfleurs.fr +``` + 2. L'entrée SPF pour autoriser notre IP à délivrer des emails en votre nom : +```bind +@ TXT "v=spf1 mx:out.deuxfleurs.fr -all" +``` + 3. L'entrée DKIM pour autoriser notre postfix+opendkim à délivrer des emails en votre nom : +``` +smtp._domainkey TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtdZp4qrgZR+6R7HeAkuLGJ/3L/6Ungvf5zwrMq6T8Tu931j2G4lYuPtsxyn9fZkT4y7DlX0waktLDBOCwf7X78nLEWjAFWiJTeWGRGhRdYRUFpscs9NUN0P+46jKlabibG3XTKd1DeAmywTu6o1oO03yiolrgKD1zgyDRFeUTfSwZIdPrdbcBSA1arda4WFtcBIrSygM9b4jtlqfQwGDrsMLbCBfVHDn4WfmDWyNg0gDAkuLrYClNETk6aqIyj9fC8srKri0Qp3cRagCn+fjBvuxP35qWWJH7Rnnh/tuEDr1ufuNYO2KgJZ7JdMidUotxXE8cfU+OrEWQf4mIYeJ4wIDAQAB" +``` + 4. L'entrée DMARC pour indiquer le comportement à adopter si les contraintes précédentes ne sont pas satisfaites : +``` +_dmarc TXT "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; rua=mailto:contact@deuxfleurs.fr!10m; ruf=mailto:contact@deuxfleurs.fr!10m; rf=afrf; pct=100; ri=86400" +``` + 3. C'est tout ! Vous devrez probablement attendre 24/48h que les changements se propagent. diff --git a/content/operations/courantes/plume.md b/content/operations/courantes/plume.md new file mode 100644 index 0000000..03e47c5 --- /dev/null +++ b/content/operations/courantes/plume.md @@ -0,0 +1,52 @@ ++++ +title = "Plume" +description = "Plume" +date = 2022-12-22 +dateCreated = 2022-12-22 +weight = 11 ++++ + +## Creating a new Plume user + + 1. Bind nomad on your machine with SSH (check the README file at the root of this repo) + 2. Go to http://127.0.0.1:4646 + 3. Select `plume` -> click `exec` button (top right) + 4. Select `plume` on the left panel + 5. Press `enter` to get a bash shell + 6. Run: + +```bash +plm users new \ + --username alice \ + --display-name Alice \ + --bio Just an internet user \ + --email alice@example.com \ + --password s3cr3t +``` + +That's all folks, now you can use your new account at https://plume.deuxfleurs.fr + +## 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 +``` diff --git a/content/operations/deploiement/app.md b/content/operations/deploiement/app.md deleted file mode 100644 index 664b0b0..0000000 --- a/content/operations/deploiement/app.md +++ /dev/null @@ -1,32 +0,0 @@ -+++ -title = "Applications" -description = "Déploiement d'une application" -sort_by = "weight" -weight = 30 -+++ - - -# Empaqueter - -Packager avec nix un conteneur Docker, le publier - -# Secrets - -Créer les secrets avec `secretmgr` - -# Service - -Créer un service Nomad - -Voir les différentes déclarations : - - diplonat - - tricot - -# Sauvegardes - -Voir la section appropriée - -# Surveillance - -Voir la section appropriée - diff --git a/content/operations/deploiement/app/_index.md b/content/operations/deploiement/app/_index.md new file mode 100644 index 0000000..710e2e5 --- /dev/null +++ b/content/operations/deploiement/app/_index.md @@ -0,0 +1,33 @@ ++++ +title = "Applications" +description = "Déploiement d'une application" +sort_by = "weight" +date = 2022-12-22 +weight = 30 ++++ + + +# Empaqueter + +Packager avec nix un conteneur Docker, le publier + +# Secrets + +Créer les secrets avec `secretmgr` + +# Service + +Créer un service Nomad + +Voir les différentes déclarations : + - diplonat + - tricot + +# Sauvegardes + +Voir la section appropriée + +# Surveillance + +Voir la section appropriée + diff --git a/content/operations/deploiement/app/create_database.md b/content/operations/deploiement/app/create_database.md new file mode 100644 index 0000000..e5f8a72 --- /dev/null +++ b/content/operations/deploiement/app/create_database.md @@ -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; +``` diff --git a/content/operations/deploiement/grappe.md b/content/operations/deploiement/grappe.md deleted file mode 100644 index b917005..0000000 --- a/content/operations/deploiement/grappe.md +++ /dev/null @@ -1,17 +0,0 @@ -+++ -title = "Grappe" -description = "Grappe" -weight = 20 -+++ - -# Installation - -Pointer vers le dépot nixcfg (précédemment le ansible de Deuxfleurs/infrastructure). - -Passer sur Wireguard, Nomad, Consul, Diplonat, (Tricot, Garage), etc. - -# Les secrets - -# Découverte des noeuds - - diff --git a/content/operations/deploiement/grappe/_index.md b/content/operations/deploiement/grappe/_index.md new file mode 100644 index 0000000..80de97d --- /dev/null +++ b/content/operations/deploiement/grappe/_index.md @@ -0,0 +1,19 @@ ++++ +title = "Grappe" +description = "Grappe" +weight = 20 +date = 2022-12-22 +sort_by = "weight" ++++ + +# Installation + +Pointer vers le dépot nixcfg (précédemment le ansible de Deuxfleurs/infrastructure). + +Passer sur Wireguard, Nomad, Consul, Diplonat, (Tricot, Garage), etc. + +# Les secrets + +# Découverte des noeuds + + diff --git a/content/operations/deploiement/grappe/stolon.md b/content/operations/deploiement/grappe/stolon.md new file mode 100644 index 0000000..4a683f4 --- /dev/null +++ b/content/operations/deploiement/grappe/stolon.md @@ -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=\"\" ldapbindpasswd=\"\" 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=\"\" 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" }' +``` diff --git a/content/operations/maintien_en_condition/matrix.md b/content/operations/maintien_en_condition/matrix.md new file mode 100644 index 0000000..534bfb8 --- /dev/null +++ b/content/operations/maintien_en_condition/matrix.md @@ -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//integration` that should help you out (for now, test suites are only written for plume and jitsi). + + diff --git a/content/operations/pannes/2020-01-20-changement-ip.md b/content/operations/pannes/2020-01-20-changement-ip.md new file mode 100644 index 0000000..c86eb85 --- /dev/null +++ b/content/operations/pannes/2020-01-20-changement-ip.md @@ -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 diff --git a/content/operations/pannes/2021-07-12-synapse-bdd-rempli-disque.md b/content/operations/pannes/2021-07-12-synapse-bdd-rempli-disque.md new file mode 100644 index 0000000..17650fa --- /dev/null +++ b/content/operations/pannes/2021-07-12-synapse-bdd-rempli-disque.md @@ -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 diff --git a/content/operations/pannes/2022-01-xx-glusterfs-corruption.md b/content/operations/pannes/2022-01-xx-glusterfs-corruption.md new file mode 100644 index 0000000..bbd94af --- /dev/null +++ b/content/operations/pannes/2022-01-xx-glusterfs-corruption.md @@ -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 + + + diff --git a/content/operations/pannes/petits-incidents.md b/content/operations/pannes/petits-incidents.md new file mode 100644 index 0000000..99e389d --- /dev/null +++ b/content/operations/pannes/petits-incidents.md @@ -0,0 +1,23 @@ ++++ +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. diff --git a/content/operations/prestataires/_index.md b/content/operations/prestataires/_index.md index 52c7132..31d83fc 100644 --- a/content/operations/prestataires/_index.md +++ b/content/operations/prestataires/_index.md @@ -10,7 +10,7 @@ Gandi # Pont IPv6 -Route 48 +FDN # Paquets diff --git a/content/operations/sauvegardes/pg_basebackup.md b/content/operations/sauvegardes/pg_basebackup.md index fe33f94..357e11f 100644 --- a/content/operations/sauvegardes/pg_basebackup.md +++ b/content/operations/sauvegardes/pg_basebackup.md @@ -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} < --target /tmp/$SERVICE_NAME +``` diff --git a/content/operations/support/_index.md b/content/operations/support/_index.md deleted file mode 100644 index 0bfa7d6..0000000 --- a/content/operations/support/_index.md +++ /dev/null @@ -1,6 +0,0 @@ -+++ -title = "Support" -description = "Support" -weight = 50 -sort_by = "weight" -+++ diff --git a/content/operations/support/email.md b/content/operations/support/email.md deleted file mode 100644 index d28608e..0000000 --- a/content/operations/support/email.md +++ /dev/null @@ -1,31 +0,0 @@ -+++ -title = "Emails" -description = "Emails" -weight = 10 -+++ - -# Support d'un nom de domaine personnalisé - - 1. xxx - 1. Communiquez lui votre nom de domaine pour qu'il l'ajoute dans `ou=domains,ou=groups,dc=deuxfleurs,dc=fr` - 2. Communiquez lui l'adresse email que vous souhaitez pour qu'il change l'entrée `mail` dans votre profil utilisateur - 3. Si vous souhaitez avoir une boite mais plusieurs alias, demandez un champs `uid` dans votre profil utilisateur - - 2. Vous devez ensuite rajouter les entrées pour votre nom de domaine en éditant votre zone : - 1. L'entrée MX pour recevoir les emails -```bind -@ MX 10 email-in.deuxfleurs.fr -``` - 2. L'entrée SPF pour autoriser notre IP à délivrer des emails en votre nom : -```bind -@ TXT "v=spf1 mx:out.deuxfleurs.fr -all" -``` - 3. L'entrée DKIM pour autoriser notre postfix+opendkim à délivrer des emails en votre nom : -``` -smtp._domainkey TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtdZp4qrgZR+6R7HeAkuLGJ/3L/6Ungvf5zwrMq6T8Tu931j2G4lYuPtsxyn9fZkT4y7DlX0waktLDBOCwf7X78nLEWjAFWiJTeWGRGhRdYRUFpscs9NUN0P+46jKlabibG3XTKd1DeAmywTu6o1oO03yiolrgKD1zgyDRFeUTfSwZIdPrdbcBSA1arda4WFtcBIrSygM9b4jtlqfQwGDrsMLbCBfVHDn4WfmDWyNg0gDAkuLrYClNETk6aqIyj9fC8srKri0Qp3cRagCn+fjBvuxP35qWWJH7Rnnh/tuEDr1ufuNYO2KgJZ7JdMidUotxXE8cfU+OrEWQf4mIYeJ4wIDAQAB" -``` - 4. L'entrée DMARC pour indiquer le comportement à adopter si les contraintes précédentes ne sont pas satisfaites : -``` -_dmarc TXT "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; rua=mailto:contact@deuxfleurs.fr!10m; ruf=mailto:contact@deuxfleurs.fr!10m; rf=afrf; pct=100; ri=86400" -``` - 3. C'est tout ! Vous devrez probablement attendre 24/48h que les changements se propagent. -- cgit v1.2.3 From 7fc5affe29c424534347e3b4a142f11f12155dd0 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 22 Dec 2022 18:10:38 +0100 Subject: reorganisation sections vie_associative --- content/vie_associative/ag/_index.md | 2 +- content/vie_associative/charte_operateurice.md | 81 ------------- .../vie_associative/charte_operateurice/_index.md | 81 +++++++++++++ content/vie_associative/groupes_interets.md | 36 ------ content/vie_associative/groupes_interets/_index.md | 36 ++++++ content/vie_associative/kb/_index.md | 1 + content/vie_associative/statuts.md | 127 --------------------- content/vie_associative/statuts/_index.md | 127 +++++++++++++++++++++ 8 files changed, 246 insertions(+), 245 deletions(-) delete mode 100644 content/vie_associative/charte_operateurice.md create mode 100644 content/vie_associative/charte_operateurice/_index.md delete mode 100644 content/vie_associative/groupes_interets.md create mode 100644 content/vie_associative/groupes_interets/_index.md delete mode 100644 content/vie_associative/statuts.md create mode 100644 content/vie_associative/statuts/_index.md diff --git a/content/vie_associative/ag/_index.md b/content/vie_associative/ag/_index.md index 0811888..b23e937 100644 --- a/content/vie_associative/ag/_index.md +++ b/content/vie_associative/ag/_index.md @@ -1,7 +1,7 @@ +++ title = "Assemblées Générales" description = "Assemblées Générales" -weight = 50 +weight = 20 sort_by = "weight" +++ diff --git a/content/vie_associative/charte_operateurice.md b/content/vie_associative/charte_operateurice.md deleted file mode 100644 index 9204f7f..0000000 --- a/content/vie_associative/charte_operateurice.md +++ /dev/null @@ -1,81 +0,0 @@ -+++ -title = "Charte opérateur·ice" -description = "Charte opérateur·ice" -weight = 10 -+++ - -*Ce document est inspiré de [la charte du Parti Pirate](https://wiki.partipirate.org/images/4/45/Charte_de_l%27administrateur_-_Type.pdf)*. - -# Missions - -En acceptant ma nomination à la fonction d'opérateur·ice du système informatique de Deuxfleurs, je m'engage expressément à -respecter les termes des missions qui me sont confiées : - - Œuvrer à garantir la stabilité des systèmes du système d'informations ; - - Œuvrer à assurer la sécurité des systèmes du système d'informations face à une action malveillante externe -ou interne ; - - Déployer de nouveaux services et participer à la rédaction de la documentation nécessaire ; - - Soutenir les autres membres de l'association dans leurs missions. - -Cette responsabilité est assurée à titre gratuit. En cas d'indisponibilité ou d'incompétence sur le domaine qui m'est -confié, je m'engage à en informer l'équipe technique ou, à défaut le Conseil d'Administration, dès que possible. - -# Nature de la fonction - -La nature de ma fonction est uniquement technique et est exécutée en dehors de toutes considérations stratégiques, -politiques et personnelles faisant preuve à tout instant d'éthique, de neutralité et de respect de la confidentialité des -données que je suis amené à manipuler. -Je m'engage : - - À ne pas diffuser, céder ou manquer sciemment à la protection des données du système d'informations de Deuxfleurs ; - - À ne pas utiliser à des fins personnelles les systèmes informatiques et services de Deuxfleurs ; - - À ne pas introduire d'accès caché dans un système, permettant à une personne non autorisée d'en prendre le -contrôle ; - - À coopérer en bonne entente avec les autres membres du groupe des opérateur·ices ; - - À ne conserver aucune donnée à caractère confidentiel ; - - À ne pas user de mes accès pour expressément usurper une identité, consulter des données auxquelles je n'ai -pas accès en tant que simple utilisateur ou permettre à un tiers de le faire sans le consentement explicite du -gestionnaire de ces informations ; - - Et, enfin, à ne pas aller à l'encontre de l'intérêt de Deuxfleurs et de ses adhérents. - -# Code Pénal - -J'ai lu et compris les articles du Code Pénal ci-après : - -**Article 314-1 du Code pénal** -« L'abus de confiance est le fait par une personne de détourner, au préjudice d'autrui, des fonds, des valeurs ou un -bien quelconque qui lui ont été remis et qu'elle a acceptés à charge de les rendre, de les représenter ou d'en faire un -usage déterminé. L'abus de confiance est puni de trois ans d'emprisonnement et de 375000 euros d'amende ». - -**Article 323-2 du Code pénal** -« Le fait d'entraver ou de fausser le fonctionnement d'un système de traitement automatisé de données est puni de -cinq ans d'emprisonnement et de 75000 euros d'amende ». -Article 323-3 du Code pénal -« Le fait d'introduire frauduleusement des données dans un système de traitement automatisé ou de supprimer ou -de modifier frauduleusement les données qu'il contient est puni de cinq ans d'emprisonnement et de 75000 euros -d'amende » - -# Code Civil - -J'ai lu et compris les articles du Code Civil ci-après - -**Article 1240 du Code Civil** -« Tout fait quelconque de l'homme, qui cause à autrui un dommage, oblige celui par la faute duquel il est arrivé à le -réparer ». - -**Article 1241 du Code Civil** -« Chacun est responsable du dommage qu'il a causé non seulement par son fait, mais encore par sa négligence ou par -son imprudence ». - -**Article 1243 alinéa 1er du Code Civil** -« On est responsable non seulement du dommage que l'on cause par son propre fait, mais encore de celui qui est -causé par le fait des personnes dont on doit répondre, ou des choses que l'on a sous sa garde ». - -# Démission - -Je m'engage à agir en personne raisonnable, mon comportement s'il venait à s'écarter de cette éthique, pourrait -engager ma responsabilité civile vis-à-vis de Deuxfleurs et réglementairement vis-à-vis du Conseil d'Administration. - -En tout état de cause, si un désaccord déontologique ou personnel me conduit à refuser d'agir, ou à démissionner de -ma fonction, je m'engage à transmettre tous les accès et informations en ma possession et nécessaires à mon -remplacement ponctuel ou permanent. -En cas de cessation de mon activité, et quel qu’en soit la cause, je m'engage à remettre l'ensemble des droits et accès, -aux autres opérateur·ices, ou à défaut aux instances légitimes de Deuxfleurs. diff --git a/content/vie_associative/charte_operateurice/_index.md b/content/vie_associative/charte_operateurice/_index.md new file mode 100644 index 0000000..be44bdf --- /dev/null +++ b/content/vie_associative/charte_operateurice/_index.md @@ -0,0 +1,81 @@ ++++ +title = "Charte opérateur·ice" +description = "Charte opérateur·ice" +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)*. + +# Missions + +En acceptant ma nomination à la fonction d'opérateur·ice du système informatique de Deuxfleurs, je m'engage expressément à +respecter les termes des missions qui me sont confiées : + - Œuvrer à garantir la stabilité des systèmes du système d'informations ; + - Œuvrer à assurer la sécurité des systèmes du système d'informations face à une action malveillante externe +ou interne ; + - Déployer de nouveaux services et participer à la rédaction de la documentation nécessaire ; + - Soutenir les autres membres de l'association dans leurs missions. + +Cette responsabilité est assurée à titre gratuit. En cas d'indisponibilité ou d'incompétence sur le domaine qui m'est +confié, je m'engage à en informer l'équipe technique ou, à défaut le Conseil d'Administration, dès que possible. + +# Nature de la fonction + +La nature de ma fonction est uniquement technique et est exécutée en dehors de toutes considérations stratégiques, +politiques et personnelles faisant preuve à tout instant d'éthique, de neutralité et de respect de la confidentialité des +données que je suis amené à manipuler. +Je m'engage : + - À ne pas diffuser, céder ou manquer sciemment à la protection des données du système d'informations de Deuxfleurs ; + - À ne pas utiliser à des fins personnelles les systèmes informatiques et services de Deuxfleurs ; + - À ne pas introduire d'accès caché dans un système, permettant à une personne non autorisée d'en prendre le +contrôle ; + - À coopérer en bonne entente avec les autres membres du groupe des opérateur·ices ; + - À ne conserver aucune donnée à caractère confidentiel ; + - À ne pas user de mes accès pour expressément usurper une identité, consulter des données auxquelles je n'ai +pas accès en tant que simple utilisateur ou permettre à un tiers de le faire sans le consentement explicite du +gestionnaire de ces informations ; + - Et, enfin, à ne pas aller à l'encontre de l'intérêt de Deuxfleurs et de ses adhérents. + +# Code Pénal + +J'ai lu et compris les articles du Code Pénal ci-après : + +**Article 314-1 du Code pénal** +« L'abus de confiance est le fait par une personne de détourner, au préjudice d'autrui, des fonds, des valeurs ou un +bien quelconque qui lui ont été remis et qu'elle a acceptés à charge de les rendre, de les représenter ou d'en faire un +usage déterminé. L'abus de confiance est puni de trois ans d'emprisonnement et de 375000 euros d'amende ». + +**Article 323-2 du Code pénal** +« Le fait d'entraver ou de fausser le fonctionnement d'un système de traitement automatisé de données est puni de +cinq ans d'emprisonnement et de 75000 euros d'amende ». +Article 323-3 du Code pénal +« Le fait d'introduire frauduleusement des données dans un système de traitement automatisé ou de supprimer ou +de modifier frauduleusement les données qu'il contient est puni de cinq ans d'emprisonnement et de 75000 euros +d'amende » + +# Code Civil + +J'ai lu et compris les articles du Code Civil ci-après + +**Article 1240 du Code Civil** +« Tout fait quelconque de l'homme, qui cause à autrui un dommage, oblige celui par la faute duquel il est arrivé à le +réparer ». + +**Article 1241 du Code Civil** +« Chacun est responsable du dommage qu'il a causé non seulement par son fait, mais encore par sa négligence ou par +son imprudence ». + +**Article 1243 alinéa 1er du Code Civil** +« On est responsable non seulement du dommage que l'on cause par son propre fait, mais encore de celui qui est +causé par le fait des personnes dont on doit répondre, ou des choses que l'on a sous sa garde ». + +# Démission + +Je m'engage à agir en personne raisonnable, mon comportement s'il venait à s'écarter de cette éthique, pourrait +engager ma responsabilité civile vis-à-vis de Deuxfleurs et réglementairement vis-à-vis du Conseil d'Administration. + +En tout état de cause, si un désaccord déontologique ou personnel me conduit à refuser d'agir, ou à démissionner de +ma fonction, je m'engage à transmettre tous les accès et informations en ma possession et nécessaires à mon +remplacement ponctuel ou permanent. +En cas de cessation de mon activité, et quel qu’en soit la cause, je m'engage à remettre l'ensemble des droits et accès, +aux autres opérateur·ices, ou à défaut aux instances légitimes de Deuxfleurs. diff --git a/content/vie_associative/groupes_interets.md b/content/vie_associative/groupes_interets.md deleted file mode 100644 index 55d5c03..0000000 --- a/content/vie_associative/groupes_interets.md +++ /dev/null @@ -1,36 +0,0 @@ -+++ -title = "Groupes d'intérêts" -description = "Groupes d'intérêts" -weight = 30 -+++ - -# Conseil d'administration - -Le conseil d'administration s'occupe du cadre légal de l'association. -Il est composé de 3 à 6 membres non spécialisés qui se répartissent les tâches. -Il est élu chaque année pendant l'assemblée générale selon le mode de scrutin dit du jugement majoritaire. - -Élu·e : Maximilien, Alain, Adrien, et Vincent -Email : ca (arobase) deuxfleurs.fr - -# Technique - -Le groupe technique s'occupe de tout le cycle de vie du logiciel et des machines, de la conception au décomissionnement en passant pas le maintien en condition. -Une partie de ses membres a un statut spécial dit d'opérateur·ices car ils ont accès à des machines gérant possiblement des données personnelles. -Ces membres se sont engagés à respecter une charte et ont été cooptés par des membres existants. -Ce groupe est ouvert à tout le monde, l'adhésion y est de fait, il suffit de rejoindre un des canaux Matrix. - -Référent·e : à définir -Membres ayant le statut d'opérateur·ices : Quentin, Alex, Maximilien, Florian, Adrien, Jill -Fichiers de références du statut opérateur·ices : [ansible (legacy)](https://git.deuxfleurs.fr/Deuxfleurs/infrastructure/src/branch/main/os/config/roles/users/vars/main.yml) - [nix (beta)](https://git.deuxfleurs.fr/Deuxfleurs/nixcfg/src/branch/main/cluster/prod/cluster.nix) - -Discuter : Sur Matrix à [#tech:deuxfleurs.fr](https://matrix.to/#/#tech:deuxfleurs.fr), #garage:deuxfleurs.fr, #bottin:deuxfleurs.fr, et #diplonat:deuxfleurs.fr. - -# Communication - -Le groupe communication s'occupe de faire porter l'action de Deuxfleurs, tant sur le plan graphique, texte, que des idées. -Ce groupe est ouvert à tout le monde, l'adhésion y est de fait, il suffit de rejoindre un des canaux Matrix. - -Référent·e : à définir - -Discuter : Sur Matrix à [#graphisme:deuxfleurs.fr](https://matrix.to/#/#graphisme:deuxfleurs.fr) et [#forum:deuxfleurs.fr](https://matrix.to/#/#forum:deuxfleurs.fr) diff --git a/content/vie_associative/groupes_interets/_index.md b/content/vie_associative/groupes_interets/_index.md new file mode 100644 index 0000000..6235b2b --- /dev/null +++ b/content/vie_associative/groupes_interets/_index.md @@ -0,0 +1,36 @@ ++++ +title = "Groupes d'intérêts" +description = "Groupes d'intérêts" +weight = 10 ++++ + +# Conseil d'administration + +Le conseil d'administration s'occupe du cadre légal de l'association. +Il est composé de 3 à 6 membres non spécialisés qui se répartissent les tâches. +Il est élu chaque année pendant l'assemblée générale selon le mode de scrutin dit du jugement majoritaire. + +Élu·e : Maximilien, Alain, Adrien, et Vincent +Email : ca (arobase) deuxfleurs.fr + +# Technique + +Le groupe technique s'occupe de tout le cycle de vie du logiciel et des machines, de la conception au décomissionnement en passant pas le maintien en condition. +Une partie de ses membres a un statut spécial dit d'opérateur·ices car ils ont accès à des machines gérant possiblement des données personnelles. +Ces membres se sont engagés à respecter une charte et ont été cooptés par des membres existants. +Ce groupe est ouvert à tout le monde, l'adhésion y est de fait, il suffit de rejoindre un des canaux Matrix. + +Référent·e : à définir +Membres ayant le statut d'opérateur·ices : Quentin, Alex, Maximilien, Florian, Adrien, Jill +Fichiers de références du statut opérateur·ices : [ansible (legacy)](https://git.deuxfleurs.fr/Deuxfleurs/infrastructure/src/branch/main/os/config/roles/users/vars/main.yml) - [nix (beta)](https://git.deuxfleurs.fr/Deuxfleurs/nixcfg/src/branch/main/cluster/prod/cluster.nix) + +Discuter : Sur Matrix à [#tech:deuxfleurs.fr](https://matrix.to/#/#tech:deuxfleurs.fr), #garage:deuxfleurs.fr, #bottin:deuxfleurs.fr, et #diplonat:deuxfleurs.fr. + +# Communication + +Le groupe communication s'occupe de faire porter l'action de Deuxfleurs, tant sur le plan graphique, texte, que des idées. +Ce groupe est ouvert à tout le monde, l'adhésion y est de fait, il suffit de rejoindre un des canaux Matrix. + +Référent·e : à définir + +Discuter : Sur Matrix à [#graphisme:deuxfleurs.fr](https://matrix.to/#/#graphisme:deuxfleurs.fr) et [#forum:deuxfleurs.fr](https://matrix.to/#/#forum:deuxfleurs.fr) diff --git a/content/vie_associative/kb/_index.md b/content/vie_associative/kb/_index.md index 2e67ba9..e219a50 100644 --- a/content/vie_associative/kb/_index.md +++ b/content/vie_associative/kb/_index.md @@ -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. diff --git a/content/vie_associative/statuts.md b/content/vie_associative/statuts.md deleted file mode 100644 index 2792525..0000000 --- a/content/vie_associative/statuts.md +++ /dev/null @@ -1,127 +0,0 @@ -+++ -title = "Statuts" -description = "Statuts de l'association" -weight = 100 -+++ - -# Article 1. Constitution et dénomination - -Il est fondé entre les adhérents aux présents statuts une association -régie par la loi 1901, ayant pour titre Deuxfleurs. - -# Article 2. Buts - -Cette association a pour but de défendre et promouvoir les libertés -individuelles et collectives à travers la mise en place d'infrastuctures -numériques libres. - -# Article 3. Siège social - -Le siège social est fixé au 10A, Allée de Lanvaux, 35700 Rennes. Il -pourra être transféré suite à un vote par l'assemblée générale. - -# Article 4. Durée de l'association - -L'association perdure tant qu'elle possède au moins un membre, ou -jusqu'à sa dissolution décidée en assemblée générale. - -# Article 5. Admission et adhésion - -Pour faire partie de l'association, il faut être coopté par un membre de -l'association, adhérer aux présents statuts et s'acquitter de la -cotisation annuelle dont le montant est de 10 euros. - -# Article 6. Composition de l'association - -L'association se compose exclusivement de membres admis selon les dispositions -de l'Article 5 et à jour de leur cotisation. Tout membre -actif possède une voix lors des votes en assemblée générale. Est considéré -actif tout membre présent à l'assemblée générale (physiquement, par -visioconférence ou par procuration écrite donnée à un autre membre de -l'association). - -# Article 7. Perte de la qualité de membre - -La qualité de membre se perd par : - -- la démission, -- le non-renouvelement de la cotisation dans un délai de deux mois - après le 1er Janvier de l'année courante, -- le décès, -- la radiation prononcée aux deux tiers des votes exprimés, lors d'un - vote extraordinaire ou de l'assemblée générale. - -# Article 8. L'assemblée générale - -L'assemblée générale ordinaire se réunit au moins une fois par an, convoquée -par le conseil d'administration. L'assemblée générale extraordinaire est -convoquée par le conseil d'administration, à la demande de celui-ci ou à la -demande du quart au moins des membres de l'association. - -L'assemblée générale (ordinaire ou extraordinaire) comprend tous les -membres de l'association à jour de leur cotisation. Quinze jours au -moins avant la date fixée, les membres de l'association sont convoqués -via la liste de diffusion de l'association et l'ordre du jour est -inscrit sur les convocations. - -Le conseil d'administration anime l'assemblée générale. L'assemblée -générale, après avoir délibéré, se prononce sur le rapport moral et/ou -d'activités. Le conseil d'administration rend compte de l'exercice -financier clos et soumet le bilan de l'exercice clos à l'approbation de -l'assemblée dans un délai de six mois après la clôture des comptes. -L'assemblée générale délibère sur les orientations à venir et se -prononce sur le budget prévisionnel de l'année en cours. - -Elle pourvoit, au scrutin secret, à la nomination ou au renouvellement -des membres du conseil d'administration via un scrutin au jugement majoritaire. Elle fixe le montant de la cotisation annuelle. Les décisions -de l'assemblée sont prises à la majorité des membres présents ou -représentés. Chaque membre présent ne peut détenir plus d'une -procuration. - -# Article 9. Membres mineurs - -Les mineurs peuvent adhérer à l'association sous réserve d'un accord -tacite ou d'une autorisation écrite de leurs parents ou tuteurs légaux. -Ils sont membres à part entière de l'association. Seuls les membres âgés -de 16 ans au moins au jour d'une élection sont autorisés à y voter, -notamment au cours d'une assemblée générale. Pour les autres, leur droit -de vote est transmis à leur représentant légal. - -# Article 10. Le conseil d'administration - -L'association est administrée par un conseil d'administration composé de -3 à 6 membres, élus pour 1 an dans les conditions fixées à -l'Article 8. Tous les membres de l'association à jour de -leur cotisation sont éligibles. En cas de vacance de poste, le conseil -d'administration peut pourvoir provisoirement au remplacement de ses -membres. Ce remplacement est obligatoire quand le conseil -d'administration compte moins de 3 membres. Il est procédé à leur -remplacement définitif à la plus prochaine assemblée générale. Les -pouvoirs des membres ainsi élus prennent fin à l'époque où devrait -normalement expirer le mandat des membres remplacés. - -Le conseil d'administration met en œuvre les décisions de l'assemblée -générale, organise et anime la vie de l'association, dans le cadre fixé -par les statuts. Chacun de ses membres peut être habilité par le conseil -à remplir toutes les formalités de déclaration et de publication -prescrites par la législation et tout autre acte nécessaire au -fonctionnement de l'association et décidé par le conseil -d'administration. Tous les membres du conseil d'administration sont -responsables des engagements contractés par l'association. Tout contrat -ou convention passé entre l'association d'une part, et un membre du -conseil d'administration, son conjoint ou un proche, d'autre part, est -soumis pour autorisation au conseil d'administration et présenté pour -information à la plus prochaine assemblée générale. Le conseil -d'administration se réunit au moins 4 fois par an et toutes les fois -qu'il est convoqué par le tiers de ses membres. La présence de la moitié -au moins des membres du conseil est nécessaire pour que le conseil -d'administration puisse délibérer valablement. Les décisions sont prises -au consensus et, à défaut, à la majorité des voix des présents. Le vote -par procuration n'est pas autorisé. - -# Article 11. Modification des statuts de l'association - -Sur demande d'un tiers des membres actifs, ou sur demande du conseil -d'administration, des amendements aux statuts de l'association peuvent -être discutés et soumis au vote lors d'une assemblée générale, selon les -modalités de l'Article 8. diff --git a/content/vie_associative/statuts/_index.md b/content/vie_associative/statuts/_index.md new file mode 100644 index 0000000..0c4d8c3 --- /dev/null +++ b/content/vie_associative/statuts/_index.md @@ -0,0 +1,127 @@ ++++ +title = "Statuts" +description = "Statuts de l'association" +weight = 40 ++++ + +# Article 1. Constitution et dénomination + +Il est fondé entre les adhérents aux présents statuts une association +régie par la loi 1901, ayant pour titre Deuxfleurs. + +# Article 2. Buts + +Cette association a pour but de défendre et promouvoir les libertés +individuelles et collectives à travers la mise en place d'infrastuctures +numériques libres. + +# Article 3. Siège social + +Le siège social est fixé au 10A, Allée de Lanvaux, 35700 Rennes. Il +pourra être transféré suite à un vote par l'assemblée générale. + +# Article 4. Durée de l'association + +L'association perdure tant qu'elle possède au moins un membre, ou +jusqu'à sa dissolution décidée en assemblée générale. + +# Article 5. Admission et adhésion + +Pour faire partie de l'association, il faut être coopté par un membre de +l'association, adhérer aux présents statuts et s'acquitter de la +cotisation annuelle dont le montant est de 10 euros. + +# Article 6. Composition de l'association + +L'association se compose exclusivement de membres admis selon les dispositions +de l'Article 5 et à jour de leur cotisation. Tout membre +actif possède une voix lors des votes en assemblée générale. Est considéré +actif tout membre présent à l'assemblée générale (physiquement, par +visioconférence ou par procuration écrite donnée à un autre membre de +l'association). + +# Article 7. Perte de la qualité de membre + +La qualité de membre se perd par : + +- la démission, +- le non-renouvelement de la cotisation dans un délai de deux mois + après le 1er Janvier de l'année courante, +- le décès, +- la radiation prononcée aux deux tiers des votes exprimés, lors d'un + vote extraordinaire ou de l'assemblée générale. + +# Article 8. L'assemblée générale + +L'assemblée générale ordinaire se réunit au moins une fois par an, convoquée +par le conseil d'administration. L'assemblée générale extraordinaire est +convoquée par le conseil d'administration, à la demande de celui-ci ou à la +demande du quart au moins des membres de l'association. + +L'assemblée générale (ordinaire ou extraordinaire) comprend tous les +membres de l'association à jour de leur cotisation. Quinze jours au +moins avant la date fixée, les membres de l'association sont convoqués +via la liste de diffusion de l'association et l'ordre du jour est +inscrit sur les convocations. + +Le conseil d'administration anime l'assemblée générale. L'assemblée +générale, après avoir délibéré, se prononce sur le rapport moral et/ou +d'activités. Le conseil d'administration rend compte de l'exercice +financier clos et soumet le bilan de l'exercice clos à l'approbation de +l'assemblée dans un délai de six mois après la clôture des comptes. +L'assemblée générale délibère sur les orientations à venir et se +prononce sur le budget prévisionnel de l'année en cours. + +Elle pourvoit, au scrutin secret, à la nomination ou au renouvellement +des membres du conseil d'administration via un scrutin au jugement majoritaire. Elle fixe le montant de la cotisation annuelle. Les décisions +de l'assemblée sont prises à la majorité des membres présents ou +représentés. Chaque membre présent ne peut détenir plus d'une +procuration. + +# Article 9. Membres mineurs + +Les mineurs peuvent adhérer à l'association sous réserve d'un accord +tacite ou d'une autorisation écrite de leurs parents ou tuteurs légaux. +Ils sont membres à part entière de l'association. Seuls les membres âgés +de 16 ans au moins au jour d'une élection sont autorisés à y voter, +notamment au cours d'une assemblée générale. Pour les autres, leur droit +de vote est transmis à leur représentant légal. + +# Article 10. Le conseil d'administration + +L'association est administrée par un conseil d'administration composé de +3 à 6 membres, élus pour 1 an dans les conditions fixées à +l'Article 8. Tous les membres de l'association à jour de +leur cotisation sont éligibles. En cas de vacance de poste, le conseil +d'administration peut pourvoir provisoirement au remplacement de ses +membres. Ce remplacement est obligatoire quand le conseil +d'administration compte moins de 3 membres. Il est procédé à leur +remplacement définitif à la plus prochaine assemblée générale. Les +pouvoirs des membres ainsi élus prennent fin à l'époque où devrait +normalement expirer le mandat des membres remplacés. + +Le conseil d'administration met en œuvre les décisions de l'assemblée +générale, organise et anime la vie de l'association, dans le cadre fixé +par les statuts. Chacun de ses membres peut être habilité par le conseil +à remplir toutes les formalités de déclaration et de publication +prescrites par la législation et tout autre acte nécessaire au +fonctionnement de l'association et décidé par le conseil +d'administration. Tous les membres du conseil d'administration sont +responsables des engagements contractés par l'association. Tout contrat +ou convention passé entre l'association d'une part, et un membre du +conseil d'administration, son conjoint ou un proche, d'autre part, est +soumis pour autorisation au conseil d'administration et présenté pour +information à la plus prochaine assemblée générale. Le conseil +d'administration se réunit au moins 4 fois par an et toutes les fois +qu'il est convoqué par le tiers de ses membres. La présence de la moitié +au moins des membres du conseil est nécessaire pour que le conseil +d'administration puisse délibérer valablement. Les décisions sont prises +au consensus et, à défaut, à la majorité des voix des présents. Le vote +par procuration n'est pas autorisé. + +# Article 11. Modification des statuts de l'association + +Sur demande d'un tiers des membres actifs, ou sur demande du conseil +d'administration, des amendements aux statuts de l'association peuvent +être discutés et soumis au vote lors d'une assemblée générale, selon les +modalités de l'Article 8. -- cgit v1.2.3 From 8ccc21468bfcf03a23b73dfd36a79aa74f7d5e76 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 22 Dec 2022 19:08:04 +0100 Subject: =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20la=20section=20infrastructu?= =?UTF-8?q?res=20(machines,=20services)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/infrastructures/machines/_index.md | 13 +- content/infrastructures/machines/developpement.md | 26 ++- content/infrastructures/machines/obsolete.md | 256 ---------------------- content/infrastructures/machines/production.md | 61 ++++-- content/infrastructures/machines/support.md | 5 +- content/infrastructures/machines/xp.md | 32 +-- content/infrastructures/services.md | 65 +++--- static/img/serv_bespin.jpg | Bin 0 -> 88817 bytes 8 files changed, 107 insertions(+), 351 deletions(-) delete mode 100644 content/infrastructures/machines/obsolete.md create mode 100644 static/img/serv_bespin.jpg diff --git a/content/infrastructures/machines/_index.md b/content/infrastructures/machines/_index.md index 7521b66..84fc012 100644 --- a/content/infrastructures/machines/_index.md +++ b/content/infrastructures/machines/_index.md @@ -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) diff --git a/content/infrastructures/machines/developpement.md b/content/infrastructures/machines/developpement.md index d4cb10c..2d5193f 100644 --- a/content/infrastructures/machines/developpement.md +++ b/content/infrastructures/machines/developpement.md @@ -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. +# Bruxelles (Bespin) -# Roubaix +| 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` | -![Photo du Datacenter OVH à Roubaix](/img/serv_ovh.jpg) +# Autres runners Drone -Ce serveur est le seul que nous ayons en datacenter. Il gère la forge Git. +## Rennes (Jupiter) -| Désignation | Rôle | Quantité | Détails | -| -- | -- | -- | -- | -| Kimsufi | Serveur | x1 | Intel i3-2130 CPU @ 3.40GHz (4 cœurs)
8Go RAM, 2TB HDD | -| | | | `ssh hammerhead.machine.deuxfleurs.fr` | +(information à rajouter) + +## Lyon (Aurora) -# Bruxelles (bespin) +![Photo d'illustration du PC portable utilisé](/img/serv_easynotebg46.jpg) | Désignation | Rôle | Quantité | Détails | | -- | -- | -- | -- | -| Runner Drone | VM | x1 | 16 cœurs, 8Go RAM, 25Go + 25Go + 50Go| -| | | | `ssh 2a02:1811:3612:b300:e99c:c591:a17f:210` | +| 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 | diff --git a/content/infrastructures/machines/obsolete.md b/content/infrastructures/machines/obsolete.md deleted file mode 100644 index a72e84f..0000000 --- a/content/infrastructures/machines/obsolete.md +++ /dev/null @@ -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 | - diff --git a/content/infrastructures/machines/production.md b/content/infrastructures/machines/production.md index 671ec79..6f65752 100644 --- a/content/infrastructures/machines/production.md +++ b/content/infrastructures/machines/production.md @@ -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)
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` | diff --git a/content/infrastructures/machines/support.md b/content/infrastructures/machines/support.md index 9fe45d5..d816fae 100644 --- a/content/infrastructures/machines/support.md +++ b/content/infrastructures/machines/support.md @@ -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 | + diff --git a/content/infrastructures/machines/xp.md b/content/infrastructures/machines/xp.md index 2319e32..853e222 100644 --- a/content/infrastructures/machines/xp.md +++ b/content/infrastructures/machines/xp.md @@ -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` | diff --git a/content/infrastructures/services.md b/content/infrastructures/services.md index 4df8a66..c01178c 100644 --- a/content/infrastructures/services.md +++ b/content/infrastructures/services.md @@ -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. diff --git a/static/img/serv_bespin.jpg b/static/img/serv_bespin.jpg new file mode 100644 index 0000000..05bbc66 Binary files /dev/null and b/static/img/serv_bespin.jpg differ -- cgit v1.2.3 From 64e15db942fdf33f6ff02f44f66e56fd677bd1a9 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 23 Dec 2022 00:19:17 +0100 Subject: =?UTF-8?q?Panne=20backups=20et=20pr=C3=A9emption?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/operations/pannes/petits-incidents.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/operations/pannes/petits-incidents.md b/content/operations/pannes/petits-incidents.md index 99e389d..658757f 100644 --- a/content/operations/pannes/petits-incidents.md +++ b/content/operations/pannes/petits-incidents.md @@ -21,3 +21,7 @@ weight = 1000 - **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). -- cgit v1.2.3 From bdbf452f461434c4aee41f9672737e1f798c6ccc Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Sat, 24 Dec 2022 22:17:08 +0100 Subject: Ajout photo manquante de Orion --- static/img/serv_orion.jpg | Bin 0 -> 96552 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 static/img/serv_orion.jpg diff --git a/static/img/serv_orion.jpg b/static/img/serv_orion.jpg new file mode 100644 index 0000000..42d0eb5 Binary files /dev/null and b/static/img/serv_orion.jpg differ -- cgit v1.2.3 From 0a37d155dda915f80cc70d5bbd223d820f996511 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Sat, 24 Dec 2022 22:23:08 +0100 Subject: =?UTF-8?q?plume:=20pas=20de=20creation=20d'utilisateur=20(on=20a?= =?UTF-8?q?=20ldap=20maintenant);=20d=C3=A9placement=20ds=20d=C3=A9bogage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/operations/courantes/plume.md | 52 ----------------------------------- content/operations/debogage/plume.md | 32 +++++++++++++++++++++ 2 files changed, 32 insertions(+), 52 deletions(-) delete mode 100644 content/operations/courantes/plume.md create mode 100644 content/operations/debogage/plume.md diff --git a/content/operations/courantes/plume.md b/content/operations/courantes/plume.md deleted file mode 100644 index 03e47c5..0000000 --- a/content/operations/courantes/plume.md +++ /dev/null @@ -1,52 +0,0 @@ -+++ -title = "Plume" -description = "Plume" -date = 2022-12-22 -dateCreated = 2022-12-22 -weight = 11 -+++ - -## Creating a new Plume user - - 1. Bind nomad on your machine with SSH (check the README file at the root of this repo) - 2. Go to http://127.0.0.1:4646 - 3. Select `plume` -> click `exec` button (top right) - 4. Select `plume` on the left panel - 5. Press `enter` to get a bash shell - 6. Run: - -```bash -plm users new \ - --username alice \ - --display-name Alice \ - --bio Just an internet user \ - --email alice@example.com \ - --password s3cr3t -``` - -That's all folks, now you can use your new account at https://plume.deuxfleurs.fr - -## 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 -``` diff --git a/content/operations/debogage/plume.md b/content/operations/debogage/plume.md new file mode 100644 index 0000000..c256a45 --- /dev/null +++ b/content/operations/debogage/plume.md @@ -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 +``` -- cgit v1.2.3