ports:web:diaspora

Ceci est une ancienne révision du document !


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
matrix {
	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:

matrix/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:

root@popeye:# sysrc jail_enable="YES"
root@popeye:# 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.

root@popeye:/jails# 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;
    }

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.
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* 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

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

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

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.Les appels à gem doivent se faire sous root.

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.1684442574.txt.gz
  • Dernière modification : 2023/05/18 20:42
  • de david