====== 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 { 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 [[::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//. ==== 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.1 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.1 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 . --- 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) /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