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 { http2 on; listen 443 ssl; listen [::]:443 ssl; 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/redis ftp/curl devel/git shells/bash databases/postgresql15-client www/node www/yarn ports-mgmt/pkg
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.
redis
Diaspora* exige de se connecter à un serveur redis comme gestionnaire de cache. Vous pouvez l'installer en local:
root@popeye:# sysrc -j diaspora redis_enable="YES"
Configurez redis pour écouter sur l'adresse de la jail avec une authentification par mot de passe:
bind 192.168.0.13 requirepass secret
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 head echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> .bash_profile . ~/.rvm/scripts/rvm rvm autolibs read-fail rvm install 3.3
Une fois rvm installé, vous pouvez le mettre à jour et installer d'autres versions de ruby:
rvm get head rvm list known rvm install ruby-3.3
Et définir votre version de travail
rvm use 3.1 --default
Serveur
IP v6
A partir de point il est préférable de désactiver l'ipv6 de la jail, suite à un bug dans la résolution de nom des outils de type bundle
.
Commentez les adresses ipv6 de jail.conf
et ajoutez ip6=disable;
à la place.
De même, pour éviter toute ambiguïté, interdisez le aussi dans le rc.conf
de la jail:
inet6_enable="NO" ip6addrctl_enable="NO"
Vous pourrez le réactiver plus tard.
Installer
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.26 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
--- diaspora.toml.example 2024-09-29 10:22:36.955901000 +0200 +++ diaspora.toml 2024-09-29 09:42:19.846240000 +0200 @@ -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://diaspora.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! @@ -138,10 +139,10 @@ [configuration.environment.logging] ## Roll the application log on a daily basis (default=true). -#logrotate.enable = true +logrotate.enable = true ## The number of days to keep (default=7) -#logrotate.days = 7 +logrotate.days = 7 ## Enables the debug-logging for SQL (default=false) ## This logs every SQL-statement! @@ -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 +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 @@ -269,7 +270,7 @@ ## Set this to false to prevent people from signing up to your pod ## without an invitation. Note that this needs to be set to true ## (or commented out) to enable the first registration (you). -#enable_registrations = true +enable_registrations = true ## Show local posts stream (default="disabled") ## If any other setting than disabled local public posts @@ -278,6 +279,7 @@ ## Setting this to moderators shows the local posts stream only to users with the moderator or admin role. ## Setting this to everyone shows the local posts stream to all users. # enable_local_posts_stream= "disabled"|"admins"|"moderators"|"everyone" +enable_local_posts_stream= "moderators" ## Auto-follow on sign-up (default=true) ## Users will automatically follow a specified account on creation. @@ -289,11 +291,12 @@ ## The diaspora* HQ account keeps users up to date with news about Diaspora. ## If you set another auto-follow account (for example your podmin account), ## please consider resharing diaspora* HQ's posts for your pod's users! -#autofollow_on_join_user = "hq@pod.diaspora.software" +autofollow_on_join_user = "lapinbilly@diaspora.lapinbilly.eu" ## Liberapay.com is a free platform which allow donations like patreon ## Set your username to include your Liberapay button #liberapay_username = "change_me" +liberapay_username = "David_Marec" ## Bitcoin donations ## You can provide a bitcoin address here to allow your users to provide @@ -399,24 +402,24 @@ ## Enable captcha (default=true) ## Set this to false if you don't want to use captcha for signup process. -#enable = true +enable = true ## Captcha image size (default="120x20") -#image_size = "120x20" +image_size = "120x20" ## Length of captcha text (default=5)(max=12) -#captcha_length = 5 +captcha_length = 5 ## Captcha image style (default="simply_green") ## Available options for captcha image styles are: "simply_blue", ## "simply_red" "simply_green", "charcoal_grey", "embossed_silver", ## "all_black", "distorted_black", "almost_invisible", "random". -#image_style = "simply_green" +image_style = "embossed_silver" ## Captcha image distortion (default="low") ## Sets the level of image distortion used in the captcha. ## Available options are: "low", "medium", "high", "random". -#distortion = "low" +distortion = "high" ## Terms of Service ## Show a default or customized terms of service for users. @@ -458,9 +461,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 = 120 #remove_old_users.limit_removals_to_per_day = 100 ## Limit queuing for removal per day. @@ -517,17 +520,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 = 'diaspora.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 = '192.168.0.1' +port = 25 ## Host and port of the smtp server handling outgoing mail. ## This should match the common name of the certificate sent by @@ -539,6 +546,7 @@ ## Use one of "plain", "login" or "cram_md5". Use "none" ## if server does not support authentication. #authentication = "plain" +authentication = 'none' ## Credentials to log in to the SMTP server. ## May be necessary if authentication is not "none". @@ -547,10 +555,10 @@ ## 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" +domain = "diaspora.lapinbilly.eu" ## OpenSSL verify mode used when connecting to a SMTP server with TLS (default="peer"). ## Set this to "none" if and only if you have a self-signed certificate. @@ -561,7 +569,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 +581,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 = "lapinbilly" ## 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 @@ -587,9 +596,10 @@ [production] #environment.redis = "redis://production.example.org:6379" +environment.redis = "redis://redis:secret@192.168.0.13:6379" [production.mail.sendmail] -#location = "/usr/local/bin/sendmail" +location = "/usr/sbin/sendmail" [development] #environment.redis = "redis://dev.example.org:6379"
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