Mise en place de l'architecture DeuxFleurs
Ce petit mémo que j'ai réalisé à l'occasion de l'extension de la web api de garage.
Liste des ingrédients
OS - Debian 12
Langages - rust, go
Versioning - Git
Applicatifs - consul, bottin, garage, guichet
Facultatif - garage-admin-sdk-golang
Préparatifs
Consul
Pour ma part j'ai choisit l'installation depuis les binaires.
Sous Debian ca donne ceci...
> wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
> echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
> sudo apt update && sudo apt install consul
Bottin
LDAP Serveur sourcé DeuxFleurs. Ecrit en GO.
Récupération des sources sur le git de deuxfleurs
> git clone https://git.deuxfleurs.fr/Deuxfleurs/bottin
Garage
Solution développée par deuxfleurs pour faire de l'entre-hébergement.
Utilise le protocole S3 afin de géorépartir et synchroniser les données entre plusieurs site.
Ecrit en rust.
Plus d'infos sur le site web dédié de l'association
> git clone https://git.deuxfleurs.fr/Deuxfleurs/garage
Guichet
Interface d'administration web utilisée par Deuxfleurs. Ecrite en GO.
> https://git.deuxfleurs.fr/Deuxfleurs/guichet
Open API garage-admin-sdk-golang (Facultatif)
A utiliser si vous souhaitez contribuer à la WEB API de garage.
> https://git.deuxfleurs.fr/garage-sdk/garage-admin-sdk-golang
Mise en bouche
Consul
> consul agent -dev
Vérification depuis un navigateur
http://localhost:8500
Bottin
Depuis le répertoire de bottin
> go run .
dn: cn=admin,dc=bottin,dc=eu
password: oN2ITVymlkY
Guichet
> usr/local/go/bin/go run .
2024/07/16 07:56:06 Starting Guichet Server
2024/07/16 07:56:06 Starting HTTP server on :9991
Ouverture de l'interface web => http://localhost:9991
Login et MdP sont ceux fournis au démarrage de Bottin
Garage
0 - Exemple d'un fichier garage.toml
metadata_dir = "/tmp/meta"
data_dir = "/tmp/data"
db_engine = "sqlite"
replication_factor = 1
rpc_bind_addr = "[::]:3901"
rpc_public_addr = "127.0.0.1:3901"
rpc_secret = "5a64e910c3177bd91161f9431053b4c8d558e8f4cb3362927d778e22d78f2386"
[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = ".s3.garage.localhost"
[s3_web]
bind_addr = "[::]:3902"
root_domain = ".web.garage.localhost"
index = "index.html"
[k2v_api]
api_bind_addr = "[::]:3904"
[admin]
api_bind_addr = "[::]:3903"
admin_token = "wHluLhBgzy6suqFmeLYOygJoLg/+PqfS22QmvF8FeXA="
metrics_token = "vxUz/9iYz3fmeag1FZ2FfknK3WD3Qm/oJ/bPRgLOp26="
> cargo run -- -c garage.toml server
1 - Récupérer l'ID du noeud
> target/debug/garage -c garage.toml status
==== HEALTHY NODES ====
ID Hostname Address Tags Zone Capacity DataAvail
875b228d68108aa3 debian-dev 127.0.0.1:3901 NO ROLE ASSIGNED
2 - Assigner un volume
> target/debug/garage -c garage.toml layout assign -z dc1 -c 1G 875b228d68108aa3
> target/debug/garage -c garage.toml layout show
==== CURRENT CLUSTER LAYOUT ====
ID Tags Zone Capacity Usable capacity
875b228d68108aa3 dc1 1000.0 MB 1000.0 MB (100.0%)
Zone redundancy: maximum
Current cluster layout version: 1
target/debug/garage -c garage.toml layout apply --version 1
==== COMPUTATION OF A NEW PARTITION ASSIGNATION ====
Partitions are replicated 1 times on at least 1 distinct zones.
Optimal partition size: 3.9 MB
Usable capacity / total cluster capacity: 1000.0 MB / 1000.0 MB (100.0 %)
Effective capacity (replication factor 1): 1000.0 MB
dc1 Tags Partitions Capacity Usable capacity
875b228d68108aa3 256 (256 new) 1000.0 MB 1000.0 MB (100.0%)
TOTAL 256 (256 unique) 1000.0 MB 1000.0 MB (100.0%)
Savourer
Réaliser une requête vers l'API Garage
> curl -X GET -H "Authorization: Bearer wHluLhBgzy3suqFmeLYMygJoLg/+PqfS22QmvF8FeXQ=" http://localhost:3903/v1/repair/scrub/start