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