Installer un pod diaspora* sous Debian et Ubuntu
Dans ce tutoriel, nous allons installer un pod diaspora* sur un serveur Debian ou Ubuntu. J’utilise le guide officiel pour Debian 8 comme base et je l’ai moi même utilisé sous Debian 9 pour dspr.io. En gros il fonctionne sur les versions récentes de Debian et Ubuntu.
Notre installation va utiliser PostgreSQL, Nginx, et Systemd.
Pour info ce tuto est traduit de mon blog anglais ! 🙂
Sommaire
Spécifications requises
Elle dépendent bien sûr de la taille de votre instance et de l’activité de vos utilisateurs.
Pour une petite instance avec quelques utilisateurs :
- RAM : 1.5 GB
- CPU: N’importe
- Storage: ça dépend de la taille de la BDD et des images que vos utilisateurs vont upload. Quelques GB sont suffisants pour démarrer.
Installation
Dépendances
apt install build-essential libssl-dev libcurl4-openssl-dev libxml2-dev libxslt-dev imagemagick ghostscript curl libmagickwand-dev git libpq-dev redis-server nodejs
PostgreSQL
Diaspora* supporte MySQL, MariaDB et PostgreSQL. On va utiliser ce dernier.
On l’installe :
apt-get install postgresql-server
Ensuite on se connecte à PostgreSQL avec l’utilisateur postgres
:
sudo -u postgres psql
On crée un utilisateur diaspora :
CREATE USER diaspora WITH CREATEDB PASSWORD '<password>';
On créera la BDD plus tard.
Creation de l’utilisateur diaspora
On va installer et faire tourner diaspora* sous cet utilisateur.
adduser --disabled-login diaspora
Pour se connecter :
su - diaspora
Installation de Ruby
Il y a plusieurs façons d’installer Ruby. On va utiliser rbenv pour gérer l’environnement et les versions.
On a besoin de ces dépendances pour installer Ruby (en tant que root) :
apt install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
Reconnectez vous avec l’utilisateur diaspora.
On installe rbenv :
git clone https://github.com/rbenv/rbenv.git ~/.rbenv cd ~/.rbenv && src/configure && make -C src echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
On reconnecte pour recharger le PATH:
exit su - diaspora
On installe le plugin ruby-build pour rbenv afin de compiler Ruby :
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Enfin, on installe Ruby :
rbenv install 2.4.3 rbenv global 2.4.3
Le projet diaspora recommande la branche 2.4. J’ai testé avec Ruby 2.5 mais j’ai eu des soucis, donc on va rester avec la 2.4 pour le moment. Merci de vérifier ici si la 2.4.3 est toujours la dernière version 2.4.x lorsque vous lisez ceci.
Installation de exim4
On va utiliser exim4 en tant que relais SMTP afin de pouvoir envoyer des mails aux utilisateurs.
En tant que root, installer et configurez le paquet :
apt install exim4 dpkg-reconfigure exim4-config
Téléchargement de diaspora*
Enfin !
Télécharger le code source de diaspora* et déplacez-vous dans le dossier :
cd ~ git clone -b master https://github.com/diaspora/diaspora.git cd diaspora
Configurer diaspora*
Copiez les fichiers d’exemple :
cp config/database.yml.example config/database.yml cp config/diaspora.yml.example config/diaspora.yml
Ils sont assez longs, mais surtout très bien documentés, donc lisez-les en entier !
Dans config/database.yml
, mettez votre utilisateur PostgreSQL (diaspora
) et le mot de passe que vous avez choisi. PostgreSQL est utilisé par défaut dans la conf, donc rien à faire d’autre.
Vous allez avoir besoin de modifier plus de choses dans config/diaspora.yml
.
Pour info, voici les lignes que j’ai changées pour dspr.io :
configuration: environment: url: "https://dspr.io/" certificate_authorities: '/etc/ssl/certs/ca-certificates.crt' server: rails_environment: 'production' statistics: #enable public stats user_counts: true comment_counts: true settings: liberapay_username: "Angristan" captcha: enable: false #disabling captcha because of imagemagick issues terms: enable:true source_url: 'https://github.com/diaspora/diaspora/' mail: enable: true sender_address: 'contact[at]dspr.io' method: 'sendmail' #exim4 admins: account: "angristan" podmin_email: 'angristan[at]protonmail.com' relay: inbound: subscribe: true scope: all
La plupart des options sont bonnes par défaut.
Installation de Bundle et les gems
Installez bundle, le gestionnaire de librairies Ruby :
gem install bundler script/configure_bundler
Si vous avez des erreurs concernant votre version de Ruby, éditez .ruby-version
et mettez la votre (ici 2.4.3 à la place de 2.4).
Ensuite installez les gems :
bin/bundle install --full-index
Installation de la base de données
Cette commande rake va créer et configurer la BDD :
RAILS_ENV=production bin/rake db:create db:migrate
Pré-compiler les assets
Cette commande rake va pré-compiler les assets :
RAILS_ENV=production bin/rake assets:precompile
Services Systemd
Il y a plusieurs façon de gérer diaspora* en tant que service. On va utiliser Systemd.
Créez les fichiers suivants :
/etc/systemd/system/diaspora.target
[Unit] Description=Diaspora social network Wants=postgresql.service Wants=redis-server.service After=redis-server.service After=postgresql.service [Install] WantedBy=multi-user.target
/etc/systemd/system/diaspora-web.service
[Unit] Description=Diaspora social network (unicorn) PartOf=diaspora.target StopWhenUnneeded=true [Service] User=diaspora Environment=RAILS_ENV=production WorkingDirectory=/home/diaspora/diaspora ExecStart=/bin/bash -lc "bin/bundle exec unicorn -c config/unicorn.rb -E production" Restart=always [Install] WantedBy=diaspora.target
/etc/systemd/system/diaspora-sidekiq.service
[Unit] Description=Diaspora social network (sidekiq) PartOf=diaspora.target StopWhenUnneeded=true [Service] User=diaspora Environment=RAILS_ENV=production WorkingDirectory=/home/diaspora/diaspora ExecStart=/bin/bash -lc "bin/bundle exec sidekiq" Restart=always [Install] WantedBy=diaspora.target
Activez les services au boot :
systemctl enable diaspora.target diaspora-sidekiq.service diaspora-web.service
Redémarrez les services :
systemctl restart diaspora.target
Vérifiez si ils tournent correctement :
systemctl status diaspora-web.service systemctl status diaspora-sidekiq.service
Reverse proxy Nginx
On va utiliser Nginx en tant que reverse proxy et pour servir les ressources statiques.
Je vous conseille acme.sh pour obtenir un certificat Let’s Encrypt.
Après l’avoir installé, vous pouvez utiliser une commande du genre :
./.acme.sh/acme.sh --issue --log \ --dns \ --keylength ec-256 \ --cert-file /etc/nginx/https/cert.pem \ --key-file /etc/nginx/https/key.pem \ --fullchain-file /etc/nginx/https/fullchain.pem \ -d dspr.io \ -d www.dspr.io
Installez Nginx:
apt install nginx
Voici mon vhost : (/etc/nginx/conf.d/dspr.io.conf
)
upstream diaspora_server { server unix:/home/diaspora/diaspora/tmp/diaspora.sock; } server { listen 80; listen [::]:80; server_name www.dspr.io dspr.io; return 301 https://dspr.io$request_uri; access_log /dev/null; error_log /dev/null; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name www.dspr.io dspr.io; if ($host = www.dspr.io) { return 301 https://dspr.io$request_uri; } access_log /var/log/nginx/dspr-access.log; error_log /var/log/nginx/dspr-error.log; ssl_certificate /etc/nginx/https/fullchain.pem; ssl_certificate_key /etc/nginx/https/key.pem; ssl_protocols TLSv1.2; ssl_ciphers EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES; ssl_ecdh_curve X25519:P-521:P-384:P-256; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; resolver 80.67.169.40 80.67.169.12 valid=300s; resolver_timeout 5s; ssl_session_cache shared:SSL:10m; root /home/diaspora/diaspora/public; client_max_body_size 5M; client_body_buffer_size 256K; try_files $uri @diaspora; location /assets/ { expires max; add_header Cache-Control public; } location @diaspora { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://diaspora_server; } }
Bien sûr, adaptez-le à votre domaine.
Votre pod devrais maintenant être accessible !
Logrotate
Petite astuce : utilisez logrotate pour gérer vos logs.
Ajoutez ceci dans /etc/logrotate/diaspora
/home/diaspora/diaspora/log/*.log { notifempty copytruncate missingok compress weekly rotate 52 }
Cela va rotate les logs toutes les semaines, les compresser, et les garder pour 52 semaines. Vous pouvez le modifier comme bon vous semble.
L’admin
Après vous être créé un compte, donnez-vous les droits admin :
Role.add_admin User.where(username: "the_username").first.person
Vous avez maintenant accès au dashboard admin : https://diaspora/admins/dashboard
Sidekiq, qui s’occupe des tâches de fond, a une interface web de disponible sur https://diaspora/sidekiq.
Les stats du pod sont disponibles sur https://diaspora/statistics
.
N’oubliez pas d’ajouter votre pod à https://podupti.me/ et https://the-federation.info/ !
Mettre à jour diaspora*
La base :
apt update && apt full-upgrade
Si vous avez besoin de mettre à jour Ruby, exécutez juste rbenv install
puis rbenv global
avec la nouvelle version.
Vous pouvez vérifier de plusieurs façon quelles sont les versions de Ruby installées et laquelle est utilisée.
diaspora@dspr:~$ rbenv version 2.4.3 (set by /home/diaspora/.rbenv/version) diaspora@dspr:~$ rbenv versions * 2.4.3 (set by /home/diaspora/.rbenv/version) diaspora@dspr:~$ ruby -v ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-linux]
Ensuite on se refait un peu l’installation.
Mettez à jour le code source :
su - diaspora cd diaspora git pull
Mettez à jour les gems :
gem install bundler bin/bundle --full-index
Migrez la BDD et recompilez les assets :
RAILS_ENV=production bin/rake db:migrate RAILS_ENV=production bin/rake assets:precompile
Et enfin redémarrez diaspora* (en root) :
systemctl restart diaspora.target
Merci de regarder la documentation si vous faites une grosse mise à jour.
Sauvegarde
Super facile ! Faites un dump de votre base de données :
sudo -u postgres pg_dump diaspora_production > diaspora.sql
Et sauvegardez votre dossier /home/diaspora/diaspora
. Techniquement, juste le dossier public/uploads
et config
suffisent, le reste on peut le réinstaller.
Rendez tout ça automatique et sur un différent serveur, et le tour est joué !
Enjoy !
C’est bon, vous pouvez interagir avec le fediverse !
Dernière modification le 5 décembre 2020.
Bonjour,
je pige pas le password de l’utilisateur diaspora c’est quoi? impossible dinstaller quoi que se soit erreur d’authentification
qq1 peux m’aider?
Bonjour et merci pour cet article qui m’a permis de me faire mon pod sans trop d’arrachage de cheveux.
Quelques commentaires (constructifs!):
– Pour la base de données, le combo « db:create db:migrate » ne marche que si on a mis un compte root de la db dans le diaspora.yml. Il faut après rechanger et mettre le compte normal qui utilise la db.
– Pour les noobs du Ruby comme moi, j’aurais aimé voire une ligne m’expliquer comment lancer une console Ruby (typiquement vers la fin pour donner les droits d’admin)
– pour les petits auto-hébergeurs, est-ce qu’il y a des options pour limiter le nombre d’inscrits (voir, les valider manuellement) et/ou mettre un quota d’utilisation disque?
Bonjour,
Merci beaucoup pour ce tuto limpide qui m’a permis d’installer mon instance. Par contre je me retrouve embêter, actuellement j’ai un flood d’inscription (jamais avec la même adresse) au vue des username je me rend bien compte que quelqu’un à poser un script kiddies pour registre tous les username possible.
Donc je voudrais pouvoir les delete de la BDD, car si un jour quelqu’un veut réenregistrer ce speudo il ne pourra pas car, il a déjà été registre par le passé. Et la fermeture d’un compte ne le supprime pas de la BDD du coup pas possible de le reprendre.
Angristan saurais tu comment dois-je m’y prendre ?
Chez peertube par exemple j’ai trouvé sur internet comment faire, ex :
sudo -u postgres psql
\c peertube_prod;
SELECT * FROM actor WHERE "preferredUsername"='user';
DELETE FROM actor WHERE "preferredUsername"='user';
J’arrive même plus a consulter la liste des mes utilisateur via le pannel admin de diaspora, le temps qu’il query la BDD nginx et en timeout. En 10 jours je suis passé de ~ 10 user a plus de 2000 actuellement …
Merci bcp pour ce tuto très clair (et les fichiers pour en faire un service systemd), et qui suit un autre chemin que le tuto officiel pour l’environnement Ruby ; j’ai bcp galéré sur ce point précis de leur tuto alors qu’avec rbenv ça passe tout seul et ça fait une installation toute propre
Juste un petit ajout pour ceux qui comme moi créeront leur table directement avec postgresql (et avec des droits encore plus restreint pour l’user diaspora) et pas via rake : il faudra enlever le
db:create
dansRAILS_ENV=production bin/rake db:create db:migrate
Bonjour,
Merci pour ce super tuto.
J’ai un problème, mon site me fait une erreur : ERR_SSL_VERSION_OR_CIPHER_MISMATCH
J’ai cherché pendant plusieurs heures sur Google mais je n’ai rien trouvé…
Quelqu’un peut m’aider ?
Merci.
Voici ma config :
upstream diaspora_server {
server unix:/home/diaspora/diaspora/tmp/diaspora.sock;
}
server {
listen 80;
listen [::]:80;
server_name diaspora.renascio.org;
return 301 https://diaspora.renascio.org$request_uri;
access_log /var/log/nginx/dspr-access80.log;
error_log /var/log/nginx/dspr-error80.log;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name diaspora.renascio.org;
if ($host = diaspora.renascio.org) {
#return 301 https://diaspora.renascio.org$request_uri;
}
access_log /var/log/nginx/dspr-access.log;
error_log /var/log/nginx/dspr-error.log;
ssl_certificate /root/.acme.sh/diaspora.renascio.org/fullchain.cer;
ssl_certificate_key /root/.acme.sh/diaspora.renascio.org/diaspora.renascio.org.key;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-SHA256;
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
resolver 80.67.169.40 80.67.169.12 valid=300s;
resolver_timeout 5s;
ssl_session_cache shared:SSL:10m;
root /home/diaspora/diaspora/public;
client_max_body_size 5M;
client_body_buffer_size 256K;
try_files $uri @diaspora;
location /assets/ {
expires max;
add_header Cache-Control public;
}
location @diaspora {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://diaspora_server;
}
}
Salut 🙂
Est-il possible de faire cohabiter mastodon et diaspora sur la même machine ? Je pense que oui vu qu’ils ont les même dépendances. As-tu testé ?
Merci pour ton travail
Oui, il faut bien penser cependant à leur réserver un utilisateur chacun 🙂
Salut ! Merci pour ce tuto très bien expliqué, encore une fois !
J’ajouterais juste une petite ligne pour la création de l’administrateur pour dire qu’il faut rentrer dans une console Rake, je n’ai pas cherché longtemps car la doc Diaspora est bien foutue, mais c’est tout ce qui manque sur ton tuto pour aller au bout de A à Z.
J’ai pu tout installer, c’est bizarre, je ne vois pas les images que tu postes dans ton POD depuis la mienne, je soupçonne un problème de headers avec Nginx.
En tout cas, merci, ça claqouille, une fois que j’aurai résolu le souci, je vais surement garder le POD et migrer mon compte Framasphère sur le mien.
@++
salut,
j’avais essayé il y a un an environ mais ça voulait pas tourner 🙁 je voudrais bien le même mais avec apache ! t’as pas ça dans tes tiroirs ?
Salut ! Si tu veux du Apache tu peux suivre le tutoriel exactement de la même façon et utiliser ceci pour ta conf Apache : https://gist.github.com/jhass/719014