ports:web:diaspora

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:

  1. un serveur web, ici nginx;
  2. un mécanisme pour fournir des clefs pour https, ici py-certbot-nginx;
  3. Ainsi qu'un serveur de base de données PostgreSQL, installée dans une jail en 192.168.0.10, pour cet exemple.

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"
Un serveur diaspora va vouloir envoyer des mails. Un hostname(1) en FQDN est obligatoire.

On assure le démarrage au reboot:

sysrc jail_enable="YES"
sysrc jail_list+="diaspora"

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

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

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.
Attention, ceux sont des instructions pour un shell 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.

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

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

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

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:

  1. database.yml, pour définir les accès à la base de donnée ;
  2. 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:

  1. Adresser les certificats
  2. Réglez le serveur d'envoi de mail, ici le sendmail de la base.
  3. 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

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

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

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.

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
  • ports/web/diaspora.txt
  • Dernière modification : 2024/09/29 09:03
  • de david