9.8 KiB
title | description | menu | ||||||
---|---|---|---|---|---|---|---|---|
Installation | Comment installer Mastodon sur un serveur Ubuntu 18.04 |
|
Configuration basique du serveur (facultatif)
Si vous configurez une nouvelle machine, il est recommandé de la sécuriser en premier lieu. En supposant que vous utilisez Ubuntu 18.04 :
Refuser les connections SSH par mot de passe (clés uniquement)
Assurez-vous tout d'abord que vous actuellement connecté à votre serveur en utilisant une clé SSH et non avec un mot de passe, sinon vous serez bloqué. La plupart des hébergeurs supportent l'envoi d'une clé SSH publique et configurent automatiquement la connexion à l'utilisateur root sur votre nouveau serveur via votre clé.
Ouvrez /etc/ssh/sshd_config
et cherchez PasswordAuthentication
. Assurez-vous que la ligne n'est pas commentée et qu'elle est réglée sur no
. Si vous avez apporté des modifications au fichier, redémarrez sshd :
systemctl restart ssh
Mettre à jour le système
apt update && apt upgrade -y
Installer fail2ban pour bloquer les tentatives de connexion répétées
apt install fail2ban
Ouvrez /etc/fail2ban/jail.local
et copiez-collez ceci à l'intérieur :
[DEFAULT]
destemail = votre@adresse_mail.ici
sendername = Fail2Ban
[sshd]
enabled = true
port = 22
[sshd-ddos]
enabled = true
port = 22
Enfin, redémarrez fail2ban :
systemctl restart fail2ban
Installer un pare-feu et mettre uniquement sur liste blanche les ports SSH, HTTP et HTTPS
D'abord, installez iptables-persistent. Durant l'installation, il vous sera demandé si vous voulez conserver les directives actuelles--refusez.
apt install -y iptables-persistent
Ouvrez /etc/iptables/rules.v4
et copiez-collez ceci à l'intérieur :
*filter
# Autoriser tout trafic sur la boucle locale (lo0) et refuser tout trafic vers 127/8 qui n'utilise pas lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Autoriser toutes les connexions entrantes établies
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Autoriser tout le trafic sortan - vous pouvez modifier cette ligne pour n'autoriser qu'un certain type de trafic
-A OUTPUT -j ACCEPT
# Autoriser les connexions HTTP et HTTPS de n'importe où (via les ports habituels pour les sites web et SSL)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Autoriser les connexions SSH
# Le nombre juste après -dport doit être le même que celui défini dans sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Autoriser le ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# Enregistrer les accès refusés par iptables
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Rejeter toutes les autres connexions entrantes - par défaut, refuser tout ce qui n'est pas défini explicitement par la directive ALLOW
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
Avec iptables-persistent, cette configuration sera chargée à chaque redémarrage. Mais puisque nous n'allons pas redémarrer tout de suite, nous devons la charger manuellement pour cette fois :
iptables-restore < /etc/iptables/rules.v4
Pré-requis
- Une machine exécutant Ubuntu 18.04 sur laquelle vous avez un accès root
- Un nom de domaine (ou un sous-domaine) pour l'instance Mastodon, ex.
exemple.com
- Un service d'envoi de courriel ou autre serveur SMTP
Vous exécuterez les commandes suivantes en tant qu'utilisateur root sur le serveur. Si vous n'êtes pas encore root, identifiez-vous :
sudo -i
Dépôts de paquets système
Assurez-vous que curl est installé :
apt install -y curl
Node.js
curl -sL https://deb.nodesource.com/setup_8.x | bash -
Yarn
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.list
Paquets système
apt update
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 libgdbm5 libgdbm-dev \
nginx redis-server redis-tools postgresql postgresql-contrib \
certbot yarn libidn11-dev libicu-dev libjemalloc-dev
Installation de Ruby
Nous utiliserons rbenv pour gérer les différentes versions de Ruby, car c'est plus facile pour récupérer les bonnes versions et se mettre à jour quand une nouvelle version est publiée. rbenv doit être installé pour qu'un seul utilisateur, nous devons donc créer le compte utilisateur que Mastodon utilisera par la suite :
adduser --disabled-login mastodon
Nous pouvons ensuite nous identifier :
su - mastodon
Et procéder à l'installation de rbenv et rbenv-build:
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
Une fois ceci fait, nous pouvons installer la bonne version de Ruby :
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.6.1
rbenv global 2.6.1
La version de gem fournie par défaut avec ruby_2.6.1 est incompatible avec la dernière version de bundler, nous devons donc mettre à jour gem :
gem update --system
Nous aurons aussi besoin d'installer bundler :
gem install bundler --no-document
Retournez sur root :
exit
Configuration
Mettre en place PostgreSQL
Configurer pour des performances optimales (facultatif)
Pour obtenir des performances optimales, vous pourriez utiliser pgTune afin de générer une configuration adéquate et modifier les valeurs si nécessaire dans /etc/postgresql/9.6/main/postgresql.conf
avant de redémarrer PostgreSQL avec systemctl restart postgresql
Créer un utilisateur
Vous devez créer un utilisateur PostgreSQL que Mastodon pourra utiliser. Il est plus facile de partir sur une authentification "ident" dans une configuration basique, c-à-d que l'utilisateur PostgreSQL n'a pas un mot de passe différent et peut être utilisé par l'utilisateur Linux portant le même nom.
Accédez à l'interface PostgreSQL :
sudo -u postgres psql
Là, exécutez ceci :
CREATE USER mastodon CREATEDB;
\q
C'est fait !
Mettre en place Mastodon
C'est le moment de télécharger le code source de Mastodon. Connectez-vous à l'utilisateur mastodon :
su - mastodon
Récupérer le code
Utilisez git pour télécharger la dernière version stable de Mastodon :
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)
Installer les dernières dépendances
Maintenant, installez les dépendances Ruby et JavaScript :
bundle install \
-j$(getconf _NPROCESSORS_ONLN) \
--deployment --without development test
yarn install --pure-lockfile
Générer un fichier de configuration
Lancez l'assistant de configuration interactif :
RAILS_ENV=production bundle exec rake mastodon:setup
L'assistant va :
- Créer un fichier de configuration
- Compiler les ressources web
- Créer la base de données
Le fichier de configuration est enregistré sous le nom de .env.production
. Vous pouvez le relire et le modifier à votre guise. Référez-vous à la [page de documentation]({{< relref "configuration.md" >}}) à ce sujet.
Nous en avons fini avec l'utilisateur mastodon, pour l'heure, passez à nouveau sur root :
exit
Mettre en place nginx
Copiez le modèle de configuration pour nginx depuis le dossier contenant Mastodon :
cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon
Modifiez /etc/nginx/sites-available/mastodon
pour remplacer example.com
par votre propre nom de domaine, et apportez les autres modifications que vous auriez à faire.
Rechargez nginx pour que les modifications soient prises en compte :
systemctl reload nginx
Obtenir un certificat SSL
Nous utiliserons Let's Encrypt pour obtenir un certificat SSL gratuitement :
certbot certonly --webroot -d example.com -w /home/mastodon/live/public/
Modifiez /etc/nginx/sites-available/mastodon
pour dé-commenter et adapter à votre cas les lignes ssl_certificate
et ssl_certificate_key
.
Enfin, rechargez nginx pour que les modifications soient prises en compte :
systemctl reload nginx
Vous devriez pouvoir désormais visiter votre domaine dans un navigateur web et voir l'éléphant frappant l'ordinateur avec un message d'erreur. C'est parce que nous n'avons pas encore démarré le processus Mastodon.
Mettre en place les services systemd
Copiez les modèles de fichiers service systemd depuis le dossier contenant Mastodon :
cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
Ouvrez les fichiers et assurez-vous que le nom d'utilisateur et les chemins d'accès sont corrects :
/etc/systemd/system/mastodon-web.service
/etc/systemd/system/mastodon-sidekiq.service
/etc/systemd/system/mastodon-streaming.service
Enfin, démarrez et activez les nouveaux services systemd :
systemctl start mastodon-web mastodon-sidekiq mastodon-streaming
systemctl enable mastodon-*
Ils démarreront automatiquement à chaque redémarrage de la machine.
Hourra ! C'est enfin fini. Vous pouvez accéder à votre instance depuis votre navigateur !