Files
netig.net/README.md
T
2026-11-03 18:17:18 +01:00

207 lines
5.4 KiB
Markdown

# netig.net
## À faire
- limiter le spam sur `/contact/send` ;
- développer les demandes d'adhésion et leur examen par le Noyau ;
- développer l'espace personnel des membres ;
- afficher les recettes et les dépenses sur la page d'accueil ;
- gérer les accès aux services selon la situation des membres.
## 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.
### 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.
La gestion des demandes d'adhésion n'est pas encore disponible dans
l'interface. Une adhésion acceptée doit donc être enregistrée dans la
base avant l'utilisation de ce 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.