Table des matières
Mobilizon Chapril
Un logiciel fédéré pour organiser des évènements. https://mobilizon.chapril.org/
Pages dans la catégorie :
Ressources
Outils du Chapril :
Dépots sources utilisés :
- Source de l'instance Chapril https://forge.april.org/Chapril/mobilizon.chapril.org-Mobilizon
- Dépot upstream: https://framagit.org/framasoft/mobilizon
Installation
L'installation pas à pas est détaillée sur la doc de joinMobilizon.org. Vous trouverez ci-dessous les étapes d'installations spécifiques à Chapril.
Pré-requis
- Mobilizon doit être installé sur la VM Debian nommée biliz.cluster.chapril.org sur laquelle on dispose de l'accès root
- Le domaine choisi pour le service Mobilizon est mobilizon.chapril.org
- L'envoi de mails depuis la VM est réalisé en mode satellite
Installation locale des dépendances
L'ajout d'un thème au projet Mobilizon nécéssite l'installation depuis la source du projet.
Il a été décidé de compiler le projet en local (sur votre machine) avant de publier les binaires en production.
Elixir
Mobilizon utilise le langage de programmation Elixir côté serveur. Vous devez installer la version 1.11 au minimum. Il n'est pas possible d'utiliser la version fournie par Debian 11 (1.10.3) car nous avons besoin de fonctions introduites dans la version 1.11 d'Elixir, comme config_env
Installons la dernière version de Elixir (1.14.1) depuis la source sur notre machine locale:
sudo apt install erlang build-essential curl unzip openssl git cmake file wget https://codeload.github.com/elixir-lang/elixir/tar.gz/refs/tags/v1.14.1 -O elixir-1.14.1.tar.gz tar zxf elixir-1.14.1.tar.gz cd elixir-1.14.1 make -j$(nproc --ignore=1) sudo make install
sudo apt install wget
NodeJS
La version 14 de NodeJS est requise. La version 12 est disponible dans Debian 11, c'est pourquoi nous allons installer la version LTS depuis le site officiel
wget https://nodejs.org/dist/v18.12.1/node-v18.12.1-linux-x64.tar.xz sudo tar --directory=/usr/local/ --strip-components=1 -Jxvf $PWD/node-v18.12.1-linux-x64.tar.xz
Yarn
Mobilizon utilise le gestionnaire de dépendances Yarn au lieu de NPM (le défaut). Il faut donc installer Yarn via:
npm install -g yarn
PostgreSQL
PostgreSQL n'est pas requis pour la compilation de Mobilizon, mais avoir une base de données en local permet de tester l'application sur votre machine avant de la publier en production.
L'extension Postgis de PostgreSQL est requise afin de localiser les évènements de Mobilizon
sudo apt install postgresql postgresql-contrib sudo apt install --install-recommends postgis sudo systemctl start postgresql
Compilation locale de Mobilizon
Maintenant que nous avons installé localement toutes les dépendances, nous allons compiler puis tester Mobilizon. La première étape consiste à récupérer les sources du projet. Ici, nous installons la version 3.0.3:
Récupération du code source
git clone https://framagit.org/framasoft/mobilizon.git cd mobilizon git checkout 3.0.3
Compilation du serveur
# Téléchargement des dépendances Elixir du projet
mix deps.get
# Compilation du serveur Mobilizon
MIX_ENV=prod mix compile
Compilation du client
Nous allons nous rendre dans le répertoire js/ (situé dans le dossier du dépôt mobilizon clôné précédemment) pour installer les dépendances et compiler le client web
cd js yarn install yarn run build cd ..
Test local de l'application Mobilizon
Pour tester l'application Mobilizon qu'on vient de construire, il va nous falloir une configuration locale de Mobilizon et une base de données locale PostgreSQL.
Installation de PostgreSQL
sudo apt install postgresql postgresql-contrib sudo apt install --install-recommends postgis sudo systemctl --now enable postgresql
Génération de la configuration locale de Mobilizon
Commençons par générer la configuration locale avec le CLI de Mobilizon:
MIX_ENV=prod mix mobilizon.instance gen
Indiquez localhost
en tant qu'hôte, Test Mobilizon Local
pour le nom d'instance et utilisez les paramètres par défaut pour le reste des paramètres.
Cette commande a généré deux fichiers. Le premier, config/runtime.exs
contient la configuration du serveur. On y trouve entre autres l'URL du serveur, le compte de l'utilisateur PostgreSQL, des informations sur l'instance, le compte mail.
Le second fichier, setup_db.psql
contient les instructions PostgreSQL pour créer la base de données et le compte PostgreSQL d'après les arguments passés à la commande mix mobilizon.instance gen
Création de l'utilisateur PostgreSQL pour mobilizon
Lancer le script SQL généré lors de l'étape précédente avec l'utilisateur postgres
(admin de la base de données PostgreSQL):
sudo -u postgres psql -f setup_db.psql
Initialisation de la base de données Mobilizion
Il faut maintenant initialiser le schéma de la base de données avec la commande suivante:
MIX_ENV=prod mix ecto.migrate
Lancement du serveur
Tout est prêt pour pouvoir lancer localement le serveur localement:
MIX_ENV=prod mix phx.server
Voici ce que vous devriez obtenir en ouvrant le site web localhost:4000
:
On a maintenant vérifié localement que tout fonctionne. Il faut dorénavant pousser le logiciel compilé vers le serveur ainsi que ses dépendances.
Mobilizon nécessite entre autres Elixir, NodeJS et PostgreSQL. Préférez installer Elixir et NodeJS à partir de leurs dépôts officiels plutôt que les paquets de votre distribution.
Versions recommandées :
Elixir 1.8 et plus NodeJS 12+ PostgreSQL 11+
Pour installer une version correcte de node, référez vous à cette doc: https://github.com/nodesource/distributions/blob/master/README.md#table-of-contents
Nous allons utiliser un utilisateur de Mobilizon dédié avec /home/mobilizon home :
sudo adduser --disabled-login mobilizon
Alors connectons-nous en tant qu'utilisateur :
sudo -i -u mobilizon
Commençons par cloner le dépôt dans un répertoire nommé live :
git clone https://framagit.org/framasoft/mobilizon /srv/mobilizon.chapril.org/live && cd /srv/mobilizon.chapril.org/live
Installer des dépendances
Installer les dépendances de l'Elixir
mix deps.get
Compiler ensuite ces dépendances et Mobilizon (cela peut prendre quelques minutes et peut produire toutes sortes d'avertissements, tels que des problèmes de dépréciation)
MIX_ENV=prod mix compile
Allez dans le répertoire js/
cd js
et installer les dépendances Javascript
yarn install
Enfin, nous pouvons construire le frontal (cela peut prendre quelques secondes).
yarn build
Revenons au répertoire principal
cd ../
Configuration
Mobilizon fournit un outil en ligne de commande pour générer la configuration
MIX_ENV=prod mix Mobilizon.instance gen
Vous devrez alors répondre à des questions sur votre configuration et votre instance pour générer un fichier prod.secret.exs dans le dossier config/, et un fichier setup_db.psql pour configurer la base de données. Configuration de la base de données
Le fichier setup_db.psql contient des instructions SQL pour créer un utilisateur et une base de données PostgreSQL avec les informations d'identification choisies et ajouter les extensions requises à la base de données Mobilizon.
Quittez l'exécution en tant qu'utilisateur Mobilizon (car il ne devrait pas avoir les droits root/sudo) et exécutez dans le répertoire /home/mobilizon/live :
sudo -u postgres psql -f setup_db.psql
Il devrait produire quelque chose du genre :
CRÉER UN RÔLE CRÉER UNE BASE DE DONNÉES Vous êtes maintenant connecté à la base de données “Mobilizon_prod” en tant qu'utilisateur “postgres”. CRÉER L'EXTENSION CRÉER UNE EXTENSION CRÉER UNE EXTENSION
Revenons à notre utilisateur de Mobilizon :
sudo -i -u mobilizon
Lorsque cela est fait, n'oubliez pas de supprimer le fichier setup_db.psql.
Migration de la base de données
Effectuer des migrations de bases de données :
MIX_ENV=prod mix ecto.migrate
Notez le préfixe de la variable d'environnement MIX_ENV=prod devant la commande. Vous devrez l'utiliser pour chaque commande de mixage à partir de maintenant.
Vous devrez le refaire après la plupart des mises à jour. Voir la section dédiée aux mises à jour. Si certaines migrations échouent, cela signifie probablement que vous n'utilisez pas une version suffisamment récente de PostgreSQL, ou que vous n'avez pas installé les extensions requises. Nous pouvons arrêter d'utiliser l'utilisateur de Mobilizon à nouveau.
Copiez le fichier support/systemd/mobilizon.service dans /etc/systemd/system.
sudo cp support/systemd/mobilizon.service /etc/systemd/system/
Rechargez Systemd pour détecter votre nouveau dossier
sudo systemctl daemon-reload
Et activer le service
sudo systemctl enable --now Mobilizon.service
Il fera fonctionner Mobilizon et permettra le démarrage du service au boot de la VM. Vous pouvez suivre les logs du service avec
sudo journalctl -fu Mobilizon.service
Vous devriez voir quelque chose comme ça :
Exécution de Mobilizon.Web.Endpoint avec cowboy 2.8.0 à :::4000 (http) Accédez à Mobilizon.Web.Endpoint à l'adresse https://your-Mobilizon-domain.com
Le serveur Mobilizon fonctionne sur le port 4000 sur l'interface locale uniquement, vous devez donc ajouter un reverse-proxy. Reverse proxy Nginx
Copiez le fichier de support/nginx/mobilizon.conf vers /etc/nginx/sites-available.
sudo cp support/nginx/mobilizon.conf /etc/nginx/sites-available
Ensuite, établissez un lien symbolique avec le fichier dans le répertoire /etc/nginx/sites-enabled.
sudo ln -s /etc/nginx/sites-available/mobilizon.conf /etc/nginx/sites-enabled/
Pas besoin de modifier la configuration nginx sur cette VM, au Chapril ce sont les admin sys qui s'en chargent sur une autre VM.
Connectez-vous à nouveau en tant qu'utilisateur du système de Mobilizon :
sudo -i -u mobilizon
Créer un nouvel utilisateur pour administrer votre instance Mobilizon :
MIX_ENV=prod mix Mobilizon.users.new "your@email.com" --admin --password "Y0urP4ssw0rd"
N'oubliez pas de préfixer la commande par un espace vide afin que le mot de passe choisi ne soit pas conservé dans l'historique de votre shell.
Vous pouvez ignorer l'option –password et Mobilizon en générera un pour vous et vous le retournera dans le shell.
Voir la documentation complète pour cette commande.
mix Mobilizon.users.new --help
Vous pouvez maintenant vous connecter avec vos identifiants sur https://mobilizon.chapril.org et découvrir Mobilizon. N'hésitez pas à consulter également la documentation de configuration.
Configurer les courriels
La configuration par défaut de Mobilizon suppose qu'un serveur SMTP local est disponible sur le même serveur. Pour adapter cette configuration à votre propre configuration, consultez cette page. Configurer l'authentification tierce
Configurer les authentifications tierces
Nous n'utilisons pas d'authentification tierce.
Base de données de géocodage des villes
Pour rechercher des évènements à proximité du lieu indiqué en préférences des utilisateurs, le logiciel Mobilizon a besoin d'une base de données. Nous utilisons GeoLite2-City.mmdb
Il faut le placer dans le dossier /srv/mobilizon.chapril.org/live/priv/data Terminez en redémarrant le service de Mobilizon en tant que root.
cd /srv/mobilizon.chapril.org/live/priv/data
Mobilizon n'affichera un avertissement au démarrage que si la base de données est manquante, mais ce n'est pas obligatoire.
Mise à jour de la version Chapril Mobilizon
Pour fusionner les avancées de l'upstream de framagit avec la branche Chapril, il nous faut fusionner les modifications publiées dans le tag le plus récent.
Plan d'action général
* Sur votre poste de travail
- fusionner la nouvelle version dans notre branche “chapril”
- vérifier que tout marche bien sur localhost et que le code est bien linté avec
yarn lint
.
* Communiquer le début de migration * Compiler les assets du frontend sur la VM biliz * prendre les dernières modifications et migrer la base de données * relancer le service mobilizon * Vérfier que tout est bon * Communiquer la fin de migration
Sur votre poste de travail
Admettons que vous avez les sources de mobilizon sur votre poste de travail dans le dossier /var/www/html/mobilizon Pour faire l'upgrade vers le tag le plus récent - fusionner le tag le plus récent sur la branche Chapril
- pour voir la liste des tags: git tag
- git merge 1.0.6 (par exemple, mais il faut utiliser la version la plus récente)
- résoudre les éventuels conflits
- vérifier que tout fonctionne bien
- en effectuant les migrations de base données mix ecto.migrate
- en lançant localement le serveur mix phx.server et en naviguant sur http://localhost:4000
- créer un tag avec le préfixe Chapril et le numéro de tag, par exemple git tag Chapril-1.0.6 - envoyer vers la forge Chapril notre nouveau tag
- git push –tags
- Se positionner sur la branche master: git checkout master
- Prendre les avancées du dépot upstream, tags inclus:
- Si vous n'avez pas ajouté le dépot upstream de framagit, ajoutez le
git remote add upstream https://framagit.org/framasoft/mobilizon.git
git pull --all
- fusionner le tag le plus récent vers la branche chapril avec un git merge.
<code>git checkout chapril && git merge 1.3.0</code> par exemple
- une fois les conflits résolus, modifications faites et le lint vérifiées, faire un commit et un tag chapril-1.x.x (en mettant le bon numéro de tag, celui que l'on vient de fusionner) les envoyer sur la forge du
Chapril. - <code>git tag chapril-1.3.0</code> par exemple - <code>git push origin --all</code>
Nous pouvons maintenant mettre à jour la VM biliz en production.
Sur la VM biliz
- se connecter à la VM biliz, aller dans le dossier “live”,
Se mettre en tant qu'utilisateur Mobilizon et récupérer les dernières modifications de la branche Chapril. (attention à avoir comme dépot d'origine le dépot de la forge april, et non l'upstream pour bien avoir votre branche personnelle) Ce qui nous amène sur le tag le plus récent:
su Mobilizon cd /srv/mobilizon.chapril.org/live git checkout Chapril git pull --tags origin && git pull origin chapril
- Stopper le service Mobilizon:
service mobilizon stop
Migrer le backend de Mobilizon
On en a pas forcément besoin à tous les coups, si dans la partie “sur votre poste de travail” vous aviez remarqué que seule la partie frontend changeait, vous pouvez relancer le service après avoir uniquement mis à jour les assets de priv/static et faire
service Mobilizon restart
). Ne pas oublier de spécifier l'environnement de prod.
su -H mobilizon MIX_ENV=prod mix deps.get su -H mobilizon MIX_ENV=prod mix ecto.migrate
- Remettre l'utilisateur mobilizon comme owner des fichiers.
chown -R mobilizon:mobilizon /srv/mobilizon.chapril.org/live
- relancer le service Mobilizon:
service mobilizon start
ce qui doit prendre environ 5 secondes sur Biliz.
Vérifications
- vérifier les erreur dans le journal du service
journalctl -fu Mobilizon -n1000
- si c'est bon, interrompre la lecture du journal d'erreurs: Ctrl + C.
- vérifier le frontend sur https://mobilizon.chapril.org , nécessite un vidage de votre cache navigateur (ctrl + R)
- Communiquer la fin de mise à jour sur les canaux qui vont bien.
Personnaliser Mobilizon
Avancement
Choses faites
* une favicon Chapril * un logo dans la barre de menu * une palette de couleur incorporant le bleu Chapril: rgb(0,81,132), alias #ff5e00 * l'image par défaut des évènements reprend une illustration de David Revoy * quelques marges différentes * ajout d'une liste de services en ligne dans la page de documents pour les groupes * la barre de menus du Chapril
Prévues
- rien de plus pour le moment que ce qui est en production sur https://mobilizon.chapril.org
Elements de personnalisation
Via l'administration web
Changer le texte de présentation de l'instance: https://mobilizon.chapril.org/settings/admin/settings nom de l'instance, slogan, description courte, description longue, lien vers les CGU du Chapril. https://www.chapril.org/cgu.html
ne pas oublier d'enregistrer.
s'abonner aux autres instances le plus tôt possible pour profiter de la fédération. liste des autres instances: https://instances.joinMobilizon.org
Comment personnaliser
changer les images
Les images par défaut des évènements créé sans avoir uploadé d'affiche ont une image par défaut que l'on peut changer. Pareillement pour le favicon et le logo dans la barre de navigation.
Dans les sources du projet, certaines images ont été remplacées dans le dossier js/public/img Pour les palettes de couleur, les variables scss ont été modifiées dans js/src/variables.scss les espacements ont été modifiés dans js/src/common.scss
Pour les liens dans le composant de Ressources js/src/views/Resources/ResourceFolder.vue une simple liste de liens à été ajoutée.
Personnaliser le code source
Mettre en place un environnement de développement local permet de personnaliser au mieux sa version de Mobilizon. Pour cela il faut comprendre sa stack technique, constituée d'un côté d'un projet Phoenix écrit en Elixir / Erlang, avec une base de données Postgresql, une interface en GraphQL qui communique avec la lib Absinthe, et de l'autre côté pour le front end: une app en vueJS version 3 (dans le dossier js), utilisant Appollo pour parler avec GraphQL. Le code du front end est majoritairement en typescript et les feuilles de style en SCSS.
Pour personnaliser les couleurs, il faut enlever les définitions de couleurs dans les composants vue pour éviter les surcharges indésirées, et modifier les couleurs dans les fichiers js/src/variables.sccss et faire référence à ces variables ailleurs dans les composants vue si nécessaire. Le gros du style est fourni par la lib CSS Bulma ( https://www.bulma.io ) et agrémenté de quelques retouches dans le fichier common.scss
Pour avoir son instance fonctionnant localement il faut installer les dépendances de dev du back (les dépendances Elixir) et du front (les dépendances NPM), configurer l'accès à la base de données postgresql dans le fichier de config .exs, effectuer les migrations de la base avec Ecto (mix ecto.migrate) puis lancer la commande.
mix phx.server
ce qui permet de lancer un serveur sur localhost:8000 qui se rafraîchira à l'enregistrement de vos modifications grâce à des filewatcher inode.
Dépot de sources
On a une version personnalisée de Mobilizon, mise à disposition sur la forge https://forge.april.org/Chapril/mobilizon.chapril.org
Sa branche master est notre version personnalisée. Nous la rebasons quand nécessaire par dessus la branche master de l'upstream, fournie par framagit.
Contribuer au code
Pour proposer du code, il convient de créer une branche, faire ses commits, vérifier que les tests passent, faire une merge request avec au moins une autre personne révisant le code à fusionner, et si tout passe bien, fusionner dans la branche master.
En cas de question concernant le logiciel libre Mobilizon, se référer en premier lieu à la documentation officielle du dépot upstream. https://docs.joinMobilizon.org/
Présentation sur le site
Organisation d'évènements – Mobilizon
Mobilizon.chapril.org est un service permettant d'organiser des évènements, préparer l'avant et l'après, et de publier des infos pour les groupes que vous souhaitez gérer à plusieurs. Du plus petit anniversaire familial ou la sortie entre amis à la grande manifestation internationale, le Chapril vous permet de réaliser vos rassemblements comme vous le souhaitez tout en préservant la confidentialité des participants.
Le code source du projet Mobilizon.chapril.org est disponible à l’adresse https://forge.april.org/explore/repos?q=Mobilizon.chapril.org et aussi à https://www.mumble.info/downloads/
suivi de bugs
Bugs détectés sur Mobilizon.chapril.org et ouvert sur la forge upstream
contributions à l'upstream
* mise en place d'un honeypot pour empêcher le spam * ajout d'itinéraire utilisant openstreetmap dans la page d'évènement, dans la popup montrant une carte.