Pleroma
Pleroma est un réseau social de microbloging semblable à Mastodon. Il a pour particularité d'être décentralisé, chaque instance pouvant suivre une ou plusieurs autres instances Pleroma. Ce réseau est également fédéré, celui ci pouvant intéragir avec d'autres logiciels et protocoles.
Pleroma propose à ses utilisateurs deux interfaces principales :
- Une interface native hautement personalisable
- Une interface semblable à celle utilisée par Mastodon
Étant donné que Pleroma installe son propre serveur Web et que nos services se trouvent sur des contenneurs Proxmox acessibles via un Reverse Proxy, il n'y a pas besoin d'installer Nginx au sein de Pleroma.
Fichier de configuration Reverse Proxy Nginx
proxy_cache_path /tmp/pleroma-media-cache levels=1:2 keys_zone=pleroma_media_cache:10m max_size=10g inactive=720m use_temp_path=off; server { if ($host = pleroma.defis.info) { return 301 https://$host$request_uri; } # managed by Certbot server_name pleroma.defis.info; listen 80; listen [::]:80; return 404; # managed by Certbot # location ~ /\.well-known/acme-challenge { # root /var/lib/letsencrypt/; # } #location / { # return 301 https://pleroma.defis.info; #} } ssl_session_cache shared:ssl_session_cache:10m; server { server_name pleroma.defis.info; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_session_timeout 5m; ssl_certificate /etc/letsencrypt/live/pleroma.defis.info/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/pleroma.defis.info/privkey.pem; # managed by Certbot # include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; ssl_protocols TLSv1.2; # ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; ssl_prefer_server_ciphers on; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; 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; client_max_body_size 16m; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://xxx.xxx.xxx.xxx:4000; client_max_body_size 16m; } location ~ ^/(media|proxy) { proxy_cache pleroma_media_cache; slice 1m; proxy_cache_key $host$uri$is_args$args$slice_range; proxy_set_header Range $slice_range; proxy_http_version 1.1; proxy_cache_valid 200 206 301 304 1h; proxy_cache_lock on; proxy_ignore_client_abort on; proxy_buffering on; chunked_transfer_encoding on; proxy_pass http://xxx.xxx.xxx.xxx:4000; } }
Installation de Pleroma
Identifier la plateforme
La commande suivante vous permet d'identifier le type de plateforme sur laquelle sera hébergé Pleroma. Notez quelque part le résultat de cette commande.
arch="$(uname -m)";if [ "$arch" = "x86_64" ];then arch="amd64";elif [ "$arch" = "armv7l" ];then arch="arm";elif [ "$arch" = "aarch64" ];then arch="arm64";else echo "Unsupported arch: $arch">&2;fi;if getconf GNU_LIBC_VERSION>/dev/null;then libc_postfix="";elif [ "$(ldd 2>&1|head -c 9)" = "musl libc" ];then libc_postfix="-musl";elif [ "$(find /lib/libc.musl*|wc -l)" ];then libc_postfix="-musl";else echo "Unsupported libc">&2;fi;echo "$arch$libc_postfix"
Installation des différents packages
La commande suivante permet d'intaller les différents packages dont à besoin Pleroma pour fonctionner correctement, qui sont :
- curl (pour télécharger la derniere vesion en développement)
- unzip (pour déziper le fichier de la dernière version)
- ncurses (ERTS ne fonctionnera pas sans)
- PostgreSQL (un gestionnaire de base de donnée, en utilisant également les extentions postgresql-contrib)
- certbot (pour le certificat SSL)
apt install curl unzip libncurses5 postgresql postgresql-contrib certbot
Déploiement de Pleroma
Nous n'utiliseront ici pas le système d'index RUM avec PostgreSQL, permettant de réaliser des recherches ordonées de résultats.
Créer un utilisateur au nom de Pleroma
adduser --system --shell /bin/false --home /opt/pleroma pleroma
Définir la plateforme de destination
Remplacez dans cette commande "amd64-musl" par le résultat de la commande ayant permis de connaitre le type de plateforme qu'utilise votre machine.
export FLAVOUR="amd64-musl"
Cloner la dernière version dans un répertoire temporaire et la dézipper
su pleroma -s $SHELL -lc "
curl 'https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=$FLAVOUR' -o /tmp/pleroma.zip
unzip /tmp/pleroma.zip -d /tmp/
"
Déplacer la version dans le repertoire home et supprimer les fichiers du repertoire temporaire
mv /tmp/release/* /opt/pleroma
rmdir /tmp/release
rm /tmp/pleroma.zip
"
Créer un dossier d'upload et lui donner les bonnes permissions
mkdir -p /var/lib/pleroma/uploads
chown -R pleroma /var/lib/pleroma
Créer un repertoire public
mkdir -p /var/lib/pleroma/static
chown -R pleroma /var/lib/pleroma
Créer un repertoire de configuration
mkdir -p /etc/pleroma
chown -R pleroma /etc/pleroma
Lancer la commande de configuration
su pleroma -s $SHELL -lc "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql"
Créer la base de données postgres
su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"
Créer le shéma de la base de données
su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"
Lancement de l'instance pour vérifier que tout fonctionne correctement
su pleroma -s $SHELL -lc "./bin/pleroma daemon"
Attendez environ 20 secondes et interrogez le terminal de l'instance, s'il affiche correctement votre uri, votre nom et votre e-mail, l'instance est correctement configurée
sleep 20 && curl http://localhost:4000/api/v1/instance
Stoper l'instance
su pleroma -s $SHELL -lc "./bin/pleroma stop"
Sytème de service
Copie du service dans le dossier approprié
cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service
Démarer pleroma et l'activer au démarage
systemctl start pleroma
systemctl enable pleroma
Configuration de Pleroma derrière un Reverse Proxy
Définition de l'adresse IP
Modification du fichier de configuration
nano /etc/pleroma/config.exs
Une fois que vous êtes rendu dans l'interface de modificaiton de votre fichier de configuration, rendez-vous à la ligne
http
et renseignez y l'adresse IP de la machine sur laqeulle est installée Pleroma.Au sein de ce fichier de configuration, vous pouvez également activier ou désactivier les inscriptions de nouveaux utilisateurs en vous rendant à la ligne
registrations_open:
. Cette ligne prend en compte deux paramètres, true activant les inscriptions et false emêchant de nouveaux utilisateurs de s'inscrire. Défis ayant déployé ce service afin de pouvoir communiquer à propos de son associaiton, un seul utilisateur administrateur est necessaire, les inscriptions sont donc désactivées.redémarer pleroma
systemctl restart pleroma
Nginx
La configuration qui vous est présentée ici est celle du service Pleroma 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 Pleroma 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 pleroma.defis.info.conf
Puis nous créons un lien symbolique vers le répertoire
/etc/nginx/sites-enabled/
:ln -s /etc/nginx/sites-available/pleroma.defis.info.conf /etc/nginx/sites-enabled/pleroma.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 Pleroma, nous utilisons Certbot afin de générer un ceritficat TLS, le sucesseur du SSL :
certbot --nginx -d pleroma.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
pleroma.defis.info.conf
après l'execution de certbot :Certbot et Let's encrypt
server { if ($host = pleroma.defis.info) { return 301 https://$host$request_uri; } # managed by Certbot server_name pleroma.defis.info; listen [::]:80; listen 80; return 404; # managed by Certbot } server { server_name pleroma.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 https://docs-develop.pleroma.social, nous modifions ce fichier de configuration à l'aide de la commande suivante :
nano pleroma.defis.info.conf
afin d'obtenir le fichier suivant :
Fichier de configuration Reverse Proxy Nginx
proxy_cache_path /tmp/pleroma-media-cache levels=1:2 keys_zone=pleroma_media_cache:10m max_size=10g inactive=720m use_temp_path=off; server { if ($host = pleroma.defis.info) { return 301 https://$host$request_uri; } # managed by Certbot server_name pleroma.defis.info; listen 80; listen [::]:80; return 404; # managed by Certbot # location ~ /\.well-known/acme-challenge { # root /var/lib/letsencrypt/; # } #location / { # return 301 https://pleroma.defis.info; #} } ssl_session_cache shared:ssl_session_cache:10m; server { server_name pleroma.defis.info; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_session_timeout 5m; ssl_certificate /etc/letsencrypt/live/pleroma.defis.info/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/pleroma.defis.info/privkey.pem; # managed by Certbot # include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; ssl_protocols TLSv1.2; # ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; ssl_prefer_server_ciphers on; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; 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; client_max_body_size 16m; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://xxx.xxx.xxx.xxx:4000; client_max_body_size 16m; } location ~ ^/(media|proxy) { proxy_cache pleroma_media_cache; slice 1m; proxy_cache_key $host$uri$is_args$args$slice_range; proxy_set_header Range $slice_range; proxy_http_version 1.1; proxy_cache_valid 200 206 301 304 1h; proxy_cache_lock on; proxy_ignore_client_abort on; proxy_buffering on; chunked_transfer_encoding on; proxy_pass http://xxx.xxx.xxx.xxx:4000; } }
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.
service nginx restart
Si tout a fonctionné, vous devriez voir apparaitre l'interface de Pleroma lorsque vous rentrez votre nom de domaine ou adresse IP dans la barre d'URL.
Utilisateurs
Création d'utilisateur
Les deux commandes suivantes vont vous permettre de créer un utilisateur et de le définir comme administrateur. Remplasez "Joeuser" par le nom que vous shouaiter assigner à ce nouvel utilisateur, et "joeuser@sld.tld" par l'adresse mail que vous shouaitez lui atitrer.
cd /opt/pleroma/bin
su pleroma -s $SHELL -lc "./bin/pleroma_ctl user new joeuser joeuser@sld.tld --admin"