Comment protégeons-nous vos données ?
Suite aux événements récents, vous êtes très nombreux à nous interroger sur nos pratiques et nos moyens de protection dans nos datacenters. Nous allons vous répondre avec un maximum de transparence.
Mastodon est une application de gestion communautaire entièrement gratuite et libre sur vos instances virtuelles Scaleway Elements. L'outil permet de créer un réseau social privé, sécurisé, et chiffré permettant de partager des photos, des messages et bien plus encore, sans mobiliser de prestataire externe.
À l’époque où le Projet “Ensemble”, en place depuis le début du Covid, nous a permis de collaborer étroitement avec le gouvernement dans le cadre de leurs offres de télétravail, nous nous sommes rendu compte à quel point Mastodon gagnait en traction auprès de la communauté libriste française.
Mastodon est un logiciel populaire, libre et open-source, qui vous permet d'héberger votre réseau social sur vos instances virtuelles. Libre à vous de configurer votre propre code de conduite, vos propres conditions de service et vos propres politiques de modération.
L’outil offre la possibilité d'utiliser le service Object Storage compatible S3 pour stocker les contenus multimédia téléchargés sur la plateforme, ce qui la rend flexible et évolutive.
Les instances Mastodon sont connectées en tant que réseau social fédéré en utilisant le protocol standardisé ActivityPub, sans serveur central. Cela permet aux utilisateurs de différents réseaux et services d'interagir entre eux.
Comme il n'y a pas de serveur central, un utilisateur peut choisir de rejoindre ou de quitter un serveur Mastodon spécifique, selon la politique du serveur, sans pour autant quitter le réseau social Mastodon.
Puisque Mastodon fait partie de Fediverse, des interactions deviennent possibles avec les utilisateurs d'autres plateformes supportant le même protocole, comme PeerTube, Friendica ou encore GNU Social.
La plateforme offre également des fonctionnalités de confidentialité permettant aux utilisateurs d'en ajuster les paramètres pour chacun de leurs messages.
Ceux qui souhaitent déployer eux-mêmes un environnement Mastodon sur une instance virtuelle peuvent le faire en suivant la configuration avancée, détaillée dans ce billet.
Pré requis :
Préparer l'installation
1 . Connectez-vous à votre instance via SSH. Pour en savoir plus, consultez notre documentation. (en anglais)
2 . Mettez à jour le cache des paquets APT et les logiciels déjà installés sur l'instance :
apt update && apt upgrade -y
3 . Vérifiez que curl
est installé sur le système et ajoutez un dépôt externe pour obtenir la version requise de Node.js, puis installez-le en exécutant les commandes suivantes :
apt install curl -ycurl -sL https://deb.nodesource.com/setup_12.x | bash -
4 . Mastodon utilise le gestionnaire de paquets Yarn. Installez le dépôt qui correspond à la version requise de yarn
en exécutant les commandes suivantes :
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.listapt update
5 . L'application dépend également de quelques autres paquets, qui doivent être installés avant l'installation du logiciel :
libprotobuf-dev
et protobuf-compiler
, utilisé pour la détection des languesg++
- Ces paquets sont nécessaires pour la compilation de Ruby en utilisant `ruby-build.Pour les installer, utilisez le gestionnaire de paquets apt :
apt install -y imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev nginx redis-server redis-tools postgresql postgresql-contrib certbot python3-certbot-nginx yarn libidn11-dev libicu-dev libjemalloc-dev
6 . Nous allons utiliser rbenv
pour gérer les versions de Ruby. Mastodon doit être installé pour un seul utilisateur Linux, donc, nous devons d'abord créer un utilisateur sous lequel Mastodon fonctionnera. Le paramètre --disabled-login
désactive la possibilité de se connecter directement au compte de l'utilisateur afin d’en renforcer la sécurité :
adduser --disabled-login mastodon
7 . Ensuite, connectez-vous au compte d'utilisateur mastodon et allez dans le répertoire home de l'utilisateur :
su mastodoncd
8 . Ensuite, installez rbenv et ruby-build :
git clone https://github.com/rbenv/rbenv.git ~/.rbenvcd ~/.rbenv && src/configure && make -C srcecho 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrcecho 'eval "$(rbenv init -)"' >> ~/.bashrc# Redémarrez le shell de l'utilisateurexec bash# Vérifiez si rbenv est correctement installétype rbenv# Installez ruby-build sous la forme d'un plugin rbenvgit clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
9 . Continuez en installant et en activant la version de Ruby utilisée par Mastodon. Il est possible que cette étape nécessite un peu de temps :
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.6.6rbenv global 2.6.6
10 . Enfin, installez le bundler
en exécutant la commande suivante :
gem install bundler --no-document
Une fois que cette étape est terminée, vous pouvez retourner au compte root
en tapant exit
.
1 . Mastodon a besoin d'un accès à une base de données PostgreSQL. Pour cela, accédez au compte d'utilisateur postgres, puis lancez la commande psql :
sudo -u postgres psql
2 . Créez maintenant un utilisateur mastodon pour PostgreSQL et quittez ensuite le shell psql :
CREATE USER mastodon CREATEDB;\q
1 . Connectez-vous au compte de l'utilisateur mastodon
:
su - mastodon
2 . Ensuite, entrez dans le dossier home de l'utilisateur et clonez le dépôt Git de Mastodon dans un répertoire nommé live :
git clone https://github.com/tootsuite/mastodon.git live && cd live
3 . Maintenant, lancez la commande suivante pour vous rendre dans la dernière branche stable du projet
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
4 . Continuez ensuite en installant les dépendances Ruby restantes :
bundle config deployment 'true'bundle config without 'development test'bundle install -j$(getconf _NPROCESSORS_ONLN)
5 . Utilisez ensuite yarn
pour installer les dépendances de node.js :
yarn install --pure-lockfile
6 . Une fois que cela est fait, retournez au compte racine en tapant exit
.
1 . Avant de demander le certificat, arrêtez d'abord l'application Nginx :
systemctl stop nginx
2 . Pour demander un certificat, utilisez maintenant l’outil certbot
, avec la validation TLS SNI en mode autonome. Remplacez exemple.com
par votre propre nom de domaine :
certbot certonly --standalone -d exemple.com
3 . Sachant que la validité des certificats Let's Encrypt est de 90 jours, un cron-job peut être utilisé pour les renouveler et pour redémarrer nginx automatiquement. Il suffit alors de créer un nouveau fichier et de l'ouvrir dans un éditeur de texte comme nano :
nano /etc/cron.daily/letsencrypt-renew
4 . Puis copiez le contenu suivant dans le fichier, enregistrez-le et quittez nano
:
#!/usr/bin/env bashcertbot renewsystemctl reload nginx
5 . Pour terminer cette étape, autorisez l'exécution du script et redémarrez le démon cron. Il exécutera le script quotidiennement :
chmod +x /etc/cron.daily/letsencrypt-renewsystemctl restart cron
1 . Commencez par copier le fichier de configuration d'exemple livré avec Mastodon dans votre dossier sites-available
de Nginx et créez un lien symbolique vers celui-ci dans le dossier sites-enabled
:
cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodonln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon
2 . Ensuite, ouvrez le fichier de configuration dans un éditeur de texte, par exemple nano
:
nano /etc/nginx/sites-available/mastodon
3 . Remplacez example.com
dans le fichier de configuration par votre propre nom de domaine ou sous-domaine. Remplacez-le également par votre nom de domaine dans toutes les occurrences suivantes.
map $http_upgrade $connection_upgrade { default upgrade; '' close;}upstream backend { server 127.0.0.1:3000 fail_timeout=0;}upstream streaming { server 127.0.0.1:4000 fail_timeout=0;}proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g;server { listen 80; listen [::]:80; server_name example.com; <- /!\ Remplacez example.com par votre nom de domaine /!\ root /home/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 example.com; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; # Uncomment these lines once you acquire a certificate: # ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; <- /!\ Remplacez example.com par votre nom de domaine et décommentez cette ligne /!\ # ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; <- /!\ Remplacez example.com par votre nom de domaine et décommentez cette ligne /!\ keepalive_timeout 70; sendfile on; client_max_body_size 80m; root /home/mastodon/live/public; gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; add_header Strict-Transport-Security "max-age=31536000"; location / { try_files $uri @proxy; } location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) { add_header Cache-Control "public, max-age=31536000, immutable"; add_header Strict-Transport-Security "max-age=31536000"; try_files $uri @proxy; } location /sw.js { add_header Cache-Control "public, max-age=0"; add_header Strict-Transport-Security "max-age=31536000"; 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_set_header Proxy ""; proxy_pass_header Server; proxy_pass http://backend; proxy_buffering on; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_cache CACHE; proxy_cache_valid 200 7d; proxy_cache_valid 410 24h; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; add_header X-Cached $upstream_cache_status; add_header Strict-Transport-Security "max-age=31536000"; 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_set_header Proxy ""; proxy_pass http://streaming; 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;}
Une fois que vous avez terminé les modifications, enregistrez le fichier en appuyant sur CTRL+O
, puis quittez nano en appuyant sur CTRL+X
.
1 . Connectez-vous au compte d'utilisateur mastodon
:
su - mastodon
2 . Rendez-vous dans le répertoire /home/mastodon/live
et lancez l'outil d’installation de Mastodon :
cd /home/mastodon/liveRAILS_ENV=production bundle exec rake mastodon:setup
Le logiciel d'installation interactif vous guide tout au long du processus d'installation.
Lorsqu'on vous le demande, entrez le nom de domaine ou le sous-domaine de l'instance. Quand on vous demande d'utiliser le Docker, choisissez No. La plupart des autres valeurs sont déjà pré-remplies avec les paramètres nécessaires. Modifiez-les si nécessaire pour votre propre configuration.
Pour configurer Mastodon avec Object Storage, choisissez Amazon S3 comme fournisseur de services et saisissez les informations suivantes pour le compte. Un token API valide est nécessaire pour la configuration avec Object Storage.
Quand on vous le demande, entrez les paramètres comme suit :
Provider Amazon S3S3 bucket name: [scaleway_bucket_name]S3 region: fr-parS3 hostname: s3.fr-par.scw.cloudS3 access key: [scaleway_access_key]S3 secret key: [scaleway_secret_key]
Note: Si votre bucket est situé à Amsterdam, utilisez
nl-ams
comme région ets3.nl-ams.scw.cloud
comme nom d'hôte.
Une fois la configuration terminée, l'installateur commencera à compiler l'application. Cela peut prendre un peu de temps.
3 . Une fois l'application installée, on vous demandera si vous souhaitez créer un compte administrateur pour votre instance Mastodon. Tapez Yes pour créer le compte. Saisissez le nom d'utilisateur de l'utilisateur admin, suivi de votre adresse électronique. Un mot de passe aléatoire sera généré. Prenez-en note, car vous en aurez besoin pour vous connecter à votre instance Mastodon.
All done! You can now power on the Mastodon server 🐘Do you want to create an admin user straight away? YesUsername: admin ← Saisissez le nom d'utilisateur de votre compte administrateur MastodonE-mail: me@myemail.com ← Saisissez votre adresse électroniqueYou can login with the password: 9dc4d92d93a26e9b6c021bb75b4a3ce2
4 . Tapez exit
pour revenir au compte root
.
Les scripts SystemD sont utilisés pour gérer les services sur les systèmes Ubuntu. Trois scripts différents sont nécessaires pour Mastodon. Ces scripts sont fournis avec le package de Mastodon, vous pouvez les copier à leur destination finale, puis activer les services.
1 . Copiez les scripts Mastodon systemd
dans leur destination finale :
cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
2 . Ensuite, relancez le démon systemd
:
systemctl daemon-reload
3 . Maintenant, démarrez les services et activez-les, afin qu'ils démarrent automatiquement lors du prochain redémarrage du système :
systemctl start mastodon-web mastodon-sidekiq mastodon-streamingsystemctl enable mastodon-web mastodon-sidekiq mastodon-streaming
4 . Pour terminer cette étape, vérifiez si tous les services fonctionnent :
systemctl status mastodon-*.service
Si tout fonctionne, ouvrez un navigateur web et connectez-vous à votre nom de domaine. Vous pourrez alors voir la page d'accueil de votre instance Mastodon :
Vous pouvez vous connecter avec le compte administrateur que vous avez créé lors de l'installation afin de configurer des paramètres supplémentaires de votre instance, relier l'instance à une autre pour rejoindre un réseau fédéré, créer un autre compte utilisateur et commencer à partager des messages et des photos sur votre timeline. Si vous avez configuré l’Object Storage, tous les fichiers téléchargés vers l'instance sont automatiquement stockés dans votre bucket Object Storage et intégrés dans la timeline des utilisateurs :
Pour plus d'informations et la configuration avancée de Mastodon, veuillez consulter la documentation officielle.
Suite aux événements récents, vous êtes très nombreux à nous interroger sur nos pratiques et nos moyens de protection dans nos datacenters. Nous allons vous répondre avec un maximum de transparence.
Familink a récemment migré l’intégralité de son infrastructure d’AWS à Scaleway. Apprenez de leur retour d'expérience comment stocker vos données en Europe.
Pour lancer votre première instance, il vous faudra choisir celle qui sera la plus adapté à vos besoins. C'est sur cette première étape que nous allons vous guider ici.