Mastodon
Updated
- Préparer un conteneur LXC
- Installation et configuration de PostgreSQL
- Installation de Mastodon
- Installation des paquets système
- Démarrer Redis
- Création d'un utilisateur système
- Installation et configuration de rbenv et rbenv-build
- Installation de Ruby
- Installation de Node.js et de Yarn
- Chargement du référentiel Git pour Mastodon
- Définir les dépendances Ruby et Node.js
- Installation et configuration de Mastodon
- Obtention d'un certificat Let's Encrypt
- Installation et configuration de Nginx
- Démarrer Mastodon
- Mettre à jour Mastodon
- Mise à jour du référentiel Git
- Mettre à jour Ruby
- Mettre à jour Node.js
- Mettez à jour les dépendances Ruby et Node.js
- Mettre à jour la structure de la base de données
- Pré-compilation des ressources mises à jour
- Suppression de cache
- [Actions supplémentaires à exécuter pendant la mise à jour] (https://github.com/tootsuite/mastodon/releases/)
- Rétablir l'environnement Ruby après la mise à jour de paquets système
- Redémarrer Mastodon
Mastodon est une plateforme de microblogging libre et distribuée, qui fonctionne sur un réseau fédéré.
Préparer un conteneur LXC
Nous vous recommandons d'installer Mastodon dans un conteneur séparé en le configurant selon les instructions.
Installation et configuration de PostgreSQL
Installez et configurez PostgreSQL selon le wiki.
Configurez l'autorisation peer uniquement pour les connexions locales:
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: #host all all 127.0.0.1/32 trust # IPv6 local connections: #host all all ::1/128 trust # Allow replication connections from localhost, by a user with the # replication privilege. #local replication all trust #host replication all 127.0.0.1/32 trust #host replication all ::1/128 trust
Créer un utilisateur mastodon avec le droit de créer une base de données:
psql (12.2) Type "help" for help. postgres=# CREATE USER mastodon CREATEDB; CREATE ROLE postgres=# \q
Installation de Mastodon
Installation des paquets système
Installez les logiciel:
emerge -a dev-db/redis dev-libs/icu dev-libs/protobuf dev-python/nodeenv dev-util/pkgconfig media-gfx/imagemagick media-video/ffmpeg net-dns/libidn
Démarrer Redis
Lancez Redis et ajoutez-le au démarrage automatique :
/etc/init.d/redis start
rc-update add redis
Création d'un utilisateur système
Créez un utilisateur système appelé mastodon:
mkdir -p /var/calculate/www
useradd -d /var/calculate/www/mastodon mastodon
Installation et configuration de rbenv et rbenv-build
Installez et configurez rbenv et rbenv-build dans le répertoire de l'utilisateur:
su mastodon
cd
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec bash
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Installation de Ruby
Installez la version requise de Ruby, 2.7.2 dans notre cas :
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install2.7.2
rbenv global2.7.2
La version par défaut de gem associée à ruby_2.7.2 n'est pas compatible avec la dernière version de bundler. Mettez donc à jour gem :
gem update --system
et installer bundler :
gem install bundler -f --no-document
Installation de Node.js et de Yarn
Installez-Node.js et Yarn dans le répertoire de l'utilisateur:
nodeenv --node=12.22.4 .node-12
ln -sfT .node-12 .node-live
source .node-live/bin/activate
npm install -g yarn
echo 'source ~/.node-live/bin/activate' >> ~/.bashrc
Chargement du référentiel Git pour Mastodon
Installez le code source sur le serveur:
git clone https://github.com/tootsuite/mastodon.git live
cd live
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
Définir les dépendances Ruby et Node.js
Installez les dépendances de Ruby :
bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test
Installer les dépendances Node.js :
yarn install --pure-lockfile
Installation et configuration de Mastodon
Générer la configuration de mastodon.example.org en exécutant la commande:
Your instance is identified by its domain name. Changing it afterward will break things. Domain name: mastodon.example.org Single user mode disables registrations and redirects the landing page to your public profile. Do you want to enable single user mode? No Are you using Docker to run Mastodon? no PostgreSQL host: /var/run/postgresql PostgreSQL port: 5432 Name of PostgreSQL database: mastodon_production Name of PostgreSQL user: mastodon Password of PostgreSQL user: Database configuration works! 🎆 Redis host: localhost Redis port: 6379 Redis password: Redis configuration works! 🎆 Do you want to store uploaded files on the cloud? No Do you want to send e-mails from localhost? No SMTP server: mail.example.org SMTP port: 465 SMTP username: SMTP password: SMTP authentication: starttls SMTP OpenSSL verify mode: none E-mail address to send e-mails "from": Mastodon Send a test e-mail with this configuration right now? Yes Send test e-mail to: admin@example.org This configuration will be written to .env.production Save configuration? Yes Now that configuration is saved, the database schema must be loaded. If the database already exists, this will erase its contents. Prepare the database now? Yes Running `RAILS_ENV=production rails db:setup` ... Created database 'mastodon_production' ... Done! The final step is compiling CSS/JS assets. This may take a while and consume a lot of RAM. Compile the assets now? Yes Running `RAILS_ENV=production rails assets:precompile` ... yarn install v1.15.2 ... Done! All done! You can now power on the Mastodon server 🐘 Do you want to create an admin user straight away? Yes Username: admin E-mail: admin@example.org You can login with the password: e3b316f78cbc2ec0bde5118c68414d73 You can change your password once you login.
Terminez la session utilisateur:
exit
Obtention d'un certificat Let's Encrypt
Obtenez un certificat de domaine mastodon.example.org pour Nginx selon le manuel.
Installation et configuration de Nginx
Installez et configurez votre serveur web Nginx en tant que mandataire inverse (reverse proxy) conformément au manuel.
Copiez l'exemple de configuration Nginx pour Mastodon :
cp /var/calculate/www/mastodon/live/dist/nginx.conf /etc/nginx/sites-enabled/mastodon.conf
Indiquez les chemins d'accès et le nom du serveur, mastodon.example.org :
server { listen 80; listen [::]:80; server_name mastodon.example.org; root /var/calculate/www/mastodon/live/public; location /.well-known/acme-challenge/ { allow all; } location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name mastodon.example.org; # Uncomment these lines once you acquire a certificate: ssl_certificate /etc/letsencrypt/live/mastodon.example.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mastodon.example.org/privkey.pem; ... root /var/calculate/www/mastodon/live/public; ... }
Démarrer Mastodon
Créez des scripts OpenRC pour la gestion des services:
Script de démarrage Mastodon Web:
#!/sbin/openrc-run name="Mastodon Web daemon" description="" pidfile=/run/mastodon-web.pid extra_commands="reload" command_user=mastodon output_log=/var/log/mastodon-web.log error_log=/var/log/mastodon-web.log directory=/var/calculate/www/mastodon/live start_stop_daemon_args="-e RAILS_ENV=production -e PORT=3000" command=/var/calculate/www/mastodon/.rbenv/shims/bundle command_args="exec puma -C config/puma.rb" command_background=true depend() { use postgresql net redis } start_pre() { checkpath -f -o mastodon -m 0600 /var/log/mastodon-web.log } reload() { einfo "Reload $name" kill -USR1 $(cat $pidfile) }
Voici un script pour démarrer Mastodon Streaming:
#!/sbin/openrc-run name="Mastodon streaming daemon" description="" pidfile=/run/mastodon-streaming.pid command_user=mastodon output_log=/var/log/mastodon-streaming.log error_log=/var/log/mastodon-streaming.log directory=/var/calculate/www/mastodon/live start_stop_daemon_args="-e NODE_ENV=production -e PORT=4000 -e STREAMING_CLUSTER_NUM=1" command=/var/calculate/www/mastodon/.node-live/bin/node command_args="./streaming" command_background=true depend() { use postgresql net redis } start_pre() { checkpath -f -o mastodon -m 0600 /var/log/mastodon-streaming.log }
et celui pour démarrer Mastodon Sidekiq:
#!/sbin/openrc-run name="Mastodon Sidekiq daemon" description="" pidfile=/run/mastodon-sidekiq.pid command_user=mastodon output_log=/var/log/mastodon-sidekiq.log error_log=/var/log/mastodon-sidekiq.log directory=/var/calculate/www/mastodon/live start_stop_daemon_args="-e RAILS_ENV=production -e DB_POOL=25 -e MALLOC_ARENA_MAX=2" command=/var/calculate/www/mastodon/.rbenv/shims/bundle command_args="exec sidekiq -c 25" command_background=true depend() { use postgresql net redis } start_pre() { checkpath -f -o mastodon -m 0600 /var/log/mastodon-sidekiq.log }
Définissez les permissions pour exécuter les services Mastodon:
chmod 0755 /etc/init.d/mastodon-*
Lancez les services de Mastodon:
/etc/init.d/mastodon-web start
/etc/init.d/mastodon-streaming start
/etc/init.d/mastodon-sidekiq start
Ajoutez-les au démarrage automatique :
rc-update add mastodon-web
rc-update add mastodon-streaming
rc-update add mastodon-sidekiq
Mettre à jour Mastodon
Mise à jour du référentiel Git
Mettez à jour le dépôt Git, où est stocké le code source de Mastodon :
su - mastodon
cd ~/live
git fetch --tags
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
Assurez-vous que la version du code source a changé :
HEAD detached at v2.8.0
nothing to commit, no changes detected
Mettre à jour Ruby
À ce jour, Mastodon utilise Ruby 2.7.2. Si vous avez une version inférieure de Ruby, veuillez la mettre à jour.
Connectez-vous à la session utilisateur :
su - mastodon
Mettez à jour l'environnement de contrôle pour Ruby :
cd ~/.rbenv && git pull
cd ~/.rbenv/plugins/ruby-build && git pull
cd
Installez la version requise de Ruby, 2.7.2 dans notre cas :
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install2.7.2
rbenv global2.7.2
La version par défaut de gem associée à ruby_2.7.2 n'est pas compatible avec la dernière version de bundler. Mettez donc à jour gem :
gem update --system
et installer bundler :
gem install bundler -f --no-document
Rendez-vous dans le répertoire Mastodon pour vérifier que l'application utilise la version 2.6.6 :
cd ~/live && cat .ruby-version
2.7.2
Pour mettre à jour les dépendances de Ruby, exécutez :
bundle install --deployment --without development test
Terminez la session utilisateur:
exit
Mettre à jour Node.js
Si vous mettez à jour une version de Mastodon inférieure à 3.4, veillez utiliser Node.js 12 minimum :
v12.22.4
Pour une version antérieure à 12, installez la 12.22.4 dans le nouvel environnement .node-12 et indiquez-la comme version actuelle :
nodeenv --node=12.22.4 .node-12
ln -sfT .node-12 .node-live
Si vous avez utilisé la version précédente de ce manuel pour configurer Mastodon, modifiez les scripts /var/calculate/www/mastodon et /etc/init.d/mastodon-streaming en remplaçant .node-8 par .node-live.
Mettez à jour les dépendances Ruby et Node.js
Il se peut que vous deviez mettre à jour Ruby et Node.js après être passé à une nouvelle version de Mastodon. Les notes de mise à jour mentionnées ci-dessus vous indiqueront si vous devez procéder jusqu'à la fin de ce chapitre.
Pour mettre à jour les dépendances de Ruby, exécutez :
bundle install --deployment --without development test
Pour mettre à jour les dépendances de Node.js, exécutez :
yarn install --pure-lockfile
Mettre à jour la structure de la base de données
Renouvelez la structure de la base de données à chaque mise à jour, jusqu'à ce que la nouvelle version de Mastodon soit disponible. Cette opération est sûre, puisque la mise à jour sera de toute façon ignorée si la structure ne change pas.
Pour effectuer la migration de la base de données, exécutez :
RAILS_ENV=production bundle exec rails db:migrate
Pré-compilation des ressources mises à jour
Il se peut que vous deviez précompiler les ressources mises à jour après avoir mis à niveau Mastodon. Les notes de mise à jour mentionnées ci-dessus vous indiqueront si vous devez procéder jusqu'à la fin de ce chapitre.
Pour pré-compiler :
RAILS_ENV=production bundle exec rails assets:precompile
Attention
Le précompilateur (Webpacker) peut être gourmand, en particulier en mémoire vive. Si vous constatez que votre serveur n'a pas assez de mémoire vive au moment de la précompilation, vous pouvez arrêter les services Mastodon avant de procéder à la précompilation.
Suppression de cache
Videz le cache :
RAILS_ENV=production bin/tootctl cache clear
[Actions supplémentaires à exécuter pendant la mise à jour] (https://github.com/tootsuite/mastodon/releases/)
Les notes de version peuvent contenir des instructions spéciales avec la marque Non-docker dont vous pourriez avoir besoin lors de la mise à niveau pour toute nouvelle version de Mastodon.
Terminez la session utilisateur:
exit
Rétablir l'environnement Ruby après la mise à jour de paquets système
Connectez-vous à la session utilisateur :
su - mastodon
cd ~/live
Réinstallez les paquets relevant de l'environnement Ruby :
bundle pristine
bundle install --deployment --without development test
Terminez la session utilisateur:
exit
Redémarrer Mastodon
Mastodon fonctionne en mémoire, vous devrez donc le redémarrer pour que l'une des mises à jour précédentes prenne effet. Pour redémarrer, exécutez:
/etc/init.d/mastodon-web restart
/etc/init.d/mastodon-streaming restart
/etc/init.d/mastodon-sidekiq restart