Papoter sur Diaspora
Diaspora est un service de réseau social décentralisé.
Cet article va vous décrire l'installation d'un serveur Diaspora, dans une jail.
Vous devez vous préparer à fournir les ports suivants:
- un serveur web, ici nginx;
- un mécanisme pour fournir des clefs pour https, ici py-certbot-nginx;
- Ainsi qu'un serveur de base de données PostgreSQL, installée dans une jail en 192.168.0.10, pour cet exemple.
La jail
Préparez une jail nommée diaspora
, dans le répertoire /jails/diaspora
avec les paramètres suivants:
- /etc/jail.conf
diaspora { ip4.addr = "lo1|192.168.0.13"; # IP address of the jail mount.devfs; # /dev/random pour SSL path ="/jails/diaspora"; # Path to the jail exec.start = "/bin/sh /etc/rc"; # Start command exec.stop = "/bin/sh /etc/rc.shutdown"; # Stop command depend=pg; # depend on postgresql jail }
Adaptez la configuration de la jail diapora
:
- diaspora/etc/rc.conf.local
hostname="diaspora.lapinbilly.eu"
On assure le démarrage au reboot:
sysrc jail_enable="YES" sysrc jail_list+="diaspora"
La base de données
Préparez votre base de donnée pour Diaspora.
Dans cet exemple, le serveur est confiné dans une jail nommée pg
.
Créer un utilisateur, diaspora, qui a le droits de créer des bases:
root@pg:/ # su - postgres $ createuser -P -d diaspora Enter password for new role: Enter it again:
Restreindre l'accès au serveur de base de données à cet utilisateur, pour les demandes venant de la jail diaspora
en 192.168.0.13.
- /jails/pg/var/db/postgres/data11/pg_hba.conf
host all diaspora 192.168.0.13/32 password
Le serveur web
Créez une entrée DNS, ici diaspora.lapinbilly.eu
, pour votre serveur et rediriger le tout vers la jail diaspora
.
Obtenez un certificat SSL.
certbot certonly --nginx -d diaspora.lapinbilly.eu
Rediriger les requêtes vers votre jail, pour cela, on va définir un fichier dédié pour nginx:
- /usr/local/etc/nginx/diaspora.conf
server { root /jails/diaspora/usr/home/diaspora/diaspora/public/; # Configure maximum picture size # Note that Diaspora has a client side check set at 4M client_max_body_size 5M; client_body_buffer_size 256K; ssl_certificate /usr/local/etc/letsencrypt/live/diaspora.lapinbilly.eu/fullchain.pem; ssl_certificate_key /usr/local/etc/letsencrypt/live/diaspora.lapinbilly.eu/privkey.pem; # Proxy if requested file not found try_files $uri @diaspora; location /assets/ { expires max; add_header Cache-Control public; } # Camo support #location /camo/ { # proxy_redirect off; # proxy_pass http://camo/; # break; #} 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; } } upstream diaspora_server { server unix:/jails/diaspora/usr/home/diaspora/diaspora/tmp/diaspora.sock; }
Et l'utiliser dans nos serveurs nginx:
- /usr/local/etc/nginx/nginx.conf
server { listen 443 ssl http2 ; listen [::]:443 ssl http2 ; server_name diaspora.lapinbilly.eu; include diaspora.conf; }
Installer
Installez les ports suivants dans la jail diaspora
:
root@popeye:# pkg -j diaspora install graphics/ImageMagick7@nox11 databases/redis62 ftp/curl devel/git shells/bash databases/postgresql15-client www/node www/yarn ports-mgmt/pkg root@popeye:# sysrc -j diaspora redis_enable="YES"
Attention à préciser la version de Image Magick à utiliser dans votre Make.conf
ou dans vos poudrieres.
DEFAULT_VERSIONS+= imagemagick=7-nox11
Ajoutez un utilisateur diaspora
:
root@diaspora:# pw useradd diaspora -c "Diaspora user" -G wheel -s /usr/local/bin/bash -m root@diaspora:# echo "export RAILS_ENV=production" >> ~diaspora/.bash_profile root@diaspora:# echo "export DB=postgresql" >> ~diaspora/.bash_profile root@diaspora:# su - diaspora
Les deux dernières vont vous éviter bien des ennuis, elles précisent deux paramètres de base utilisé par tous les scripts:
- l'environnement du serveur, ici production par opposition à développement;
- la base de donnée utilisée.
sh/bash
. Utilisez celles qui conviennent à votre shell.
La plupart des scripts et configuration que l'on va utiliser ne sont pas compatible avec csh, c'est pourquoi l'utilisateur est associé à un shell bash.
RVM
Diaspora* est resté sur des versions EOL de ruby. Du coup, il faut mieux installer la bonne version du langage à l'aide du Ruby Version Manager
.
Cela installe une version du langage dans votre home.
Le hic, c'est qu'il va falloir le compiler.
root@popeye:# pkg -j diaspora install autotools libtool bison sqlite3 gdbm libyaml
De plus, l'installer est un script bash.
Sous votre session utilisateur:
curl -sSL https://get.rvm.io -o installer.sh bash installer.sh stable echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> .bash_profile . ~/.rvm/scripts/rvm rvm autolibs read-fail rvm install 2.7
Serveur
Construisez le serveur:
root@popeye:# jail -c diaspora root@popeye:# service -j diaspora service redis start root@popeye:# jexec disapora
Et allons-y pour l'installation du produit proprement dit, à partir des sources:
diaspora@diaspora:~ % git clone -b master https://github.com/diaspora/diaspora.git diaspora@diaspora:~ % cd diaspora/ diaspora@diaspora:~/diaspora % cp config/diaspora.toml.example config/diaspora.toml diaspora@diaspora:~/diaspora % cp config/database.yml.example config/database.yml diaspora@diaspora:~/diaspora % gem install bundler:2.3.18 diaspora@diaspora:~/diaspora % script/configure_bundler diaspora@diaspora:~/diaspora % bin/bundle install --full-index diaspora@diaspora:~/diaspora % bundle exec rake db:create db:migrate diaspora@diaspora:~/diaspora % bin/rake assets:precompile
La dernière commande utilise le gestionnaire de paquets Yarn pour Javascript. Ce soft a quelques défaut et demande de désactiver la protection suivante, durant la procédure:
sysctl kern.elf64.allow_wx=1
Configurer
Adaptez le serveur à la jail et au serveur de base de données, c'est à dire permettre au serveur diaspora d'écouter les requêtes venant de l'hôte et lui indiquer le chemin vers le serveur PostgreSQL.
Deux fichiers de configuration sont importants à copier depuis les exemples du répertoire config
:
database.yml
, pour définir les accès à la base de donnée ;diapora.toml
, pour tout le reste.
Dirigez la connexion vers votre base de données:
- config/database.yml
--- config/database.yml.example 2020-05-02 21:28:46.158354000 +0200 +++ config/database.yml 2020-05-02 21:34:04.844275000 +0200 @@ -1,9 +1,9 @@ postgresql: &postgresql adapter: postgresql - host: "localhost" + host: "192.168.0.10" port: 5432 - username: "postgres" - password: "" + username: "diaspora" + password: "pwd" encoding: unicode mysql: &mysql
Dans le fichier diaspora
, effectuez les réglages suivants:
- Adresser les certificats
- Réglez le serveur d'envoi de mail, ici le
sendmail
de la base. - Donnez un nom de serveur .
- config/diaspora.toml
--- config/diaspora.toml.example 2023-05-18 11:09:58.604809000 +0000 +++ config/diaspora.toml 2023-05-18 11:28:29.378523000 +0000 @@ -30,7 +30,7 @@ ## However changing http to https is okay and has no consequences. ## If you do change the URL, you will have to start again as the URL ## will be hardcoded into the database. -#url = "https://example.org/" +url = "https://diaspora2.lapinbilly.eu/" ## Set the bundle of certificate authorities (CA) certificates. ## This is specific to your operating system. @@ -39,6 +39,7 @@ #certificate_authorities = "/etc/ssl/certs/ca-certificates.crt" ## For CentOS, Fedora: #certificate_authorities = "/etc/pki/tls/certs/ca-bundle.crt" +certificate_authorities = '/usr/local/share/certs/ca-root-nss.crt' ## URL for a remote Redis (default="localhost"). ## Don't forget to restrict IP access if you uncomment these! @@ -221,11 +222,11 @@ [configuration.privacy.statistics] ## Local user total and 6 month active counts. -#user_counts = true +user_counts = true ## Local post total count. -#post_counts = true +comment_counts = true ## Use Camo to proxy embedded remote images. ## Do not enable this setting unless you have a working Camo setup. Using @@ -458,9 +460,9 @@ ## email will be sent to the user and after an additional `warn_days`, the ## account will be automatically closed. ## This maintenance is not enabled by default. -#remove_old_users.enable = true -#remove_old_users.after_days = 730 -#remove_old_users.warn_days = 30 +remove_old_users.enable = true +remove_old_users.after_days = 180 +remove_old_users.warn_days = 0 #remove_old_users.limit_removals_to_per_day = 100 ## Limit queuing for removal per day. @@ -517,17 +519,21 @@ [configuration.mail] ## First you need to enable it. -#enable = true +enable = true ## Sender address used in mail sent by Diaspora. #sender_address = "no-reply@example.org" +sender_address = 'no-reply@lapinbilly.eu' ## This selects which mailer should be used. Use "smtp" for a smtp ## connection or "sendmail" to use the sendmail binary. #method = "smtp" +method = 'sendmail' ## Ignored if method isn't "smtp". [configuration.mail.smtp] +host = 'mail.out.net' +port = 465 ## Host and port of the smtp server handling outgoing mail. ## This should match the common name of the certificate sent by @@ -539,6 +545,7 @@ ## Use one of "plain", "login" or "cram_md5". Use "none" ## if server does not support authentication. #authentication = "plain" +authentication = 'login' ## Credentials to log in to the SMTP server. ## May be necessary if authentication is not "none". @@ -547,7 +554,7 @@ ## Automatically enable TLS (default=true). ## Leave this commented out if authentication is set to "none". -#starttls_auto = true +starttls_auto = false ## The domain for the HELO command, if needed. #domain = "smtp.example.org" @@ -561,7 +568,7 @@ [configuration.mail.sendmail] ## The path to the sendmail binary (default="/usr/sbin/sendmail") -#location = "/usr/sbin/sendmail" +location = "/usr/sbin/sendmail" ## Use exim and sendmail (default=false) #exim_fix = false @@ -573,9 +580,10 @@ ## This doesn't make the user an admin but is used when a generic ## admin contact is needed, much like the postmaster role in mail ## systems. Set only the username, NOT the full ID. -#account = "podmin" +account = "podmin" ## E-mail address via which the administrator can be contacted. +podmin_email = 'david@lapinbilly.eu' #podmin_email = "podmin@example.org" ## Advanced - ignore unless you know better
Journaux
Pour éviter de surcharger vos disques de logs, configurez newsyslog(8)
- /etc/newsyslog.conf.d/diaspora.conf
/usr/home/diaspora/diaspora/log/eye_process*.log 640 7 1000 * NJ
Et, si vous utilisez redis
:
- /etc/newsyslog.conf.d/redis.conf
/var/log/redis/*.log 600 7 1000 * J /var/run/redis/redis.pid
Démarrer
Lancez simplement:
diaspora@diaspora:~/diaspora % ./script/server
Redémarrez votre serveur web avec la nouvelle configuration:
root@popeye:# service nginx restart
Connectez vous sur le site et ajoutez un utilisateur. Déclarez le ensuite comme un administrateur à l'aide de son adresse mail.
root@popeye:# jexec diaspora root@diaspora:# su - diaspora diaspora@diaspora:~ cd diaspora diaspora@diaspora:~ bundle exec rails console Role.add_admin User.where(email: "the_email").first.person
Production
En mode production, une fois l'outil installé, retirez l'utilisateur diaspora du groupe wheel.
N'oubliez pas de désactiver l'option de mmaping, requise par yarn:
sysctl kern.elf64.allow_wx=0
Mettre à jour
Pour évitez une interruption du service trop longue, préparez la mise à jour dans une autre jail. Cloner votre jail courante et mettez à jour tout le système.
Suivez les instructions, sans tenir compte des variables d'environnement RAILS_ENV
qui sont déjà activées dans ce système.
Lancez les opérations jusqu'à la migration de la base de données.
Coupez le service de la jail de production et dupliquez la base de donnée du serveur SQL:
CREATE DATABASE diaspora_prodold WITH TEMPLATE diaspora_production OWNER diaspora;
Modifiez le nom base de données de production du fichier config/database.yml
en diaspora_prodold
et relancez le service.
Dans la nouvelle jail, terminez la mise à jour. Si tout s'est bien passé, routez la configuration nginx vers la nouvelle jail.
Stoppez l'ancien service, démarrez le nouveau et relancer le serveur web.
poudriere
Voici un exemple de liste de paquets à installer pour une poudrière:
databases/gdbm databases/postgresql15-client databases/redis62 databases/sqlite3 devel/autotools devel/bison devel/git devel/libtool devel/libunwind ftp/curl graphics/ImageMagick7@nox11 mail/ssmtp ports-mgmt/pkg security/sudo shells/bash textproc/libxslt textproc/libyaml www/node www/yarn