244 lines
6.3 KiB
Markdown
244 lines
6.3 KiB
Markdown
# netig.net
|
|
|
|
## À faire
|
|
|
|
- traduire le message Rodauth « Please login to continue » ;
|
|
- limiter le spam sur `/contact/send` ;
|
|
- afficher les recettes et les dépenses sur la page d'accueil ;
|
|
- gérer les accès aux services selon la situation des membres ;
|
|
- traiter les demandes de démission et de suppression des comptes.
|
|
|
|
## Développement
|
|
|
|
### Dépendances
|
|
|
|
Installer les dépendances :
|
|
|
|
```sh
|
|
bundle install
|
|
```
|
|
|
|
### Variables d'environnement
|
|
|
|
Créer un fichier `.env` à la racine du projet :
|
|
|
|
```dotenv
|
|
RACK_ENV=development
|
|
SESSION_SECRET=...
|
|
RODAUTH_HMAC_SECRET=...
|
|
RODAUTH_DOMAIN=netig.net
|
|
BASE_URL=http://[::1]:9292
|
|
SMTP_PASSWORD='...'
|
|
```
|
|
|
|
Générer `SESSION_SECRET` et `RODAUTH_HMAC_SECRET` avec :
|
|
|
|
```sh
|
|
openssl rand -hex 64
|
|
```
|
|
|
|
Utiliser une valeur différente pour chaque secret. Les valeurs contenant
|
|
`#`, des espaces ou des caractères interprétés spécialement peuvent être
|
|
entourées d'apostrophes simples.
|
|
|
|
Le fichier `.env` est chargé automatiquement en développement par
|
|
`config/boot.rb`. Ce fichier est chargé par `netig.rb` et directement
|
|
par les scripts de `bin/` qui ont besoin de la configuration.
|
|
|
|
Ne pas versionner le fichier `.env`.
|
|
|
|
### Base de données
|
|
|
|
En développement, la base est créée par défaut dans :
|
|
|
|
```text
|
|
db/development.sqlite3
|
|
```
|
|
|
|
Ce chemin peut être remplacé par la variable d'environnement
|
|
`DATABASE_PATH`. Un chemin relatif est résolu à partir du répertoire
|
|
de `lib/database.rb`, et non du répertoire courant.
|
|
|
|
Créer ou mettre à jour la base de données :
|
|
|
|
```sh
|
|
bundle exec ruby bin/migrate
|
|
```
|
|
|
|
### Serveur
|
|
|
|
Démarrer le serveur de développement depuis la racine du projet :
|
|
|
|
```sh
|
|
bundle exec puma
|
|
```
|
|
|
|
Puma charge automatiquement `config.ru`, qui démarre l'application.
|
|
|
|
Ouvrir la page de création de compte :
|
|
|
|
```text
|
|
http://[::1]:9292/create-account
|
|
```
|
|
|
|
Les personnes physiques et les personnes morales peuvent créer un compte.
|
|
La création du compte crée également une fiche dans `members`. L'adresse
|
|
électronique doit être vérifiée avant de pouvoir se connecter.
|
|
|
|
### Espaces utilisateurs
|
|
|
|
Après avoir vérifié son adresse électronique, chaque personne connectée
|
|
accède à son espace personnel :
|
|
|
|
```text
|
|
http://[::1]:9292/account
|
|
```
|
|
|
|
Cet espace permet notamment de consulter sa situation d'adhésion et
|
|
de formuler une demande d'adhésion à l'association.
|
|
|
|
Les membres du Noyau disposent également d'un accès à la gestion de
|
|
l'association :
|
|
|
|
```text
|
|
http://[::1]:9292/noyau
|
|
```
|
|
|
|
Cet espace permet notamment de consulter les demandes d'adhésion,
|
|
de les accepter ou de les refuser, et de consulter les comptes
|
|
de l'association.
|
|
|
|
Les demandes en attente sont accessibles à l'adresse :
|
|
|
|
```text
|
|
http://[::1]:9292/noyau/memberships
|
|
```
|
|
|
|
La consultation et la gestion de l'association sont réservées
|
|
aux membres du Noyau.
|
|
|
|
### Initialisation du Noyau
|
|
|
|
Pour ajouter une personne au Noyau, utiliser le script :
|
|
|
|
```sh
|
|
bundle exec ruby bin/add-core-member adresse@example.net
|
|
```
|
|
|
|
Le compte doit exister, son adresse électronique doit être vérifiée
|
|
et la fiche membre doit correspondre à une personne physique.
|
|
Une adhésion au statut `accepted` doit également déjà exister
|
|
dans `memberships`.
|
|
|
|
Le script ne crée ni le compte ni l'adhésion. Il attribue uniquement
|
|
la qualité de membre du Noyau à une fiche membre qui remplit ces
|
|
conditions. Il doit être exécuté séparément pour chaque personne.
|
|
|
|
Les demandes d'adhésion sont formulées depuis l'espace personnel
|
|
(`/account`) et examinées par le Noyau depuis l'espace de gestion
|
|
de l'association (`/noyau/memberships`).
|
|
|
|
Pour constituer le premier Noyau, les adhésions des personnes
|
|
désignées doivent être enregistrées comme acceptées avant
|
|
l'utilisation du script.
|
|
|
|
Les statuts prévoient un Noyau composé d'au moins trois personnes
|
|
physiques.
|
|
|
|
### Shell interactif
|
|
|
|
Ouvrir un shell interactif avec l'application chargée :
|
|
|
|
```sh
|
|
bundle exec irb -r ./netig.rb
|
|
```
|
|
|
|
`netig.rb` charge également `config/boot.rb` : les variables du fichier
|
|
`.env` sont donc disponibles en développement.
|
|
|
|
## Production
|
|
|
|
En production, les variables d'environnement sont fournies au conteneur
|
|
par Docker Compose. Le service doit définir `RACK_ENV=production` et
|
|
transmettre le fichier d'environnement avec `env_file`.
|
|
|
|
Exemple de configuration :
|
|
|
|
```yaml
|
|
services:
|
|
netig:
|
|
env_file:
|
|
- .env
|
|
environment:
|
|
RACK_ENV: production
|
|
```
|
|
|
|
La variable définie dans `environment` prend le dessus sur une éventuelle
|
|
valeur de `RACK_ENV` présente dans `.env`.
|
|
|
|
Le fichier `.env` de production doit notamment contenir :
|
|
|
|
```dotenv
|
|
DATABASE_PATH=../db/netig.sqlite3
|
|
SESSION_SECRET=...
|
|
RODAUTH_HMAC_SECRET=...
|
|
RODAUTH_DOMAIN=netig.net
|
|
BASE_URL=https://netig.net
|
|
SMTP_PASSWORD='...'
|
|
```
|
|
|
|
Générer `SESSION_SECRET` et `RODAUTH_HMAC_SECRET` avec :
|
|
|
|
```sh
|
|
openssl rand -hex 64
|
|
```
|
|
|
|
Utiliser des secrets propres à la production et ne pas versionner le
|
|
fichier contenant ces variables.
|
|
|
|
### Base de données
|
|
|
|
La base de production est stockée dans :
|
|
|
|
```text
|
|
db/netig.sqlite3
|
|
```
|
|
|
|
Le chemin `../db/netig.sqlite3` est relatif au répertoire de
|
|
`lib/database.rb`. Il désigne donc le dossier `db/` à la racine du
|
|
projet, dans le conteneur.
|
|
|
|
Le dossier `db/` doit être conservé entre les déploiements, monté sur
|
|
un stockage persistant et accessible en écriture par l'utilisateur
|
|
qui exécute Puma. Il doit également être inclus dans les sauvegardes.
|
|
|
|
Créer ou mettre à jour la base dans le conteneur applicatif, avec les
|
|
mêmes variables d'environnement et le même stockage persistant que
|
|
l'application, avant de démarrer la nouvelle version :
|
|
|
|
```sh
|
|
docker compose run --rm netig bundle exec ruby bin/migrate
|
|
```
|
|
|
|
Cette commande suppose que le service Compose s'appelle `netig`.
|
|
|
|
### Initialisation du premier Noyau
|
|
|
|
Chaque personne désignée pour siéger au Noyau doit d'abord créer un
|
|
compte depuis le site et vérifier son adresse électronique. Sa fiche
|
|
membre doit également disposer d'une adhésion au statut `accepted`.
|
|
|
|
Pour chaque personne, exécuter dans le conteneur applicatif :
|
|
|
|
```sh
|
|
docker compose run --rm netig \
|
|
bundle exec ruby bin/add-core-member adresse@example.net
|
|
```
|
|
|
|
Cette commande suppose que le service Compose s'appelle `netig`.
|
|
Elle ne crée pas l'adhésion : elle vérifie qu'elle existe et qu'elle
|
|
est acceptée, puis attribue la qualité de membre du Noyau.
|
|
|
|
Les statuts prévoient un Noyau composé d'au moins trois personnes
|
|
physiques.
|