Compare commits

...
Sign in to create a new pull request.

35 commits

Author SHA1 Message Date
4cf3bf17e2 Réorganisation Opérations & incorporation de pages de Opérations dedans Infrastructures 2025-04-15 10:26:44 +02:00
1f6d305a07 fix(nav): arborescence qui fonctionn 2025-04-15 10:26:44 +02:00
6ccbc878b6 Fin refonte guide web 2025-04-15 10:26:44 +02:00
84641b68ba Update woodpecker config from main 2025-04-15 10:26:44 +02:00
a39202d58a Coquilles dans 1e0183a1cc 2025-04-15 10:26:44 +02:00
ca513979dd minor: aria-hidden around kaemoji 2025-04-15 10:26:44 +02:00
6198c6ba8e rewrite(services): main page, organisation of pages in section, shmol stuff 2025-04-15 10:26:44 +02:00
81bac19f18 rewrite: services/jitsi 2025-04-15 10:26:44 +02:00
4c264db623 Progression guide hébergement web 2025-04-15 10:26:44 +02:00
9327f32dd4 minor: 'dernière mise à jour du site le ...' 2025-04-15 10:26:44 +02:00
4c3dd6815f section calendrier et contacts 2025-04-15 10:26:44 +02:00
1f8495c58c hello world ci 2025-04-15 10:26:44 +02:00
1ce44e5e13 minor: aria-hidden around kaemoji 2025-04-15 10:26:44 +02:00
a03477bf0e rewrite(services): main page, organisation of pages in section, shmol stuff 2025-04-15 10:26:44 +02:00
6ea68a9ca8 rewrite: services/jitsi 2025-04-15 10:26:44 +02:00
9b9280a129 minor 2025-04-15 10:26:44 +02:00
b130186150 rollback .woodpecker.yaml 2025-04-15 10:26:42 +02:00
543160aea0 feat: correction de coquilles et titre Sommaire sur téléphone 2025-04-15 10:25:56 +02:00
4b63bebc06 minor 2025-04-15 10:25:56 +02:00
fe22f11457 feat(nav): soulignage de la section active dans la topbar 2025-04-15 10:25:56 +02:00
9940ca9e07 feat(infrastructure): relecture et modification de contenu 2025-04-15 10:25:56 +02:00
d883f82b20 feat: graphisme de la navigation supérieure 2025-04-15 10:25:56 +02:00
44df2eb8be feat(services): petites modifs textuelles sur la doc matrix 2025-04-15 10:25:56 +02:00
3be667a200 WIP: plein de changement de titre + le dossier motivation du commit précédent 2025-04-15 10:25:56 +02:00
bcaecd9292 revert: 'Motivations' est définitivement plus classe que 'Vision' 2025-04-15 10:25:56 +02:00
921bf344c5 feat(services): relecture de la page d'accueil des services 2025-04-15 10:25:56 +02:00
405b00e4b7 feat(accueil): ajout d'un lien vers deuxfleurs.fr et suppression des guidelines obsolètes 2025-04-15 10:25:56 +02:00
a2fc4a7cf1 feat: desactivation de l'affichage de sections dans le menu superieur via le camp extra->hide_from_menu du header de la section 2025-04-15 10:25:56 +02:00
7e473e2163 fix: compilation du site grace a l'ajout du dossier (section) 'vision' 2025-04-15 10:25:56 +02:00
e99fb4f134 Add web content first part 2025-04-15 10:25:56 +02:00
5cb54c51a3 Add cryptpad.md 2025-04-15 10:25:56 +02:00
e407ee7257 Copie de contenu existant dans services/ 2025-04-15 10:25:56 +02:00
976e78737d Ajout fichier vide pour résoudre les liens 2025-04-15 10:25:56 +02:00
4b178f97f5 maj README avec le compte rendu de la refonte 2025-04-15 10:25:52 +02:00
4e933ff7b6 Rewrite services _index.md 2025-04-15 10:25:16 +02:00
71 changed files with 8480 additions and 186 deletions

View file

@ -9,7 +9,10 @@ zola build
## Déployer
```bash
# Pousser sur https://guide.deuxfleurs.fr
aws s3 sync ./public s3://guide.deuxfleurs.fr
# Pousser sur https://preprod-guide.web.deuxfleurs.fr
aws s3 sync ./public s3://preprod-guide
```
## Développer
@ -18,4 +21,25 @@ aws s3 sync ./public s3://guide.deuxfleurs.fr
zola serve
```
# Refonte du guide
> TODO:
> - [ ] Incorporer la section **Opérations**
>
Notre guide contient toutes les informations relatives à l'association, ses services, son infrastructure, et ses idées. C'est donc un lieu crucial, sur lequel sont amenés à tomber de bien nombreux acteur·ices et personnes externes. Nous sommes aussi insatisfait·es avec certain de ses aspects : nous trouvons que les catégories se recoupent et peuvent porter à confusion. La navigation sur mobile pose certains problèmes, et modifier son contenu demande un certain processus.
Les cinq catégories actuelles, Prise en main, Se former, Vie associative, Infrastructures, et Opérations proviennent de l'application des recommandations de Diátaxis. En pratique, nous constatons qu'elles se révèlent pénibles à utiliser. Elles sont loin d'être exclusives, et il est loin d'être rare que lorsqu'on cherche une information spécifique, celle-ci ait le potentiel de se trouver dans deux ou trois d'entre elles. Nous avons convergé vers une nouvelle organisation. La page d'accueil contiendrait les informations pour découvrir Deuxfleurs, puis présenterait ces quatre catégories :
Utilisation des services : dédiée aux usager·es, aussi technophobes qu'ils peuvent potentiellement être, afin de leur expliquer simplement et clairement comment utiliser nos services.
Motivations : dédiée à la présentation de nos idées, réflexions, arguments, désirs, inspirations et motivations.
Vie associative : dédiée au contenu administratif, et aux considérations autour de Deuxfleurs en tant qu'association.
Infrastructure : dédiée à du contenu technique, pour les administrateur·ices système ou curieux·euses de savoir comment tout cela fonctionne.
Malgré tout, nous pensons qu'il ne faudra pas hésiter à mettre en place des liens pour que les usager·es passent facilement d'une section à l'autre : un sujet peut arborer plusieurs facettes, se plaçant ainsi à plusieurs endroits du guide. De même, la réorganisation va générer beaucoup de liens morts, et s'en occuper demandera un certain travail qu'il ne faudra pas négliger.
Sur mobile, le guide n'affiche pas le menu des sections en permanence. Implémenter un fil d'Ariane permettrait de clarifier cette situation, pour améliorer l'ergonomie.
Il y a donc une quantité de travail non négligeable à réaliser sur notre guide. Nous avons tout intérêt à réaliser la transition le plus en douceur possible. Pour cela, nous allons travailler sur une duplication du guide, à une adresse différente. Une fois la nouvelle version finalisée, nous la mettrons à jour avec les contributions réalisées entre-temps, puis validerons la transition.

View file

@ -2,22 +2,23 @@
title: Guide Deuxfleurs
sort_by: weight
---
Bienvenue sur le guide de [Deuxfleurs](https://deuxfleurs.fr) !
# Découvrir
[Prise en main](@/prise_en_main/_index.md) - Ce manuel vous accompagne dans la découverte de nos outils. C'est par là que vous devriez commencer si vous venez d'arriver, on vous explique comment utiliser nos outils pour rester en contact avec votre famille, organiser une réunion avec votre association ou encore publier une tribune sur le web.
[Utilisation des services](@/services/_index.md) — Ce manuel vous accompagne dans la découverte de nos outils numériques : e-mail, site web, conversation instantanée, édition partagée....
[Se former](@/formations/_index.md) - Ce manuel vous propose de vous former sur les questions portées par l'association, que ce soit sur l'impact social du numérique ou l'administration d'une machine Linux, avec dans l'idée que vous pourrez vous impliquer d'avantage dans nos activités après, en faisant des ateliers ou en participant à opérer les machines et les logiciels.
[Motivations](@/motivations/_index.md) — Cette section est dédiée à la présentation de nos idées, réflexions, arguments, désirs, inspirations et motivations.
[Vie associative](@/vie_associative/_index.md) - Ce manuel traite de tout ce qui concerne l'association, comme ses aspects légaux, les délibérations, ou l'organisation des personnes.
[Vie associative](@/vie_associative/_index.md) — Cette section traite de contenu administratif, et de Deuxfleurs en tant qu'association.
[Infrastructures](@/infrastructures/_index.md) - Ce manuel documente la dimension matérielle du numérique chez Deuxfleurs. On y recense les ordinateurs, le lieu où ils sont, les connexions réseaux nécessaires, l'énergie consommée, l'impact de fabrication, de fin de vie, etc.
[Opérations](@/operations/_index.md) - Ce manuel recense notre savoir-faire technique, il a pour but d'accompagner nos opérateur·ices dans la réalisation de leurs tâches.
[Infrastructure](@/infrastructures/_index.md) — Cette section est dédiée à du contenu technique, pour les administrateur·ices système ou curieux·euses de savoir comment tout cela fonctionne.
# Contribuer
Afin d'apporter une contribution impactante, il est recommandé de lire [Diátaxis](https://diataxis.fr/), un site web qui théorise la documentation. Pour le style d'écriture, les conseils de [StaticCMS](https://www.staticcms.org/docs/writing-style-guide) sont intéressants.
Pour contribuer à ce guide, le plus simple est d'agréger les modifications que vous voulez apporter dans un fichier texte ou LibreOffice et de nous l'envoyer par email à coucou (arobase) deuxfleurs.fr. Un membre de l'association reportera alors vos propositions sur le site web.
Si vous êtes plus expert·e, vous pouvez demander des accès à [l'interface d'administration](https://guide.deuxfleurs.fr/admin/) pour faire directement vos modifications. Si vous connaissez git, vous pourriez aussi vouloir [forker notre dépôt](https://git.deuxfleurs.fr/Deuxfleurs/guide.deuxfleurs.fr).
Si vous êtes plus expert·e, vous pouvez demander des accès à [l'interface d'administration](https://guide.deuxfleurs.fr/admin/) pour faire directement vos modifications.
Si vous connaissez git, vous pourriez aussi vouloir [étudier notre dépôt de code](https://git.deuxfleurs.fr/Deuxfleurs/guide.deuxfleurs.fr).

View file

@ -5,6 +5,7 @@ weight: 30
sort_by: "weight"
extra:
parent: 'formations/_index.md'
hide_from_menu: true
---
Ce manuel vous propose de vous former sur les questions portées par l'association, que ce soit sur l'impact social du numérique ou l'administration d'une machine Linux, avec dans l'idée que vous pourrez vous impliquer d'avantage dans nos activités après, en faisant des ateliers ou en participant à opérer les machines et les logiciels.

View file

@ -1,11 +1,35 @@
---
title: "Infrastructures"
description: "Infrastructures"
weight: 90
weight: 40
sort_by: weight
extra:
parent: 'infrastructures/_index.md'
---
Ce manuel documente la dimension matérielle du numérique chez Deuxfleurs. On y recense les ordinateurs, le lieu où ils sont, les connexions réseaux nécessaires, l'énergie consommée, l'impact de fabrication, de fin de vie, etc.
Cette section du Guide documente la dimension matérielle et opérationnelle du numérique chez Deuxfleurs.
* Inspectez [la salle des machines](@/infrastructures/machines.md), réparties en différents _clusters_ ou [grappes](@/infrastructures/grappes.md)
* Découvrez notre [logithèque](@/infrastructures/logitheque.md), ainsi que nos [créations logicielles](@/infrastructures/creations.md)
* Ouvrez les volumineux manuels d'[opérations](@/infrastructures/operations.md).
# Notre jargon
* _Un nœud_ (ou _node_ en anglais), c'est un **ordinateur unique** configuré pour fournir un **service** en collaborant avec d'autres.
* _Un site_ ou _une zone_, c'est un **ensemble d'ordinateurs qui sont situés au même endroit géographique**.
* _Une grappe_ (ou _cluster_ en anglais), c'est **un ensemble de nœuds** qui **coopèrent** pour fournir un **service**. Même si c'est normalement le cas, une grappe n'est pas forcément composée de plusieurs sites! On peut avoir une grappe sur une seule zone.
Une grappe est **gérée de façon cohérente** (avec le même système logiciel), **plus ou moins autonome** (elle ne dépend pas du reste du monde pour fournir des services web), **par une entité définie** (une personne physique ou un groupe de personnes).
* _Les [opérateur·ices](@/vie_associative/charte_operateurice.md)_ de la grappe ont **deux responsabilités** principales : **la maintenance** de la grappe, et **la protection des données hébergées**.
## _Nota Bene_ : Le Guide n'est jamais à jour
> L'état à jour de nos infrastructures est décrit dans le dépôt [`nixcfg`](https://git.deuxfleurs.fr/Deuxfleurs/nixcfg).
Vu la quantité de logiciels et de machines impliquées (et la fâcheuse tendance de nos membres à déménager), il est fort probable que les informations présentées ici ne soient pas à jour.
Cependant, ces pages ont été vraies il n'y a pas si longtemps : leur lecture vous informera quand même sur notre pratique de l'hébergement de services numériques.
Pour connaître l'état précis de nos infrastructures, il faudrait plutôt lire notre dépôt [`nixcfg`](https://git.deuxfleurs.fr/Deuxfleurs/nixcfg) – qui décrit techniquement nos machines et services à tout instant.
Bonne lecture !

View file

@ -0,0 +1,13 @@
---
title: "Accès opérateurice"
description: "Accès opérateurice"
sort_by: "weight"
weight: 1
extra:
parent: 'infrastructures/operations.md'
---
Ici l'on traite de comment gagner accès au cluster de Deuxfleurs, quand on a reçu la _terrible responsabilité_ de sysadmin. Vous êtes prêt⋅e ? Les étapes sont les suivantes :
- [le dépôt des secrets](@/infrastructures/pass.md)
- [SSH](@/infrastructures/ssh.md)
- [mot de passe linux](@/infrastructures/user_passwd.md)

View file

@ -0,0 +1,25 @@
---
title: "Aerogramme"
description: "Aerogramme : le serveur e-mail du futur"
date: 2021-11-09T12:42:17.716Z
dateCreated: 2021-11-09T12:42:15.729Z
weight: 300
extra:
parent: 'infrastructures/creations.md'
---
<img src="/img/aerogramme-logo.svg" alt="Logo officiel d'Aerogramme : un joli timbre poste" width="200px">
- [Site officiel](https://aerogramme.deuxfleurs.fr)
- [Forge logicielle](https://git.deuxfleurs.fr/Deuxfleurs/aerogramme/)
- [Canal de discussion](https://matrix.to/#/%23aerogramme:deuxfleurs.fr)
Aerogramme est un serveur IMAP ([_Internet Message Access Protocol_](https://fr.wikipedia.org/wiki/Internet_Message_Access_Protocol)) chiffré et distribué reposant sur [Garage](@/infrastructures/garage.md).
## Statut du développement
⚠️ Pas encore fonctionnel, pas utilisé en production chez Deuxfleurs : en cours de développement.\
Le code est ici : <https://git.deuxfleurs.fr/Deuxfleurs/aerogramme>

View file

@ -1,18 +1,21 @@
---
title: "Bottin"
description: "Un annuaire LDAP pour le distribué"
description: "Bottin : l'annuaire LDAP distribué"
date: 2021-11-09T12:40:01.746Z
dateCreated: 2021-11-09T12:39:59.725Z
weight: 10
weight: 100
extra:
parent: 'infrastructures/logiciels.md'
parent: 'infrastructures/creations.md'
---
# Bottin
Bottin est un annuaire LDAP distribué développé en Go visant la simplicité d'installation et d'utilisation (comparé à des solutions comme OpenLDAP ou Keycloak) tout en offrant la résilience que l'on peut attendre d'un système d'authentification. Il se base pour le stockage distribué sur [Consul](https://www.consul.io/).
Bottin est un annuaire LDAP (pour [_Lightweight Directory Access Protocol_](https://fr.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol)) distribué développé en Go visant la simplicité d'installation et d'utilisation (comparé à des solutions comme OpenLDAP ou Keycloak) tout en offrant la résilience que l'on peut attendre d'un système d'authentification.
L'interface d'administration de l'association, [Guichet](@/infrastructures/guichet.md), repose sur Bottin.\
Le stockage des données de Bottin est assuré par le service distribué [Consul](https://www.consul.io/).
## Statut du développement
Bottin est actuellement utilisé en production pour deuxfleurs. Il est cependant toujours en développement actif.
Le code de Bottin se trouve ici : <https://git.deuxfleurs.fr/Deuxfleurs/bottin>
Bottin est actuellement utilisé en production par deuxfleurs. Il est cependant toujours en développement actif.\
Le code est ici : <https://git.deuxfleurs.fr/Deuxfleurs/bottin>

View file

@ -1,19 +1,25 @@
---
title: Développement logiciel
description: Logiciels
weight: 90
title: "Nos créations"
description: "Les logiciels que l'on développe"
weight: 30
sort_by: weight
draft: false
date: 2024-01-24
extra:
parent: infrastructures/_index.md
parent: infrastructures/logitheque.md
---
Cette section recense les logiciels développés par Deuxfleurs pour les besoins spécifiques de son infra.
Cette section recense les logiciels développés par Deuxfleurs pour les besoins spécifiques de son infrastructure : [Garage](@infrastructures/garage.md), [Bottin](@infrastructures/bottin.md), [Guichet](@infrastructures/guichet.md), [Tricot](@infrastructures/tricot.md), [Diplonat](@infrastructures/diplonat.md)...\
Cette page en particulier présente nos choix de conception.
# Principes de conception
Nou essayons de suivre plusieurs principes pour une conception qui correspond au besoin tout en ayant un ensemble de logiciels homogènes.
Deuxfleurs reconnaît l'importance sociale des choix techniques.
N'importe quel outil est imbibé de l'idéologie de la société qui l'a vu naître &ndash; et en retour, il impose son idéologie aux sociétés à venir.
Sachant cela, on arbitre nos choix techniques en regardant en premier lieu ce qu'ils vont impliquer socialement.
Cela fait de nos infrastructures une bizarrerie pour qui est habitué⋅e aux pratiques de l'informatique industrielle.
Nous essayons de suivre plusieurs principes pour une conception qui correspond au besoin tout en ayant un ensemble de logiciels homogènes.
## Vie privée
@ -23,48 +29,52 @@ Que ce soit à l'intérieur ou l'extérieur de l'association, des demandes pour
Quelques propriétés en vrac qu'on peut, ou ne pas, désirer :
### Messagerie instantanée
#### Messagerie instantanée
- Je ne veux pas que le contenu de mes messages et des fichiers que je partage soient accessibles (eg. une photo que j'ai prise, mes réactions)
- Je ne veux pas que les métadonnées autour de mes messages soient accessibles (eg. les salons de discussions auxquels je prends pars, l'horodatage des messages, les personnes avec qui j'échange)
- Je ne veux pas que les métadonnées de communication soient accessibles (eg. quand je me connecte au service, depuis où, si j'intéragis sur le réseau, etc.), ces données permettent parfois d'inférer des métadonnées sur le protocole (autres personnes dans le salon de communication, horodatage, etc.)
- Je ne veux pas que le contenu de mes messages et des fichiers que je partage soient accessibles à des tiers (_e.g._ une photo que j'ai prise, mes réactions).
- Je ne veux pas que les métadonnées autour de mes actions soient accessibles à des tiers (_e.g._ les salons de discussions auxquels je prends part, l'horodatage des messages, les personnes avec qui j'échange).
- Je ne veux pas que mes métadonnées de communication soient accessibles (_e.g._ quand je me connecte à un service, depuis où, si j'intéragis sur le réseau, etc.), ces données permettent parfois d'inférer des métadonnées sur le protocole (autres personnes dans le salon de communication, horodatage, etc.).
### Courrier électronique (de l'email au mixnet)
#### Courrier électronique (de l'e-mail au mixnet)
- Je ne veux pas que le contenu de mes emails et pièces jointes soit lisible (eg. le doc que j'ai joint)
- Je ne veux pas que les métadonnées autour de mon message soient accessibles (eg. le destinataire, l'expéditeur, l'horodatage, le client email utilisé, le sujet du mail, le dossier dans lequel il est stocké)
- Je ne veux pas que les métadonnées de communication soient accessibles (eg. quand je me connecte au service email, depuis où, quand j'intéragis sur le réseau), ces données permettent parfois d'inférer des métadonnées sur le protocole (destinataires, présence de pièce jointe, etc.)
- Je ne veux pas que le contenu de mes e-mails et pièces jointes soit lisibles par des tiers (_e.g._ le doc que j'ai joint).
- Je ne veux pas que les métadonnées autour de mon message soient accessibles (_e.g._ le destinataire, l'expéditeur, l'horodatage, le client e-mail utilisé, le sujet du mail, le dossier dans lequel il est stocké).
- Je ne veux pas que mes métadonnées de communication soient accessibles (_e.g._ quand je me connecte au service e-mail, depuis où, quand j'intéragis sur le réseau).
Ces données peuvent permettre d'inférer des informations importantes sur mes correspondant⋅es et moi-même (destinataires, présence de pièce jointe, etc.).
### Synchronisation et collaboration sur des fichiers
- Je ne veux pas que le contenu de mes fichiers soit accessible
- Je ne veux pas que les métadonnées de mon fichier soient accessibles (eg. nom du fichier, dossier, format, taille, hash, etc.)
- Je ne veux pas que les métadonnées de communication soient accessibles (eg. quand j'accède au document, depuis où, qui d'autre, combien de fois, etc.), ces données permettent parfois d'inférer des métadonnées sur le protocole (taille, collaborateurs, type, etc.)
#### Synchronisation et collaboration sur des fichiers
- Je ne veux pas que le contenu de mes fichiers soit accessible à des personnes non autorisées.
- Je ne veux pas que les métadonnées de mes fichiers soient accessibles (_e.g._ nom du fichier, dossier, format, taille, hash, etc.).
- Je ne veux pas que mes métadonnées de communication soient accessibles (_e.g._ quand j'accède au document, depuis où, qui d'autre, combien de fois, etc.).
Ces données peuvent permettre d'inférer des informations importantes sur mes correspondant⋅es et moi-même (taille, collaborateurs, type, etc.).
## Attaquants
## Modèles d'attaquants
Quelques attaquants que l'on peut, ou ne pas, considérer :
Dans le domaine de la sécurité, on commence toujours par décrire l'« attaquant » : ses capacités, le temps dont iel dispose...
Car il n'existe aucune défense qui protège de toutes les attaques : il faut donc savoir contre qui on est en mesure de se défendre, ou pas.
Suivent quelques attaquants potentiels :
- Hébergeur de la machine (eg. branche un clavier et un écran sur l'ordi et récupère un accès admin)
- Administrateur Système (eg. utilise ses accès privilégiés pour accéder volontairement ou non à du contenu privé)
- Développeurs (eg. ajout d'une porte dérobée au moment de l'écriture du code)
- Chaîne logistique (eg. ajout d'une porte dérobée au moment de déployer l'app sur les serveurs ou le terminal de l'utilisateur)
- Opérateur Internet (eg. Orange)
- Regroupement d'opérateurs internet (cf "Tor netflow")
- Personne externe via internet (eg. hacker)
- Personne externe physique (eg. voleur)
- Regroupement d'acteurs (eg. opérateurs internet, externe physique ET internet)
- Utilisateurs (eg. pas de chiffrement sur son téléphone)
- Administrateur Système (_e.g._ utilise ses accès privilégiés pour accéder volontairement ou non à du contenu privé)
- Hébergeur de la machine non administrateur (_e.g._ branche un clavier et un écran sur l'ordi et récupère un accès admin)
- Développeurs (_e.g._ ajout d'une porte dérobée au moment de l'écriture du code d'un logiciel qu'on utilise)
- Chaîne logistique (_e.g._ ajout d'une porte dérobée au moment de déployer un logiciel sur les serveurs ou le terminal de l'utilisateur)
- Opérateur Internet (_e.g._ Orange), voit passer une partie de notre trafic
- Regroupement d'opérateurs Internet (cf "Tor netflow")
- Personne externe via Internet (_e.g._ hacker)
- Personne externe physique (_e.g._ voleur)
- Regroupement d'acteurs (_e.g._ opérateurs internet, externe physique ET internet)
- Usager⋅es, qui peuvent se faire pirateur leurs données par ailleurs (_e.g._ téléphone non protégé)
## Un exemple de ce qu'on pourrait faire
Prenons l'exemple de la messagerie instantanée. Pour l'instant, on peut définir les types de réseaux suivants :
- centralisé, pas chiffré (Messenger)
- centralisé, chiffé de bout en bout (avec toute une gamme d'implems, la meilleure étant peut-être Signal)
- fédéré, pas chiffré (E-mail, IRC, XMPP sans omemo, Matrix sans E2EE)
- centralisé, chiffé de bout en bout (il y en a une grande quantité, la meilleure étant peut-être Signal)
- fédéré, pas chiffré (E-mail, IRC, Matrix sans chiffrement de boût en boût (E2EE), XMPP sans Omemo)
- fédéré, chiffré (XMPP + Omemo, Matrix + E2EE)
- distribué, chiffré (Tox, Retroshare)
- distribué avec des mécanisme d'anonymat fort (Freenet, Mix networks, ...)
- distribué avec des mécanisme d'anonymat fort (Freenet, Mix networks)
Seule la dernière catégorie s'adresse au cas d'un "global passive attacker". On peut imaginer d'abandonner l'idée d'avoir une protection très efficace contre ce dernier car ça serait très contraignant sur le design et l'utilisabilité, et les cas où on en aurait vraiment besoin sont des cas particuliers où on peut faire l'effort d'utiliser une solution adaptée.
@ -92,5 +102,5 @@ Concernant la seconde approche, celle-ci semble beaucoup plus à notre portée :
## Ressources
- https://about.psyc.eu/Federation et https://about.psyc.eu/PSYC2
- Définition d'un mixnet : https://www.youtube.com/watch?v=dQtk0NcTseg
- [https://about.psyc.eu/Federation](https://git.deuxfleurs.fr/Deuxfleurs/nixcfg) et [https://about.psyc.eu/PSYC2](https://about.psyc.eu/PSYC2)
- Définition d'un mixnet : [https://www.youtube.com/watch?v=dQtk0NcTseg](https://www.youtube.com/watch?v=dQtk0NcTseg)

View file

@ -0,0 +1,18 @@
---
title: "D53"
description: "D53 : entretient les petites routes DNS"
date: 2025-04-13T23:53:00.000Z
dateCreated: 2021-11-09T12:39:25.808Z
weight: 210
extra:
parent: 'infrastructures/creations.md'
---
D53 est un outil de mise à jour automatique de routes DNS.\
Ses données de configuration sont hébergées de façon distribuée par [Consul](https://www.consul.io/).\
Il utilise l'API de l'hébergeur de nos zones DNS (à date, Gandi, que nous ne conseillons pas) pour les mettre à jour.
## Statut du développement
D53 est actuellement utilisé en production par Deuxfleurs. Il est cependant toujours en développement actif.\
Le code est ici : <https://git.deuxfleurs.fr/Deuxfleurs/d53>

View file

@ -1,9 +1,9 @@
---
title: "Développement"
description: "Développement"
weight: 30
weight: 40
extra:
parent: 'infrastructures/machines.md'
parent: 'infrastructures/grappes.md'
---
Les serveurs de développement hébergent les outils qui nous permettent de travailler sur le logiciel,

View file

@ -1,17 +1,16 @@
---
title: "Diplonat"
description: ""
description: "Diplonat : murmure à l'oreille des routeurs"
date: 2021-11-09T12:42:17.716Z
dateCreated: 2021-11-09T12:42:15.729Z
weight: 30
weight: 200
extra:
parent: 'infrastructures/logiciels.md'
parent: 'infrastructures/creations.md'
---
# Diplonat
Diplonat est un utilitaire qui facilite l'hébergement de services dans un environnement réseau dynamique. Le cas le plus commun est lorsqu'il faut exposer un serveur situé dans un sous-réseau domestique, derrière un routeur souvent fourni par un FAI grand public. Diplonat aide alors à gérer les règles NAT de la passerelle, les règles de pare-feu du serveur lui-même, et potentiellement l'enregistrement DNS pour qu'il suive l'IP dynamique du sous-réseau.
## Status du développement
## Statut du développement
Diplonat est en développement, le code est versionné ici : <https://git.deuxfleurs.fr/Deuxfleurs/diplonat>. Il est exploité dans le cadre des activités de deuxfleurs.
Diplonat est actuellement utilisé en production par Deuxfleurs. Il est cependant toujours en développement actif.\
Le code est ici : <https://git.deuxfleurs.fr/Deuxfleurs/diplonat>

View file

@ -0,0 +1,191 @@
---
title: E-mails
description: Comprendre le fonctionnement des e-mails
weight: 10
draft: false
date: 2023-03-16
extra:
parent: 'infrastructures/operations.md'
---
## Serveurs
- SMTP: Postfix
- IMAP: Dovecot (fixé sur une machine avec un backup)
## Enregistrements DNS de la zone `deuxfleurs.fr`
| nom | type | valeur | signification |
| --- | ---- | ------ | ------------- |
| `@` | `MX` | `12 smtp.deuxfleurs.fr` | Serveur que chercheront à joindre les gens qui veulent envoyer un courrier à une addresse `@deuxfleurs.fr` |
| `smtp._domainkey` | `TXT` | `v=DKIM1; p=<clef publique>` | Enregistrement DKIM (voir ci-dessous) |
| `default._domainkey` | `TXT` | `v=DKIM1; p=<clef publique>` | Ancien enregistrement DKIM (voir ci-dessous) |
| `@` | `TXT` | `v=spf1 [...] -all` | Enregistrement SPF (voir ci-dessous) |
| `_dmarc` | `TXT` | `v=DMARC1; [...]` | Enregistrement DMARC (voir ci-dessous) |
| `smtp` | `A` | défini par D53 | Addresse IPv4 pour parler au serveur Postfix |
| `imap` | `A` | défini par D53 | Addresse IPv4 pour parler au serveur Dovecot |
| `201.80.66.82.in-addr.arpa.` | `PTR` | `orion.site.deuxfleurs.fr.` | Reverse DNS indiquant le nom de domaine correspondant à l'IP du serveur Postfix |
| `orion.site` | `A` | `82.66.80.201` | Reverse DNS indiquant le nom de domaine correspondant à l'IP du serveur Postfix |
## DKIM
Le mécanisme DKIM permet au serveur d'ajouter une signature sur les messages qui sortent de Deuxfleurs, pour que les destinataires puissent en attester la validité.
Il s'agit d'une signature RSA basée sur une paire de clefs privée/publique. La clef publique est donée dans l'enregistrement DNS DKIM, et la clef privée est connue
uniquement du serveur Postfix. La signature de chaque message est ajoutée dans un en-tête spécifique.
Référence : <https://www.cloudflare.com/learning/dns/dns-records/dns-dkim-record/>
**Exemple d'enregistrements DNS :**
```
default._domainkey.deuxfleurs.fr. 10800 IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtdZp4qrgZR+6R7HeAkuLGJ/3L/6Ungvf5zwrMq6T8Tu931j2G4lYuPtsxyn9fZkT4y7DlX0waktLDB" "OCwf7X78nLEWjAFWiJTeWGRGhRdYRUFpscs9NUN0P+46jKlabibG3XTKd1DeAmywTu6o1oO03yiolrgKD1zgyDRFeUTfSwZIdPrdbcBSA1arda4WFtcBIrSygM9b4jtlqfQwGDrsMLbCBfVHDn4Wfm" "DWyNg0gDAkuLrYClNETk6aqIyj9fC8srKri0Qp3cRagCn+fjBvuxP35qWWJH7Rnnh/tuEDr1ufuNYO2KgJZ7JdMidUotxXE8cfU+OrEWQf4mIYeJ4wIDAQAB"
smtp._domainkey.deuxfleurs.fr. 1800 IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtdZp4qrgZR+6R7HeAkuLGJ/3L/6Ungvf5zwrMq6T8Tu931j2G4lYuPtsxyn9fZkT4y7DlX0waktLDB" "OCwf7X78nLEWjAFWiJTeWGRGhRdYRUFpscs9NUN0P+46jKlabibG3XTKd1DeAmywTu6o1oO03yiolrgKD1zgyDRFeUTfSwZIdPrdbcBSA1arda4WFtcBIrSygM9b4jtlqfQwGDrsMLbCBfVHDn4Wfm" "DWyNg0gDAkuLrYClNETk6aqIyj9fC8srKri0Qp3cRagCn+fjBvuxP35qWWJH7Rnnh/tuEDr1ufuNYO2KgJZ7JdMidUotxXE8cfU+OrEWQf4mIYeJ4wIDAQAB"
default._domainkey.adnab.me. 3600 IN TXT "v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHd2zQXgGAoFX2CFaRqvWw1oBGhbUIRB5QXPxE9nvWwe/og5LjZBcnKoInPWsKYEz/f5kmpTDq4RZT3PMmjm+u5IuvyQ2LJcdIKSW6t8KWa7yztk2D87f3Lono6WJwvY8RHdGPqKS5RXfEdQFriXiSCAO5ZSQrNXQ5yiQ9T1ptGwIDAQAB; t=s"
```
**Structure :**
- Le nom de domaine est composé d'un selecteur (souvent `default`, on a ici aussi `smtp`) qui permet de distinguer différentes clefs pour signer les messages.
Il est formé de la manière suivante: `<selecteur>._domainkey.<domaine>`
- La valeur est composé de plusieurs champs entre guillemets séparés par des `;`, le champ `v` peut contenir la version de DKIM utilisée (ici `v=DKIM1`)
- Le champ `p` contient la clef publique
- Les autres champs sont optionels
**Application à la vérification d'une signature (exemple) :**
Prenons la signature suivante :
```
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=deuxfleurs.fr; s=smtp;
t=1679050854; bh=AkDk3Tm0bnC7b6dvTjRXJbThLE6h/IStsBGIYGa+q7c=;
h=Date:To:From:Subject:From;
b=Qll5ASi9DmD2rw9LK1vJOahE77Pd/HNDbmrkrOCt4S8Nu42WtJXXOtiwo9J3KGPzR
zA2Cw5oCUB0HW5ere8RkINsUj9X/nxOovxFaJw4LSrgEYxQh7unaGBs6Ecw6k2Aqc/
oMhNE2OVCSlLkJVUQbgzwBUcZuwndlki6yYoJXkSPMuZ4tFbhgjSaxneRgUvPocYw3
Vqc/yMEAbofrlaEf6nSNQZL+LSE4IEBeudsv3JodMn12OYAijhO0rrHHsinK9UkM3M
PEEISyatG6RzE6veh4VVv3PTyJMYouQI7fKNooLuDmlGsdSTV9HRo4UvQeOQT1SL/7
KvgJtR0Hqz3mQ==
```
Cette signature contient les champs suivants :
- `v` (obligatoire) indique la version, doit toujours être à `1`
- `a` (obligatoire) indique l'algorithme de signature, généralement `rsa-sha256`
- `d` (obligatoire) indique le domaine pour lequel la signature est produite
- `s` (obligatoire) indique le sélecteur de la clef DKIM utilisée (ici `smtp` pour utiliser la clef `smtp._domainkey.deuxfleurs.fr`)
- `h` (obligatoire) indique la liste des en-têtes signés
- `bh` (obligatoire) donne le hash du contenu du message
- `b` (obligatoire) donne la signature à proprement parler, qui signe les en-têtes `h` et le hash du contenu `bh`
- `t` (recomandé) donne le timestamp de la signature, i.e. sa date et son heure
- `c` est un paramètre additionnel de la méthode de calcul de la signature
**Chez Deuxfleurs:**
- L'en-tête de signature est rajouté par notre serveur Postfix.
- La clef privée est stockée dans Consul, et est injectée dans le conteneur Postfix au lancement.
- Les enregistrements DNS pour DKIM sont installés manuellement.
- Pour tous les autres domaines dont le courrier est traîté par les serveurs Deuxfleurs, on utilise un enregistrement DKIM en CNAME vers `smtp._domainkey.deuxfleurs.fr` pour que la gestion des règles soit centralisée via l'enregistrement défini sur les DNS Deuxfleurs.
## SPF
L'enregistrement SPF sert à aider le serveur de destination à déterminer si le message reçu est légitime ou non, en vérifiant des contraintes sur l'addresse IP par laquelle il a été reçu.
Normalement, c'est l'addresse IP du serveur SMTP de Deuxfleurs, donc on sait qu'on doit rejeter tous les messages venant d'autres addresses.
Références : <https://fr.wikipedia.org/wiki/Sender_Policy_Framework>
**Exemple d'enregistrements DNS :**
```
deuxfleurs.fr. 300 IN TXT "v=spf1 mx:deuxfleurs.fr a:orion.site.deuxfleurs.fr ip4:82.66.80.201 ip6:2a01:e0a:28f:5e60::/64 -all"
adnab.me. 3600 IN TXT "v=spf1 mx mx:adnab.me include:mx.ovh.com -all"
ietf.org. 1794 IN TXT "v=spf1 ip4:50.223.129.192/26 ip6:2001:559:c4c7::/48 a:ietf.org mx:mail.ietf.org ip4:192.95.54.32/27 ip6:2607:5300:60:9ccf::/64 ip4:158.69.166.0/27 ip6:2607:5300:203:1b26::/64 ip4:4.31.198.32/27 ip6:2001:1900:3001:11::/64 include:_spf.google.com ~all"
```
**Structure :**
L'enregistrement commence par `v=spf1`, puis contient un ensemble de directives formées de la manière suivante:
- Un préfixe pouvant être `+` (résultat favorable), `?` (résultat neutre/aucune règle), `~` (entre le neutre et l'échec, utile pour déboguer), `-` (échec/défavorable). Le préfixe peut être omis, ce qui est interprété comme le préfixe `+`.
- Une paire type/valeur, avec les types suivants:
- `mx` : utiliser un enregistrement DNS de type MX. L'enregistrement `MX` donne un ou plusieurs noms d'hôtes, qui sont eux-même des noms DNS. Ces noms sont ensuite résolus en `A` ou `AAAA` pour trouver les addresses correspondantes. Attention, un enregistrement `MX` n'est pas sensé pointer sur un `CNAME`, il doit pointer directement sur des enregistrements `A` et `AAAA` !
- `ip4` : contient directement une plage d'addresses IPv4
- `ip6` : contient directement une plage d'addresses IPv6
- `a` : contient un nom d'hôte à résoudre en `A` ou `AAAA` (pouvant utiliser des `CNAME`)
- `include` : contient un nom de domaine ayant une autre règle SPF à inclure
- `ptr` : désuet
- Ou bien le mot `all`, qui correspond à tous les expéditeurs dont l'addresse ne correspond pas aux autres règles
Par exemple, dans les exemples ci-dessus, voici comment interpréter les différentes règles:
- `mx:deuxfleurs.fr` : accepter le message si l'IP de l'expéditeur est trouvable en suivant les enregistrements `MX` associés à `deuxfleurs.fr`.
- `ip4:82.66.80.201` : accepter le message si l'IP de l'expéditeur est `82.66.80.201`
- `include:mx.ovh.com` : accepter le message si il serait accepté par la règle du domaine `mx.ovh.com` (consultable en faisant `dig TXT mx.ovh.com`)
- `a:ietf.org` : accepter le message si il vient de l'addresse IP de `ietf.org` (consultable en faisant `dig A ietf.org`)
- `-all` : rejeter strictement tous les messages venant d'une autre addresse IP
**Chez Deuxfleurs :**
- L'enregistrement SPF, installé manuellement, contient `mx:deuxfleurs.fr`, ce qui signifie que les addresses IP sont celles présentes dans l'enregistrement `MX` pour `deuxfleurs.fr`.
- Cet enregistrement est fixé manuellement pour pointer sur le serveur `smtp.deuxfleurs.fr`.
L'enregistrement `A` pour `smtp.deuxfleurs.fr` est mis à jour automatiquement par D53 pour pointer vers l'IPv4 de la machine sur laquelle tourne Postfix.
- L'enregistrement SPF contient également `a:orion.site.deuxfleurs.fr`, qui contient également l'IPv4 de cette machine ; on garde cette règle en second recours au cas où il y aurait un problème avec la précédente, pour éviter de rejeter du courrier valide.
- L'enregistrement SPF contient également l'addresse IPv4 et la plage d'addresses IPv6 de la box à Orion (site où le serveur SMTP est actuellement déployé), pour en dernier recours éviter de rejeter des mails en cas de soucis avec les règles précédentes.
- **L'enregistrement SPF doit être mis à jour manuellement en cas de reconfiguration du serveur SMTP, en particulier si celui-ci change de site ou si les addresses IP changent.**
- Pour tous les autres domaines dont le courrier est traîté par les serveurs Deuxfleurs, on utilise un enregistrement SPF `include:deuxfleurs.fr` pour que la gestion des règles soit centralisée via l'enregistrement défini sur les DNS Deuxfleurs.
## DMARC
DMARC est un mécanisme qui permet de mieux contrôler la réaction des serveurs de destination en fonction des tests DKIM et SPF.
Par exemple, on peut préciser que tous les messages sont authentifiés par DKIM et SPF, et si un de ces tests échoue, le message doit nécessairement être rejeté.
On peut aussi demander à recevoir des rapports en cas d'échec.
Référence : <https://fr.wikipedia.org/wiki/DMARC>
**Exemple d'enregistrements DNS :**
```
_dmarc.deuxfleurs.fr. 300 IN TXT "v=DMARC1; p=reject; sp=reject; adkim=s; fo=1; aspf=s; ruf=mailto:prod-sysadmin@deuxfleurs.fr; rua=mailto:prod-sysadmin@deuxfleurs.fr; rf=afrf; pct=100; ri=86400"
_dmarc.adnab.me. 3600 IN TXT "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; rua=mailto:postmaster@adnab.me!10m; ruf=mailto:postmaster@adnab.me!10m; rf=afrf; pct=100; ri=86400"
```
L'enregistrement peut contenir les champs suivants:
- `v=DMARC1` indique la version de DMARC utilisée
- `p` : procédure en cas d'échec avec le domaine principal (`none/quarantaine/reject`)
- `sp` : comme `p` mais s'applique aux sous-domaines
- `adkim` : indique si on doit appliquer la règle DKIM de manière stricte (`s`, le nom de domaine doit correspondre exactement) ou relaxée (`r`, des variations sur le nom de domaine sont permises)
- `aspf` : indique si on doit appliquer la règle SPF de manière stricte (`s`) ou relaxée (`r`)
- `ruf` : addresse mail à laquelle envoyer un rapport d'échec détaillé à chaque échec de validation
- `fo` : condition pour l'envoi d'un rapport d'échec détaillé (1 = si soit DKIM soit SPF a échoué)
- `rua` : addresse mail à laquelle envoyer un rapport d'échec aggrégé périodiquement
- `ri` : intervalle en secondes entre l'envoi des rapports aggrégés (86400 = 24h)
- `rf` : format des rapports (`afrf` est la seule valeur officiellement supportée)
- `pct` : proportion de messages à rejeter en cas d'échec
**Chez Deuxfleurs :**
- L'enregistrement DMARC est configuré pour rejeter de manière strict tout message ne passant pas la vérification SPF ou DKIM.
- Les rapports d'erreur doivent être envoyés à l'addresse `prod-sysadmin@deuxfleurs.fr` qui est consultés par les administrateurs systèmes de Deuxfleurs.
- Pour tous les autres domaines dont le courrier est traîté par les serveurs Deuxfleurs, on utilise un enregistrement DMARC en CNAME vers `_dmarc.deuxfleurs.fr` pour que la gestion des règles soit centralisée via l'enregistrement défini sur les DNS Deuxfleurs.
## Reverse DNS
L'enregistrement reverse DNS peut être utilisé par le serveur de destination
pour connaître le nom d'hôte correspondant à l'addresse IP du serveur qui a
envoyé le mail. Cet enregistrement doit idéalement correspondre à un nom de
domaine qui lui-même résoud à nouveau vers la même addresse IP.
L'application de cette règle de filtrage est à la discrétion des différents hébergeurs
mail, elle ne rentre pas dans le cadre défini par DMARC.
**Exemple d'enregistrements reverse DNS :**
```
201.80.66.82.in-addr.arpa. 86179 IN PTR orion.site.deuxfleurs.fr.
206.118.187.37.in-addr.arpa. 86400 IN PTR shiki.adnab.me.
```

View file

@ -0,0 +1,85 @@
---
title: Nom de domaine personnalisé
description: Nom de domaine personnalisé (+ migration d'une boîte existante)
weight: 10
draft: false
date: 2023-03-16
extra:
parent: 'infrastructures/email.md'
---
Deuxfleurs peut héberger vos e-mails, même s'ils ne finissent pas en `@deuxfleurs.fr` !
> Vous voulez votre propre nom de domaine mais ne savez pas comment faire ? [On vous l'explique ici](@/services/mettre-place-DNS.md).
Nous vous expliquons ici comment héberger une boîte mail avec un nom de domaine vous appartenant, en incluant la récupération (optionnelle) des e-mails existants chez votre ancien fournisseur vers les serveurs de Deuxfleurs.
1. Si vous souhaitez rapatrier vos anciens e-mails de l'ancien fournisseur vers Deuxfleurs, sauvegardez vos e-mails sur votre machine :
> Nous présentons une méthode fiable ([cf. ce guide](https://github.com/joeyates/imap-backup/blob/main/docs/migrate-server-keep-address.md)), mais qui demande de bonnes connaissances en informatique. Vous pourriez avoir besoin de l'aide d'un⋅e administrateur⋅ice de Deuxfleurs.
>
> Si vous lui déléguez complètement l'opération, iel aura besoin de vos mots de passe chez votre ancien opérateur mail, chez Deuxfleurs, et manipulera votre sauvegarde d'e-mails. On vous recommande dans ce cas de changer vos mots de passe avant et après l'opération, et de vous armer de confiance.
* Faites de la place ! Chez votre fournisseur actuel, supprimez votre corbeille, vos vieux e-mails volumineux et inutiles, etc.
* Téléchargez l'outil [`imap-backup`](https://github.com/joeyates/imap-backup/).
* Utilisez `imap-backup setup` pour renseigner vos identifiants ainsi que le serveur IMAP de votre fournisseur mail actuel.
* Lancez `imap-backup backup --accounts=<votre_adresse_mail>`, ce qui va télécharger tous vos e-mails sur votre ordinateur (c'est long).
1. Communiquez l'adresse courriel souhaitée à un⋅e administrateur⋅ice de Deuxfleurs. Iel devra réaliser les opérations suivantes :
* ajouter le nom de domaine à la liste des [domaines gérés par Deuxfleurs dans le LDAP](https://guichet.deuxfleurs.fr/admin/ldap/ou=domains,ou=groups,dc=deuxfleurs,dc=fr). Pour cela, une fois sur la page guichet :
* appuyer sur le bouton vert « +objet »
* Dans `Identifiant`, on peut mettre l'identifiant de l'usager⋅e concerné⋅e
* Dans `Description`, mettre quelque chose comme `Nom de domaine de XXX`
* Dans `StructuralObjectClass`, mettre `groupOfNames`
* Dans `ObjectClass`, mettre `groupOfNames`, puis, à la ligne, `top`, et, encore à la ligne, `dNSDomain`
* Valider avec le bouton « Créer l'objet »
* Ajouter un attribut `domain` et y mettre le nom de domaine de l'adresse courriel souhaitée
* ajouter le nom de domaine à la [table de signature DKIM](https://git.deuxfleurs.fr/Deuxfleurs/nixcfg/src/branch/main/cluster/prod/app/email/config/dkim/signingtable). Une fois fait, iel devra la déployer :
* il faut lancer le `tlsproxy` du dépôt `nixcfg` en visant `prod`
* sur un autre terminal, se connecter en SSH sur une de ces machines
* sur encore un autre terminal, en local, à l'intérieur du dossier `nixcfg`, se situer à l'emplacement `cluster/prod/app/email/deploy`. Puis lancer `nomad plan email.hcl`. Si et seulement si la sortie paraît satisfaisante, alors lancer `noman run email.hcl`.
* ajouter l'adresse courriel dans l'entrée `mail` de votre profil utilisateur LDAP. Il doit y avoir une adresse courriel par ligne, et il faut laisser l'adresse en `@deuxfleurs.fr` à la première. On peut ici ajouter autant d'alias que l'on veut, et tout sera reçu sur la même boîte de réception.
1. Vous devez ensuite rajouter les entrées pour votre nom de domaine en éditant votre zone DNS (si vous n'y comprenez rien, faites-vous aider de l'admin) :
```
# L'entrée MX pour recevoir les e-mails
@ MX 10 smtp.deuxfleurs.fr.
# L'entrée SPF pour autoriser notre IP à délivrer des e-mails en votre nom
@ TXT "v=spf1 include:deuxfleurs.fr -all"
# L'entrée DKIM pour autoriser notre postfix+opendkim à délivrer des e-mails en votre nom
smtp._domainkey CNAME smtp._domainkey.deuxfleurs.fr.
# L'entrée DMARC pour indiquer le comportement à adopter si les contraintes précédentes ne sont pas satisfaites
_dmarc CNAME _dmarc.deuxfleurs.fr.
```
1. À partir de ce point, vous pouvez envoyer et recevoir vos e-mails via notre infrastructure. [Suivez le Guide !](@/prise_en_main/email.md)
Il faudra par contre attendre 24/48h pour que les changements DNS se propagent dans le monde entier. Vous pourriez encore recevoir quelques e-mails chez votre ancien fournisseur dans l'intervalle. Passé ce délai, vérifiez dans l'interface e-mail de votre ancien fournisseur.
1. Si vous avez sauvegardé vos e-mails sur votre machine, il est finalement temps de les envoyer sur les serveurs de Deuxfleurs (toujours avec l'aide optionnelle de l'admin, si vous êtes bloqué⋅e) :
* Assurez-vous d'avoir terminé la sauvegarde en étape 1.
* Trouvez sur votre machine le dossier contenant la configuration d'`imap-backup` et votre sauvegarde d'e-mails (`~/.imap-backup/` sur Linux).
* Modifiez manuellement le fichier de configuration d'`imap-backup` et le nom du dossier de votre sauvegarde comme expliqué dans [le guide sus-cité](https://github.com/joeyates/imap-backup/blob/main/docs/migrate-server-keep-address.md). Imaginons que votre adresse mail est `moi@chezmoi.fr` :
* Remplacez à la ligne `username` votre e-mail par `moi-avant@chezmoi.fr` dans le fichier de configuration `config.json` d'`imap-backup`.
* Dans le même fichier, à la ligne `local_path`, remplacez le nom du dossier `moi_chezmoi.fr` par `moi-avant_chezmoi.fr`.
* Renommez le dossier `moi_chezmoi.fr` en `moi-avant_chezmoi.fr` dans le dossier d'`imap-backup`.
* Utilisez `imap-backup setup` pour renseigner vos identifiants Deuxfleurs (toujours le même e-mail, et votre mot de passe chez nous), ainsi que le serveur IMAP de Deuxfleurs (`imap.deuxfleurs.fr`).
* C'est le grand moment de la migration. Toujours en imaginant que votre adresse mail est `moi@chezmoi.fr`, lancez la commande suivante :
```imap-backup migrate moi-avant@chezmoi.fr moi@chezmoi.fr --destination-delimiter "."```
La commande devrait produire peu de lignes, et vous devriez voir (par exemple sur [sogo.deuxfleurs.fr](https://sogo.deuxfleurs.fr)) vos anciens e-mails apparaître. Si ce n'est pas le cas, appelez à l'aide.
Une fois cette longue commande terminée, c'est terminé. Bienvenu⋅e chez nous :)

View file

@ -3,9 +3,9 @@ title: "Énergie"
description: "Consommation électrique"
date: 2021-11-09T12:54:33.129Z
dateCreated: 2021-11-09T12:54:30.985Z
weight: 20
weight: 40
extra:
parent: 'infrastructures/_index.md'
parent: 'infrastructures/machines.md'
---

View file

@ -1,14 +1,19 @@
---
title: "Garage"
description: ""
description: "Garage : le stockage objet pour les masses"
date: 2021-11-09T12:42:59.273Z
dateCreated: 2021-11-09T12:42:57.245Z
weight: 40
weight: 10
extra:
parent: 'infrastructures/logiciels.md'
parent: 'infrastructures/creations.md'
---
# Garage
<img src="/img/garage-logo.svg" alt="Logo officiel de Garage : une sorte de crabe" width="200px">
- [Site officiel](https://garagehq.deuxfleurs.fr)
- [Forge logicielle](https://git.deuxfleurs.fr/Deuxfleurs/garage/)
- [Canal de discussion](https://matrix.to/#/%23garage:deuxfleurs.fr)
Garage est un utilitaire de stockage d'objets léger, distribué, et compatible avec l'interface Amazon S3. Il poursuit les objectifs suivants :
@ -24,17 +29,22 @@ Il ne cherche pas à :
* implémenter complètement l'API de S3
* implémenter des codes d'effacement (notre modèle consiste en dupliquer les données telles quelles sur plusieurs nœuds)
À l'heure actuelle, Garage est déployé sur notre grappe de serveurs (ce site même est hébergé sur Garage !), mais doit tout de même être considéré comme une démonstration technique.
## Statut du développement
Si vous voulez en savoir plus sur Garage, vous pouvez consulter notre [documentation](https://garagehq.deuxfleurs.fr/) :
Garage est un logiciel mature (v1.0 en avril 2024), déployé en [production](@/infrastructures/production.md) par Deuxfleurs depuis 2020, soutenu par une communauté mondiale qui le développe et l'administre, de la plus petite à la plus grand échelle.\
Le développement de Garage a bénéficié de plusieurs subventions européennes NGI/NLnet.
## En savoir plus
Pour plus d'information, vous pouvez consulter la [documentation de Garage](https://garagehq.deuxfleurs.fr/) :
* [Introduction rapide](https://garagehq.deuxfleurs.fr/documentation/quick-start/) : apprenez à interagir efficacement avec Garage
* [Travaux liés](https://garagehq.deuxfleurs.fr/documentation/design/related-work/) : pour comprendre pourquoi nous avons développé notre propre logiciel au lieu d'en choisir un existant
* [Technique interne](https://garagehq.deuxfleurs.fr/documentation/design/internals/) : une brève description des modèles de données utilisés dans Garage
Liens externes :
Ou lire nos communications :
* [Dépôt](https://git.deuxfleurs.fr/Deuxfleurs/garage/) : Garage est un logiciel libre développé sur notre propre instance Gitea
* Article de médiation scientifique (PDF, français) : [Présentation de Deuxfleurs & Garage](https://www.societe-informatique-de-france.fr/wp-content/uploads/2023/11/1024_22_2023_171.html), novembre 2023
* Présentation scientifique (PDF, anglais) : [Deuxfleurs & Garage presentation](https://git.deuxfleurs.fr/Deuxfleurs/garage/raw/branch/main/doc/talks/2023-01-18-tocatta/talk.pdf), janvier 2023
* Présentation militante (vidéo & PDF, français) : [De l'auto-hébergement à l'entre-hébergement : Garage, pour conserver ses données ensemble](@/formations/capitole-du-libre-2022.md), novembre 2022

View file

@ -0,0 +1,51 @@
---
title: "Grappes"
description: "Les grappes"
weight: 10
sort_by: "weight"
extra:
parent: 'infrastructures/machines.md'
---
Les machines gérées par Deuxfleurs ont différents _rôles_, qui définissent à quelle grappe ou _cluster_ elles appartiennent.
\
Elles séjournent dans différentes _zones géographiques_, au domicile de certain⋅es des [opérateur⋅ices](@/vie_associative/charte_operateurice.md), souvent par groupe de 2 ou 3 machines.
<!-- Nous avons mis en réseau une dizaine de machines, des ordinateurs de bureau, réunies en deux principaux rôles ou _clusters_ : -->
- [Production](@/infrastructures/production.md) - Les serveurs de production sont ceux qui font tourner les services accédés par les usager·es (sites web, e-mails, clavardage, visio...).
C'est la grappe la plus critique,
S'ils sont inaccessibles, 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.
- Orsay (Neptune)
- Lyon (Orion)
- Bruxelles (Bespin)
- [Expérimentation](@/infrastructures/xp.md) (_staging_) - Les serveurs d'expérimentation servent à tester les nouvelles configurations, les nouveaux logiciels, et le nouveau matériel.
Ils permettent aux opérateur·ices de se familiariser avec leurs modifications et de minimiser l'impact d'un changement sur les serveurs de production, 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.
- Suresnes (Mercure)
- Rennes (Jupiter)
Il est des fonctions annexes (comme les sauvegardes, le développement ou la supervision) qu'il convient de ne pas héberger directement sur les ordinateurs que l'on administre :
au cas où ce seraient justement nos logiciels d'administration qui déconnent, ainsi que pour éviter que les dysfonctionnements de ces machines n'impactent les services en production.
On compte deux clusters de ce type :
- [Support](@/infrastructures/support.md) - Les serveurs de support servent pour les sauvegardes et la supervision des serveurs de production (eg. Grafana, Minio).
Ils participent au bon fonctionnement de la production.
Ils n'ont pas de données personnelles brutes mais contiennent des métriques qui reflètent le comportement des usager·es ; ainsi que nos sauvegardes régulières, qui sont chiffrées (et donc illisibles sans la bonne clé), mais contiennent tout de même des données personnelles.
- Bruxelles (Bespin)
- [Développement](@/infrastructures/developpement.md) - Les serveurs de développement hébergent les outils qui nous permettent de travailler sur le logiciel, les configurations, les tickets, ou la compilation.
Ils ne contiennent pas de données personnelles mais peuvent être utilisés pour des attaques de chaîne d'approvisionnement (*supply chain attack*).
À terme, ce rôle pourrait être fusionné avec la production.
- Orsay (Neptune)
- Rennes (Jupiter)

View file

@ -1,19 +1,18 @@
---
title: "Guichet"
description: ""
description: "Guichet : l'interface d'administration de l'asso"
date: 2021-11-09T12:39:27.819Z
dateCreated: 2021-11-09T12:39:25.808Z
weight: 20
weight: 50
extra:
parent: 'infrastructures/logiciels.md'
parent: 'infrastructures/creations.md'
---
# Guichet
Guichet est une interface de gestion utilisateur LDAP pour Bottin.
Il vise notamment à permettre aux utilisateurs de modifier leurs identifiants ainsi que leurs données personnelles.
Guichet est l'interface web d'administration de Deuxfleurs.
Il vise notamment à permettre aux usager⋅es à visualiser et modifier leurs données personnelles.\
Il repose sur le serveur LDAP [Bottin](@/infrastructures/bottin.md), que l'on développe aussi.
## Statut du développement
Guichet est actuellement utilisé en production pour Deuxfleurs. Il est cependant toujours en développement actif.
Guichet est actuellement utilisé en production par Deuxfleurs. Il est cependant toujours en développement actif.\
Le code est ici : <https://git.deuxfleurs.fr/Deuxfleurs/guichet>

View file

@ -1,14 +1,20 @@
---
title: "Services"
description: "Annuaire des services hébergés chez Deuxfleurs"
weight: 10
title: "Liste exhaustive"
description: "Liste exhaustive des logiciels utilisés par Deuxfleurs"
sort_by: "weight"
weight: 60
extra:
parent: 'infrastructures/_index.md'
parent: 'infrastructures/logitheque.md'
---
Cette page tente de recenser de façon exhaustive l'ensemble des services qui
fonctionnent actuellement sur les machines de Deuxfleurs, dans les différents
rôles identifiés : production, développement, expérimentation, etc.
Cette page a été élaborée en 2022 dans le cadre de [notre candidature au collectif CHATONS](https://framagit.org/chatons/CHATONS/-/issues/188), et est _parfois_ mise à jour.\
Elle tente de recenser de façon exhaustive l'ensemble des applications qui assurent le fonctionnement de Deuxfleurs, et leurs [rôles](@/infrastructures/grappes.md) respectifs (production, support...).\
La liste des logiciels que l'on développe nous-mêmes est disponible à la page « [Nos créations](@/infrastructures/creations.md) ».
> On répète que cette liste est condamnée à être toujours obsolète, n'étant pas mise à jour à chaque modification de nos infrastructures.\
> Si vous voulez connaître l'état du monde à l'instant _t_, équipez-vous d'une personne technicienne et allez plutôt lire notre dépôt [`nixcfg`](https://git.deuxfleurs.fr/Deuxfleurs/nixcfg) &ndash; qui décrit formellement l'état de toutes nos machines.
## La liste à la Prévert
| Service | Rôle | Site | Description |
| -- | -- | -- | -- |
@ -29,7 +35,7 @@ rôles identifiés : production, développement, expérimentation, etc.
| Prometheus | production | Neptune, Bespin | Interface de monitoring de l'infrastructure |
| [Grafana](https://grafana.deuxfleurs.fr) | production | Neptune | Interface de monitoring de l'infrastructure |
| [Forgejo](https://git.deuxfleurs.fr) | développement | Bespin | Forge logicielle |
| [Drone](https://drone.deuxfleurs.fr) | développement | Neptune | Serveur d'intégration continue |
| [Woodpecker](https://woodpecker.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 |
@ -41,12 +47,9 @@ rôles identifiés : production, développement, expérimentation, etc.
| [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.
<small>
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.
- 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.
</small>

View file

@ -0,0 +1,67 @@
---
title: "Logithèque"
description: "Bibliothèque des logiciels de Deuxfleurs"
weight: 20
extra:
parent: 'infrastructures/_index.md'
---
Ces rayonnages électriques documentent les logiciels utilisés pour faire fonctionner nos infrastructures.
- Épluchez le [registre exhaustif](@/infrastructures/liste_logiciels.md) des logiciels dont on dépend
- Découvrez [nos créations](@/infrastructures/creations.md), les logiciels que l'on développe nous-même
<!-- *Ajouter un schéma* -->
# Les composants
**Orchestrateur** - L'orchestrateur est en charge de placer les applications
sur les serveurs de sorte qu'en cas de crash, une application soit relancée ailleurs.
En fonctionnement nominal, l'orchestrateur se charge de placer les applications de sorte
à ce que les ressources soient utilisées au mieux. Nous utilison le logiciel Nomad à ces fins.
[↣ Accéder au code source de Nomad](https://github.com/hashicorp/nomad)
**Catalogue de service** - Le catalogue de service permet aux services ayant des dépendances, par exemple
Matrix a une dépendance sur PostgreSQL et Garage, de savoir comment contacter ces dépendances.
Pour ce faire, nous utilisons Consul, qui nous sert également à gérer nos secrets.
[↣ Accéder au code source de Consul](https://github.com/hashicorp/consul/)
**Base de données relationnelle** - Les bases de données relationnelles sont au coeur de
la plupart des applications web car elles permettent de requêter efficacement des données structurées.
Nous utilisons PostgreSQL qui est un des standard du libre, et afin de le distribuer, nous utilisons
Stolon.
[↣ Accéder au code source de PostgreSQL](https://git.postgresql.org/gitweb/?p=postgresql.git;a=summary)
[↣ Accéder au code source de Stolon](https://github.com/sorintlab/stolon)
**Base de données NoSQL** - Nous prévoyions certains développements spécifiques,
pour lesquels nous avons le loisir de définir la structure de données.
Dans ce cas, nous pouvons l'optimiser pour Garage K2V qui est bien plus facile à opérer que PostgreSQL.
[↣ Accéder au code source de Garage](https://git.deuxfleurs.fr/Deuxfleurs/garage)
**Stockage objet** - De nombreuses applications ont besoin de stocker des fichiers également,
des données considérées non structurées dans ce cas. Ici l'enjeu n'est plus tant de pouvoir
requêter les données avec souplesse que de pouvoir stocker de grands volumes.
On peut prendre comme exemple les médias (photo, vidéo) partagés sur Matrix.
Nous utilisons l'API S3 de Garage pour ces besoins.
[↣ Accéder au code source de Garage](https://git.deuxfleurs.fr/Deuxfleurs/garage)
**Authentification** - Afin de faciliter la vie des usager-es, il est possible de proposer un système d'authentification unique.
Pour commencer, nous avons choisi le protocole LDAP qui a pour principal avantage d'être largement installé et compatible,
principalement grâce à son ancienneté. Nous utilisons notre propre implémentation, nommée Bottin.
[↣ Accéder au code source de Bottin](https://git.deuxfleurs.fr/Deuxfleurs/bottin)
**Conteneurs** - Afin de packager, publier et isoler les différentes applications qui fonctionnent sur nos serveurs,
nous utilisons des conteneurs Linux, et plus précisément, Docker. Afin de créer des images les plus petites possibles,
nous utilisons NixOS. Pour certaines vieilles images, nous utilisons encore Debian.
[↣ Accéder au code source de Docker](https://github.com/moby/moby)
[↣ Accéder au code source de Nix](https://github.com/NixOS/nixpkgs)
[↣ Accéder au code source de Debian](https://www.debian.org/distrib/packages)

View file

@ -1,53 +1,21 @@
---
title: "Serveurs"
description: "Serveurs"
weight: 40
title: "Les machines"
description: "Salle des machines"
weight: 10
sort_by: "weight"
extra:
parent: 'infrastructures/_index.md'
---
# Rôles
Ce coin du Guide présente [les ordinateurs](infrastructures/grappes.md) qui constituent notre infrastructure : leurs [rôles](@/infrastructures/grappes.md), les lieux où ils sont hébergés, les [connexions réseaux](@/infrastructures/reseau.md) nécessaires, l'[énergie consommée](@/infrastructures/energie.md), l'impact de leur fabrication, de leur fin de vie...
Nous avons identifié 4 rôles pour nos serveurs, en fonction de la criticité des charges de travail
et des données qu'ils auront à gérer.
Promouvant la **sobriété numérique**, on veille à ne pas consommer plus de ressources que nécessaire pour fournir les services de l'association.
On utilise par exemple exclusivement des ordinateurs de bureau datés de quelques années (souvent rachetés à bas prix au [domaine](https://encheres-domaine.gouv.fr/hermes/biens-mobiliers/high-tech)).
Car un serveur n'est jamais qu'un ordinateur qui exécute des logiciels fournissant des services. Votre téléphone pourrait tout aussi bien assurer cette mission.
Mais un serveur, ça doit être prêt à répondre aux requêtes à n'importe quelle heure.
Toutes les machines présentées ici sont donc branchées 24/7 dans l'attente que vous vous y connectiez.
Ça en fait de la [consommation électrique](@/infrastructures/energie.md) !
[Production](@/infrastructures/production.md) - Les serveurs de productions sont ceux qui font tourner les services accédés par les usager·es (eg. Plume, Matrix, Cryptpad).
Si ils sont inaccessibles, 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.
[Support](@/infrastructures/support.md) - Les serveurs de support servent pour les sauvegardes et la supervision des serveurs de production (eg. Grafana, Minio).
De par leur rôle, ils participent au bon fonctionnement de la production.
Ils n'ont pas de données personnelles brutes mais les métriques collectées peuvent refléter certains comportement des usager·es
et les sauvegardes, bien qu'elles soient chiffrées, contiennent tout de même des données personnelles.
[Développement](@/infrastructures/developpement.md) - Les serveurs de développement hébergent les outils qui nous permettent de travailler sur le logiciel,
les configurations, les tickets, ou la compilation. Ils ne contiennent pas de données personnelles mais peuvent être utilisés pour
des attaques de chaîne d'approvisionnement (*supply chain attack*). À terme, ce rôle pourrait être fusionné avec la production.
[Expérimentation](@/infrastructures/xp.md) - Les serveurs d'expérimentation servent à tester les nouvelles configurations, les nouveaux logiciels,
et le nouveau matériel. Ils permettent aux opérateur·ices de se familiariser avec leurs modifications et de minimiser l'impact d'un changement sur les serveurs de production,
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.
# Zones
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 3 zones pour la production :
- Orsay (Neptune)
- Lyon (Orion)
- Bruxelles (Bespin)
Nous avons 2 zones pour le support :
- Suresnes (Mercure)
- Rennes (Jupiter)
Nous avons 1 zones pour le développement :
- Bruxelles (Bespin)
Nous avons plusieurs zones pour l'expérimentation :
- Orsay (Neptune)
- Rennes (Jupiter)
Notre approche vers la sobriété, c'est de **visibiliser la matérialité** du numérique.
C'est le but de ces pages : qu'on puisse constater ce qu'il en coûte matériellement que d'héberger vos e-mails et sites web de façon sobre et résiliente.

View file

@ -0,0 +1,10 @@
---
title: "Opérations"
description: "Manuels d'opération"
weight: 40
sort_by: weight
extra:
parent: 'infrastructures/_index.md'
---
Bla.

View file

@ -0,0 +1,195 @@
---
title: Le dépôt des secrets
description: Le dépôt des secrets
weight: 10
draft: false
date: 2024-03-16
extra:
parent: "infrastructures/acces.md"
---
We use [pass, 'the standard unix password manager'](https://www.passwordstore.org/), to manage our key store securely at Deuxfleurs. Getting access to our production involves publishing one's GPG key (through Gitea) and importing/verifying/signing every other sysadmin's key, before setting up `pass`. Lastly, you will be able to set your shell password on the desired cluster (`prod` or `staging`, at the time of writing).
Our process was adapted from [this Medium article](https://medium.com/@davidpiegza/using-pass-in-a-team-1aa7adf36592) — thanks, David!
## You are new and want to access the secrets repository
You need a GPG key to start with.
If you do not already have one, you can generate a new one with:
```bash
gpg2 --expert --full-gen-key
# Personnaly I use `9) ECC and ECC`, `1) Curve 25519`, and `5y`
# Pour le nom, il vous identifie vous, vous pouvez l'utiliser pour signer des mails par exemple.
```
(Il se peut que vous n'ayez que la commande `gpg` sur votre PC parce qu'il est moderne. Faites `gpg --version` pour vérifier.)
In any case, you need to export your public key. Upload the output (public key) of the following command to [your Gitea account](https://git.deuxfleurs.fr/user/settings/keys).
```bash
gpg2 --export --armor <your email address>
```
It is now publicly accessible at `https://git.deuxfleurs.fr/<your_gitea_username>.gpg`
### Inform the other sysadmins that you have published your key
Download the `secrets` repository:
```
mkdir -p ~/.password-store
cd ~/.password-store
git clone git@git.deuxfleurs.fr:Deuxfleurs/secrets.git deuxfleurs
```
Get the `<hexa_of_your_gpg_key>`, which you can get with `gpg --list-keys --keyid-format 0xLONG` .
It's in the format `0x0123456789ABCDEF`.
Beware to take the key of your main key (line begins with `pub`, not with `sub`).
- Add your key address to the `Import keys` section of the repo's `README.md`:
```
curl https://git.deuxfleurs.fr/<your_gitea_username>.gpg | gpg2 --import # <hexa_of_your_gpg_key>
```
- Also add your `<hexa_of_your_gpg_key>` to the `.gpg-id` file.
- In [your Gitea settings](https://git.deuxfleurs.fr/user/settings), ensure your User visibility is `Public`.
Now `git commit/pull/push`, and tell yo' friends that you're all set.
### Import/verify/sign every other sysadmin's key into your keychain
You now need to import and sign every other sysadmin's GPG key. For example, import Quentin's key to your keychain as follow:
```bash
gpg2 --import <(curl https://git.deuxfleurs.fr/quentin.gpg)
gpg2 --list-keys
# pub ed25519/0xE9602264D639FF68 2022-04-19 [SC] [expire : 2027-04-18]
# Empreinte de la clef = 8023 E27D F1BB D52C 559B 054C E960 2264 D639 FF68
# uid [ ultime ] Quentin Dufour <quentin@deuxfleurs.fr>
# sub cv25519/0xA40574404FF72851 2022-04-19 [E] [expire : 2027-04-18]
```
> How to read this snippet:- the key id: `E9602264D639FF68`
> - the key fingerprint: `8023 E27D F1BB D52C 559B 054C E960 2264 D639 FF68`
To perform the check, you need another communication channel (ideally physically, otherwise through the phone, Matrix if you already trusted the other person, or else). Compare the signature you read with the sysadmin's. If they match, you good.
Now that you have verified the key, sign it:
```bash
gpg --edit-key quentin@deuxfleurs.fr # by email
# or
gpg --edit-key E9602264D639FF68 # by key id
# gpg> lsign
# (say yes, maybe several times)
# gpg> save
```
Once you signed every sysadmin, ask an administrator to add your key to the secrets keystore. They will need to [Add a sysadmin](#add-a-sysadmin).
Once your fellow admin has finished their job, you are ready to install `pass`:
```bash
sudo apt-get install pass # Debian + Ubuntu
sudo yum install pass # Fedora + RHEL
sudo zypper in password-store # OpenSUSE
sudo emerge -av pass # Gentoo
sudo pacman -S pass # Arch Linux
brew install pass # macOS
pkg install password-store # FreeBSD
```
_Go to [passwordstore.org](https://ww.passwordstore.org) for more information about pass_.
Finally check that everything works:
```bash
pass deuxfleurs/nix_priv_key
```
If you see an output of the form `nix.web.deuxfleurs.fr:xxxxxx` then it worked! You are now able to decrypt all the secrets. You can do the following command to list them:
```bash
pass show deuxfleurs
```
The next step is to [setup SSH](@/operations/ssh.md) to be able to connect to computers of the clusters.
> With great power comes great responsibility.
---
---
## You are a sysadmin and want to operate the secrets repository
## Initialise the pass store
> These instructions are for _bootstrapping_ the pass store. **Don't do it on Deuxfleurs' secrets repository** (don't be like ADRN). You would override the existing sysadmins and generally have a bad time.
Generate a new password store named deuxfleurs for you:
```
pass init -p deuxfleurs you@example.com
```
Add a password in this store, it will be encrypted with your gpg key:
```bash
pass generate deuxfleurs/backup_nextcloud 20
# or
pass insert deuxfleurs/backup_nextcloud
```
## Add a sysadmin
Make sure that you trust the keys of your new sysadmin:
```
$ gpg --edit-key jane@example.com
gpg> lsign
gpg> y
gpg> save
```
Now re-encrypt the secrets and push your modifications:
```
pass init -p deuxfleurs $(cat ~/.password-store/deuxfleurs/.gpg-id)
cd ~/.password-store/deuxfleurs
git commit
git push
```
They will now be able to decrypt any password:
```
pass deuxfleurs/backup_nextcloud
```
## Sharing with git
To create the repo _on bootstrap exclusively_:
```bash
cd ~/.password-store/deuxfleurs
git init
git add .
git commit -m "Initial commit"
# Set up remote
git push
```
To retrieve the repo:
```bash
mkdir -p ~/.password-store
cd ~/.password-store
git clone https://git.example.com/org/repo.git deuxfleurs
```

View file

@ -1,9 +1,9 @@
---
title: "Production"
description: "Production"
weight: 40
weight: 10
extra:
parent: 'infrastructures/machines.md'
parent: 'infrastructures/grappes.md'
---
Les serveurs de productions sont ceux qui font tourner les services accédés par les usager·es (eg. Plume, Matrix, Cryptpad).

View file

@ -3,9 +3,9 @@ title: "Réseau"
description: "Réseau"
date: 2021-11-09T12:55:03.277Z
dateCreated: 2021-11-09T12:55:01.156Z
weight: 30
weight: 50
extra:
parent: 'infrastructures/_index.md'
parent: 'infrastructures/operations.md'
---
Cette page regroupe un résumé de tous les problèmes que vous pourriez rencontrer en voulant faire de l'auto hébergement avec "votre connexion internet".

View file

@ -0,0 +1,74 @@
---
title: "SSH"
description: "SSH"
weight: 100
extra:
parent: "infrastructures/acces.md"
---
SSH permet de se connecter aux machines du cluster à administrer (`staging` ou `prod`).
# Ajout d'une nouvelle clé SSH au cluster
Dans le dépot [nixcfg](https://git.deuxfleurs.fr/deuxfleurs/nixcfg), éditer le
fichier `cluster/CLUSTER/cluster.nix`, où `CLUSTER` est à remplacer par `prod`
ou `staging`.
La variable qui nous intéresse est `deuxfleurs.adminAccounts`. On trouve une
définition de la forme suivante :
```nix
deuxfleurs.adminAccounts = {
lx = [
"ssh-ed25519 ...."
];
quentin = [
"ssh-rsa ...."
"ssh-rsa ...."
];
...
};
```
Ici, `lx` et `quentin` correspondent à des noms d'utilisateur linux sur les
machines du cluster, et les `"ssh-ed25519 ..` ou `"ssh-rsa ..."` sont les clefs
SSH publiques qui permettent de se connecter à ces utilisateurs.
Ajouter un attribut à `deuxfleurs.adminAccounts` avec le nom d'utilisateur et sa
clef ssh publique choisie. Par exemple, pour ajouter une nouvelle utilisatrice
`alice` :
```nix
deuxfleurs.adminAccounts = {
lx = [
"ssh-ed25519 ...."
];
quentin = [
"ssh-rsa ...."
"ssh-rsa ...."
];
...
alice = [
"clef SSH publique d'alice"
];
```
Commiter et pousser ces modifications (`git commit/push`).
Un autre administrateur doit ensuite déployer ces modifications sur les machines
du cluster en utilisant le script `./deploy_nixos` du dépot `nixcfg`.
*TODO*: dire ce qu'il faut mettre dans le `.ssh/config`.
Vous pouvez ensuite tester de vous connecter à une machine du cluster :
```bash
ssh caribou # staging
# ou
ssh pasteque # prod
```
Pour terminer la création d'un nouveau compte utilisateur linux sur le cluster,
la dernière étape est de lui [assigner un mot de
passe](@/infrastructures/user_passwd.md).

View file

@ -1,9 +1,9 @@
---
title: "Support"
description: "Serveurs en support"
weight: 40
weight: 30
extra:
parent: 'infrastructures/machines.md'
parent: 'infrastructures/grappes.md'
---
Les serveurs de support servent pour les sauvegardes et la supervision des serveurs de production (eg. Grafana, Minio).

View file

@ -1,18 +1,20 @@
---
title: "Tricot"
description: ""
description: "Tricot : le majordome HTTP"
date: 2022-01-24T16:33:16.731Z
dateCreated: 2022-01-24T16:32:53.056Z
weight: 50
weight: 20
extra:
parent: 'infrastructures/logiciels.md'
parent: 'infrastructures/creations.md'
---
# Tricot
Tricot est un reverse-proxy HTTP et HTTPS qui s'auto-configure à partir de [Consul](https://www.consul.io),
Tricot s'occupe automatiquement de récupérer des certificats auprès de Let's Encrypt pour rendre tous les sites accessibles en TLS.
Les certificats sont stockés dans Consul.
Tricot est un reverse-proxy HTTP et HTTPS qui s'auto-configure à partir de [Consul](https://www.consul.io), comme le faisait Traefik, qui posait de multiples problèmes et que nous avons décidé de remplacer. Tricot s'occupe automatiquement de récupérer des certificats au près de Let's Encrypt pour rendre tous les sites accessibles en TLS. Ceux-ci sont stockés dans Consul.
Tricot est une invention maison succédant à Traefik, qui posait de multiples problèmes et que nous avons décidé de remplacer.
## Statut du développement
Tricot est actuellement utilisé en production pour Deuxfleurs. Il est cependant toujours en développement actif.
Le code de Tricot se trouve ici : <https://git.deuxfleurs.fr/Deuxfleurs/tricot>
Tricot est actuellement utilisé en production par Deuxfleurs. Il est cependant toujours en développement actif.\
Le code est ici : <https://git.deuxfleurs.fr/Deuxfleurs/tricot>

View file

@ -0,0 +1,31 @@
---
title: "Mot de passe unix"
description: "Mot de passe unix"
weight: 200
extra:
parent: "infrastructures/acces.md"
---
The last step of adding an administrator is to select a user password for
yourself on the cluster you are now in charge of (`prod` or `staging`).
In the [nixcfg](https://git.deuxfleurs.fr/deuxfleurs/nixcfg) repository,
use the passwd utility to set your shell password:
```
./passwd
> Usage: ./passwd <cluster name> <username>
> The cluster name must be the name of a subdirectory of cluster/
```
This commited changes to Deuxfleurs' password store, do verify your modifications before pushing them:
```
cd ~/.password-store/deuxfleurs
git diff
git push
```
These changes must be deployed to the machines to take effect. Ask another
administrator to deploy them. They will need to use the script
`./deploy_passwords` from the `nixcfg` repository after pulling your changes.

View file

@ -1,9 +1,9 @@
---
title: "Expérimentation"
description: "Expérimentation"
weight: 40
weight: 20
extra:
parent: 'infrastructures/machines.md'
parent: 'infrastructures/grappes.md'
---
Les serveurs d'expérimentation servent à tester les nouvelles configurations, les nouveaux logiciels,

View file

@ -0,0 +1,11 @@
---
title: "Motivations"
description: "Motivations"
weight: 20
sort_by: "weight"
extra:
parent: 'motivations/_index.md'
---
Tout doux (en anglais : to do)

View file

@ -5,6 +5,7 @@ weight: 100
sort_by: "weight"
extra:
parent: 'operations/_index.md'
hide_from_menu: true
---
Ce manuel recense notre savoir-faire technique, il a pour but d'accompagner nos opérateur·ices dans la réalisation de leurs tâches.

View file

@ -1,10 +1,11 @@
---
title: "Prise en main"
description: "Prise en main"
weight: 10
weight: 20
sort_by: "weight"
extra:
parent: 'prise_en_main/_index.md'
hide_from_menu: true
---
Ce manuel vous accompagne dans la découverte de nos outils.

View file

@ -0,0 +1,84 @@
---
title: "CNAME à l'apex"
description: "Les CNAME à l'apex d'une zone DNS"
date: 2023-04-19
weight: 3
extra:
parent: "services/mettre-place-DNS.md"
---
# Le problème
Dans le protocole DNS, il n'est pas possible de mettre un champ CNAME à l'apex d'une zone.
Concrètement, qu'est-ce que ça veut dire ? Si vous gérez la zone `example.com` et que vous
aimeriez faire pointer ce nom vers `garage.deuxfleurs.fr` pour que Deuxfleurs héberge votre
site web, la solution naturelle serait de configurer un CNAME. Dans un fichier de zone,
cela ressemblerait à :
@ 10800 IN CNAME garage.deuxfleurs.fr.
Hors, cela est interdit par le protocole DNS. Pourquoi donc ? Parce qu'un CNAME s'applique
à tous les types d'enregistrements, pas simplement les `A` (adresse IPv4) et `AAAA` (adresse IPv6).
Ainsi, la redirection du CNAME s'appliquerait également aux enregistrements comme `NS` et `MX`, ce qui
rentrerait en conflit avec ces enregistrements déjà existants dans votre zone.
[Une explication technique plus détaillée est disponible sur le site de l'ISC](https://www.isc.org/blogs/cname-at-the-apex-of-a-zone/).
# Solutions possibles
## Implémentations non-standard : ALIAS et CNAME flattening
Certains hébergeurs et logiciels DNS proposent une solution non-standard à ce problème.
Gandi permet de configurer un champ `ALIAS` à l'apex d'une zone qui pointe vers un autre
nom comme `garage.deuxfleurs.fr`. Cet enregistrement `ALIAS` ne sera jamais renvoyé directement
aux clients DNS : à la place, ce sont les serveurs DNS de Gandi qui vont dynamiquement consulter
les enregistrements `A` et `AAAA` de `garage.deuxfleurs.fr`, puis les renvoyer dans la requête
initiale pour `example.com`.
De manière confuse, [Cloudflare permet de mettre un enregistrement CNAME à l'apex d'une zone](https://blog.cloudflare.com/introducing-cname-flattening-rfc-compliant-cnames-at-a-domains-root/).
Comment font-ils, puisque c'est interdit ? En fait, ils utilisent exactement la même technique que Gandi, mais
ils ont choisi de réutiliser le terme `CNAME` là où Gandi appelle cela un `ALIAS`. C'est un choix de nom
très discutable puisqu'il ne s'agit pas vraiment d'un CNAME.
Très peu d'implémentations logicielles libre de serveur DNS faisant autorité proposent cette fonctionnalité.
Les logiciels classiques Bind, NSD et Knot ne l'implémentent pas. Parmi les autres logiciels couramment utilisés,
seuls [PowerDNS Authoritative Nameserver](https://doc.powerdns.com/authoritative/index.html) et [CoreDNS](https://coredns.io/) l'implémentent :
[PowerDNS avec la syntaxe ALIAS comme chez Gandi](https://doc.powerdns.com/authoritative/guides/alias.html), et
[CoreDNS avec la syntaxe CNAME abusive comme chez Cloudflare](https://coredns.io/explugins/alias/).
Il faut noter que c'est une technique plutôt complexe à implémenter correctement, puisqu'elle nécessite que le serveur DNS
faisant autorité joue un rôle de récurseur, ce qui n'est pas nécessaire en temps normal.
Au final, c'est une solution ad-hoc qui est très spécifique à certains fournisseurs
et logiciels, avec même plusieurs syntaxes possibles. Elle présente donc un risque fort
d'enfermement auprès de ces fournisseurs ou logiciels.
## En cours de standardisation : SVCB et HTTPS
Deux nouveaux types d'enregistrements DNS sont [en cours de standardisation : SVCB et HTTPS](https://datatracker.ietf.org/doc/draft-ietf-dnsop-svcb-https/).
Ce travail en cours couvre un spectre plus large, mais il résout en particulier
ce problème de CNAME à l'apex.
En mars 2023, ce document de travail en est à sa 12ème révision et n'a pas encore été publié
officiellement comme un standard (RFC). Cependant, il semblerait que [certains navigateurs web et certains logiciels
serveurs DNS aient déjà commencé à implémenter cette spécification depuis 2021 environ](https://serverfault.com/a/1075524).
## Solutions recommandées chez Deuxfleurs
Vous êtes responsable de votre nom de domaine, donc n'hésitez pas à expérimenter si
vous le souhaitez ! Si vous avez des retours sur l'utilisation de SVCB/HTTPS, nous sommes intéressés.
Cependant, Deuxfleurs recommande pour l'instant les solutions suivantes :
- utiliser un sous-domaine lorsque cela est possible
- sinon, utiliser l'implémentation non-standard de Gandi ou Cloudflare
En effet, la solution SVCB/HTTPS est encore en cours de standardisation en 2023
et va mettre de nombreuses années avant d'être déployée sur tous les terminaux.
Compter uniquement sur cette solution, c'est écarter de fait tous les clients un
peu anciens (vieux téléphones Android, anciennes versions de Windows ou d'Ubuntu
pas mises à jour), alors que Deuxfleurs cherche à éviter l'obsolescence et faire
en sorte que ces appareils restent utilisables le plus longtemps possible.

105
content/services/_index.md Normal file
View file

@ -0,0 +1,105 @@
---
title: "Services"
description: "Nos services"
weight: 10
sort_by: "weight"
extra:
parent: 'services/_index.md'
---
Cette section du Guide présente les services proposés par [Deuxfleurs](https://deuxfleurs.fr). Nous essayons de fournir des services qu'on juge _essentiels_ et _sobres_. Vous y trouverez une page de manuel pour chacun d'entre eux.
Notez que certains services sont _en accès libre_, tandis que d'autres sont _sur inscription_, auquel cas il faut au moins être usager⋅e ou membre de Deuxfleurs pour y accéder. Voir la page [Nous Rejoindre](@/vie_associative/nous_rejoindre.md).
# Communication
Internet, c'est d'abord la communication entre personnes.
Nous proposons un service de messagerie instantanée, des boîtes e-mail personnelles, et de la visioconférence.
Venez discuter avec nous (ou avec qui vous voudrez) !
<!-- Nous proposons un certain nombre d'outils de communication entre utilisateurices, vous trouverez donc les équivalents libres de vos outils de communication habituels. -->
- [***Discussion instantanée***](@/services/jitsi.md) sur inscription :\
Pour l'échange de messages dans le style des **SMS**, de **Whatsapp**, **Messenger** ou équivalent nous proposons ***Matrix***.
Ce protocole fédéré doté d'applications sympathiques permet de discuter de façon agréable et sécurisée (les messages personnels sont chiffrés de boût en boût, et les salons peuvent l'être aussi).
Matrix fonctionne sur tout périphérique, et est accessible *via* une application ou sur navigateur web directement.
\
\
[↣ Apprendre à utiliser Matrix](@/services/matrix.md)\
[↣ Accéder au service Matrix](<https://im.deuxfleurs.fr>)
- [***E-mails personnels***](@/services/email.md) sur inscription :\
Pilier fondamental de la communication en ligne, nous utilisons tous les jours ce service d'e-mails pour nos usages personnels et associatifs.
\
\
[↣ Apprendre à utiliser notre service d'e-mails](@/services/email.md)\
[↣ Accéder au service de mails (interface SoGo)](<https://sogo.deuxfleurs.fr>)\
[↣ Accéder au service de mails (interface légère Alps)](<https://alps.deuxfleurs.fr>)
- [***Visioconférence***](@/services/jitsi.md) en accès libre :\
Pour la visioconférence dans le style de **Skype**, **Zoom** ou autre, nous proposons ***Jitsi***.
Ce service est utilisable sur tout périphérique, permet d'inviter jusqu'à 30 personnes, dactiver/désactiver caméra et micro, ou encore de partager son écran.
\
\
[↣ Apprendre à utiliser Jitsi](@/services/jitsi.md)\
[↣ Accéder au service Jitsi](https://jitsi.deuxfleurs.fr)
# Édition collaborative
Bien niaise est la personne qui croit construire seule une cathédrale. Les œuvres humaines majeures sont toujours le fruit d'un effort collectif. Internet nous fournit justement des outils pour travailler à plusieurs, sur des documents ou du logiciel.
- [***Édition collaborative de documents***](@/services/cryptpad.md) en accès libre :\
Dans l'idée de **Google Doc**, de la prise de notes de réunion aux tableurs et formulaires (**Framadate**), nous vous proposons l'outil ***Cryptpad***.
Il permet d'éditer à plusieurs tout type de document (texte, tableur, présentation, sondage), et même d'organiser des dossiers partagés en groupe.
\
\
[↣ Apprendre à utiliser le formulaire Cryptpad](@/services/cryptpad.md)\
[↣ Accéder au service Cryptpad](https://pad.deuxfleurs.fr)
- [***Forge logicielle***](@/services/git.md) en accès libre :\
Pour héberger notre code (et le vôtre), nous utilisons le serveur _git_ ***ForgeJo***.
\
\
[↣ Apprendre à utiliser ForgeJo](@/services/git.md)\
[↣ Accéder au service ForgeJo](https://git.deuxfleurs.fr)
# Publication
Vous êtes prêt⋅e à dévoiler au monde vos travaux ? Pour ce faire, nous vous proposons fièrement d'héberger vos sites web _statiques_, ou de vous créer un blog fédéré avec Plume.
Pour du partage de contenu nous avons plusieurs outils à disposition, que ce soit des documents partagés, des formulaires, des postes de blogs ou des sites web !
- [**Sites Web Statiques**](@/services/web.md) sur inscription :\
Nous avons développé [Garage](https://garagehq.deuxfleurs.fr) pour héberger des sites web de façon sobre et résiliente sur les serveurs de branchés chez nos membres.
« Statique » signifie qu'on ne peut pas héberger de Wordpress, Kirby, etc. — plus d'infos [ici](@/services/statique-comment-ça.md).
\
\
[↣ Apprendre à créer un site web](@/services/web.md)\
[↣ Accéder à la plateforme d'hébergement de sites web](https://garagehq.deuxfleurs.fr)
- [***Blogs***](@/services/plume.md) sur inscription :\
Pour l'écriture d'un blog avec un système d'abonnements et de notifications de nouveau contenu, nous vous proposons ***Plume***.
Ce logiciel appartient à la Fediverse, ce qui fait qu'il sera particulièrement facile de republier vos pensées sur Mastodon ou autre service fédéré par ActivityPub.
Notez que Plume est un logiciel libre en mal d'amour, et qu'il est de ce fait assez taquin à utiliser. Néanmoins il fonctionne !
\
\
[↣ Apprendre à utiliser Plume](@/services/plume.md)\
[↣ Accéder à la plateforme Plume](https://plume.deuxfleurs.fr)
# Adresse des services
- [**Discussion instantanée**](<https://im.deuxfleurs.fr>) : <https://im.deuxfleurs.fr> — client web Element
- [**E-mails**](<https://sogo.deuxfleurs.fr>) : <https://sogo.deuxfleurs.fr> — client e-mail web SOGo
- [**E-mails**](https://alps.deuxfleurs.fr) : <https://alps.deuxfleurs.fr> — client e-mail web Alps (plus léger)
- [**Visioconférence**](https://jitsi.deuxfleurs.fr) : <https://jitsi.deuxfleurs.fr> — client web Jitsi
- [**Édition collaborative de documents**](https://pad.deuxfleurs.fr): <https://pad.deuxfleurs.fr> — suite web CryptPad
- [**Forge logicielle**](https://git.deuxfleurs.fr) : <https://git.deuxfleurs.fr> — serveur _git_ ForgeJo
- [**Sites Web**](https://garagehq.deuxfleurs.fr) : <https://garagehq.deuxfleurs.fr> — plateforme d'hébergement de sites web statiques
- [**Blogs**](https://plume.deuxfleurs.fr) : <https://plume.deuxfleurs.fr> — plateforme de blog fédérée Plume

View file

@ -0,0 +1,74 @@
---
title: Avec un générateur
description: Créer du contenu avec un générateur
sort_by: weight
weight: 2
draft: false
date: 2025-03-29
extra:
parent: services/creer-du-contenu.md
---
Si vous souhaitez vous créer un blog, vous allez probablement avoir un site web avec de nombreuses pages : au moins une par billet que vous allez composer ! À la longue, on peut sans problème arriver à des dizaines de pages... Si on les écrit à la main, il va falloir copier/coller une bonne partie du code HTML, mais pas tout. Pour éviter ce travail rébarbatif, il existe ce qu'on appelle des générateurs de sites statiques. Ils vous permettent d'écrire dans une syntaxe très simple (Markdown) vos contenus, sans vous soucier du HTML ou du CSS, car ils emballeront eux-mêmes vos écrits dans des modèles prévus à cet effet. [Le guide que vous êtes en train de lire en ce moment même utilise un tel outil !](https://git.deuxfleurs.fr/Deuxfleurs/guide.deuxfleurs.fr)
### Choisir un générateur et un thème
On peut séparer **deux types de générateurs de site web statique** :
- Ceux qui demandent une bonne expertise en informatique (en **ligne de commande**) : [Hugo](https://gohugo.io/), [Jekyll](https://jekyllrb.com/), [Zola](https://www.getzola.org/), et bien d'autres... En général, ils se ressemblent beaucoup. À titre indicatif, pour ce guide, nous utilisons Zola. Nous baserons nos exemples sur lui. Si votre système d'exploitation est Linux, cherchez dans votre gestionnaire de paquet si vous trouvez l'un d'entre eux. Zola est ainsi facilement installable sur Arch, Ubuntu, et Fedora.
- Ceux qui sont accessibles aux non-spécialistes (avec une **interface graphique**) : [Publii](https://getpublii.com/), [Scribouilli](https://scribouilli.org/), [Zim](https://zim-wiki.org/)... Il s'agit alors d'installer un logiciel (le générateur) sur son ordinateur, qui va nous permettre de fabriquer notre site. Ledit générateur peut ensuite publier notre site et ses modifications sur Internet -- ou alors il faut le faire à la main.
**Et le thème ?**
Chaque générateur de site statique propose des thèmes graphiques, pour donner à votre site une apparence unique.
Par exemple; pour Zola, il faut aller [sur leur galerie](https://www.getzola.org/themes/). Si vous cliquez sur l'un d'entre eux, vous aurez des instructions sur comment l'installer. Il s'agit souvent de télécharger le thème dans le dossier correspondant à votre site, et de modifier le fichier `config.toml`, nécessaire pour Zola, afin de sélectionner le thème.
## Fonctionnement des générateurs en ligne de commande
On détaille l'utilisation d'un générateur en ligne de commande, en prenant l'exemple de Zola.
### Rédiger du contenu avec le langage Markdown
Les éditeurs en ligne de commande vous proposent généralement d'écrire les pages et billets de blogs de votre site dans un langage plus simple que HTML. C'est souvent Markdown.
Rassurez-vous, il a été pensé pour être très simple et peut-être appris en quelques minutes. Voici un exemple :
```
# Ceci est le titre principal
## Ceci est un sous-titre
Ceci est du texte tout à fait normal. *Cette partie-ci du texte sera en italique*. **Cette partie-là sera en gras**.
## Ceci est encore un sous-titre
### Ceci est un sous-sous-titre
Voici du texte pour introduire la liste à puce qui va suivre :
* première élément de la liste
* second élément de la liste
* troisième élément de la liste
```
Quand on écrit du texte sans mettre quoi que ce soit autour ou avant, cela deviendra du texte tout à fait normal. On peut mettre un ou plusieurs dièses au début de la ligne pour en faire un titre. On peut mettre du texte en italique ou en gras avec des astérisques. Un astérisque en début de ligne provoque une liste à puces. Bref, cette syntaxe n'est pas compliquée, et vous pouvez facilement trouver plein de tutoriels en ligne pour la connaître. [Framasoft, par exemple, propose un bon guide](https://docs.framasoft.org/fr/grav/markdown.html).
Une fois votre fichier écrit, enregistrez-le avec l'extension `.md`, par exemple sous le nom `recette-tarte-au-citron.md`. L'idée est qu'à chaque page de votre site correspond un fichier `.md`, et ceux-ci seront regroupés dans un dossier. Vous trouverez [dans notre forge](https://git.deuxfleurs.fr/Deuxfleurs/guide.deuxfleurs.fr/src/branch/main/content) les fichiers Markdown écrits pour faire ce guide.
Cependant, il reste juste une petite chose à faire lorsque vous avez fini votre texte : écrire l'en-tête au dessus du markdown, qui donnera au générateur des informations importantes sur ce contenu. On encadre cet en-tête avec trois signes plus. Voici un exemple basé sur cette page :
```
---
title: "Avec un générateur"
description: "Créer du contenu avec un générateur"
date: 2022-09-01
---
# Titre
Texte de la page...
```
Comme vous l'avez peut-être compris, il s'agit de donner le titre de cette page, sa description, et sa date d'écriture. D'autres informations peuvent être rajoutées, cela dépend du générateur et du thème sélectionnés.
### Générer les pages
Vous avez donc des fichiers `.md` renfermant vos contenus, et un thème qui vous plaît. Avec un terminal, positionnez-vous dans le dossier racine de votre site projet. Si vous utilisez Zola, celui-ci devrait contenir un fichier `config.toml`, vous pouvez alors faire `zola build`. Cela va générer l'intégralité de votre site dans le dossier `public/`. Vous constaterez donc qu'il sera rempli de fichiers `.html` et `.css`, [vous êtes alors prêt(e) à passer à la publication](@/prise_en_main/publier-le-contenu.md) !

View file

@ -0,0 +1,55 @@
---
title: "aws-cli"
description: "Publier avec aws-cli"
date: 2025-03-29
weight: 20
extra:
parent: "services/publier-le-contenu.md"
---
Nous allons désormais verser votre site sur Garage, ce dernier le servira à toutes les personnes qui voudront le voir. Vous aurez besoin de l'identifiant de votre clé d'accès et de la clé d'accès secrète, obtenus dans la partie «[Initialiser votre accès](@/services/initialiser-votre-accès.md)».
### Paramétrer votre accès localement
Pour verser votre site sur Garage, nous allons utiliser l'outil de base pour faire des commandes S3 : [aws-cli](https://github.com/aws/aws-cli) et son binaire, `aws`.
Vous pouvez installer `aws` :
- soit via les paquets fournis par votre distribution (par ex. [Ubuntu](https://snapcraft.io/aws-cli) ou [Fedora](https://packages.fedoraproject.org/pkgs/awscli2/awscli2/))
- soit en suivant les instructions sur [le site officiel d'Amazon](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
Une fois `aws` installé sur votre machine, vous pouvez suivre les instructions de connexion indiquées sur [le guichet](https://guichet.deuxfleurs.fr/website). Sélectionnez votre site à gauche, puis cliquez sur l'onglet "S3" et consultez la partie "awscli (tout générateur de site statique)".
### Configurer la page par défaut et celle pour les erreurs
Puisqu'on est sur la configuration S3, profitons-en pour paramétrer une page d'accueil et une page d'erreur.
En effet, les URL qu'on utilise pour naviguer sur votre site correspondront à la hiérarchie de fichiers présents sur Garage. Si on visite `https://votre-site.fr/blog/recette-de-gateau.html`, Garage va simplement servir le fichier `blog/recette-de-gateau.html`, en partant de la racine du bucket. Mais que ce passe-t-il si on demande à voir `https://votre-site.fr/blog/` ? Garage ne peut pas retourner un dossier; et de toute façon cela ne fonctionnerait pas, puisqu'un dossier n'a pas de données propre à lui-même, il ne fait que contenir des fichiers distincts en son sein. On voit pourtant souvent ce genre d'URL en ligne. En fait, les serveurs web sont configurés pour que si aucun fichier du dossier n'est spécifié, alors on va utiliser celui avec un nom paramétré à l'avance. C'est de ça dont on parle.
De même, lorsque quelqu'un demande une page qui n'existe pas, que peut faire Garage ? Dans la même logique, on va lui donner un nom de fichier à servir par défaut si jamais cela arrive.
Après avoir fait votre `source ~/.awsrc`, faites :
```
aws s3 website exemple-un.fr --index-document index.html --error-document erreur.html
```
si votre `aws` est en version 2.x, ou
```
aws s3api put-bucket-website --bucket exemple-un.fr --website-configuration '
{
"ErrorDocument": {
"Key": "/errors/4xx.html"
},
"IndexDocument": {
"Suffix": "index.html"
}
}
'
```
s'il est en version 1.x . Pensez à remplacer `exemple-un.fr` par votre nom de domaine à vous !
### Publier
On y est ! Avec un terminal, positionnez-vous dans le répertoire qui reflète ce que vous voulez mettre en ligne. Celui-ci devrait contenir des fichiers en `.html`, `.css`, ou `.js`, mais pas de `.md`. Si vous ne l'avez pas fait, faites `source ~/.awsrc`, et lancez ensuite :
```
aws s3 sync --delete . s3://exemple-un.fr
```
Cette commande suppose que vous avez `aws` en version 2. N'oubliez pas de mettre votre nom de domaine à la place d'`exemple-un.fr`.
L'option `--delete` supprime les fichiers distants qui ne sont pas présents localement, ce qui est généralement une bonne idée pour éviter de laisser traîner des vieux fichiers sur les serveurs de Deuxfleurs. Mais attention à ne pas supprimer par mégarde des morceaux de votre site web.
Vos fichiers devraient être téléversés. Une fois le processus fini, vous devriez pouvoir ouvrir un navigateur web tel que Firefox par exemple, taper votre nom de domaine dans la barre URL, et naviguer sur votre site web. En cas de pépin, essayez d'actualiser la page en faisant `ctrl`+`shift`+`r` avec votre clavier, ça vous garantira que votre navigateur récupère le vrai contenu en ligne au lieu de piocher dans le cache local sur votre ordinateur.

View file

@ -0,0 +1,32 @@
---
title: "Configurer l'apex chez Gandi"
description: "Paramétrer l'entrée DNS directement sur le nom de domaine de base"
date: 2023-12-04
weight: 1
extra:
parent: "services/mettre-place-DNS.md"
---
Supposons que vous avez loué `camille-michu.fr` chez Gandi.
D'abord, rendez-vous dans votre espace utilisateur Gandi, puis de là cliquez dans le menu à gauche sur «Nom de domaine» :
![dns1.png](/img/apex_gandi_1.png)
Une fois sur la page «Nom de domaines», votre nom de domaine devrait apparaître dans la liste, ici «camille-michu.fr». Cliquez dessus :
![dns2.png](/img/apex_gandi_2.png)
Dans le menu du haut, sélectionnez «Enregistrements DNS» :
![dns3.png](/img/apex_gandi_3.png)
Ensuite cliquez sur le bouton «Ajouter un enregistrement» :
![dns4.png](/img/apex_gandi_4.png)
Choisissez alors «ALIAS» comme type, et `garage.deuxfleurs.fr` comme nom d'hôte.
![dns5.png](/img/apex_gandi_5.png)
Maintenant que votre configuration DNS est réglée, vous pouvez [préparer votre contenu](@/prise_en_main/creer-du-contenu.md) !

View file

@ -0,0 +1,37 @@
---
title: "Configurer l'apex chez Scaleway"
description: "Paramétrer l'entrée DNS directement sur le nom de domaine de base"
date: 2023-12-04
weight: 2
extra:
parent: "services/mettre-place-DNS.md"
---
Supposons que vous avez loué `camille-michu.fr` chez Scaleway.
D'abord, rendez-vous dans votre espace utilisateur Scaleway. Sur la liste à gauche de l'écran, cliquez sur «Domains and DNS» dans la section «Network». Vous devriez arriver sur l'écran suivant. Cliquez sur votre nom de domaine :
![dns1.png](/img/apex_scaleway_1.png)
Une fois ici, cliquez sur l'onglet «Zones DNS» :
![dns2.png](/img/apex_scaleway_2.png)
Dans l'écran suivant, cliquez sur «Zone racine» :
![dns3.png](/img/apex_scaleway_3.png)
Ensuite, cliquez sur le bouton «Ajouter des records» :
![dns4.png](/img/apex_scaleway_4.png)
Une fenêtre va apparaître au centre de l'écran. Remplissez là exactement comme suit. Attention, dans le champ «Nom de l'hôte», `garage.deuxfleurs.fr` doit être suivi d'un point, sans espace, comme illustré, ne l'oubliez pas ! Vous pouvez après cliquer sur le bouton «Modifier le record».
![dns5.png](/img/apex_scaleway_5.png)
Vous devez alors vous retrouver face à un écran similaire au suivant :
![dns5.png](/img/apex_scaleway_6.png)
Félicitation, vous avez réussi ! Maintenant que votre configuration DNS est réglée, vous pouvez [préparer votre contenu](@/prise_en_main/creer-du-contenu.md) !

View file

@ -0,0 +1,61 @@
---
title: "Contacts & Calendriers"
description: "Contacts & Calendriers"
weight: 21
extra:
parent: 'services/email.md'
---
Vous pouvez utiliser Deuxfleurs pour synchroniser vos contacts et vos calendriers ! Par exemple, pour retrouver sur votre téléphone les adresses et rendez-vous que vous avez prévus sur le client web de votre ordinateur.
# Dans un navigateur web
Notre client mail [https://sogo.deuxfleurs.fr/](https://sogo.deuxfleurs.fr/) contient aussi vos informations de calendrier et de contacts.
# Sur téléphone
Pour que votre téléphone discute avec notre infrastructure, on recommande d'installer l'application libre [DAVx5](https://www.davx5.com/).
- [📥 Application Android (F-Droid)](https://f-droid.org/packages/at.bitfire.davdroid/)
- [📥 Application Android (Google Play Store)](https://play.google.com/store/apps/details?id=at.bitfire.davdroid&hl=en-US&pli=1)
- [📥 Application iOS](https://www.davx5.com/tested-with/icloud)
Une fois l'application installée, il faut ajouter un compte, choisir l'option `Connexion avec une URL et un nom d'utilisateur`, et rentrer :
* `Url de base` : `https://sogo.deuxfleurs.fr/SOGo/dav/`
* `Nom d'utilisateur` : votre adresse e-mail
* `Mot de passe` : votre mot de passe Deuxfleurs
Validez en cliquant sur `Se connecter`. Vous devriez voir apparaître un encart avec votre adresse Deuxfleurs. En cliquant dessus, vous aurez accès à plusieurs onglets, notamment Calendriers et Contacts, dans lesquels vous devriez voir une ou plusieurs lignes. Cochez les lignes que vous voulez synchroniser avec votre téléphone.
L'application `DAVx5` va rendre disponible vos informations de contacts et de calendrier sur votre téléphone. Vous allez ensuite pouvoir les utiliser dans vos application dédiées.
## Contacts
Dans votre application de contacts, vous pouvez sélectionner diverses listes de contact à afficher.
Vous devriez avoir une nouvelle liste de contacts Deuxfleurs dans laquelle vous pouvez accéder aux contacts ainsi qu'y inscrire vos nouveaux contacts.
## Calendrier
Similairement, c'est dans votre application d'agenda que vous allez pouvoir afficher le calendrier Deuxfleurs et y ajouter des événements.
# Sur ordinateur
Sur ordinateur le client e-mail [Mozilla Thunderbird](https://www.thunderbird.net) permet d'accéder en lecture & écriture à votre agenda ainsi qu'à vos contacts. Suivez ces étapes.
* Vous rendre dans l'onglet Agenda, cliquer sur « Nouvel agenda », et sélectionner « Sur le réseau ». On demande alors deux informations.
* `Nom d'utilisateur` : renseignez votre adresse e-mail complète.
* `Adresse` : vous l'obtiendrez en vous connectant à [SoGO](https://sogo.deuxfleurs.fr), onglet « Agenda », cliquez sur les 3 points verticaux à droite de votre agenda dans le menu de gauche, puis « Liens vers cet agenda »
Prenez le premier lien : « Accès aux utilisateurs authentifiés > Accès en CalDAV ».
Chez moi, cela donne (remplacez bien `MON_PSEUDO` par votre nom d'utilisateur !) :
http://sogo.deuxfleurs.fr/SOGo/dav/MON_PSEUDO/Calendar/personal/
* De retour dans Thunderbird, on peut cliquer sur « Rechercher des agendas ».
* On vous demande alors votre mot de passe (celui de votre compte Deuxfleurs).
* Vous devriez alors voir votre agenda apparaître. Il ne reste qu'à cliquer sur « S'abonner » !

View file

@ -0,0 +1,13 @@
---
title: Créer du contenu
description: Comment créer du contenu pour votre site web
sort_by: weight
weight: 40
date: 2025-03-29
extra:
parent: services/web.md
---
Votre site est désormais complètement configuré. Avant de publier du contenu, il faut écrire celui-ci !
Vous pouvez, au choix, [l'écrire à la main](@/services/à-la-main.md), ou vous [faire assister par un générateur](@/services/avec-un-générateur.md).

View file

@ -0,0 +1,33 @@
---
title: "Édition collaborative"
description: "La bureautique collégiale avec Cryptpad"
weight: 20
extra:
parent: 'services/_index.md'
---
# Accès à Cryptpad
- [🌐 Accéder via le navigateur](https://pad.deuxfleurs.fr)
# Les différentes utilisation de Cryptpad
## Traitement de texte
Pour du traitement de texte, dans le style de Word, Google Docs ou LibreOffice, il y a l'outil "Texte".
L'outil permet de taper du texte mais aussi de partager le document avec d'autre utilisateurices afin de taper en simultané.
Pour du traitement de texte Markdown utilisez plutot l'outil "Code".
## Formulaires
Pour des sondages, des enquêtes ou toute forme de fomulaire, dans le style de Google Forms, nous vous conseillons l'outil "Formulaire" de Cryptpad.
## Gestion de projet / Listes de tâches
Pour de la gestion de projet, de l'organisation de tâche et planification, Cryptpad propose un [Kaban Board](https://en.wikipedia.org/wiki/Kanban_board) via l'outil Kanban.
## Autre
Il existe d'autre mode d'utilisation de Cryptpad que nous ne recommandons pas, soit car nous ne les utilisons pas, soit car ils sont connus pour leurs problèmes de fonctionnement comme le tableur.
Utilisez les à vos risques et périls !

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View file

@ -0,0 +1,46 @@
---
title: "Hugo"
description: "Publier un site web sur Deuxfleurs avec Hugo"
date: 2025-03-29
weight: 10
extra:
parent: 'services/publier-le-contenu.md'
---
Configurez le fichier `~/.aws/credentials` de la manière suivante avec votre
identifiant de clef (`GKxxxx`) et votre clef secrète (`xxxxxx`), que vous
pouvez récupérer depuis [le
guichet](https://guichet.deuxfleurs.fr/website/configure#):
```ini
[default]
aws_access_key_id = GKxxxxxx
aws_secret_access_key = xxxxxxxx
```
Ensuite, ajoutez les lignes suivantes dans le fichier `config.toml` du dossier
de votre site web utilisé par Hugo:
```toml
[deployment]
order = [".jpg$", ".gif$", ".png$"]
[[deployment.targets]]
name = "deuxfleurs"
URL = "s3://votresiteweb.fr&endpoint=garage.deuxfleurs.fr&region=garage&s3ForcePathStyle=true"
```
Dans la ligne `URL`, remplacez `votresiteweb.fr` par le nom de domaine que vous souhaitez utiliser.
Une fois la configuration faite, vous pouvez publier votre site web en
exécutant simplement la commande suivante:
```
hugo deploy
```
Pour en savoir plus, consultez la documentation officielle à l'adresse:
* <https://gohugo.io/hosting-and-deployment/hugo-deploy/>

45
content/services/email.md Normal file
View file

@ -0,0 +1,45 @@
---
title: "E-mails"
description: "Faire héberger ses e-mails par Deuxfleurs"
weight: 11
extra:
parent: 'services/_index.md'
---
# Accéder à vos emails
<ul>
<li><a href='https://sogo.deuxfleurs.fr'>🌐 Accéder via le navigateur (SoGo)</a></li>
<li><a href='https://alps.deuxfleurs.fr'>🌐 Accéder via le navigateur (alps, version allégée)</a></li>
<li><a href='https://www.thunderbird.net/fr/'>📥 Thunderbird (PC/Mac)</a></li>
<li><a href='https://k9mail.app/'>📥 K9 (Android)</a></li>
</ul>
# Configurer ses emails dans une application
| Protocole | Rôle | Hôte | Port | Chiffrement | Authentification | Certificat |
| -- | -- | -- | -- | -- | -- | -- |
| IMAP | Réception des emails | `imap.deuxfleurs.fr` | `993` | SSL/TLS | email+mdp | valide |
| SMTP | Envoi des emails | `smtp.deuxfleurs.fr` | `465` | SSL/TLS | email+mdp | valide |
| Exchange ActiveSync | Tous | `https://sogo.deuxfleurs.fr` | `443` | SSL/TLS | email+mdp | valide |
# Utiliser un nom de domaine personnalisé (autre que @deuxfleurs.fr)
L'hébergement d'e-mails avec des noms de domaines différents, comme `jesuis@toutepuissante.net`, est possible. Vous êtes responsable de la location du nom de domaine mais l'hébergement et la distribution peut être faite sur nos serveurs !
Pour la location du nom de domaine nous vous invitons a regarder [la page du guide associée](@/services/mettre-place-DNS.md).
[↣ Comment louer un nom de domaine](@/services/mettre-place-DNS.md)
Nous détaillons comment mettre en place l'hébergement de vos mails sur les serveurs deuxfleurs sur la [page suivante](@/services/hebergement_mail_perso.md)
[↣ Comment heberger mes mails sur Deuxfleurs](@/services/hebergement_mail_perso.md)
# Calendrier et Contacts
Vous pouvez utiliser Deuxfleurs pour synchroniser vos contacts et vos calendriers ! Par exemple, pour retrouver sur votre téléphone les adresses et rendez-vous que vous avez prévus sur le client web de votre ordinateur.
[↣ Comment utiliser Deuxfleurs pour les contacts et le calendrier](@/services/contacts_calendriers.md)

View file

@ -0,0 +1,23 @@
---
title: "FileZilla"
description: "Publier avec FileZilla"
date: 2025-03-29
weight: 50
extra:
parent: "services/publier-le-contenu.md"
---
Pour servir votre site sur Garage via SFTP, vous aurez besoin de votre nom d'utilisateur ainsi que du mot de passe utilisé pour se connecter au [guichet Deuxfleurs](https://guichet.deuxfleurs.fr).
Les dispositions qui suivent peuvent potentiellement fonctionner avec n'importe quel client SFTP. Si vous n'en connaissez pas, nous vous recommandons d'utiliser [FileZilla](https://filezilla-project.org/download.php?type=client).
Après avoir installé FileZilla Client (à ne pas confondre avec FileZilla Server), vous pouvez paramétrer les accès à Garage comme suit :
* ouvrez le Gestionnaire de sites (via le premier bouton à gauche de la barre d'outils, ou le menu Fichier, ou le raccourci `Ctrl+S`)
* choisissez le protocole "*SFTP - SSH File Transfer Protocol*"
* renseignez l'hôte `bagage.deuxfleurs.fr` et le port *2222*
* choisissez le type d'authentification "*Demander le mot de passe*"
* renseignez le même nom d'utilisateur que celui que vous utilisez sur le guichet Deuxfleurs
En cliquant sur "Connexion", une pop-up apparaîtra pour vous demander un mot de passe. Renseignez le même mot de passe que celui que vous utilisez sur le guichet Deuxfleurs. Vous pouvez désormais vous connecter à votre site.
Lorsque vous serez connecté, vous verrez affichés vos différents sites dans la moitié droite de la fenêtre de FileZilla, et les fichiers de votre ordinateur dans la moitié gauche. Vous pourrez ainsi verser ou télécharger les fichiers de votre ordinateur vers vos sites sur Garage et vice-versa.

9
content/services/git.md Normal file
View file

@ -0,0 +1,9 @@
---
title: "Forge logicielle"
description: "Le logiciel libre avec ForgeJo"
weight: 21
extra:
parent: 'services/_index.md'
---
TODO : désolé ami⋅es devs, mais on vous fait confiance pour vous documenter par vous-mêmes pour apprendre à utiliser notre forge ! Du moins jusqu'à ce qu'on trouve le temps d'écrire cette page du Guide.

View file

@ -0,0 +1,17 @@
---
title: "Guide d'installation Matrix"
description: "Guide de l'installation, la création de compte et la prise en main de Matrix"
date: 2024-08-19
weight: 3
extra:
parent: "services/matrix.md"
---
# Inscription
L'inscription au service matrix est comprise dans la création de compte deuxfleurs.
Si vous n'avez pas encore de compte Deuxfleurs et souhaitez nous rejoindre regardez [ici](@/vie_associative/nous_rejoindre.md).
# Utilisation
<!-- TODO -->

View file

@ -0,0 +1,76 @@
---
title: "Transférer une boite existante"
description: "Transférer une boite existante"
weight: 10
extra:
parent: 'services/email.md'
---
Deuxfleurs peut héberger vos e-mails, même s'ils ne finissent pas en `@deuxfleurs.fr` !
> Vous voulez louer votre propre nom de domaine ? [Cette page vous l'expliquera.](@/prise_en_main/mettre-place-DNS.md)
Dans ce guide, on crée chez Deuxfleurs une boîte mail avec un nom de domaine vous appartenant, en incluant la récupération (optionnelle) des e-mails existants chez votre ancien fournisseur vers les serveurs de Deuxfleurs.
1. Si vous souhaitez rapatrier vos anciens e-mails de l'ancien fournisseur vers Deuxfleurs, faites une sauvegarde de vos e-mails sur votre machine :
> Nous présentons une méthode fiable ([cf. ce guide](https://github.com/joeyates/imap-backup/blob/main/docs/migrate-server-keep-address.md)), mais qui demande de bonnes connaissances en informatique. Vous pourriez avoir besoin de l'aide d'un⋅e administrateur⋅ice de Deuxfleurs.
>
> Si vous lui déléguez complètement l'opération, iel aura besoin de vos mots de passe chez votre ancien opérateur mail, chez Deuxfleurs, et manipulera votre sauvegarde d'e-mails. On vous recommande dans ce cas de changer vos mots de passe avant et après l'opération, et de vous armer de confiance.
* Faites de la place ! Chez votre fournisseur actuel, supprimez votre corbeille, vos vieux e-mails volumineux et inutiles, etc.
* Téléchargez l'outil [`imap-backup`](https://github.com/joeyates/imap-backup/).
* Utilisez `imap-backup setup` pour renseigner vos identifiants ainsi que le serveur IMAP de votre fournisseur mail actuel.
* Lancez `imap-backup backup --accounts=<votre_adresse_mail>`, ce qui va télécharger tous vos e-mails sur votre ordinateur (c'est long).
1. Communiquez votre nom de domaine à un⋅e administrateur⋅ice de Deuxfleurs pour qu'iel l'ajoute à :
* la liste des [domaines gérés par Deuxfleurs dans le LDAP](https://guichet.deuxfleurs.fr/admin/ldap/ou=domains,ou=groups,dc=deuxfleurs,dc=fr),
* et dans la [table de signature DKIM](https://git.deuxfleurs.fr/Deuxfleurs/nixcfg/src/branch/main/cluster/prod/app/email/config/dkim/signingtable).
1. Communiquez-lui l'adresse e-mail que vous souhaitez utiliser. Vous pouvez ajouter autant d'alias que vous souhaitez, il seront reçus sur la même boîte mail.
L'admin devra les ajouter ligne à ligne dans l'entrée `mail` dans votre profil utilisateur (en laissant votre adresse `@deuxfleurs.fr` en premier).
1. Vous devez ensuite rajouter les entrées pour votre nom de domaine en éditant votre zone DNS (si vous n'y comprenez rien, faites-vous aider de l'admin) :
```
# L'entrée MX pour recevoir les e-mails
@ MX 10 smtp.deuxfleurs.fr.
# L'entrée SPF pour autoriser notre IP à délivrer des e-mails en votre nom
@ TXT "v=spf1 include:deuxfleurs.fr -all"
# L'entrée DKIM pour autoriser notre postfix+opendkim à délivrer des e-mails en votre nom
smtp._domainkey CNAME smtp._domainkey.deuxfleurs.fr.
# L'entrée DMARC pour indiquer le comportement à adopter si les contraintes précédentes ne sont pas satisfaites
_dmarc CNAME _dmarc.deuxfleurs.fr.
```
1. À partir de ce point, vous pouvez envoyer et recevoir vos e-mails via notre infrastructure. [Suivez le Guide !](@/prise_en_main/email.md)
Il faudra par contre attendre 24/48h pour que les changements DNS se propagent dans le monde entier. Vous pourriez encore recevoir quelques e-mails chez votre ancien fournisseur dans l'intervalle. Passé ce délai, vérifiez dans l'interface e-mail de votre ancien fournisseur.
1. Si vous avez sauvegardé vos e-mails sur votre machine, il est finalement temps de les envoyer sur les serveurs de Deuxfleurs (toujours avec l'aide optionnelle de l'admin, si vous êtes bloqué⋅e) :
* Assurez-vous d'avoir terminé la sauvegarde en étape 1.
* Trouvez sur votre machine le dossier contenant la configuration d'`imap-backup` et votre sauvegarde d'e-mails (`~/.imap-backup/` sur Linux).
* Modifiez manuellement le fichier de configuration d'`imap-backup` et le nom du dossier de votre sauvegarde comme expliqué dans [le guide sus-cité](https://github.com/joeyates/imap-backup/blob/main/docs/migrate-server-keep-address.md). Imaginons que votre adresse mail est `moi@chezmoi.fr` :
* Remplacez à la ligne `username` votre e-mail par `moi-avant@chezmoi.fr` dans le fichier de configuration `config.json` d'`imap-backup`.
* Dans le même fichier, à la ligne `local_path`, remplacez le nom du dossier `moi_chezmoi.fr` par `moi-avant_chezmoi.fr`.
* Renommez le dossier `moi_chezmoi.fr` en `moi-avant_chezmoi.fr` dans le dossier d'`imap-backup`.
* Utilisez `imap-backup setup` pour renseigner vos identifiants Deuxfleurs (toujours le même e-mail, et votre mot de passe chez nous), ainsi que le serveur IMAP de Deuxfleurs (`imap.deuxfleurs.fr`).
* C'est le grand moment de la migration. Toujours en imaginant que votre adresse mail est `moi@chezmoi.fr`, lancez la commande suivante :
```imap-backup migrate moi-avant@chezmoi.fr moi@chezmoi.fr --destination-delimiter "."```
La commande devrait produire peu de lignes, et vous devriez voir (par exemple sur [sogo.deuxfleurs.fr](https://sogo.deuxfleurs.fr)) vos anciens e-mails apparaître. Si ce n'est pas le cas, appelez à l'aide.
Une fois cette longue commande terminée, c'est terminé. Bienvenu⋅e chez nous :)

View file

@ -0,0 +1,46 @@
---
title: Initialiser votre accès
description: Comment initialiser votre accès pour l'hébergement
sort_by: weight
weight: 20
extra:
parent: services/web.md
---
De par l'utilisation de son logiciel Garage, Deuxfleurs conserve et sert les sites web en recourant au stockage objet. Pour chaque site, on a un bucket (seau en français), partageant le même nom que lui. On peut voir un bucket comme un récipient dans lequel on va mettre tout nos fichiers à publier. Créer un bucket ne prend que quelques clics depuis votre compte DeuxFleurs.
# Créer un bucket pour héberger son site web
* En bas de l'[interface de votre compte](https://guichet.deuxfleurs.fr), cliquez sur "Mes sites Web".
* Cliquez sur "Nouveau site web".
* Spécifiez le nom de domaine pour votre site (l'identifiant du site qu'on tape dans la barre URL d'un navigateur pour y accéder) :
* Si vous n'avez pas votre propre nom de domaine, votre site peut être rendu accessible dans un sous-domaine de `web.deuxfleurs.fr`. Dans l'onglet "Je n'ai pas de nom de domaine", entrez le sous domaine de votre choix.
* Si vous avez votre propre nom de domaine, entrez-le dans l'onglet "Utiliser mon propre nom de domaine". Il faudra alors [configurer votre serveur DNS pour pointer sur l'adresse d'hébergement chez DeuxFleurs](@/services/mettre-place-DNS.md).
* Cliquez sur "Créer un nouveau site web" pour confirmer la création du bucket dans Garage.
Pour copier les fichiers du site web dans le bucket et [publier le site web](@/services/publier-le-contenu.md), vous aurez besoin des clefs d'accès et des propriétés du bucket accessibles en cliquant sur "Mes identifiants".
Les clefs d'accès permettent d'assurer que vous seul·e·s (ou celleux à qui vous partagez les clefs) peuvent modifier le contenu du site.
- L'identifiant de votre clé d'accès ressemble par exemple à `cSGcEQoInTVgkxPIzzF6IyU7C7`. Même s'il vaut mieux ne pas le crier sur tous les toits, il n'y a pas de risque de sécurité si vous le dévoilez à des gens.
- La clé d'accès secrète qui ressemble à `rCE6vzSVkll54FNd0Jvx7uoRsNqAXexxX1b3rm2BofquQKln6bdnDLRRli1dZbSS`, elle, comme son nom l'indique, doit absolument rester secrète. Si elle est dévoilée par accident, contactez un·e administrateur·rice immédiatement !
# Du point de vue des administrateur·ice·s
Pour les administrateur·ice·s, le bucket correspondant au site web apparaît comme :
```
$ sudo docker exec -ti 78e6b7e53241 /garage bucket list|grep -P 'exemple-un.fr|exemple-deux.eu'
4bdce6:exemple-un.fr 56a0f10929f0d63d0177415a22a0b636cf1efe92845f2b00e04b91298656e78e
exemple-deux.eu 941956ebfffa8fd564ad6b40e4bb5ac2f2b93bdbba1d1bf88fe6daff2cf4df6c
```
Si `exemple-un.fr` n'est pas à gauche dans la même colonne que `exemple-deux.eu`, c'est parce qu'il n'est pas réglé en global. L'administrateur·rice va corriger ça en faisant la commande suivante :
```
garage bucket alias 56a0f10929f0d63d0177415a22a0b636cf1efe92845f2b00e04b91298656e78e exemple-un.fr
```
On obtient le résultat suivant :
```
exemple-un.fr 4bdce6:exemple-un.fr 56a0f10929f0d63d0177415a22a0b636cf1efe92845f2b00e04b91298656e78e
exemple-deux.eu 941956ebfffa8fd564ad6b40e4bb5ac2f2b93bdbba1d1bf88fe6daff2cf4df6c
```

60
content/services/jitsi.md Normal file
View file

@ -0,0 +1,60 @@
---
title: "Visioconférence"
description: "La visio avec Jitsi"
weight: 12
extra:
parent: 'services/_index.md'
---
Jitsi est un logiciel de **visioconférence**, que Deuxfleurs fournit **en accès libre**.
# Accéder à Jitsi
- [🌐 Accéder via le navigateur](https://jitsi.deuxfleurs.fr)
- [📥 Application Android (F-Droid)](https://f-droid.org/en/packages/org.jitsi.meet/)
- [📥 Application Android (Google Play Store)](https://play.google.com/store/apps/details?id=org.jitsi.meet&hl=fr)
- [📥 Application iOS](https://apps.apple.com/fr/app/jitsi-meet/id1165103905)
# Conseils d'utilisation
La visioconférence est un service particulièrement tatillon à proposer bénévolement, surtout depuis des connexions domestiques.
Voilà quelques conseils pour vous assurer une bonne expérience :
## Préparer une réunion à l'avance
Le service étant en accès libre, vous n'avez qu'à décider d'une adresse web pour votre salon, par exemple `https://jitsi.deuxfleurs.fr/MONSUPERSALON`, et la diffuser à vos invité⋅es.
La première personne qui se connectera à ce salon en sera l'administrateur⋅ice. Prévoyez donc de vous y connecter en avance si c'est important pour vous.
## Quand ça rame (vidéo intermittente, son dégradé...)
### Diminuer la bande passante
<!-- ![Impression d'écran du menu « Paramètres de performance »](/img/jitsi_parametres_de_performance.png) -->
- Vous et vos correspondant⋅es pouvez ajuster vos « Paramètres de performance » pour échanger un flux vidéo plus léger. Vous trouverez ce menu dans les trois petits points « … Plus d'actions ».
- Vous n'avez peut-être pas besoin de la vidéo de tout le monde. Désactivez la vidéo ou gardez-la seulement pour certains participant⋅es.
- Si vous ne parlez pas, vous pouvez également couper votre microphone. Il est possible de passer en mode _talkie-walkie_ sur ordinateur avec la touche espace. Vous maintenez la touche espace, votre micro est activé. Vous arrêtez d'appuyer sur la touche espace, votre micro est coupé.
### Améliorer la connexion
- Connectez de préférence votre ordinateur en filaire (cable ethernet) à votre *box* (routeur internet).
- Si vous utilisez la communication sans fil (Wi-Fi), rapprochez-vous si possible de votre *box*.
- Le type de connexion internet influencera également la qualité de votre visioconférence : la fibre est idéale, l'ADSL ou les réseaux mobiles (4G, 5G etc.) sont plus incertains.
## Bien se faire entendre
- L'idéal est d'avoir un casque avec microphone ou des écouteurs avec microphone pour capter le son au plus près de votre bouche et _empêcher l'écho_ (que votre microphone capte ce qui sort sur les hauts-parleurs).
- Les micros intégrés aux ordinateurs portables récents captent généralement mieux le son que ceux des anciens.
- Si vous êtes plusieurs sur un seul ordinateur, tenez compte du fait que les microphones sont directionnels : la personne qui parle doit être en face de l'ordinateur.
## Mes correspondant⋅es sont connecté⋅es, mais je ne vois ni n'entends rien
Essayez de :
- Changer de navigateur web : [Firefox](https://www.mozilla.org/fr/firefox/new/), [Chromium](https://chromium.woolyss.com/download/)...
- Changer de connexion : connexion Internet d'un _smartphone_, Wi-Fi...
- Changer de pérhipérique.
Si rien de cela ne résoud le problème, il est temps de trouver une autre adresse pour votre visio d'aujourd'hui. Navré. <span aria-hidden="true">¯\\\_(ツ)\_/¯</span>

View file

@ -0,0 +1,37 @@
---
title: "Discussion instantanée"
description: "Messagerie instantanée avec Matrix"
date: "2024-08-19T15:10:33"
dateCreated: "2021-11-09T12:13:36.265Z"
weight: 10
extra:
parent: 'services/_index.md'
---
Matrix est un réseau de communication instantanée que vous pouvez utiliser pour rester en contact
avec votre famille, avec vos amis ou avec votre collectif ou association.
# Accéder à Matrix
- [🌐 Accéder via le navigateur](https://riot.deuxfleurs.fr)
- [📥 Application Android (F-Droid)](https://f-droid.org/fr/packages/im.vector.app)
- [📥 Application Android (Google Play Store)](https://play.google.com/store/apps/details?id=im.vector.app&hl=fr)
- [📥 Application iOS](https://apps.apple.com/fr/app/riot-im/id1083446067)
# Inscription & utilisation
Pour s'inscrire sur notre service Matrix, il faut un compte Deuxfleurs : [rejoignez-nous !](@/vie_associative/nous_rejoindre.md). Ensuite, [suivez le guide](@/services/guide_installation.md) pour la connexion au service et l'utilisation.
# Nos salons Deuxfleurs
Deuxfleurs a une pléthore de salons sur Matrix. C'est vraiment à cet endroit qu'on discute le plus entre nous. Le mieux pour les découvrir, c'est de rejoindre notre « espace » (un annuaire de salons et de personnes) qui s'appelle [#la-cabane:deuxfleurs.fr](https://matrix.to/#/#la-cabane:deuxfleurs.fr) et qui ressemble à ça :
![espace_matrix_3salons.png](/img/matrix.png)
À l'intérieur de cet espace, on vous recommande notamment les salons suivants :
* [deuxfleurs::asso](https://matrix.to/#/#deuxfleurs:deuxfleurs.fr) où l'on parle de l'association.
* [deuxfleurs::forum](https://matrix.to/#/#forum:deuxfleurs.fr) où l'on discute beaucoup des questions de numérique et société mais pas que.
* [deuxfleurs::infra](https://matrix.to/#/#tech:deuxfleurs.fr) où l'on parle « techniques » (informatique, notamment).
* [deuxfleurs::usages](https://matrix.to/#/#usages:deuxfleurs.fr) où l'on parle « usages » des services fournis par DeuxFleurs: bugs, problèmes, questions, remarques, souhaits, idées.

View file

@ -0,0 +1,25 @@
---
title: "Votre nom de domaine"
description: "Mise en place du nom de domaine"
date: 2022-09-01
weight: 30
extra:
parent: "services/web.md"
---
# Louer son nom de domaine
Les noms de domaine sont gérés et loués par les _registraires de nom de domaine_. Ce sont eux qui proposent aux clients finaux de réserver des noms. On peut citer [Gandi](https://www.gandi.net/fr), [OVHcloud](https://www.ovhcloud.com/fr/), ou [Scaleway](https://www.scaleway.com/fr/) par exemple. Lorsqu'on veut s'offrir `exemple-un.fr` notamment, c'est chez eux que ça se passe; ensuite, à leur tour, ils vont enregistrer notre demande auprès de l'organisme correspondant à l'extension choisie : l'association française [AFNIC](https://www.afnic.fr/) pour `.fr`, l'association états-unienne [Public Internet Registry ](https://thenew.org/) pour `.org`, l'association européenne (belge en particulier) [EURid](https://eurid.eu/fr/) pour `.eu`... Nous recommandons de privilégier l'une de ces trois extensions parmis la myriade qui existe, car ces entités ont pour historique de ne pas augmenter arbitrairement les prix tout en garantissant la disponibilité de votre nom de domaine.
Pour référence, la location d'un nom de domaine en `.fr` est d'environ 12 euros par an. Certaines offres vous fournissent «des extras» en plus comme une boîte courriel, sans que ça n'influe grandement sur les prix. En ce qui nous concerne, Gandi est un des registraires que nous recommandons.
## Utiliser directement le nom de domaine ou un sous-domaine ?
Une question importante est de choisir si on veut utiliser directement son nom de domaine (`example.com`) ou alors un sous-domaine, par exemple `blog.example.com`.
Utiliser un sous-domaine comme `www.example.com` ou `blog.example.com` fonctionnera chez tous les hébergeurs DNS et avec tous les logiciels DNS standards.
À l'inverse, utiliser le nom de domaine directement (c'est-à-dire l'apex, ici `example.com`) impose certaines contraintes techniques. Celles-ci sont détaillées dans la page [CNAME à l'apex](@/services/DNS-CNAME-apex.md).
Tous les registraires de nom de domaine ne proposent pas de champs `ALIAS` comme expliqué. C'est cependant le cas de Gandi et de Scaleway.
Pour configurer l'hébergement de votre site derrière le nom de domaine simple, ou apex :
- [C'est par ici si vous êtes chez Gandi](@/services/configurer_apex_Gandi.md)
- [C'est par ici si vous êtes chez Scaleway](@/services/configurer_apex_Scaleway.md)

19
content/services/plume.md Normal file
View file

@ -0,0 +1,19 @@
---
title: Blogs
description: Plume
weight: 31
extra:
parent: 'services/_index.md'
---
<!-- TODO -->
# Accéder à Plume
- [🌐 Accéder via le navigateur](https://plume.deuxfleurs.fr)
<!-- # Le Fédiverse -->
<!-- # S'abonner -->
<!-- # Créer du contenu -->

View file

@ -0,0 +1,56 @@
---
title: Publier du contenu
description: Comment publier votre contenu en ligne
sort_by: weight
date: 2025-03-29
weight: 50
extra:
parent: services/web.md
---
Nous allons désormais verser votre site sur Garage, et ce dernier le servira à toutes les personnes qui voudront le voir. Vous aurez besoin de l'identifiant de votre clé d'accès et de la clé d'accès secrète, obtenus dans la partie « [Initialiser votre accès](@/services/initialiser-votre-accès.md) ».
Si vous utilisez Hugo, vous pouvez le configurer pour envoyer directement le site sur les serveurs de Deuxfleurs:
* [Publier un site web sur Deuxfleurs avec Hugo](@/services/deploiement_hugo.md)
Dans les autres cas, vous avez le choix entre trois méthodes :
* [Faire ça en ligne de commande avec `aws-cli`](@/services/aws-cli.md). C'est la méthode la plus habituelle et la plus éprouvée, cependant il faut utiliser le terminal, et être sur linux est grandement conseillé pour celle-ci.
* [Faire ça avec l'utilitaire graphique `rclone`](@/services/rclone.md). Cette méthode vous paraîtra peut-être moins intimidante grâce à l'interface graphique du logiciel rclone. Celui-ci tourne sur Linux, Windows, et macOS.
* [Faire ça avec l'utilitaire graphique `winscp`](@/services/winscp.md). Cette méthode propose également une interface graphique, mais ne fonctionne que sur Windows.
Il existe aussi d'autres méthodes plus proches de celles habituellement utilisées pour verser des pages web en ligne :
* [En SFTP avec FileZilla](@/services/filezilla.md). Ce logiciel bien connu fonctionne sur Linux, Windows et macOS.
* [En WebDAV avec votre navigateur de fichiers](@/services/webdav.md). Avec cette méthode, vous pourrez manipuler les fichiers de votre site comme s'ils étaient sur votre ordinateur. Pour l'instant, seuls les gestionnaires de fichier Linux sont évoqués ici.
### Bravo !
Une fois l'un de ces trois guides suivi, vous aurez désormais votre propre site web accessible publiquement en ligne !
Vous pouvez rajouter dessus le badge attestant fièrement son hébergement sur Garage:
[![Badge indiquant qu'un site est hébergé sur Garage en français](/img/garage_fr.png)](https://garagehq.deuxfleurs.fr/)
[![Badge indiquant qu'un site est hébergé sur Garage en anglais](/img/garage_en.png)](https://garagehq.deuxfleurs.fr/)
Rajoutez l'image dans votre stockage, et mentionnez-la dans votre contenu.
En HTML, si vous avez écrit votre site à la main :
```
<a href="https://garagehq.deuxfleurs.fr/"><img src="garage_fr.png" alt="Badge indiquant que ce site est propulsé par le logiciel Garage" title="Site propulsé par Garage"></a>
```
En Markdown, si vous utilisez un générateur :
```
[![Badge indiquant qu'un site est hébergé sur Garage](/img/garage_fr.png)](https://garagehq.deuxfleurs.fr/)
```
Vous pouvez aussi revendiquer votre hébergement par Deuxfleurs avec les badges suivants :
[![Badge indiquant qu'un site est hébergé chez Deuxfleurs en français](/img/deuxfleurs_fr.png)](https://deuxfleurs.fr/)
[![Badge indiquant qu'un site est hébergé chez Deuxfleurs en anglais](/img/deuxfleurs_en.png)](https://deuxfleurs.fr/)
Avec les mentions suivantes, en HTML :
```
<a href="https://deuxfleurs.fr/"><img src="deuxfleurs_fr.png" alt="Badge indiquant que ce site est hébergé par l'association Deuxfleurs" title="Site hébergé par Deuxfleurs"></a>
```
Ou en Markdown :
```
[![Badge indiquant qu'un site est hébergé par l'association Deuxfleurs](/img/deuxfleurs_fr.png)](https://deuxfleurs.fr/)
```

103
content/services/rclone.md Normal file
View file

@ -0,0 +1,103 @@
---
title: "Rclone Browser"
description: "Publier avec Rclone Browser"
weight: 30
date: 2025-03-29
extra:
parent: "services/publier-le-contenu.md"
---
Rclone browser est un outil simple qui vous permet d'accéder directement à Garage.
# Installation
Si vous êtes sous macOS ou Windows, vous pouvez télécharger la dernière version depuis la page [github de rclone-browser](https://github.com/kapitainsky/RcloneBrowser/releases) (descendez un peu pour voir les liens).
Sous Ubuntu (lubuntu, kubuntu, etc.), Debian et Linux Mint, cherchez et installez "Rclone Browser" dans la logithèque ("App Store") ou lancez directement depuis un terminal :
```bash
sudo apt-get install -y rclone-browser
```
---
Le paquet existe aussi pour d'autres distributions :
```bash
sudo dnf install -y rclone-browser # fedora
sudo yay -S rclone-browser # arch linux
sudo nix-env -iA nixos.rclone-browser # nix os
```
# Premier lancement
Avant de lancer Rclone Browser, ouvrez un éditeur de texte.
Moi j'utilise "Éditeur de texte" sous Gnome aussi connu sous le nom de `gedit`. Sous Windows on peut utiliser Bloc-Note Windows (ou `notepad.exe`).
![gedit.png](/img/rclone_gedit.png)
Entrez le texte suivant dedans, tout en remplaçant bien les lignes 5 et 6 par vos identifiants communiqués précédemment :
```toml
[garage]
type = s3
provider = Other
env_auth = false
access_key_id = <REMPLACEZ PAR VOTRE IDENTIFIANT DE CLE D'ACCESS>
secret_access_key = <REMPLACEZ PAR VOTRE CLE D'ACCES SECRETE>
region = garage
endpoint = garage.deuxfleurs.fr
bucket_acl = private
force_path_style = true
no_check_bucket = true
```
Maintenant enregistrez le à un endroit où vous ne le perdrez pas. Dans mon cas, j'ai choisi de le mettre dans Mon Dossier Personnel > Documents > Configuration et je l'ai appelé `rclone.conf`.
![rclone-conf.png](/img/rclone_conf.png)
Maintenant lancez "Rclone Browser" en cherchant l'application dans votre menu d'application
![capture_décran_de_2021-11-25_14-43-03.png](/img/rclone_menu.png)
L'application devrait se lancer :
![rclone_init.png](/img/rclone_init.png)
Cliquez sur "File" (Fichiers) en haut à gauche, puis sur "Preferences...". La fenêtre suivante s'ouvre :
![rclone-conf2.png](/img/rclone_conf2.png)
Repérez la deuxième ligne intitulée `rclone.conf location:`. Tout au bout de la ligne, cliquez sur le bouton avec les trois points `[...]`. Vous aurez alors la possibilité d'indiquer à Rclone Browser où se trouve le fichier de configuration créé juste avant (pour ma part, je rappelle, "Dossier personnel > Documents > Configuration > rclone.conf", on voit que le chemin complet vers le fichier apparaît maintenant dans le champs texte.
Appuyez sur OK, et la fenêtre principale devrait maintenant ressembler à ça :
![rclone-s3.png](/img/rclone_s3.png)
Cliquez sur "S3 garage" puis cliquez sur "Open". Si vous voyez des dossiers apparaître, c'est gagné !
![rclone-conn.png](/img/rclone_conn.png)
Vous pouvez maintenant naviguer dans vos dossiers, envoyer des fichiers sur Garage ou en récupérer. Attention, vous ne pouvez pas créer de "nouveaux dossiers" à la racine, mais vous pouvez créer des sous-dossiers dans les dossiers existants préalablement créés pour vous.
# Utiliser comme un drive
Ce n'est pas forcément très pratique de devoir passer par cette interface pour envoyer ou récupérer des fichiers. Ce qui serait génial, c'est que ces dossiers apparaissent sur votre ordinateur comme des dossiers normaux.
Pour cela, sélectionnez un dossier racine, moi j'ai choisi `quentin.bibliotheque` puis cliquez sur le bouton "Mount".
![rclone-mount.png](/img/rclone_mount.png)
Un sélecteur de fichier s'ouvre alors. Je vais dans "Dossier Personnel > Documents", je créer un nouveau dossier que j'appelle "Distant". Je vais dedans et clique sur "Choisir" (ou Ok).
Maintenant, quand je vais dans un explorateur de fichier, je vois les fichiers sur Garage comme si ils étaient sur mon ordinateur.
![nautilus-distant.png](/img/rclone_nautilus.png)
Je peux aussi accéder à ces documents depuis mon logiciel préféré, comme ici "LibreOffice Calc" :
![capture_décran_de_2021-11-25_15-01-42.png](/img/rclone_calc.png)

View file

@ -0,0 +1,22 @@
---
title: Statique, comment ça?
description: Nous hébergeons des sites statiques
sort_by: weight
weight: 10
extra:
parent: services/web.md
---
Depuis le commencement du web, au début des années 90, existent les sites web _statiques_ : quand un client demande un fichier ou une page, il spécifie le chemin _via_ une [URL](https://fr.wikipedia.org/wiki/Uniform_Resource_Locator), et le serveur répond tout le temps la même chose.
Dès le milieu des années 90 sont apparu les pages dynamiques, avec [CGI](https://fr.wikipedia.org/wiki/Common_Gateway_Interface) et [PHP](https://fr.wikipedia.org/wiki/PHP).
Pour une même page, le serveur peut répondre un contenu différent, variant selon des paramètres rajoutés en fin de chemin URL, selon des données dans la mémoire du serveur, ou selon n'importe quel facteur qui passe par la tête du développeur.
Avec [JavaScript](https://fr.wikipedia.org/wiki/JavaScript), qui date de la même époque, une confusion se pose souvent : beaucoup de contenus statiques passent pour du dynamique aux yeux de l'internaute. Il faut alors rappeler une distinction importante : le code Javascript livré avec un site s'exécute côté client, c'est-à-dire sur l'ordinateur ou le téléphone de l'internaute. A contrario, le CGI ou PHP s'exécute côté serveur, c'est-à-dire sur la machine administrée par le propriétaire du site.
Selon ce qu'on veut faire, il faut choisir l'un ou l'autre.
Quelques exemples pour comprendre cette dichotomie : je gère une boutique en ligne, et je veux que le stock de mes produits s'affiche quand un client consulte mon site ? Il faut faire ça côté serveur, car seul lui connaît les stocks. Je veux mettre en place des décors interactifs avec la souris ? Il faut faire ça côté client, car seul lui connaît la position du curseur. Des fois c'est ambivalent:afficher l'heure sur une page, par exemple, peut être fait soit avec du contenu dynamique (insertion de l'heure côté serveur), soit avec du contenu statique (insertion de l'heure avec du code Javascript statique qui tourne chez le client).
En proposant un site statique on réduit fortement le besoin d'infrastructure du côté serveur en déplacant le calcul sur des terminaux déjà existant : votre téléphone ou ordinateur. De ce fait on réduit le besoin de nouveaux matériel qui est très couteux d'un point de vue environnemental (voir par exemple la vidéo de [François Jarrige / Fanny Lopez | La Manufacture d'idées 2022](https://www.youtube.com/watch?v=wwFFWPK-CF8) à ce sujet).
En conclusion, une page statique peut proposer des interactions et des effets quelconques, et même se comporter comme une application, car l'interactivité est gérée uniquement par votre ordinateur. Dans ce modèle, par contre, le serveur web se contente simplement de vous envoyer les données que vous lui demandez, sans exécuter de logique complexe, réduisant ainsi l'impact environnemental du site.

40
content/services/web.md Normal file
View file

@ -0,0 +1,40 @@
---
title: Sites web
description: Héberger vos sites internet
sort_by: weight
weight: 30
extra:
parent: services/_index.md
---
<!-- TODO -->
Vous souhaitez avoir un site web ?
Pour publier ce qui vous intéresse personnellement de manière indépendante ?
Ou pour exposer votre association sur la carte du net ?
Deuxfleurs peut vous aider en vous fournissant l'hébergement.
Suivez le guide !
1. [Statique ? Comment ça ?](@/services/statique-comment-ça.md)
2. [Initialiser votre accès](@/services/initialiser-votre-accès.md)
3. [Votre nom de domaine](@/services/mettre-place-DNS.md)
4. [Créer du contenu](@/services/creer-du-contenu.md)
5. [Publier le contenu](@/services/publier-le-contenu.md)
# Ils nous font confiance pour leur site web
- [declic-lelivre.com](https://declic-lelivre.com) - _Exploitation des données privées, surveillance généralisée, addiction au smartphone, disparition de pans entiers de l'économie... Les critiques du monde du numérique ne cessent de s'amplifier ; difficile d'ignorer les conséquences de l'utilisation d'Amazon, Facebook, Google, Instagram ou Netflix. Et s'il existait un autre Internet, respectueux de nos libertés ?_
- [envieappartagee.fr](https://www.envieappartagee.fr) - _Association Envie Appart'Agée, projet de coloc Alzheimer pour habiter et être accompagné autrement en Vendée._
- [wanderearth.fr](https://wanderearth.fr/) - _Blog voyage à vélo low-tech._
- [www.osuny.org](https://www.osuny.org/) - _Osuny est une solution technique spécialement conçue pour les universités, laboratoires de recherches et écoles supérieures permettant de créer des sites Web entièrement personnalisés, les plus sobres, les plus accessibles et les plus sécurisés possibles_.
- [www.giraud.eu](https://www.giraud.eu) - _Site d'un ingénieur en informatique_
- [anneprudhomoz.fr](https://anneprudhomoz.fr) - _De la terre, du fer, de l'eau, beaucoup de feu, un peu d'huile, encore du béton et du plâtre ! ... sans oublier le crayon à papier et les carnets._
- [courderec.re](https://courderec.re) - _Groupe de musique. De la pop synthé qui décoiffe._
- [colineaubert.com](https://colineaubert.com) - _D'un côté graphiste, illustratrice et conceptrice d'outils pédagogiques, je mets en images et en mots différents sujets scientifiques et culturels._
- [estherbouquet.com](https://estherbouquet.com) - _Esther Bouquet questions how narratives—both historical and literary—are being built by creating tangible experiences ranging from the size of the sheet of paper to the volume of a space; somewhere between writing, archiving, drawing, designing, and programming._
- [quentin.dufour.io](https://quentin.dufour.io) - _Portfolio et blog d'un ingénieur en informatique_
- [erwan.dufour.io](https://erwan.dufour.io) - _Portfolio et blog d'un passionné d'électronique_
- [luxeylab.net](https://luxeylab.net) - _Site d'un prof en informatique_
- [eric.dufour.io](https://eric.dufour.io) _- Appui au montage de projets de bioéconomie circulaire._
- [www.clairebernstein.photo](https://www.clairebernstein.photo/) - _Portfolio photographique._
- et de nombreux autres!

View file

@ -0,0 +1,21 @@
---
title: "WebDAV"
description: "Publier via un gestionnaire de fichiers avec WebDAV"
date: 2025-03-29
weight: 60
extra:
parent: "services/publier-le-contenu.md"
---
Comme avec [le SFTP](@/services/filezilla.md), vous aurez besoin pour utiliser le WebDAV de votre nom d'utilisateur ainsi que du mot de passe utilisé pour se connecter au [guichet Deuxfleurs](https://guichet.deuxfleurs.fr).
**Attention cependant : si vous venez de créer un site via le guichet Deuxfleurs, celui-ci ne pourra être modifié via WebDAV tant que vous n'avez pas ajouté un fichier dessus via [les autres méthodes décrites dans ce guide](@/prise_en_main/publier-le-contenu.md).**
### Paramétrer l'accès WebDAV avec le gestionnaire de fichiers GNOME (Nautilus)
Si vous utilisez Ubuntu ou Fedora, votre gestionnaire de fichiers par défaut est probablement celui de GNOME, également appelé Nautilus. Voici comment accéder à vos sites en WebDAV :
* dans la barre latérale de Nautilus, cliquez sur "Autres emplacements" (tout en bas)
* dans le champ "Connexion à un serveur", saisissez `davs://bagage.deuxfleurs.fr/webdav` et cliquez sur "Se connecter"
* renseignez les mêmes nom d'utilisateur et mot de passe que deux que vous utilisez sur le guichet Deuxfleurs
Un nouveau dossier "bagage.deuxfleurs.fr" apparaîtra dans la barre latérale de Nautilus : c'est lui qui affiche le contenu de votre espace sur Garage. Vous pouvez interagir avec de la même façon qu'avec les fichiers sur votre ordinateur.

View file

@ -0,0 +1,63 @@
---
title: "WinSCP"
description: "Publier avec WinSCP"
date: 2025-03-29
weight: 40
extra:
parent: 'services/publier-le-contenu.md'
---
# Installation
Commencez par télécharger l'outil [WinSCP](https://winscp.net/eng/download.php).
![winscp_dl.png](/img/winscp_dl.png)
Installez le logiciel.
# Configuration
Lancez-le. La fenêtre de connexion suivante devrait apparaître :
![](/img/winscp_login.png)
Vous devez :
1. Vérifier que c'est bien "Nouveau site" qui est sélectionné
2. Dans *protocole de fichier*, vous devez choisir *Amazon S3*
3. Dans *nom d'hôte*, vous devez mettre `garage.deuxfleurs.fr`
4. Dans *numéro de port*, vous devez mettre (ou plutôt laisser) `443`
5. Dans *id de clé d'accès*, vous devez mettre l'identifiant de votre clé d'accès, exemple : `GK...`
6. Dans *clé d'accès secrète*, vous devez mettre votre clé d'accès secrète.
7. Maintenant, cliquez sur le bouton *Avancé*. (Cliquez bien sur le mot "Avancé" et non sur la flèche à droite). Une fenêtre s'ouvre :
![](/img/winscp_avance.png)
1. Dans le menu de gauche, cliquez sur *S3*
2. Dans la partie de droite, pour *Région par défaut*, inscrivez au clavier *garage*
3. Toujours à droite, dans *Style URL*, choisissez *Chemin*
4. Cliquez sur OK
Vous voilà de retour sur la fenêtre de connexion :
![](/img/winscp_sauvegarder.png)
1. Cliquez sur *Sauver* (cliquez bien sur le texte et non sur la flèche noire à droite)
La fenêtre suivante apparaît :
![](/img/winscp_session.png)
1. Dans *Enregistrer la sessions sous :*, donnez un nom qui identifie bien votre site web, c'est ce qui vous permettra de l'identifier dans la liste de connexion.
2. Pour la case *Enregistrer le mot de passe*, nous vous conseillons de la cocher sauf si vous êtes sur un ordinateur public (bibliothèque, cybercafé, etc.) ou au travail.
3. Pour la case *Créer un raccourci sur le bureau*, nous vous conseillons de la cocher, vous pourrez alors mettre votre site en ligne en un seul clic (ou presque) depuis votre bureau.
4. Cliquez sur OK
Vous pouvez maintenant cliquer sur "Connexion".
# Envoyer votre site web
À gauche, naviguez jusqu'au dossier de votre site web.
Faites en un glisser déposer à droite à l'intérieur du dossier qui contient le nom de votre site web.
![commander.png](/img/winscp_commander.png)

View file

@ -0,0 +1,41 @@
---
title: "À la main"
description: "Créer du contenu à la main"
sort_by: "weight"
date: 2025-03-29
weight: 1
extra:
parent: "services/creer-du-contenu.md"
---
Garage, comme tout serveur web, va se contenter ici de servir des fichiers `.html`. Ces fichiers sont tout à fait lisibles et écrivables par un humain. Ainsi, si vous n'avez pas prévu d'avoir un site avec beaucoup de pages, il est souvent intéressant de façonner chacune d'entre elles à la main.
### Décrire le contenu
Pour écrire un page web, il faut écrire un fichier `.html` en suivant, justement, la syntaxe et les règles HTML. À titre indicatif, voici un exemple simple :
```
<!DOCTYPE html>
<html lang="fr">
<head>
<title>Mon site</title>
</head>
<body>
<p>Bonjour; bienvenue sur mon site !</p>
</body>
</html>
```
Vous pourrez facilement trouver moult ressources en ligne pour maîtriser le HTML. [La documentation de Mozilla sur le sujet](https://developer.mozilla.org/fr/docs/Web/HTML) est un bon départ. Enfin, il faut savoir que le HTML est un langage pour décrire le contenu de la page seulement, pas l'allure ou l'esthétique ! La conséquence directe est qu'une page reposant uniquement sur HTML sera sobre : texte noir sur fond blanc, avec alignement à gauche. Si cela vous suffit, vous pouvez d'ores et déjà vous arrêter sur ça.
### Décrire l'apparence
Si vous souhaitez ajouter des couleurs, modifier la disposition, ou l'arrangement par exemple, il faut rajouter, au-dessus du HTML, une description CSS qui contient vos règles esthétiques. Vous pouvez par exemple créer un fichier `style.css` à la racine du dossier représentant votre site. Ensuite, dans vos pages HTML que vous souhaitez styliser, il faut rajouter, dans la section `<head>`, la formule suivante : `<link rel="stylesheet" type="text/css" href="style.css">` (attention le chemin de `style.css` est relatif, par exemple si vous voulez styliser une page dans un dossier, il faudrait alors marquer `../style.css` à la place). Une fois ceci fait, lorsque quelqu'un va visiter une page HTML, il va automatiquement récupérer le fichier CSS associé, et l'appliquer. Voici encore une fois, à titre indicatif, un contenu exemple pour `style.css` :
```
body
{
margin: 0 auto;
max-width: 1000px;
padding: 10px 10px 10px 10px;
}
```
Encore une fois, plein de ressources sont disponibles en ligne, et Mozilla propose encore une fois [une bonne base](https://developer.mozilla.org/fr/docs/Web/CSS).
Une fois que vous avez tous vos fichiers `.html` et `.css` réunis, [vous pouvez passer à la publication](@/prise_en_main/publier-le-contenu.md) !

View file

@ -1,7 +1,7 @@
---
title: "Vie associative"
description: "Vie associative"
weight: 50
weight: 30
sort_by: "weight"
extra:
parent: 'vie_associative/_index.md'

View file

@ -112,3 +112,11 @@
margin: auto;
float: none!important;
}
/* Me soulent ces listes qui sont un coup serrées, un coup non. */
/* Mais flemme de coder défensif... */
/* By ADRN 25 */
/* .content li > p { */
/* margin-top: 0; */
/* margin-bottom: 0; */
/* } */

View file

@ -72,11 +72,25 @@ header ul li {
color: var(--primary-text-color);
&:hover {
color: #fff;
text-decoration: underline;
}
}
header .nav-item {
padding: 8px 6px;
margin: 0 10px;
color: var(--primary-text-color);
&:hover, &:active, &:focus {
text-decoration: none;
border-bottom: white solid 1px;
}
&.active {
text-decoration: none;
border-bottom: white solid 3px;
}
}
.hero {
display: flex;
align-items: center;
@ -293,9 +307,9 @@ footer {
padding: 10px 0px;
}
main .toc-homepage .toc-sticky {
display: block;
}
/* main .toc-homepage .toc-sticky { */
/* display: block; */
/* } */
.menu-button-container {
display: block;

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 257 KiB

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="30mm" height="30mm" viewBox="0 0 30 30" version="1.1" id="svg5" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<defs id="defs2"/>
<g id="layer1" transform="translate(-47.531142,-150.58196)">
<g id="g2446" transform="matrix(0.26458333,0,0,0.26458333,27.649536,132.01223)">
<g id="g6567" transform="matrix(0.92473907,0,0,0.92473907,11.032718,11.165159)">
<g id="g7383" transform="matrix(1.0300991,0,0,1.0300991,3.770254,-1.2763086)">
<path id="path6" d="m 136.06214,99.13643 c -0.8681,0.09646 -1.83266,0 -2.70078,-0.289369 L 99.794436,89.780144 c -0.868109,-0.28937 -1.736218,-0.675196 -2.507872,-1.157479 z" style="stroke-width:0.964566"/>
<path id="path8" class="st0" d="m 85.036565,156.14226 c 1.919127,0.0226 3.842264,-0.048 5.758577,0.0407 1.109916,0.0647 2.081695,0.96893 2.125517,2.09821 0.05763,2.83895 0.0096,5.68171 0.02535,8.52216 0.0387,0.72125 -1.165534,0.55433 -1.656924,0.86227 -2.84639,0.78316 -5.867198,1.08468 -8.793555,0.62567 -2.484003,-0.4206 -4.607002,-2.18507 -5.651194,-4.45399 -1.332604,-2.83308 -1.546544,-6.07759 -1.21852,-9.15366 0.293175,-2.57048 1.448442,-5.0874 3.473195,-6.74732 2.184175,-1.91934 5.23662,-2.62252 8.078891,-2.19703 2.061965,0.25939 4.063024,1.01333 5.768107,2.20419 -0.194486,1.20116 -0.887464,2.34273 -1.929135,2.99015 -1.865545,-1.36891 -4.253598,-2.12198 -6.568068,-1.87184 -2.02236,0.3166 -3.762605,1.87404 -4.283558,3.85841 -0.666251,2.35645 -0.668458,4.88015 -0.252316,7.28143 0.337055,1.92315 1.48217,3.89047 3.44592,4.49149 1.860151,0.60901 3.846702,0.22762 5.72889,-0.0627 0.02323,-1.64043 -0.05713,-3.28547 0.06461,-4.92211 0.04478,-0.38456 -0.694745,-0.10524 -1.004029,-0.19009 -1.009365,-0.0553 -2.115945,0.1939 -3.015314,-0.38583 -0.860219,-0.80391 -0.327291,-2.03804 -0.09646,-2.99015 z" style="stroke-width:0.964566"/>
<path id="path10" class="st0" d="m 109.82594,166.17374 c -0.0965,0.38583 -0.28937,0.77165 -0.57875,1.15748 -0.19291,0.38583 -0.48228,0.6752 -0.77164,0.86811 -1.25394,-0.0965 -2.31497,-0.77165 -2.99017,-1.92913 -1.15748,1.25393 -2.89369,2.02559 -4.62991,2.02559 -1.639774,0 -2.893709,-0.48229 -3.76182,-1.44685 -0.771653,-0.96457 -1.253937,-2.12205 -1.253937,-3.37598 0,-1.83268 0.57874,-3.18307 1.736221,-4.05118 1.350393,-0.96456 2.893706,-1.44685 4.533456,-1.35039 0.96458,0 1.92914,0 2.79726,0.0965 v -0.96457 c 0,-1.73622 -0.77166,-2.50787 -2.41143,-2.50787 -1.15747,0 -2.797241,0.38583 -4.919286,1.15748 -0.675197,-0.77165 -1.061024,-1.83268 -1.061024,-2.8937 2.218503,-0.96456 4.53347,-1.44685 6.94488,-1.44685 1.44686,-0.0965 2.79725,0.38583 3.95473,1.3504 0.96457,0.86811 1.5433,2.2185 1.5433,4.05117 v 6.55905 c -0.0965,1.44685 0.19291,2.2185 0.86812,2.70078 z m -8.10237,-0.77165 c 1.25394,-0.0965 2.41142,-0.57874 3.18308,-1.54331 v -2.79724 c -0.77166,-0.0965 -1.63977,-0.0965 -2.41143,-0.0965 -0.77165,-0.0965 -1.44684,0.19291 -2.02558,0.67519 -0.482291,0.48229 -0.675204,1.06103 -0.675204,1.73622 0,0.57874 0.192913,1.15748 0.578744,1.63976 0.38583,0.19292 0.86811,0.38583 1.35039,0.38583 z" style="stroke-width:0.964566"/>
<path id="path12" class="st0" d="m 112.43026,153.92376 c 0.0965,-0.38583 0.28937,-0.77165 0.57874,-1.15748 0.19292,-0.38583 0.48229,-0.6752 0.77165,-0.86811 1.63976,0.19291 2.8937,1.35039 3.37599,2.8937 0.86811,-1.92913 2.2185,-2.8937 4.14764,-2.8937 0.57874,0 1.25392,0.0965 1.83267,0.19291 0,1.3504 -0.28937,2.60433 -0.96456,3.76181 -0.48229,-0.0965 -0.96457,-0.19291 -1.44685,-0.19291 -1.3504,0 -2.31496,0.67519 -3.18308,2.12204 v 10.2244 c -0.67519,0.0965 -1.35039,0.19291 -1.92914,0.19291 -0.67518,0 -1.35038,-0.0965 -2.02558,-0.19291 v -10.80314 c 0,-1.5433 -0.38582,-2.60433 -1.15748,-3.27952 z" style="stroke-width:0.964566"/>
<path id="path14" class="st0" d="m 138.08774,166.17374 c -0.0965,0.38583 -0.28937,0.77165 -0.57874,1.15748 -0.19291,0.38583 -0.48228,0.6752 -0.77165,0.86811 -1.25394,-0.0965 -2.31496,-0.77165 -2.99017,-1.92913 -1.15747,1.25393 -2.89369,2.02559 -4.62992,2.02559 -1.63975,0 -2.8937,-0.48229 -3.7618,-1.44685 -0.77166,-0.96457 -1.25394,-2.12205 -1.25394,-3.37598 0,-1.83268 0.57874,-3.18307 1.73622,-4.05118 1.25393,-0.96456 2.8937,-1.44685 4.43701,-1.35039 0.96456,0 1.92914,0 2.79724,0.0965 v -0.96457 c 0,-1.73622 -0.77164,-2.50787 -2.41142,-2.50787 -1.15748,0 -2.79724,0.38583 -4.91929,1.15748 -0.6752,-0.77165 -1.06102,-1.83268 -1.06102,-2.8937 2.2185,-0.96456 4.53346,-1.44685 6.94488,-1.44685 1.44685,-0.0965 2.79725,0.38583 3.95473,1.3504 0.96456,0.86811 1.5433,2.2185 1.5433,4.05117 v 6.55905 c 0,1.44685 0.38583,2.2185 0.96457,2.70078 z m -8.10236,-0.77165 c 1.25393,-0.0965 2.41142,-0.57874 3.18307,-1.54331 v -2.79724 c -0.77165,-0.0965 -1.63977,-0.0965 -2.41142,-0.0965 -0.77165,-0.0965 -1.44686,0.19291 -2.02559,0.67519 -0.48228,0.48229 -0.67519,1.06103 -0.67519,1.73622 0,0.57874 0.19291,1.15748 0.57874,1.63976 0.38582,0.19292 0.8681,0.38583 1.35039,0.38583 z" style="stroke-width:0.964566"/>
<path id="path16" class="st0" d="m 142.04247,166.07729 c -0.96457,-1.44685 -1.44686,-3.47244 -1.44686,-6.07677 0,-2.60433 0.57875,-4.62991 1.83268,-6.07676 1.06103,-1.35039 2.70079,-2.2185 4.43701,-2.2185 1.63977,0 3.18307,0.57874 4.34055,1.63976 0.57874,-0.77165 1.54332,-1.25394 2.50787,-1.35039 0.38583,0.19291 0.6752,0.57874 0.86812,0.86811 0.19291,0.38582 0.38583,0.67519 0.57874,1.15747 -0.57874,0.48229 -0.86812,1.44685 -0.86812,2.79725 v 9.06691 c 0,3.37598 -0.57874,5.7874 -1.63975,7.23424 -1.06103,1.44685 -2.99017,2.12205 -5.49804,2.12205 -1.92914,0 -3.95472,-0.38583 -5.7874,-1.06102 0,-1.06103 0.28937,-2.12205 0.96457,-2.8937 1.35039,0.6752 2.79724,0.96457 4.34054,0.96457 1.44686,0 2.41143,-0.38583 2.89371,-1.06103 0.57874,-0.86811 0.86811,-1.92913 0.77165,-2.99015 v -1.25394 c -1.15748,0.96457 -2.50787,1.54331 -4.05118,1.54331 -1.73622,-0.0965 -3.37599,-0.96457 -4.24409,-2.41141 z m 8.19882,-2.60433 v -7.42716 c -0.6752,-0.77165 -1.73622,-1.25393 -2.79725,-1.35039 -0.86811,0 -1.73621,0.57874 -2.12205,1.35039 -0.57874,1.25394 -0.86811,2.60433 -0.77165,3.95472 0,1.73622 0.19291,2.99016 0.67519,3.76181 0.28938,0.67519 1.06103,1.15748 1.83268,1.25393 1.3504,0 2.50788,-0.57874 3.18308,-1.5433 z" style="stroke-width:0.964566"/>
<path id="path26" class="st3" d="m 136.73735,113.02618 18.42323,-7.42716 c 0.38583,-0.19291 0.57874,-0.57874 0.48228,-1.06102 -0.0965,-0.19292 -0.19291,-0.38583 -0.48228,-0.48229 -2.12204,-0.8681 -4.82284,-1.92913 -7.42716,-2.99015 -0.4823,-0.19291 -5.01576,3.08661 -5.40158,3.37598 l -7.90945,6.36613 c -1.83268,1.73622 -0.19291,3.27953 2.31496,2.21851 z" style="stroke-width:0.964566"/>
<ellipse id="circle28" class="st3" cx="123.42634" cy="120.26041" rx="9.645668" ry="9.6456566" style="stroke-width:0.964566"/>
<path id="path6-0" d="m 136.06214,99.13643 c -0.8681,0.09646 -1.83266,0 -2.70078,-0.289369 L 99.794436,89.780144 c -0.868109,-0.28937 -1.736218,-0.675196 -2.507872,-1.157479 z" style="stroke-width:0.964566"/>
<path id="path18-7" class="st0" d="m 170.6901,161.35091 h -8.97047 c 0,1.06103 0.28937,2.02559 0.86811,2.8937 0.48228,0.6752 1.35039,1.06102 2.60432,1.06102 1.44686,-0.0965 2.89371,-0.48228 4.2441,-1.15748 0.6752,0.6752 1.06102,1.54331 1.15748,2.41142 -1.83267,1.25393 -3.95472,1.92913 -6.17323,1.83267 -2.41141,0 -4.14764,-0.77165 -5.20865,-2.31495 -1.06104,-1.54331 -1.54331,-3.5689 -1.54331,-6.07677 0,-2.50787 0.57873,-4.53346 1.73622,-6.07676 1.15747,-1.54331 2.99015,-2.41142 4.91928,-2.31496 2.12206,0 3.76182,0.6752 4.9193,1.92913 1.15748,1.35039 1.83267,3.08661 1.73622,4.91929 0,0.96456 -0.0965,1.92913 -0.28937,2.89369 z m -6.17323,-6.84841 c -1.73622,0 -2.70079,1.35039 -2.79724,3.95472 h 5.59448 v -0.38583 c 0,-0.86811 -0.19292,-1.83267 -0.67519,-2.60433 -0.48228,-0.67519 -1.3504,-0.96456 -2.12205,-0.96456 z" style="stroke-width:0.964566"/>
<path id="path24-3-6-9" class="st4" d="m 123.0405,70.199461 c -1.44685,0 -2.89371,0.28937 -4.14765,0.868109 L 76.259006,89.973057 c -0.771652,0.289369 -1.157479,1.253935 -0.868109,2.025588 0,0 0,0 0,0 0,0.09646 0,0.09646 0.09646,0.192913 l 6.848424,13.503922 h 5.980314 l -0.86811,-4.72638 c -0.09646,-0.38582 -0.675197,-3.086605 -1.253937,-5.015736 l 19.966532,6.269676 c 0.28937,1.25394 0.57874,2.41141 1.06103,3.47244 h 32.31298 c 0.38582,-1.06103 0.67519,-2.2185 0.86811,-3.47244 l 19.87007,-6.17322 c -0.57873,1.929131 -1.15747,4.62992 -1.25393,5.01574 l -0.86812,4.72637 h 5.98032 l 6.75197,-13.407459 0.0965,-0.09646 0.0965,-0.192913 c 0,0 0,0 0,0 0.0965,-0.192913 0.0965,-0.28937 0.0965,-0.482283 0,-0.675196 -0.38583,-1.253935 -0.96457,-1.543305 l -42.6339,-18.905486 c -1.54332,-0.675196 -2.99017,-1.061022 -4.53347,-0.964566 z" style="stroke-width:0.964566"/>
<path id="path24-3-2" class="st0" d="m 123.0405,79.073465 c -1.44685,0 -2.89371,0.28937 -4.14765,0.868109 L 76.259006,98.847061 c -0.771652,0.289369 -1.157479,1.253939 -0.868109,2.025589 0,0 0,0 0,0 0,0.0965 0,0.0965 0.09646,0.19291 l 3.665353,7.3307 h 7.909449 c -0.289371,-1.06102 -0.578742,-2.31496 -0.964568,-3.56889 l 11.285433,3.56889 h 51.507866 l 11.28542,-3.56889 c -0.38581,1.15748 -0.67518,2.50787 -0.96455,3.56889 h 7.90943 l 3.66536,-7.23424 0.0965,-0.0965 0.0965,-0.19291 c 0,0 0,0 0,0 0.0965,-0.19291 0.0965,-0.28937 0.0965,-0.48228 0,-0.6752 -0.38582,-1.25394 -0.96457,-1.543309 L 127.47751,79.941574 c -1.44686,-0.578739 -2.89371,-0.868109 -4.43701,-0.868109 z" style="stroke-width:0.964566"/>
<path id="path24-0" class="st4" d="m 171.07592,109.45728 c 0,0.19292 0,0.28937 -0.0965,0.48229 0,0 0,0 0,0 l -0.0965,0.19291 v 0 l -0.0965,0.0965 -10.32087,20.44879 c -1.44684,2.79724 -4.05116,2.70078 -3.66533,-0.0965 l 2.12203,-11.57479 c 0.0965,-0.38582 0.6752,-3.08661 1.25394,-5.01574 l -19.87014,6.17322 c -3.08661,20.35234 -29.90156,20.64171 -34.24212,0 L 86.0974,113.89428 c 0.578741,1.92914 1.157481,4.62992 1.253938,5.01575 l 2.122046,11.57478 c 0.482284,2.8937 -2.218503,2.99016 -3.665353,0.0965 L 75.390897,110.03602 c 0,-0.0964 -0.09646,-0.0964 -0.09646,-0.19291 -0.385827,-0.77165 0,-1.73622 0.771653,-2.02559 0,0 0,0 0,0 l 42.63386,-18.905486 c 2.70078,-1.157478 5.88385,-1.157478 8.58464,0 l 42.63385,18.905486 c 0.77166,0.38583 1.15748,0.96457 1.15748,1.63976 z" style="stroke-width:0.964566"/>
<path id="path26-2" class="st0" d="m 136.73735,113.02618 18.42323,-7.42716 c 0.38583,-0.19291 0.57874,-0.57874 0.48228,-1.06102 -0.0965,-0.19292 -0.19291,-0.38583 -0.48228,-0.48229 -2.12204,-0.8681 -4.82284,-1.92913 -7.42716,-2.99015 -0.4823,-0.19291 -5.01576,3.08661 -5.40158,3.37598 l -7.90945,6.36613 c -1.83268,1.73622 -0.19291,3.27953 2.31496,2.21851 z" style="stroke-width:0.964566"/>
<ellipse id="circle28-3" class="st0" cx="123.42634" cy="120.26041" rx="9.645668" ry="9.6456566" style="stroke-width:0.964566"/>
</g>
</g>
</g>
</g>
<style type="text/css" id="style2346">
.st0{fill:#4E4E4E;}
.st1{fill:#FFD952;}
.st2{fill:#49C8FA;}
.st3{fill:#45C8FF;}
.st4{fill:#FF9329;}
.st5{fill:#3B2100;}
.st6{fill:#C3C3C3;}
</style>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View file

@ -1,23 +1,32 @@
{% macro render_header() %}
{% set section = get_section(path="_index.md") %}
{% set root_section = get_section(path="_index.md") %}
{% set active_section = "" %}
{% if page and page.components %}
{% set active_section = page.components[0] %}
{% elif section and section.components %}
{% set active_section = section.components[0] %}
{% endif %}
<a href="{{ section.permalink }}">
<a href="{{ root_section.permalink }}">
<div class="logo">
<img src="{{ get_url(path=config.extra.juice_logo_path) }}" alt="logo">
{{ config.extra.juice_logo_name }}
</div>
</a>
<nav>
<ul>
{% for subpath in section.subsections %}
{% for subpath in root_section.subsections %}
{% set sub = get_section(path=subpath) %}
<li><a class="nav-item text" href="{{ sub.permalink }}">{{ sub.title }}</a></li>
{% set is_active = sub.components[0] == active_section %}
{% if not 'hide_from_menu' in sub.extra or not sub.extra.hide_from_menu %}
<li>
<a class="nav-item text{% if is_active %} active{% endif %}" href="{{ sub.permalink }}">{{ sub.title }}</a>
</li>
{% endif %}
{% endfor %}
{% if config.extra.juice_extra_menu %}
{% for menu in config.extra.juice_extra_menu %}
<li><a class="nav-item text" href="{{ menu.link }}">{{ menu.title }}</a></li>
<li><a class="nav-item text" href="{{ menu.link }}">{{ menu.title }}</a></li>
{% endfor %}
{% endif %}
</ul>

View file

@ -17,14 +17,16 @@
{{ nav::hamburger(root=root) }}
{# Section title #}
{#
<div class="toc-item toc-section">
<a class="subtext" href="{{root.permalink | safe}}">{{ root.title }}</a>
</div>
<a class="subtext" href="{{root.permalink | safe}}">{{ root.title }}</a>
</div>
#}
{# Choose between "tree" (has extra.parent) and "list" (default) collections #}
{% set root_tree = root.pages | group_by(attribute="extra.parent") %}
{% if root.relative_path in root_tree %}
{% set tree_breadcrumb = nav::breadcrumb(corpus=root.pages, root=root.relative_path, target=current)|split(pat=":")|slice(start=1) %}
{% set tree_breadcrumb = nav::breadcrumb(corpus=root.pages, root=root.relative_path, target=current)|trim|split(pat=":")|slice(start=1) %}
{{ nav::tree(
tree=root_tree,
cursor=root.relative_path,
@ -40,20 +42,25 @@
<input id="menu-toggle" type="checkbox" />
<label class='menu-button-container' for="menu-toggle">
<div class="menu-button"></div>
<div class="toc-item toc-menu-title subtext">{{ root.title }}</div>
<div class="toc-item toc-menu-title subtext">Sommaire</div>
</label>
{% endmacro %}
{# (Private) Build a breadcrumb for the page #}
{# It's ugly because this is the hacky part of the project #}
{% macro breadcrumb(corpus, root, target) %}{% if 'parent' in target.extra and target.extra.parent != root %}{% set new_target = get_page(path=target.extra.parent) %}{{ nav::breadcrumb(corpus=corpus, root=root, target=new_target) }}:{{ new_target.relative_path }}{% endif %}{% endmacro %}
{% macro breadcrumb(corpus, root, target) %}
{% if 'parent' in target.extra and target.extra.parent != root %}
{% set new_target = get_page(path=target.extra.parent) %}
{{ nav::breadcrumb(corpus=corpus, root=root, target=new_target) | trim }}:{{ new_target.relative_path }}
{% endif %}
{% endmacro %}
{# (Private) Render a list menu (this is the simple fallback when extra.parent is not defined #}
{% macro list(list, selected) %}
{% for page in list %}
{% set is_selected = page.relative_path == selected.relative_path %}
<div class="toc-item">
{{ nav::link(page=page, is_selected=is_selected, is_parent=false) }}
{{ nav::link(page=page, is_selected=is_selected, is_parent=false, is_developed=false) }}
</div>
{% endfor %}
{% endmacro %}
@ -63,15 +70,25 @@
{% macro tree(tree, cursor, selected, crumb) %}
{% for page in tree | get(key=cursor) %}
{% set is_selected = page.relative_path == selected.relative_path %}
{# {% set is_parent = (page.relative_path == selected.extra.parent) or page.relative_path in crumb %} #}
{% set is_parent = page.relative_path in crumb %}
<div class="toc-item">
{# DEBUG #}
<!-- crumb: {% for p in crumb %} '{{ p }}' {% endfor %} -->
<!-- relative_path: {{ page.relative_path }} -->
<!-- parent: {{ page.extra.parent }} -->
<!-- ancestors: {{ page.ancestors }} -->
<!-- is_selected: {{ is_selected }} -->
<!-- is_parent: {{ is_parent }} -->
<!-- {{ page.relative_path in crumb }} -->
{# Link with a (possible) subsection #}
{% if page.relative_path in tree %}
{# Display link as a section #}
{{ nav::link(page=page, is_selected=is_selected, is_parent=true) }}
{{ nav::link(page=page, is_selected=is_selected, is_parent=true, is_developed=is_selected or is_parent) }}
{# Should we unroll this part of the tree? #}
{% if page.relative_path in crumb or is_selected %}
{% if is_selected or is_parent %}
<div class="nav-subsection">
{# do the recursive call #}
{{ nav::tree(tree=tree, cursor=page.relative_path, selected=selected, crumb=crumb) }}
@ -80,17 +97,18 @@
{# Simple link, ie. a leaf of the tree #}
{% else %}
{{ nav::link(page=page, is_selected=is_selected, is_parent=false) }}
{{ nav::link(page=page, is_selected=is_selected, is_parent=false, is_developed=false) }}
{% endif %}
</div>
{% endfor %}
{% endmacro %}
{# (Private) Render a single link #}
{% macro link(page, is_selected, is_parent) %}
{% macro link(page, is_selected, is_parent, is_developed) %}
<a class="subtext" href="{{page.permalink | safe}}">
{% if is_selected %}<b>{% endif %}
{% if is_parent %}‣ {% endif %}
{% if is_parent and not is_developed %}▸ {% endif %}
{% if is_parent and is_developed %}▾ {% endif %}
{{ page.title }}
{% if is_selected %}</b>{% endif %}
</a>

View file

@ -39,8 +39,7 @@
<div class="content text">
{% block content %}
<div id="features" class="heading-text">{{ section.title }} </div>
{{ section.content | safe }}
{{ section.content | safe }}
{% endblock content %}
</div>
@ -56,7 +55,7 @@
thème dérivé de <a href="https://github.com/huhu/juice">Juice</a>,
servi par <a href="https://garagehq.deuxfleurs.fr/">Garage</a>.
</small>
<small class="subtext">Dernière mise à jour le {{ now() | date(format="%A %-d %B %Y", locale="fr_FR") }}.</small>
<small class="subtext">Dernière mise à jour du site le {{ now() | date(format="%A %-d %B %Y", locale="fr_FR") }}.</small>
</footer>
{% endblock footer %}
</body>

View file

@ -3,11 +3,6 @@
{% block title %}{{ page.title }} | {{ super() }} {% endblock title %}
{% block header %}
<header class="box-shadow">
{{ macros::render_header() }}
</header>
{% endblock header %}
{% block content %}
<div class="heading-text">{{ page.description }}</div>

View file

@ -1 +1,10 @@
{% import "_macros.html" as macros %}
{% extends "index.html" %}
{% block title %}{{ section.title }} | {{ super() }} {% endblock title %}
{% block content %}
<div class="heading-text">{{ section.description }}</div>
{{ section.content | safe }}
{% endblock content %}