Créer son instance Mastodon perso vite fait-mal fait
Connaissez-vous Mastodon ?
C’est le nouveau réseau social du moment1 (au moins ici, en France). Mastodon reprend presque à l’identique le concept derrière twitter, avec un ajout de taille : il est open source est décentralisé. Concrètement, ça signifie que n’importe qui avec un minimum de connaissances peut télécharger le code, l’exécuter sur une machine à soi pour créer son propre twitter perso, et se connecter au reste du monde pour suivre (et être suivi de) plus de gens. Techniquement ça ne s’appuie pas sur des concepts révolutionnaires2, mais l’interface est admirablement pensée pour être agréable et facile d’accès à qui connaît un peu Twitter. Et il y a tout un paquet de features intéressantes, que je détaillerai peut-être une prochaine fois. Ou peut-être pas, parce qu’il y a déjà beaucoup d’articles qui s’attardent dessus.
Le but de cet article
Comme le titre l’indique, je veux vous apprendre à monter votre propre instance, pour un usage personnel uniquement, avec le minimum de compétences requises : ne comptez pas sur moi pour vous présenter des optimisations fines pour supporter 10000 utilisateurs sur votre instance. J’en serais bien incapable. Du coup on va rester en-dessous de 10 utilisateurs.
Moi j’ai testé avec 1 et ça marche.
C’est déjà pas mal.
Bref.
Dans la suite de l’article, j’ai fait quelques choix arbitraires. De manière générale je les préciserai, mais ne chercherai pas à les justifier. Notamment parce qu’ils sont souvent le fait d’une relative incompétence. Ce que je veux dire, c’est que si vous avez des idées pour améliorer certains points allez-y, c’est sans-doute que vous maîtrisez assez pour vous débrouiller. Vous pouvez évidemment m’en faire part, ce sera sans-doute intéressant.
Une précision enfin : je ne suis pas un developpeur Ruby. Je n’ai réellement aucune compétence en Ruby. Et si je connais un peu docker et nginx, ce sont loin d'être des logiciels que je maîtrise complètement. Il arrivera donc dans ce guide que je vous demande de lancer des commandes sans trop d’explications. C’est simple : c’est parce que je ne les connais pas, j’applique juste bêtement et ça marche. C’est généralement une mauvaise idée en informatique, mais j’ai bien mis "vite fait-mal fait" dans le titre, donc vous avez été prévenu…
Tout ça pour dire que si vous voulez un guide un peu propre pour une instance de plus de 10 utilisateurs, et qui ne passe pas par Docker pour l’installation, vous allez voir l'(excellent) article d’Angristan. Ici c’est pour faire vite, moche et aller au plus facile. Ce qui ne vous empêchera pas de corriger tout ça plus tard.
Pré-requis
Parce qu’il faut bien commencer quelque part, vous allez avoir besoin de :
-
un PC sous Linux et des notions de ligne de commande ; vous pouvez évidemment vous débrouiller avec Windows et j’essaierai de vous donner des pistes pour le faire, mais je ne peux pas vous faire la marche à suivre complète ;
-
4€ en trop, pour un mois (payables par différents moyens, notamment une carte bancaire ou un compte Paypal). Eh oui, le self-hosting c’est pas gratuit3.
À ces produits de première nécessité, vous pouvez rajouter éventuellement un nom de domaine un peu stylé4, obtenu auprès du registrar de votre choix. Gandi.net est mon choix personnel. Ça coûte quelques sous par an (les prix changent selon la terminaison) mais ça vaut le coup, pour avoir un handle Mastodon à son nom.
Sinon vous aure un nom de domaine tout moche.
C’est vous qui voyez5.
Location du VPS
En anglais, VPS ça veut dire Virtual Private Server. Foin de détails techniques, vous allez louer un petit ordinateur, avec une connexion à internet, pour une durée de 1 mois, au prix le plus bas possible. Et comme c’est moi qui décide, vous allez faire ça chez OVH. Eh ouais. Je vous avais prévenu pour les choix arbitraires.
Donc, on se connecte sur le site d’OVH, et comme on va en avoir besoin, on commence par se créer un compte. Dans la mesure du possible, je vous conseille de mettre des infos valides et pas n’importe quoi. Vous êtes en train de louer un serveur pour héberger publiquement des données, pas de créer un compte fake pour shitposter sur Twitter, il y a des règles légales qui s’appliquent (et notamment on doit pouvoir vous contacter en cas de litige). Choisissez aussi un mot de passe un peu robuste, ce serait dommage de perdre bêtement le contrôle de votre serveur tout neuf.
Une fois votre compte créé, on va visiter la catégorie Cloud/VPS. Comme on est radins, on sélectionne l’offre la moins chère, soit ici le VPS SSD 1, à 2,99€ HT/mois.
L’interface qui suit est très claire. Vous choisissez le modèle et les options que vous voulez, le total du prix s’affiche à droite. Personnellement je reste sur le plus bas de gamme, pour une instance juste pour moi ça devrait suffire. De toute façon, il est possible d’upgrader plus tard son serveur, si le besoin s’en fait sentir.
Dans la catégorie Système d’exploitation, sélectionnez la distribution Docker, en version Docker on Ubuntu 14.04 Server 64bits. Pas la peine de prendre la 15.04, la 14.04 est une LTS et sera maintenue plus longtemps. Si jamais à l’heure ou vous lisez ces lignes la 16.04 est disponible, prenez plutôt celle-là Edit 2017-04-24: nope, ne passez pas à la 16.04, il y a apparemment de sérieux problèmes de compatibilité avec docker, et les developpeurs ont indiqué qu’ils ne les corrigeraient pas (merci les mecs). Si jamais vous n'êtes pas contents de votre OS, il sera toujours possible de le réinstaller plus tard6.
Continuez votre commande, vérifiez le récapitulatif et cliquez sur Poursuivre. Chez moi le total TTC est de 3,59€, pour un mois de location. Vous pouvez sélectionner directement une durée plus grande, ou attendre de voir venir et décider de prolonger votre location plus tard. Moi je me donne un mois pour voir si maintenir ma propre instance est viable.
À partir de là c’est le moment de passer à la caisse. Je vous laisse sélectionner le mode de paiement de votre choix et procéder à la transaction. Attention aux délais toutefois : si vous décidez de payer par virement vous pouvez fermer votre onglet et reprendre le tuto à partir d’ici dans deux jours.
À noter : il peut y avoir un moment de flottement, ou vous ne voyez votre commande nulle part sur le site, vous n’avez pas reçu de mail de confirmation, et vous avez sacrément l’impression de vous être fait enfler 3,59€. Pas de panique, ça va arriver, ça peut prendre plusieurs dizaines de minutes. Relaxez-vous en écoutant du biniou sur YouTube (non).
Finalement un mail vous parvient de la part d’OVH, vous informant que votre instance est up. Le mail contient l’adresse IP, le nom d’hôte de la machine, un login et un mot de passe. On va enfin pouvoir commencer à travailler.
Connexion via SSH
Pour cette partie, si vous utilisez Windows, je vous conseille de vous renseigner sur Putty et son fonctionnement. Alternativement vous pouvez aussi utiliser le KVM à votre disposition pour votre machine dans votre espace client OVH, il vous donnera directement accès à une console, et vous pouvez sauter ce paragraphe.
Il y a quantité de guides sur comment se connecter à une machine en SSH, mais il faut bien que j’en passe par là. Si vous maitrisez déjà, sautez cette partie et connectez vous juste à votre serveur.
SSH est un moyen d’accéder en ligne de commande à votre serveur à distance. Les informations reçues par mail vont vous permettre de vous connecter. Lancez un terminal sur votre ordinateur et tapez :
$> ssh root@vps12345.ovh.net
Remplacez root par le login qu’on vous a donné (mais normalement c’est root), et vps12345.ovh.net par le nom d’hôte (ou l’IP, c’est pareil) de votre machine.
SSH va vous demander si vous validez la clef du serveur distant, ce à quoi vous répondez "oui", parce que vous n’avez pas le temps de vérifier ça proprement. SSH vous demande ensuite le mot de passe de la machine. Vous tapez celui qui vous a été transmis par mail, et vous validez avec <Entrée>. Voilà, vous êtes sur la machine, qui devrait vous souhaiter la bienvenue chez vous.
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-100-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Wed Apr 5 03:05:41 CEST 2017 System load: 0.14 Usage of /: 50.5% of 9.81GB Memory usage: 47% Swap usage: 0% Processes: 148 Users logged in: 0 IP address for eth0: 217.182.204.21 IP address for docker0: 172.17.0.1 IP address for br-a45dd0801ebd: 172.18.0.1 Graph this data and manage this system at: https://landscape.canonical.com/ Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud
Bon, on fera les upgrades et le reste un autre jour, on n’a pas non plus le temps pour ça. Je vous laisse chercher de votre côté si vous voulez faire les choses proprement, moi je passe à la suite.
Premiers pas
Premier réflexe maintenant que vous êtes connecté sur votre nouveau serveur : vous changez votre mot de passe. Je passe sur pas mal de trucs important, mais ça c’est mort, c’est la base. On va donc changer son mot de passe root. Ça se fait avec la commande passwd
#> passwd
Entrez le nouveau mot de passe quand on vous le demande7. Ensuite retapez le même mot de passe pour valider.
À ce stade, vous pouvez pousser la sécurité plus loin en créant un utilisateur non-root avec toujours un mot de passe fort, en modifiant la configuration de SSH pour refuser les connexions en tant que root (et changer le port par défaut tant qu'à faire), et en créant une clef SSH pour vous connecter facilement sans avoir à envoyer votre mot de passe en clair sur internet. Quantité de tutoriels sur le net décrivent cela bien mieux que je ne pourrais le faire, je vais donc vous laisser les chercher. Vous pouvez aussi vous en occuper après. C’est comme vous voulez.
Pour continuer, on va avoir besoin de quelques outils. Les outils sur ubuntu, ça s’installe avec la commande apt-get. Tapez donc :
#> apt-get update #> apt-get install curl git nginx
curl va vous permettre d’installer docker-compose, un outil qui nous facilitera la tâche pour l’installation de Mastodon. git est un outil de versionnement qui va nous permettre de récupérer le code source de Mastodon. Enfin nginx est un serveur web, c’est à dire un logiciel chargé d'écouter les gens qui se connectent à votre machine et de leur renvoyer une page web.
C’est le moment d’installer docker-compose. La méthode la plus simple, décrite sur leur site, absolument horrible en terme de sécurité, est celle que nous allons utiliser. Rentrez-donc aveuglément les commandes qui suivent (ou, légèrement mieux, ne me faites pas confiance et copiez-les depuis leur site).
#> curl -L https://github.com/docker/compose/releases/download/1.12.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose #> chmod +x /usr/local/bin/docker-compose
Donc on télécharge à l’arrache un script depuis le github de docker qui correspond à notre version, on le colle sur notre PC et on le rend exécutable. Et dire qu’il y a des gens qui s’embêtent avec des gestionnaires de paquets et des signatures. Tsss.
Cela fait, intéressons nous au code de Mastodon. Rendez-vous dans /root, et exécutez :
#> git clone https://github.com/tootsuite/mastodon
git va télécharger la dernière version de Mastodon dans un répertoire adéquatement nommé mastodon/. Laissez-le finir et vous pouvez passer à l'étape suivante.
Installation
On est toujours dans de l’installation la plus simple possible, donc on va se servir des fichiers de configuration docker et docker-compose mis à disposition par le développeur. Docker est un système de conteneurs fort pratique pour les flemmards.
Copiez le fichier d’example .env.production.sample en .env.production et ouvrez-le pour le modifier.
#> cd /root/mastodon #> cp .env.production.sample .env.production #> nano .env.production
Si vous êtes swag, remplacez nano par vim. Si vous êtes barbu, remplacez nano par emacs. Si vous n’avez aucune idée de ce que je raconte, laissez nano.
Un éditeur de texte8 ou un système d’exploitation complet9 se lance et affiche votre fichier, dans lequel il va vous falloir modifier quelques petites choses. Primo, la variable LOCAL_DOMAIN contient le nom de domaine de votre future instance Mastodon. Remplacez là par ce que vous avez : quelque chose comme vps12345.ovh.net, ou un nom de domaine à vous si vous en avez un.
Ensuite, sous le commentaire # Application secrets se trouvent trois variables à remplir avec, si je comprends bien, des valeur aléatoires, longues, contenant des caractère dans 0123456789abcdef. Un commentaire vous propose de les générer sans vous fouler avec la commande docker-compose run --rm web rake secret, ce que vous pouvez faire en quittant l'éditeur10 avant d’y revenir pour y coller les valeurs obtenues. Mais si vous vous sentez inspirés, vous pouvez tapoter plus ou moins aléatoirement votre clavier pour générer lesdites valeurs à la main. À la fin, vous devriez avoir quelque chose qui ressemble à ça :
# Service dependencies REDIS_HOST=redis REDIS_PORT=6379 DB_HOST=db DB_USER=postgres DB_NAME=postgres DB_PASS= DB_PORT=5432 # Federation LOCAL_DOMAIN=mastodon.lertsenem.com LOCAL_HTTPS=true # Application secrets # Generate each with the `rake secret` task (`docker-compose run --rm web rake secret` if you use docker compose) PAPERCLIP_SECRET=0123456789abcdef00000000000000000000000000000000000000000000000001111111111111111111111111111111bbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaa SECRET_KEY_BASE=abcdef01234567890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 OTP_SECRET=1234567896543210abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # Registrations # Single user mode will disable registrations and redirect frontpage to the first profile # SINGLE_USER_MODE=true # Prevent registrations with following e-mail domains # EMAIL_DOMAIN_BLACKLIST=example1.com|example2.de|etc # E-mail configuration SMTP_SERVER=smtp.mailgun.org SMTP_PORT=587 SMTP_LOGIN= SMTP_PASSWORD= SMTP_FROM_ADDRESS=notifications@mastodon.lertsenem.com # Optional asset host for multi-server setups # CDN_HOST=assets.example.com # S3 (optional) # S3_ENABLED=true # S3_BUCKET= # AWS_ACCESS_KEY_ID= # AWS_SECRET_ACCESS_KEY= # S3_REGION= # S3_PROTOCOL=http # S3_HOSTNAME=192.168.1.123:9000 # Optional alias for S3 if you want to use Cloudfront or Cloudflare in front # S3_CLOUDFRONT_HOST= # Streaming API integration # STREAMING_API_BASE_URL=
Je sais ce que vous vous dites : l’aléatoire c’est pas mon truc. Ce à quoi je réponds : prouvez-moi un peu que ces valeurs ne sont pas aléatoires. Non, blague à part, j’ai évidemment remplacé les vraies valeurs, vu qu’elles sont censé rester secrètes (aucune idée de à quoi elle servent réellement, je vous laisse apprendre le Ruby on Rails, regarder le code et revenir me l’expliquer).
Notez que je ne modifie pas le SMTP, parce que je ne veux pas m’embêter avec des mails de confirmation. Comme il n’y a pour l’instant pas d’option pour désactiver ça on ira regarder dans les logs pour obtenir la clef de confirmation d’inscription. Ce n’est pas idéal, mais c’est suffisant.
On a maintenant tout ce qu’il faut, on peut lancer le téléchargement et la création des images Docker via une simple commande :
#> cd /root/mastodon #> docker-compose build
Faites vous un café en regardant les lignes de log défiler pour vous indiquer que Docker télécharge des images de conteneurs redis et postgres, et qu’il builde des images pour les différents services nécessaires à mastodon.
Un fois que c’est terminé, vous pouvez démarrer tous les services via :
#> cd /root/mastodon #> docker-compose up -d
On va maintenant lancer deux tâche ruby (toujours via docker-compose). La première sert à effectuer les migrations de base de donnée, c’est-à-dire à créer et modifier les tables nécessaires à Mastodon. La seconde compile les resources qui seront servies statiquement (images, etc).
#> cd /root/mastodon #> docker-compose run --rm web rails db:migrate #> docker-compose run --rm web rails assets:precompile
Là encore, beaucoup de logs, peut-être même quelques warnings.
Mastodon est maintenant en place, on va donc configurer nginx pour pouvoir y accéder. Une configuration d’exemple est disponible dans la doc officielle Mastodon, on va la reprendre quasiment telle quel.
Sur ubuntu, la configuration des différents vhosts11 servis par nginx se fait via des fichiers posés dans /etc/nginx/sites-enabled/. Traditionnellement on met en réalité les fichiers dans /etc/nginx/sites-available et on fait des liens symboliques depuis ce dossier, pour pouvoir les activer et les désactiver plus simplement :
#> cd /etc/nginx #> nano sites-available/mastodon
map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; listen [::]:80; server_name mastodon.lertsenem.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name mastodon.lertsenem.com; ssl_protocols TLSv1.2; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_certificate /etc/letsencrypt/live/mastodon.lertsenem.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mastodon.lertsenem.com/privkey.pem; keepalive_timeout 70; sendfile on; client_max_body_size 0; gzip off; root /home/mastodon/live/public; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; 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://localhost: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://localhost: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; }
Les seules modifications à réaliser sont le changement du server_name, à deux endroits et les répertoires contenant le ssl_certificate et la ssl_certificate_key. Une fois encore, remplacez example.com par votre nom d’hôte, qui sera votre nom d’instance (dans mon cas mastodon.lertsenem.com).
La configuration SSL est bien durcie par défaut, ce qui peut vous poser quelques problèmes pour vous connecter via les applications Android (si ce n’est pas une version assez récente). Si vous constatez ce genres de soucis, c’est donc de ce côté qu’il vous faudra chercher12.
Vous l’aurez compris, qui dit SSL (et HTTPS) dit certificats. On va donc se procurer un certificat via le service Let’s Encrypt, béni soit son nom.
Pour ce faire rien de plus simple13, on va ajouter le dépôt de paquets de Certbot et installer l’outil certbot, puis s’en servir pour requérir un certificat à nous :
#> add-apt-repository ppa:certbot/certbot #> apt-get update #> apt-get install certbot #> certbot certonly --rsa-key-size 4096 Saving debug log to /var/log/letsencrypt/letsencrypt.log How would you like to authenticate with the ACME CA? \------------------------------------------------------------------------------- 1: Place files in webroot directory (webroot) 2: Spin up a temporary webserver (standalone) \------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Sélectionnez l’option 2 : certbot démarrera un serveur web temporaire pour vérifier que vous possédez bien le nom de domaine que vous prétendez avoir.
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):
Entrez votre adresse mail pour pouvoir être prévenu en cas de problème, et notamment avant qu’il expire, pour le renouveler.
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel):mastodon.lertsenem.com
Ici, entrez votre nom de domaine. Si vous n’en avez pas acheté un, c’est celui fourni par OVH qui ressemble à vps12345.ovh.net. Certbot va maintenant démarrer un serveur web écoutant sur ce nom de domaine pour vérifier qu’il est bien à vous. Cela fait, il va générer un biclef RSA, utiliser la clef publique pour créer un prototype de certificat pour votre nom de domaine, et l’envoyer à Let’s Encrypt pour qu’il y soit signé. Une fois signé, ce prototype est désormais un certificat, et Let’s Encrypt vous le renvoie.
Obtaining a new certificate Performing the following challenges: tls-sni-01 challenge for nextcloud.lertsenem.com Waiting for verification... Cleaning up challenges Generating key (4096 bits): /etc/letsencrypt/keys/0003_key-certbot.pem Creating CSR: /etc/letsencrypt/csr/0003_csr-certbot.pem IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/nextcloud.lertsenem.com/fullchain.pem. Your cert will expire on 2017-07-09. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Certbot télécharge votre certificat et le met (normalement) dans le même répertoire que celui qu’on avait spécifié dans la configuration nginx. Quel heureux hasard.
Il ne nous reste plus qu'à supprimer le vhost nginx par défaut et à activer le vhost mastodon qu’on a créé, et on peut démarrer le service nginx.
#> cd /etc/nginx/ #> rm sites-enabled/default #> ln -s ../sites-available/mastodon sites-enabled #> service nginx restart
Et voilà, vous avez une instance mastodon, accessible via le nom de domaine que vous avez choisi (ou qu’on vous a donné). Mais tout n’est pas fini, il nous reste un peu de travail.
Finalisation
Quelques tâches restent à effectuer pour avoir quelque chose de fonctionnel. Déjà, un utilisateur. À l’heure où j'écris ces lignes, Mastodon ne permet pas la création d’un utilisateur à la main, il faut s’inscrire comme pour n’importe quelle instance. Faites-le donc.
Sauf que, comme je l’avais précisé plus tôt, on n’a pas configuré le serveur SMTP, et le mail de confirmation ne partira donc jamais. Pas grave, tout ce qu’il nous faut c’est la clef de confirmation présente dans ce mail, et il se trouve qu’elle est affichée dans les logs. Revenez sur votre serveur, et filtrez les logs du service Mastodon sidekiq via la commande suivante :
#> docker logs mastodon_sidekiq_1 | grep "confirmation" [ActiveJob] [ActionMailer::DeliveryJob] [6c46305a-d2c2-4a72-8b39-aea654915d5e] UserMailer#confirmation_instructions: processed outbound mail in 5.0ms Subject: Confirmation instructions You can confirm your Mastodon account email through the link below: https://mastodon.lertsenem.com/auth/confirmation?confirmation_token=MYCONFIRMATIONTOKEN <p>You can confirm your Mastodon account email through the link below:</p> <p><a href="https://mastodon.lertsenem.com/auth/confirmation?confirmation_token=MYCONFIRMATIONTOKEN">Confirm my account</a></p> 2017-04-07T01:27:08.233Z 1 TID-ovwyc56yc WARN: {"context":"Job raised exception","job":{"class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","wrapped":"ActionMailer::DeliveryJob","queue":"mailers","args":[{"job_class":"ActionMailer::DeliveryJob","job_id":"6c46305a-d2c2-4a72-8b39-aea654915d5e","queue_name":"mailers","priority":null,"arguments":["UserMailer","confirmation_instructions","deliver_now",{"_aj_globalid":"gid://mastodon/User/2"},"MYCONFIRMATIONTOKEN",{"_aj_symbol_keys":[]}],"locale":"en"}],"retry":true,"jid":"e4c87ace29c048a02bfa6d3b","created_at":1491528146.6588912,"enqueued_at":1491528427.3272157,"error_message":"550 5.7.1 Relaying denied\n","error_class":"Net::SMTPFatalError","failed_at":1491528148.0236337,"retry_count":4,"retried_at":1491528428.2328937},"jobstr":"{\"class\":\"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper\",\"wrapped\":\"ActionMailer::DeliveryJob\",\"queue\":\"mailers\",\"args\":[{\"job_class\":\"ActionMailer::DeliveryJob\",\"job_id\":\"6c46305a-d2c2-4a72-8b39-aea654915d5e\",\"queue_name\":\"mailers\",\"priority\":null,\"arguments\":[\"UserMailer\",\"confirmation_instructions\",\"deliver_now\",{\"_aj_globalid\":\"gid://mastodon/User/2\"},\"MYCONFIRMATIONTOKEN\",{\"_aj_symbol_keys\":[]}],\"locale\":\"en\"}],\"retry\":true,\"jid\":\"e4c87ace29c048a02bfa6d3b\",\"created_at\":1491528146.6588912,\"enqueued_at\":1491528427.3272157,\"error_message\":\"550 5.7.1 Relaying denied\\n\",\"error_class\":\"Net::SMTPFatalError\",\"failed_at\":1491528148.0236337,\"retry_count\":3,\"retried_at\":1491528330.9802022}"}
Vous devriez vite repérer un log comme au-dessus indiquant votre confirmation_token, la clef qui doit vous être envoyée par mail. Copiez-la, et via votre navigateur accédez à l’url https://mastodon.lertsenem.com/auth/confirmation?confirmation_token=MYCONFIRMATIONTOKEN (qui est aussi dans le log, d’ailleurs). Évidemment vous remplacez mastodon.lertsenem.com par votre propre nom de domaine, et MYCONFIRMATIONTOKEN par le confirmation_token que vous avez copié plus tôt. Vous devriez être redirigé vers une page vous indiquant que votre compte est validé, c’est le moment de vous connecter.
Maintenant, on va vous faire passer administrateur. Rien de plus simple, une tâche rails est prévue à cet effet. Sur votre serveur, exécutez :
#> cd /root/mastodon #> docker-compose run --rm web rails mastodon:make_admin USERNAME=lertsenem
Encore une fois, remplacez lertsenem par votre propre nom d’utilisateur. Félicitations, vous voilà admin.
Dernier point de configuration : fermer les inscriptions au reste du monde, pour éviter de faire exploser en vol votre instance toute neuve. Pour cela, deux solutions :
-
activer le SINGLE_USER_MODE via le fichier de configuration .env.production ;
-
fermer les inscriptions via l’interface admin.
Une seule de ces deux options activée suffit, mais il y a une légère subtilité. Si le SINGLE_USER_MODE est activé, votre page d’accueil deviendra automatiquement le fil de votre premier utilisateur14
Pour cette deuxième option, je vous laisse explorer vous-même l’interface d’admin accessible via les settings une fois connecté. Pensez au passage à visiter l’onglet Sidekiq pour tuer la tâche en attente qui cherche à vous envoyer un mail de confirmation, ça ne mange pas de pain.
Pour passer en SINGLE_USER_MODE, décommentez la ligne correspondante dans le fichier /root/mastodon/.env.production pour avoir SINGLE_USER_MODE=true, et ré-exécutez les commandes suivantes15 :
#> cd /root/mastodon #> docker-compose build #> docker-compose up -d
Et voilà ! À partir de maintenant vous avez une instance mastodon fonctionnelle, avec un compte administrateur pour vous amuser comme bon vous semble. Pour la peupler un peu c’est à vous de jouer pour vous abonner au personnes qui vous intéressent. Vous pouvez éventuellement commencer par moi : @lertsenem@mastodon.lertsenem.com.
Pour un peu de swag inutile, vous pouvez inscrire votre instance sur https://instances.mastodon.xyz. Inutile parce si vous l’avez fermée au public, ça ne sert pas à grand chose de la lister là. Mais ça fait plaisir quand même.
Bon toots !
Maintenance
Ne rêvez pas, ça va être bref, on avait dit qu’on faisait vite fait-mal fait. Je vous donne juste les commandes pour mettre à jour votre instance. C’est du sans-filet, pour autant que je sache, je vous laisse la question des backups et des rollbacks éventuels en exercice.
#> cd /root/mastodon #> git pull origin master #> docker-compose build #> docker-compose run --rm web rails db:migrate # Uniquement nécessaire s'il y a eu des modifications dans le répertoire 'db' #> docker-compose run --rm web rails assets:precompile # Uniquement nécessaire s'il y a eu des modifications dans le répertoire 'app/assets' #> docker-compose up -d
Simple. Sobre. Efficace.
Pour ne pas gâcher d’espace, utilisez docker images pour trouver des images devenues obsolètes après update (celles qui s’appellent maintenant null), et supprimez-les avec docker rmi [id de l’image]. Vu la taille des images et celle de votre disque, ça vaut le coup.
Enfin je crois savoir qu’il existe des tâche rails pour nettoyer le cache des anciens toots des personnes que vous suivez, mais je n’ai pas encore regardé ça. Là aussi, surveillez votre espace disque, ça risque de devenir nécessaire à un moment ou à un autre.
Conclusion
Vous avez les clefs en main pour vous connecter à Mastodon depuis votre propre instance. N’hésitez pas à me faire part de toutes vos améliorations et précisions vis à vis de ce guide, mais gardez à l’esprit que le but avoué est d’avoir quelque chose d’utilisable le plus vite possible, quick & dirty. N’hésitez pas à faire vous même des guides sur comment améliorer l’instance une fois ce guide achevé.
Notez que si c’est votre première fois, je recommende quand même de commencer votre découverte par une instance partagée. Malgré (et des fois "à cause de") ses ressemblances avec Twitter, appréhender le fonctionnement du réseau n’est pas forcément évident. N’hésitez pas à demander de l’aide, y compris dans le vide à voix haute : par défaut les toots sont publics et pour l’instant on trouve pas mal d’utilisateurs de bonne volonté pour expliquer un peu tout ça.
Amusez-vous bien, et au plaisir de vous croiser !
Évidemment, pour des commentaires, des suggestions et des insultes, vous pouvez me contacter via mon compte mastodon. Je suppose que si vous y tenez vrament vous pouvez aussi utiliser mon compte twitter.
- Qui monte, malgré le silence des médias ! ↩
- l’auteur se base sur des protocoles déjà existants et le réseau GNUSocial, pour ceux qui connaissent ↩
- Mais du coup ce n’est pas vous le produit ! ↩
- Voir http://instances.mastodon.xyz pour une idée du style en vigueur sur Mastodon… ↩
- Notez toutefois que vous n’aurez pas la possibilité de le changer facilement si vous changez d’avis plus tard. Où plutôt, si, mais je ne suis pas sûr de comment ça va se comporter vis-à-vis de votre instance et de vos followers… ↩
- en effaçant tout le serveur, bien entendu ↩
- Et un vraiment bon, il y a sans arrêt des bots qui essaient des mots de passe sur tous les accès qu’ils trouvent, donc si vous ne voulez pas héberger des virus ou participer à un DDOS, choisissez un mot de passe fort ↩
- nano ou vim ↩
- emacs ↩
- ou pas, si vous êtes swag ↩
- Websites, quoi ↩
- En autorisant le TLSv1.1 et v1 par exemple, ou en ajoutant quelques ciphers moins dernier cri ↩
- Ok, si, mais c’est quand même vachement plus simple qu’avant. ↩
- Notez que pour vous connecter à votre compte il faudra alors explicitement accéder à l’URL /ref. S’il est désactivé, mais que les inscriptions sont fermées via l’interface d’admin, la page d’accueil reste la même sauf qu'à l’emplacement prévu pour les enregistrements s’affichera désormais un message de votre choix. ↩
- Il y a peut-être plus simple/moins long, mais je n’ai pas trouvé ↩