Installer un pod diaspora* sous Debian et Ubuntu - Angristan
Installer un pod diaspora* sous Debian et Ubuntu

Installer un pod diaspora* sous Debian et Ubuntu

Ce billet a été écrit il y a longtemps. Il peut contenir des informations erronées.

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.
S’abonner
Notification pour
guest

10 Commentaires
Le plus récent
Le plus ancien Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
pedro

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?

Aquarius

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?

NOT-FOUND

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 …

theenglishway

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 dans RAILS_ENV=production bin/rake db:create db:migrate

Maca

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;
}
}

Draconis

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

Sangfroid

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.
@++

jaja

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 ?