1. N'hésitez pas à vous enregistrer & participer à cette future communauté d'informaticiens, Geeks ou encore Sysadmin.
    Amateur ou confirmé, voir même professionnel, vous avez votre place ici et c'est avec la plus grande joie que vous nous accueillerons !

    Je m'enregistre ici
  2. Vous êtes blogueur et vos articles sont en relation avec l'administration des systèmes?
    Offrez leur une vue supplémentaire via le forum de ZoneAdmin !
    Comment faire? Simple,suivez l'article ici !

Valorisée Tutoriel Installer une instance Mastodon sur Ubuntu 16.04 LTS

Discussion dans 'Linux' créé par virtubox, 17 Avril 2017.

  1. virtubox

    virtubox Visiteur Dantooine Jeune padawan Membre Privilège

    [​IMG]

    Alors que ce nouveau réseau social fait actuellement beaucoup parler de lui, je me suis décidé à créer ma propre instance Mastodon pour contribuer à ce projet. J'en ai donc profiter pour faire un tutorial listant les étapes à suivre pour lancer vous aussi votre instance dès aujourd'hui. Je suis parti sur un VPS tournant avec Ubuntu 16.04 LTS et du côté ressources 8 vCores, 8Go de RAM et 50Go de SSD. Je verrais à l'usage si l'instance nécessite plus de ressources. Pour suivre les étapes de ce tutorial, un utilisateur avec les droits sudo est suffisant, vous n'avez pas besoin de vous connecter en tant que root.
    Installer les pré-requis

    Code:
    sudo apt-get update
    Installation de nodejs
    Code:
    curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -
    sudo apt-get install imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev nodejs
    sudo npm install -g yarn
    Installation de redis-server
    Code:
    sudo apt-get install redis-server redis-tools
    Installation de postgresql
    Code:
    sudo apt-get install postgresql postgresql-contrib
    sudo su - postgres
    psql
    CREATE USER mastodon CREATEDB;
    \q
    Il nous faut également activer le daemon d'authentification pour que les utilisateurs puissent se connecter dans mot de passe :
    Code:
    sudo sed -i '/^local.*postgres.*peer$/a host    all     all     127.0.0.1/32    ident' /etc/postgresql/9.?/main/pg_hba.conf
    sudo apt-get install pidentd
    sudo systemctl enable pidentd
    sudo systemctl start pidentd
    sudo systemctl restart postgresql
    Installation de Ruby

    On installe les dépendances pour Ruby.
    Code:
    sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
    On créer un utilisateur mastodon :
    Code:
    adduser --disabled-password --disabled-login mastodon
    Puis on s'identifie avec cet utilisateur
    Code:
    su - mastodon
    On installe rbenv et rbenv-build :
    Code:
    adduser --disabled-password --disabled-login mastodon
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv
    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(rbenv init -)"' >> ~/.bashrc
    source ~/.bashrc
    On se déconnecte pour appliquer la modification au bash, puis on installe ruby-build.
    Code:
    exit
    su - mastodon
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
    Puis on installe Ruby v2.4.1 pour Mastodon :
    Code:
    rbenv install 2.4.1
    rbenv global 2.4.1
    On vérifie la version de ruby installé via la commande :
    Code:
    ruby -v
    Installation de Mastodon

    Nous allons pouvoir passer à l'installation de Mastodon et pour cela on commence par cloner le dépôt Github, puis on utilise git checkout pour sélectionner la dernière release plutôt que de rester sur la branche master :
    Code:
    cd ~
    git clone https://github.com/tootsuite/mastodon.git live
    cd live
    git checkout $(git tag | tail -n 1)
    On installe bundler pout gérer l'installation des dépendances et on désactive la documentation pour chaque gem.
    Code:
    echo "gem: --no-document" > ~/.gemrc
    gem install bundler --no-ri
    Puis on passe à l'installation
    Code:
    bundle install --deployment --without development test
    yarn install
    On peut désormais copier le fichier de configuration d'exemple et l'éditer avec nos informations :
    Code:
    cp .env.production.sample .env.production
    nano .env.production
    Les informations à remplir sont :
    Code:
    # Service dependencies
    REDIS_HOST=localhost
    REDIS_PORT=6379
    DB_HOST=/var/run/postgresql
    DB_USER=mastodon
    DB_NAME=mastodon_production
    DB_PASS=
    DB_PORT=5432
    
    # Federation
    LOCAL_DOMAIN=votredomaine.com
    LOCAL_HTTPS=true
    Ainsi que la partie SMTP qui permettra aux utilisateurs de confirmer leur inscription :
    Code:
    # E-mail configuration
    SMTP_SERVER=mail.votredomaine.com
    SMTP_PORT=587
    SMTP_LOGIN=noreply@votredomaine.com
    SMTP_PASSWORD=VotreMotdePasse
    SMTP_FROM_ADDRESS=noreply@votredomaine.com
    Pour la partie application secret, utilisez la commande bundle exec rake secret pour générer 3 clés et vous n'avez plus qu'à les copier dans le fichier de configuration. Pour mettre en place l'instance du côté base de donnée et assets :
    Code:
    RAILS_ENV=production bundle exec rails db:setup
    RAILS_ENV=production bundle exec rails assets:precompile
    Création des services systemd

    Pour le processus web
    Code:
    nano /etc/systemd/system/mastodon-web.service
    Code:
    [Unit]
    Description=mastodon-web
    After=network.target
    
    [Service]
    Type=simple
    User=mastodon
    WorkingDirectory=/home/mastodon/live
    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

    Pour le processus en arrière-plan

    Code:
    nano /etc/systemd/system/mastodon-sidekiq.service
    Code:
    [Unit]
    Description=mastodon-sidekiq
    After=network.target
    
    [Service]
    Type=simple
    User=mastodon
    WorkingDirectory=/home/mastodon/live
    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

    Pour le processus de l'API

    Code:
    nano /etc/systemd/system/mastodon-streaming.service
    Code:
    [Unit]
    Description=mastodon-streaming
    After=network.target
    
    [Service]
    Type=simple
    User=mastodon
    WorkingDirectory=/home/mastodon/live
    Environment="NODE_ENV=production"
    Environment="PORT=4000"
    ExecStart=/usr/bin/npm run start
    TimeoutSec=15
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    On peut alors activer les services :
    Code:
    systemctl enable /etc/systemd/system/mastodon-*.service
    Et enfin démarrer l'instance Mastodon :
    Code:
    sudo systemctl start mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service
    On ajoute alors les crons nécessaire pour Mastodon :
    Code:
    crontab -u mastodon -e
    Code:
    RAILS_ENV=production
    @daily cd /home/mastodon/live && /home/mastodon/.rbenv/shims/bundle exec rake mastodon:daily
    Mise en place du reverse-proxy Nginx :

    Nous avons désormais une instance mastodon qui fonctionne, mais nous allons devoir mettre en place un reverse-proxy avec Nginx afin de pouvoir utiliser directement notre domaine pour y accéder. On commence par installer nginx :
    Code:
    wget -O - https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
    sudo echo "deb http://nginx.org/packages/ubuntu/ $(lsb_release -sc) nginx" > /etc/apt/sources.list.d/nginx.list
    sudo apt update
    sudo apt install nginx
    On créer un fichier de configuration en se basant sur le modèle d'Angristan :
    Code:
    nano /etc/nginx/sites-enabled/votredomaine.com
    Code:
    map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
    }
    # redirection http vers https
    server {
    listen 80;
    listen [::]:80;
    server_name www.votredomaine.com votredomaine.com;
    return 301 https://votredomaine.com$request_uri;
    
    access_log /dev/null;
    error_log /dev/null;
    }
    
    # block https
    server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name www.votredomaine.com votredomaine.com;
    
    if ($host = www.votredomaine.com) {
      return 301 https://votredomaine.com$request_uri;
    }
    
    
    access_log /var/log/nginx/votredomaine.com-access.log;
    error_log /var/log/nginx/votredomaine.com-error.log;
    
    # configuration ssl avec letsencrypt
    ssl_certificate /etc/letsencrypt/live/votredomaine.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/votredomaine.com/privkey.pem;;
    ssl_protocols TLSv1.2;
    ssl_ciphers EECDH+AESGCM:EECDH+CHACHA20:EECDH+AES;
    ssl_prefer_server_ciphers on;
    
    # ajout des headers pour le HSTS, CSP et Referrer-Policy
    add_header Strict-Transport-Security "max-age=15552000; includeSubDomains; preload";
    add_header Content-Security-Policy "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self' wss://votredomaine.com;";
    add_header Referrer-Policy "strict-origin-when-cross-origin";
    
    keepalive_timeout 70;
    sendfile on;
    client_max_body_size 0;
    gzip off;
    
    root /home/mastodon/live/public;
    
    location / {
      try_files $uri @proxy;
    }
    
    location @proxy {
      proxy_set_header Host $host;
      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_pass_header Server;
      proxy_pass http://127.0.0.1:3000;
      proxy_buffering off;
      proxy_redirect off;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      tcp_nodelay on;
    }
    
    location /api/v1/streaming {
      proxy_set_header Host $host;
      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_pass http://127.0.0.1:4000;
      proxy_buffering off;
      proxy_redirect off;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      tcp_nodelay on;
    }
    
    error_page 500 501 502 503 504 /500.html;
    
    }
    Puis on installe Let's Encrypt pour générer notre certificat SSL :
    Code:
    cd /opt
    git clone https://github.com/letsencrypt/letsencrypt
    cd letsencrypt
    ./letsencrypt-auto certonly --webroot -w /home/mastodon/live -d www.votredomaine.com -d votredomaine.com --email vous@votredomaine.com --text --rsa-key-size 4096
    Mettre à jour Mastodon

    Mastodon est très régulièrement mis à jour, cependant pour des raisons de stabilité, il est préférable d'attendre des releases pour mettre à jour son instance. Il ne sera donc pas nécessaire de lancer 10 fois par jour la commande git pull, et il vous suffit après une release d'utiliser les commandes suivantes sans oublier de remplacer tags/vX.X.X par l'identifiant de la release.
    Code:
    su - mastodon
    cd live
    git fetch
    git pull
    git checkout $(git tag | tail -n 1)
    bundle install --deployment --without development test
    NODE_ENV=production npm upgrade --global yarn
    yarn install
    RAILS_ENV=production bundle exec rails assets:clean
    RAILS_ENV=production bundle exec rails assets:precompile
    RAILS_ENV=production bundle exec rails db:migrate
    exit
    • Si une mise à jour de Ruby est nécessaire pour l'installation d'une release, il vous faudra faire :
    Code:
    rbenv install 2.4.1
    gem install bundler --no-ri
    • Note pour la release v1.1.2, pour utiliser la nouvelle fonctionnalitée des avatars GIF, utilisez la commande suivante pour générer une version statiques sur des avatars mis en ligne précédemmment. Sinon vos utilisateurs devront ré-uploader l'avatar pour en bénéficier.
    Code:
    RAILS_ENV=production bundle exec rake mastodon:maintenance:add_static_avatars
    Il ne reste plus qu'à redémarrer l'instance :
    Code:
    sudo systemctl restart mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service
    Création du compte administrateur

    Votre instance est désormais fonctionnelle, il vous suffit donc de vous inscrire et de valider votre adresse mail pour créer votre compte. Ensuite, pour définir ce compte en tant qu'administrateur de l'instance utiliser la commande suivante :
    Code:
    RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=votre-utilisateur
    Mon instance Mastodon.top

    [​IMG] Ayant des ressources à disposition, j'ai lancé mon instance Mastodon, que vous pouvez rejoindre à l'adresse mastodon.top. Nous sommes déjà 90 utilisateurs et vu l'utilisation des ressources, cela ne devrait pas être un problème d'héberger plus de monde. Vous pouvez visualiser les statistiques de l'instance sur la page about ainsi que le monitoring en temps-réel à l'adresse status.mastodon.top. N'hésitez pas à donner votre avis sur ce tutoriel, à corriger d'éventuelles erreurs ou à demander de l'aide pour mettre en place votre instance ! Vous pouvez aussi me suivre sur Mastodon : thomas_virtubox@mastodon.top
    Cet article Installer une instance Mastodon sur Ubuntu 16.04 LTS est apparu en premier sur Jesuisadmin.

    L'auteur de l'article est : jesuisadmin
    Le lien de l'article original : https://jesuisadmin.fr/installer-instance-mastodon-ubuntu/
    Encore merci pour sa participation ! (y)
     
    Dernière édition par un modérateur: 20 Avril 2017

Partager cette page