====== Papoter sur Diaspora ======
[[https://diasporafoundation.org/|Diaspora]] est un service de réseau social décentralisé.
Cet article va vous décrire l'installation d'un [[https://diaspora.lapinbilly.eu/stream|serveur Diaspora]], dans une [[jails:zfs|jail]].
Vous devez vous préparer à fournir les [[https://www.freebsd.org/doc/handbook/ports.html|ports]] suivants:
- un serveur web, ici [[ports:nginx|nginx]];
- un mécanisme pour fournir des clefs pour https, ici [[https://www.freshports.org/security/py-certbot-nginx|py-certbot-nginx]];
- Ainsi qu'un serveur de base de données [[https://www.postgresql.org/|PostgreSQL]], installée dans une [[ports:db:postgresql|jail]] en , pour cet exemple.
===== La jail =====
Préparez une [[jails:zfs|jail]] nommée ''diaspora'', dans le répertoire ''/jails/diaspora'' avec les paramètres suivants:
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'':
hostname="diaspora.lapinbilly.eu"
Un serveur diaspora va vouloir [[https://diablotins.lapinbilly.eu/doku.php?id=jails:zfs#mail|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"
===== 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, , 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 .
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//:
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 [[:ports:nginx#serveur|serveurs nginx]]:
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 [[::ports:poudriere|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//.
==== redis ====
//Diaspora*// exige de se connecter à un serveur [[:ports:redis|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.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 .
--- 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)
/usr/home/diaspora/diaspora/log/eye_process*.log 640 7 1000 * NJ
Et, si vous utilisez ''redis'':
/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 [[https://wiki.fug-fr.org/doku.php?id=jails:zfs#multiplier |jail]].
Cloner votre //jail// courante et mettez à jour tout le système.
Suivez les [[https://wiki.diasporafoundation.org/Updating#Updating_a_production_install_to_a_new_minor_version|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 [[ports:db:postgresql#tests|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 [[ports: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 [[:ports:poudriere|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