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 nodejsPostgreSQL
Diaspora* supporte MySQL, MariaDB et PostgreSQL. On va utiliser ce dernier.
On l'installe :
apt-get install postgresql-serverEnsuite on se connecte à PostgreSQL avec l'utilisateur postgres :
sudo -u postgres psqlOn 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 diasporaPour se connecter :
su - diasporaInstallation 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-devReconnectez 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_profileOn reconnecte pour recharger le PATH:
exit
su - diasporaOn installe le plugin ruby-build pour rbenv afin de compiler Ruby :
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-buildEnfin, on installe Ruby :
rbenv install 2.4.3
rbenv global 2.4.3Le 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-configTé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 diasporaConfigurer diaspora*
Copiez les fichiers d'exemple :
cp config/database.yml.example config/database.yml
cp config/diaspora.yml.example config/diaspora.ymlIls 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: allLa 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_bundlerSi 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-indexInstallation de la base de données
Cette commande rake va créer et configurer la BDD :
RAILS_ENV=production bin/rake db:create db:migratePré-compiler les assets
Cette commande rake va pré-compiler les assets :
RAILS_ENV=production bin/rake assets:precompileServices 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.targetActivez les services au boot :
systemctl enable diaspora.target diaspora-sidekiq.service diaspora-web.serviceRedémarrez les services :
systemctl restart diaspora.targetVérifiez si ils tournent correctement :
systemctl status diaspora-web.service
systemctl status diaspora-sidekiq.serviceReverse 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.ioInstallez Nginx:
apt install nginxVoici 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.personVous avez maintenant accès au dashboard admin : https://diaspora/admins/dashboardSidekiq, 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-upgradeSi 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 pullMettez à jour les gems :
gem install bundler
bin/bundle --full-indexMigrez la BDD et recompilez les assets :
RAILS_ENV=production bin/rake db:migrate
RAILS_ENV=production bin/rake assets:precompileEt enfin redémarrez diaspora* (en root) :
systemctl restart diaspora.targetMerci 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.sqlEt 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 !




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