Mastodon

Updated 14 Juin 2019

Installation et configuration de Mastodon

Mastodon est une plate-forme de microblogging décentralisée gratuite qui pénètre dans le réseau fédéré.

Préparation du 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:

/etc/postgresql-11/pg_hba.conf
# 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:

su postgres -c psql
psql (11.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

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 appropriée de Ruby (2.6.1 dans notre cas):

RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install2.6.1

rbenv global2.6.1

La version par défaut du gem liée au ruby_2.6.1 est incompatible avec la dernière version de bundler, mettez à jour gem:

gem update --system

Installation de 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=8.16.0 .node-8

source .node-8/bin/activate

npm install -g yarn

echo 'source ~/.node-8/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 Ruby:

bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test

Установите 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:

RAILS_ENV=production bundle exec rake mastodon:setup
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

Установите и настройте веб-сервер Nginx в качестве обратного прокси согласно руководству.

Скопируйте пример настройки Nginx для Mastodon:

cp /var/calculate/www/mastodon/live/dist/nginx.conf /etc/nginx/sites-enabled/mastodon.conf

Укажите имя сервера mastodon.example.org и пути:

/etc/nginx/sites-enabled/mastodon.conf
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:

/etc/init.d/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:

/etc/init.d/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-8/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:

/etc/init.d/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

Выполните обновление Git репозитория с исходным кодом Mastodon:

su - mastodon

cd ~/live

git fetch --tags

git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

Проверьте, что версия исходного кода проекта изменилась:

git status
HEAD отделён на v2.8.0
нечего коммитить, нет изменений в рабочем каталоге

Mettez à jour les dépendances Ruby et Node.js

Вам может потребоваться обновить Ruby и Node.js после обновления до новой версии Mastodon. В вышеупомянутых примечаниях к выпуску будет указано, нужно ли вам делать оставшуюся часть этого раздела.

Для обновления Ruby зависимостей выполните:

bundle install --deployment --without development test

Для обновления Node.js зависимостей выполните:

yarn install --pure-lockfile

Обновление схемы базы данных

Выполняйте обновление схемы базы данных при каждом обновлении до новой версии Mastodon. Это безопасно выполнять каждый раз, так как в случае отсутствия новой схемы обновление будет пропущено.

Для миграции базы данных выполните:

RAILS_ENV=production bundle exec rails db:migrate

Предварительная компиляция обновленных ресурсов

Возможно, вам придется предварительно скомпилировать обновленные ресурсы после обновления до новой версии Mastodon. В вышеупомянутых примечаниях к выпуску будет указано, нужно ли вам делать оставшуюся часть этого раздела.

Для предварительной компиляции выполните:

RAILS_ENV=production bundle exec rails assets:precompile

Attention

Прекомпилятор ресурсов (Webpacker) может занимать значительное количество ресурсов, особенно оперативной памяти. Если вы обнаружите, что на вашем сервере не хватает оперативной памяти при выполнении предварительной компиляции, вы можете остановить службы Mastodon перед запуском предварительной компиляции.

Очистка кэша

Выполните очистку кэша:

RAILS_ENV=production bin/tootctl cache clear

Дополнительные действия при обновлении

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

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