--- categories: web title: Howto Mastodon ... * Documentation : [Mastodon](https://github.com/tootsuite/mastodon) est un réseau social libre et décentralisé. Mastodon ressemble sous certains aspects au logiciel propriétaire *Twitter*. # Installation Nous installons la version **1.4.1** sous **Debian 8** (Jessie). Mastodon s'appuie sur Ruby, NodeJS, Yarn, Nginx, Redis et PostgreSQL. ## Dépendances Mastodon nécessite des versions très récentes de Ruby et NodeJS. Ruby sera mis en place via rbenv. Pour NodeJS, il faut l'installer [ainsi](https://wiki.evolix.org/HowtoNodeJS). Il faut aussi installer [Yarn](https://wiki.evolix.org/HowtoYarn). On peut ainsi installer toutes les dépendances pour Mastodon : ~~~ # apt install nodejs yarn imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git curl g++ libprotobuf-dev protobuf-compiler pkg-config build-essential libreadline-dev ~~~ > **Note** : Vous devez avoir les backports `jessie-backports` pour installer ffmpeg. ## Compte UNIX Créer un compte UNIX *mastodon* : ~~~ # adduser --disabled-login --gecos 'Mastodon App' mastodon ~~~ > **Note** : Assurez-vous d'avoir `DIR_MODE=0750` dans `/etc/adduser.conf` pour créer le home en 750. ## PostgreSQL Mastodon utilise [PostgreSQL](HowtoPostgreSQL). On utilise donc la version 9.4 de Debian Jessie : ~~~ # apt install postgresql postgresql-client libpq-dev postgresql-contrib ~~~ Création de l'utilisateur PostgreSQL : ~~~ # sudo -u postgres createuser mastodon -d -P -R ~~~ > **Note** : On donne les droits CREATEDB car Mastodon doit faire un DROP DATABASE puis CREATE DATABASE lors de l'installation… > **Note** : Pensez à conserver le mot de passe pour le mettre par la suite (ou pas si utilisation d'authenitifcation *ident*). ## Redis Installation classique : ~~~ # apt install redis-server ~~~ ## Mastodon ### Installation ~~~ # sudo -iu mastodon $ git clone https://github.com/rbenv/rbenv.git ~/.rbenv $ cd ~/.rbenv && src/configure && make -C src $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile $ echo 'export RAILS_ENV="production"' >> ~/.bash_profile $ source ~/.bash_profile $ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build $ cd $ TMPDIR=~/tmp MAKE_OPTS=-j$(nproc) rbenv install 2.4.1 $ git clone https://github.com/tootsuite/mastodon.git $ cd mastodon $ git checkout v1.4.1 $ gem install bundler $ bundle install --deployment --without development test $ yarn install --pure-lockfile $ cp .env.production.sample .env.production $ bundle exec rake secret ~~~ ### Configuration Éditer `.env.production` à votre convenance, voici un exemple : ~~~ REDIS_HOST=127.0.0.1 REDIS_PORT=6379 DB_HOST=127.0.0.1 DB_USER=mastodon DB_NAME=mastodon_production DB_PASS=PASSWORD DB_PORT=5432 LOCAL_DOMAIN=mastodon.example.com LOCAL_HTTPS=true PAPERCLIP_SECRET=SECRET SECRET_KEY_BASE=SECRET OTP_SECRET=SECRET EMAIL_DOMAIN_WHITELIST=example.com DEFAULT_LOCALE=fr SMTP_SERVER=127.0.0.1 SMTP_PORT=25 SMTP_LOGIN= SMTP_PASSWORD= SMTP_FROM_ADDRESS=mastodon@mastodon.example.com #SMTP_DOMAIN= # defaults to LOCAL_DOMAIN #SMTP_DELIVERY_METHOD=smtp # delivery method can also be sendmail SMTP_AUTH_METHOD=none SMTP_OPENSSL_VERIFY_MODE=none ~~~ Initialisation de la base de données : ~~~ $ bundle exec rails db:setup ~~~ Compilation des assets : ~~~ $ bundle exec rails assets:precompile ~~~ ## Unités systemd Unités systemd à mettre dans /etc/systemd/system mastodon-web.service ~~~ [Unit] Description=mastodon-web After=network.target [Service] Type=simple User=mastodon WorkingDirectory=/home/mastodon/mastodon Environment="RAILS_ENV=production" Environment="PORT=3000" ExecStart=/home/mastodon/.rbenv/shims/bundle exec puma -C config/puma.rb TimeoutSec=15 Restart=always [Install] WantedBy=multi-user.target ~~~ mastodon-sidekiq.service ~~~ [Unit] Description=mastodon-sidekiq After=network.target [Service] Type=simple User=mastodon WorkingDirectory=/home/mastodon/mastodon Environment="RAILS_ENV=production" Environment="DB_POOL=5" ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push TimeoutSec=15 Restart=always [Install] WantedBy=multi-user.target ~~~ mastodon-streaming.service ~~~ [Unit] Description=mastodon-streaming After=network.target [Service] Type=simple User=mastodon WorkingDirectory=/home/mastodon/mastodon Environment="NODE_ENV=production" Environment="PORT=4000" ExecStart=/usr/bin/npm run start TimeoutSec=15 Restart=always [Install] WantedBy=multi-user.target ~~~ ~~~ # systemctl enable mastodon-{web,sidekiq,streaming} # systemctl start mastodon-{web,sidekiq,streaming} ~~~ ## Crontab ~~~ RAILS_ENV=production @daily cd /home/mastodon/mastodon && /home/mastodon/.rbenv/shims/bundle exec rake mastodon:daily > /dev/null ~~~ ## Nginx On utilise Nginx : ~~~ # apt install nginx ~~~ > **Note** : La partie SSL/TLS n'est pas évoquée. À vous de faire le nécessaire avec un certificat Let's Encrypt par exemple. N'oubliez donc pas de modifier les directives `ssl_` dans le vhost. # Mises à jour Le principe des mises à jour est basé sur un `git pull` et un `git checkout`. # Divers / FAQ