Mobilizon
Mobilizon est un logiciel actuellement en cours de développement par Framasoft.
Il permettra à chaque organisation ou individu de proposer sa propre plateforme de gestion d'évènements, afin de mieux s’émanciper des géants du web.
Il sera possible de :
- Publier des évènements
- Créer des groupes
- Dialoguer par messagerie
- Avoir plusieurs identités avec un seul compte
- Fédérer plusieurs instances Mobilizon pour échanger avec d’autres instances, afficher plus d’événements que juste ceux de son instance et favoriser les interactions
Mobilizon est un logiciel éthique permettant de s'émanciper de Facebook, Meetup, Eventbrite... Il respecte la vie privée et les données personnelles de ses utilisateurs.
L'association Défis est actuellement en train de tester la version Beta du service, disponible ici.
L'enssemble de nos services se trouve derrière un reverse proxy Nginx. Le fichier de configuration ngnix du container sur lequel est installé Mobilizon est minimaliste. Le fichier de configuration principal, bien plus complet, se trouve en effet au sein du container du reverse proxy.
Fichier de configuration Reverse Proxy Nginx
server { if ($host = mobilizon.defis.info) { return 301 https://$host$request_uri; } # managed by Certbot server_name mobilizon.defis.info; listen [::]:80; listen 80; return 404; # managed by Certbot } server { server_name mobilizon.defis.info; listen [::]:443 ssl http2; # managed by Certbot listen 443 ssl http2; # managed by Certbot ssl_session_timeout 5m; ssl_certificate /etc/letsencrypt/live/mobilizon.defis.info/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/mobilizon.defis.info/privkey.pem; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot # Add TLSv1.3 if it's supported by your system ssl_protocols TLSv1.2; ssl_ciphers 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA'; ssl_prefer_server_ciphers on; ssl_ecdh_curve prime256v1; # ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/activity+json application/atom+xml; # the nginx default is 1m, not enough for large media uploads client_max_body_size 16m; # Let's Encrypt keeps its files here location ^~ '/.well-known/acme-challenge' { root /var/www/certbot; default_type "text/plain"; } location / { gzip off; proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # For Websocket support proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://XXX.XXX.XXX.XXX:4000; client_max_body_size 16m; } }
Fichier de configuration du conteneur
server { server_name mobilizon.defis.info; listen 80; listen [::]:80; location ~* \.(css|js)$ { root /home/mobilizon/live/priv/static; etag off; expires 1y; access_log off; add_header Cache-Control public; } }
Mise en place
Prérequis
- Un ordinateur fonctionnant sous Linux machine avec les droits d'accès Root
- Un nom de domaine ou sous-domaine réservé au service mobilizon, par exemple votre-mobilizon.domaine.fr
- Un serveur SMTP pour envoyer les emails
Préparations des dépendances
Mobilizon étant actuelement encore en Bêta, certaines dépendances vont très certainement changer. Nous vous renvoyons donc sur la page d'installation des dépendances du site internet de Mobilizon.
Préparatifs
Nous avons besoin d'un utilisateur dédié au service mobilizon que nous appelons mobilizon et dont le dossier utilisateur sera /home/mobilizon :
sudo adduser --disabled-login mobilizon
Connectons nous en tant que l'utilisateur précédement créé :
sudo -i -u mobilizon
Commençons par cloner le dépôt dans un répertoire nommé live avant de nous déplacer dans ce dernier :
git clone https://framagit.org/framasoft/mobilizon live && cd live
Installation des dépendances
Installation des dépendancees Elexir :
mix deps.get
Si vous vous retrouvez face à une erreur similaire à celle-ci :
Vous devez changer l'encodage de caractère de votre distribution linux, pour ce faire, lancez la commande suivante :
Vous vous retrouverez alors face à une interface similaire :
Appuyez alors sur la touche "Entrée" :
Déplacez vous dans ce menu à l'aides des touches fléchées, et trouvez l'option "fr_FR.UTF-8 UTF-8" à l'aide de la touche "Espace". Une fois ceci fait, appuez sur la touche "Tabulation", puis sur la touche "Entrée" à deux reprises :
Vous arriverez alors sur cette interface :
Selectionez "fr_FR.UTF-8", déplacez vous sur "Ok" et appuyez sur la touche "entrée".
warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell)
Vous devez changer l'encodage de caractère de votre distribution linux, pour ce faire, lancez la commande suivante :
dpkg-reconfigure locales
Vous vous retrouverez alors face à une interface similaire :
Appuyez alors sur la touche "Entrée" :
Déplacez vous dans ce menu à l'aides des touches fléchées, et trouvez l'option "fr_FR.UTF-8 UTF-8" à l'aide de la touche "Espace". Une fois ceci fait, appuez sur la touche "Tabulation", puis sur la touche "Entrée" à deux reprises :
Vous arriverez alors sur cette interface :
Selectionez "fr_FR.UTF-8", déplacez vous sur "Ok" et appuyez sur la touche "entrée".
Lorsque l'on vous demande "Shall I install Hex ?", appuyez sur la touche entrée pour confirmer.
MIX_ENV=prod mix compile
Rendez vous maintenant dans le répertorie js :
cd js
Et installez les dépendances Javascript :
yarn install
Nous pouvont désormais générer le front-end du service :
Attention ! La compilation du front-end peut consommer jusqu'à 512 Mo de RAM par défaut. Si cela ne correspond pas à votre configuration, vous pouvez ajuster la mémoire maximale utilisée en utilisant la commande suivante :
NODE_OPTIONS=--max_old_space_size=4096
Retournez désormais dans le répertoire principal :
cd ..
Configuration
Avant goût
Mobilizon fournit un outil en ligne de commande pour générer la configuration
MIX_ENV=prod mix mobilizon.instance gen
Lorsque l'on vous demande "Shall I install Shall I install rebar3 ?", appuyez sur la touche entrée pour confirmer.
Des questions vous seront posées 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 :
- What domain will your instance use? (e.g mobilizon.org) : entrez le nom de domaine de votre instance Mobilizon
- What is the name of your instance? (e.g. Mobilizon) : entrez le nom que vous souhaitez donner à votre instance Mobilizon
- What's the address email will be send with? : entrez l'adresse mail à laquelle vous recevrez les informations
- What is the hostname of your database? : entrez le nom d'hôte de votre service Mobilizon
- What is the name of your database? : entrez le nom que vous assignerez à votre future base de donnée (eg mobilizon_prod)
- What is the user used to connect to your database? : entrez le nom de l'utilisateur qui se connectera à la base de donnée (eg localhost)
- What is the password used to connect to your database? : entrez le mot de passe de l'utilisateur qui se connectera à la base de donnée (eg autogenerated (autogénéré))
- What port will the app listen to (leave it if you are using the default setup with nginx)? : entrez le port que le service mobilizon utilisera pour recevoir les requêtes. Si vous utilisez la configuration par défaut de nginx, appuyez sur entrée pour utiliser le port 4000
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 via la commande
exit
(car il ne devrait pas avoir les droits root/sudo) et exécutez dans le répertoire /home/mobilizon/live la commande suivante : sudo -u postgres psql -f setup_db.psql
La commande devrait retourner quelque chose comme ceci :
CREATE ROLE CREATE DATABASE You are now connected to database "mobilizon_prod" as user "postgres". CREATE EXTENSION CREATE EXTENSION CREATE EXTENSION
Reconnectez vous à l'utilisateur mobilizon via la commande :
sudo -i -u mobilizon
et placez vous dans le dossier live :
sudo -i -u mobilizon
cd live
Puis, suprimez le fichier intitulé "setup_db.psql" :
rm setup_db.psql
Migration de la base de données
Lancez la commande :
MIX_ENV=prod mix ecto.migrate
Remarquez ce préfixe "MIX_ENV=prod" devant la commande mix. Vous devrez l'employer comme préfixe à chaque commande mix à l'avenir.
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.
exit
Systemd
Systemd
Copiez le fichier ce trouvant dans support/systemd/mobilizon.service vers le répertoire /etc/systemd/system :
sudo cp support/systemd/mobilizon.service /etc/systemd/system/
Relancez Systemd pour qu'il détecte votre nouveau fichier :
sudo systemctl daemon-reload
Et activez le service Mobilizon :
systemctl enable --now mobilizon.service
La commande précédente lancera Mobilizon au démarage.
Vous pouvez suivre les logs avec la commande suivante :
sudo journalctl -fu mobilizon.service
Vous devriez voir apparaitre quelque-chose comme ceci parmis les logs :
Running Mobilizon.Web.Endpoint with cowboy 2.8.0 at :::4000 (http) Access Mobilizon.Web.Endpoint at https://your-mobilizon-domain.com
Le serveur Mobilizon est actif sur le port 4000 seulement sur l'interface locale. Il est alors necessaire d'ajouter un reverse proxy, dont la configuration et la procédure de déploiment est détaillée ci-dessous.
Nginx
La configuration qui vous est présentée ici est celle du service Mobilizon de Défis, installé au sein d'un conteneur qui se trouve derrière un Reverse Proxy qui se trouve dans un autre conteneur, tous les deux gérés par le système de virtualisation Proxmox.
Configuration du Reverse Proxy Nginx
Nous nous connectons au conteneur du Reverse Proxy Nginx.
Afin de créer le fichier de configuration du reverse proxy menant vers Mobilizon nous nous plaçons dans le répertoire
/etc/nginx/sites-available/
afin d'y trouver notre fichier modèle contenu modele_avant_certbot.conf
:Fichier modèle du reverse proxy
server { location / { include proxy_params; proxy_pass http://XXX.XXX.XXX.XXX; } server_name container.defis.info; listen [::]:80; listen 80; }
Nous copions et renomons ce fichier de configuration qui va servir de base à la construction du fichier de configuration du service :
cp modele_avant_certbot.conf mobilizon.defis.info.conf
Puis nous créons un lien symbolique vers le répertoire
/etc/nginx/sites-enabled/
:ln -s /etc/nginx/sites-available/mobilizon.defis.info.conf /etc/nginx/sites-enabled/mobilizon.defis.info.conf'
Nous testons la validité de la syntaxe du fichier de configuration grâce à la commande suivante :
nginx -t
Si la commande renvoie quelque chose de similaire, notre fichier de configuration est valide :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Nous redémarrons nginx afin que les modifications soient prisent prises en compte :
service nginx restart
Afin de sécuriser les connexion entre l'utilisateur et le service Mobilizon, nous utilisons Certbot afin de générer un ceritficat TLS, le sucesseur du SSL :
certbot --nginx -d mobilizon.defis.info
À la fin de cette commande, il est demandé si nous souhaitons forcer la redirection vers le protocole TLS. Nous choisissons de forcer la redirection (l'option numéro 2).
Voici alors le contenu du fichier de configuration
mobilizon.defis.info.conf
après l'execution de certbot :Certbot et Let's encrypt
server { if ($host = mobilizon.defis.info) { return 301 https://$host$request_uri; } # managed by Certbot server_name mobilizon.defis.info; listen [::]:80; listen 80; return 404; # managed by Certbot } server { server_name mobilizon.defis.info; listen [::]:443 ssl; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/wiki.defis.info/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/wiki.defis.info/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot location / { include proxy_params; proxy_pass http://XXX.XXX.XXX.XXX; } }
Cette procédure est la même pour l'installation de presque tous nos services sur notre infrastructure.
En nous basant sur les informations du site joinmobilizon.org, nous modifions ce fichier de configuration à l'aide de la commande suivante :
nano mobilizon.defis.info.conf
afin d'obtenir le fichier suivant :
Fichier de configuration Reverse Proxy Nginx
server { if ($host = mobilizon.defis.info) { return 301 https://$host$request_uri; } # managed by Certbot server_name mobilizon.defis.info; listen [::]:80; listen 80; return 404; # managed by Certbot } server { server_name mobilizon.defis.info; listen [::]:443 ssl http2; # managed by Certbot listen 443 ssl http2; # managed by Certbot ssl_session_timeout 5m; ssl_certificate /etc/letsencrypt/live/mobilizon.defis.info/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/mobilizon.defis.info/privkey.pem; # managed by Certbot # include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot # Add TLSv1.3 if it's supported by your system ssl_protocols TLSv1.2; ssl_ciphers 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA'; ssl_prefer_server_ciphers on; ssl_ecdh_curve prime256v1; # ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/activity+json application/atom+xml; # the nginx default is 1m, not enough for large media uploads client_max_body_size 16m; # Let's Encrypt keeps its files here location ^~ '/.well-known/acme-challenge' { root /var/www/certbot; default_type "text/plain"; } location / { gzip off; proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # For Websocket support proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://XXX.XXX.XXX.XXX:4000; client_max_body_size 16m; } # location ~* \.(css|js)$ { # root /home/mobilizon/live/priv/static; # etag off; # expires 1y; # access_log off; # add_header Cache-Control public; # } }
Nous vérifions la syntaxe du fichier de configuration :
nginx -t
Si la commande renvoie quelque chose de similaire, notre fichier de configuration est valide :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Redémarrons le Reverse Proxy Nginx afin que les modifications soient prises en compte.
Configuration du serveur WEB Nginx
Vous avez peut-être remarqué que cette partie
# location ~* \.(css|js)$ {
# root /home/mobilizon/live/priv/static;
# etag off;
# expires 1y;
# access_log off;
# add_header Cache-Control public;
# }
est commentée.
C'est la partie qui doit être explicité dans le fichier de configuration du serveur web Nginx du conteneur du service mobilizon (et non dans le fichier de configuration du Reverse Proxy Nginx).
Aussi, dans le conteneur sur lequel est installé l'instance de Mobilizon, nous créons et éditons le fichier de configuration du
seveur web Nginx :
nano /etc/nginx/sites-available/mobilizon.conf
Pour y ajouter la configuration suivante :
Fichier de configuration du conteneur
server { server_name mobilizon.defis.info; listen 80; listen [::]:80; location ~* \.(css|js)$ { root /home/mobilizon/live/priv/static; etag off; expires 1y; access_log off; add_header Cache-Control public; } }
Nous créons un lien symbolique vers le répertoire
/etc/nginx/sites-enabled/
:ln -s /etc/nginx/sites-available/mobilizon.conf /etc/nginx/sites-enabled/mobilizon.conf'
Nous vérifions la syntaxe du fichier de configuration :
nginx -t
Si la commande renvoie quelque chose de similaire, notre fichier de configuration est valide :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Redémarrons le serveur web Nginx afin que les modifications soient prises en compte :
service nginx restart
Utilisateurs
Créez votre premier utilisateur
Reconnectez vous à l'identifiant mobilizon :
sudo -i -u mobilizon
Déplacez vous dans le répertoire live :
cd live
Puis créez un nouvel utilisateur administrateur :
MIX_ENV=prod mix mobilizon.users.new "votre@email.com" --admin --password "votre_mot_de_passe"
Attention ! n'oubliez pas de rajouter un espace devant la commande afin que le mot de passe que vous venez d'associer à votre utilisateur administrateur ne soit pas conservé dans l'historique de votre terminal.
Vous pouvez ignorer l'option --password, Mobilizon vous en générera alors un.
SMTP
Configuration SMTP
Mobilizon considère par défaut qu'il existe un serveur SMTP en local qui écoute sur le port 25. Pour spécifier un serveur SMTP spécifique, il faut éditer le fichier /home/mobilizon/live/config/prod.secret.exs et ajouter à la fin, en fonction de votre propre serveur SMTP, quelque chose ressemblant à ceci :
config :mobilizon, Mobilizon.Web.Email.Mailer, adapter: Bamboo.SMTPAdapter, server: "localhost", hostname: "localhost", port: 25, username: nil, password: nil, # can be `:always` or `:never` tls: :if_available, allowed_tls_versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"], # can be `true` ssl: false, retries: 1, # can be `true` no_mx_lookups: false, # can be `:always`. If your smtp relay requires authentication set it to `:always`. auth: :if_available
config :mobilizon, Mobilizon.Web.Email.Mailer, adapter: Bamboo.SMTPAdapter, server: "ssl0.ovh.net", hostname: "mobilizon.defis.info", port: 587, username: "mobilizon@defis.info", password: "*****", tls: :always, allowed_tls_versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"], retries: 1, no_mx_lookups: false, auth: :always
Il faut ensuite redémarrer Mobilizon pour recompiler le service et appliquer les nouveaux paramètres :
sudo systemctl restart mobilizon
Geolocalisation
Mobilizon peut utiliser la géolocalisation à partir de données au format MMDB provenant de sources telles que les bases de données MaxMind GeoIP ou db-ip.com. Cela permet d'afficher les événements se déroulant à proximité de l'endroit où se trouve l'utilisateur.
Vous devrez télécharger la base de données de la ville et la placer dans priv/data/GeoLite2-City.mmdb.
Pour que les moidifications prennent effet, redémarer le service Mobilizon :
sudo systemctl restart mobilizon.service
Mobilizon n'affiche un avertissement au démarrage que si la base de données est manquante, mais qu'elle n'est pas requise.