Installation d'une instance Peertube (sur Debian Stretch 9.6)
Exemple d'installation d'une instance Peertube en mode production, publique pour le web (extranet).
Il existe une version YunoHost ainsi qu'en conteneur Docker
1 - Le choix du serveur (attention au transcodage)
Concernant le processeur, attention à ne pas prendre de CPU trop faible comme par exemple un Intel Atom, car Peertube transcode chaque vidéo uploadée sur le serveur lui-même via ffmpeg. Et plus le CPU est petit plus cela va mettre du temps. Pour exemple sur un serveur Kimsufi KS-3 CPU Intel Atom N2800 - 2 threads réservés pour une vidéo de 6 minutes uploadée (1080p 6Mbps). Rappel : le fichier original en 1080p (ou plus) est lui-aussi transcodé.
Résolution | Total | Ratio |
---|---|---|
1080 | 60 minutes | x10 |
480 | 15 minutes | x2.5 |
360 | 11 minutes | x1.83 |
720 | 29 minutes | x4.83 |
240 | 6 minutes | x1 |
Total = 60 + 15 + 11 + 29 + 6 = 121 minutes = 2 heures de conversion pour 6 minutes de vidéos
La même chose sur un Xeon E3-1225 V2 dans les mêmes conditions :
Résolution | Total | Ratio |
---|---|---|
1080 | 7 minutes | x1 |
480 | 2 minutes | x0.3 |
360 | 2 minutes | x0.3 |
720 | 3 minutes | x0.5 |
240 | 2 minutes | x0.3 |
Total = 7 + 2 + 2 + 3 + 2 = 16 minutes de conversion pour 6 minutes de vidéos
Chaque résolution transcodée engendre la création de fichiers vidéos supplémentaires (un fichier suffixé pour chaque définition inférieure). Ces fichiers réclament évidemment de l'espace. Si la vidéo originale en 1080p occupe 110Mo à elle seule, avec les définitions inférieures on arrive presque au double (total = 205Mo).
On pourrait donc être tenté de désactiver le transcodage dans les paramètres de Peertube, seulement :
- le fichier téléversé sur le serveur peut ne pas être compatible avec tous les navigateurs clients.
- certains clients n'ont pas le débit ADSL pour regarder la vidéo native en 1080, il faut donc proposer le 720p voire même en dessous pour économiser la bande passante pour les mobiles.
- il n'existe pour le moment aucun moyen facile de transcoder sur son PC toutes les résolutions et de téléverser les fichiers directement. Ce qui aurait été pratique pour ceux qui ont la fibre. Si vous tentez un max de bricolage en base de données vous attend et il vaut mieux éviter.
Pour la mémoire évidemment tout dépend de la charge et du nombre de vidéos et d'utilisateurs à desservir, 2-4Go de RAM sont largement suffisants. Si plus, ce sera utilisé en tant que cache de vidéos et autres fichiers statiques par l'OS, cela n'est pas perdu.
Let's GO !
Vous vous apercevrez que la procédure "hardcore" est longue mais pas infaisable pour autant. Bon courage.
2 - Première connexion au serveur livré & préparation/personnalisation du système
Après livraison d'un serveur chez Kimsufi/SoYouStart/PeuImporte, se connecter en root avec le couple login/mot de passe fourni par courriel. Rappel : les courriels sont aussi visibles depuis l'interface client (Mon Compte > Mes emails > "Installation de votre serveur terminée").
Mise à jour du serveur (pas toujours nécessaire)
Code BASH :
root@peertube:~#apt-get update root@peertube:~#apt-get upgrade root@peertube:~#cat /etc/debian_version 9.6
Remettre le serveur dans le bon fuseau horaire (Europe/Paris)
Code BASH :
root@peertube:~#dpkg-reconfigure tzdata
Création d'un utilisateur lambda* + génération d'une paire de clés
Code BASH :
root@peertube:~#useradd lambda -d /home/lambda -m -s /bin/bash root@peertube:~#su - lambda lambda@peertube:~$ssh-keygen lambda@peertube:~$exit
* = Le nom lambda est ici volontairement générique car donner le d'utilisateur réel que j'utilise serait une aide pour d'éventuels tipiakeurs. Donc à vous de le remplacer par ce que vous voulez, soyez inventif.
Activer le mécanisme de sudoers + rajouter lambda aux sudoers
Code BASH :
root@peertube:~#apt install sudo root@peertube:~#usermod -aG sudo lambda
Positionner un mot de passe à l'utilisateur lambda
Code BASH :
root@peertube:~#passwd lambda
Contrôle
A ce stade vérifier que lambda peut se connecter en SSH au serveur avec son mot de passe (avec une nouvelle session à part). Une fois connecté vérifier que lambda peut passer root via sudo :
Code BASH :
lambda@peertube:~$sudo su - root@peertube:~#
Sécurisations SSH (Facultatif mais très conseillé)
Copier votre clé publique dans le fichier authorized_keys de lambda (dans mon cas depuis Mobaxterm). Suivre ce tutoriel pour plus d'informations. La même chose peut se faire avec PuTTY, et c'est bien évidemment encore plus facile depuis Linux.
Code BASH :
ssh-copy-id lambda@IP_SERVEUR
Reconfigurer le démon SSHD :
Code BASH :
root@peertube:~#vi /etc/ssh/sshd_config
- Port XXXX (changer le port par défaut, mettre autre que 22)
- LoginGraceTime (descendre)
- MaxAuthTries (descendre)
- PermitRootLogin no (ne pas autoriser la connexion au compte root depuis SSH)
- PubkeyAuthentication yes (activer l'authentification par clé publique)
- X11Forwarding yes (activer la redirection X11, vous en aurez besoin, activé par défaut)
- PasswordAuthentication no (désactiver l'authentification par mot de passe)
Relancer le démon SSHD pour prendre en compte les changements :
Code BASH :
root@peertube:~#systemctl restart sshd
Dorénavant seul l'utilisateur lambda peut se connecter au serveur sur le nouveau port SSH indiqué et uniquement avec la clé publique du client (Mobaxterm/PuTTY).
Installation de divers paquets intéressants
Code BASH :
root@peertube:~#apt-get install htop iperf iperf3 speedtest-cli ufw curl file fail2ban
Tester la bande passante du serveur :
Code BASH :
root@peertube:~# speedtest-cli Retrieving speedtest.net configuration... Testing from OVH SAS (188.165.236.17)... Retrieving speedtest.net server list... Selecting best server based on ping... Hosted by Naitways (Paris) [1.88 km]: 5.041 ms Testing download speed................................................................................ Download: 818.86 Mbit/s Testing upload speed.................................................................................................... Upload: 251.53 Mbit/s
Code BASH :
root@peertube:~# iperf -c ping.online.net ------------------------------------------------------------ Client connecting to ping.online.net, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 3] local 188.165.236.17 port 39566 connected with 62.210.18.40 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 301 MBytes 252 Mbits/sec
Configuration et activation du pare-feu (facultatif mais très conseillé)
Code BASH :
root@peertube:~#ufw logging off #(désactiver journalisation) root@peertube:~#ufw allow 80/tcp #(Peertube NGINX HTTP) root@peertube:~#ufw allow 443/tcp #(Peertube NGINX HTTPS) root@peertube:~#ufw allow 9000/tcp #(Peertube Node.js websockets)
Concernant l'accès via SSH :
Option 1 - Soit SSH accessible uniquement depuis la maison, s'assurer d'avoir une IP fixe ! (Plus sécurisé)
Code BASH :
root@peertube:~#ufw allow proto tcp from $IP_MAISON to any port $PORT_SSH
Option 2 - Soit SSH accessible depuis partout (Moins sécurisé, trouvable par nmap)
Code BASH :
root@peertube:~#ufw allow $PORT_SSH/tcp
Facultatif - Ajout supervision par SNMP (par exemple avec Centreon) accessible uniquement depuis la maison, s'assurer d'avoir une IP fixe :
Code BASH :
root@peertube:~#ufw allow proto udp from $IP_MAISON to any port 161
Activer le pare-feu et activer son lancement au démarrage :
Code BASH :
root@peertube:~#ufw enable root@peertube:~#systemctl enable ufw
Faire un reboot et confirmer que le serveur est toujours accessible.
3 - Pré-installation de Peertube
Installer les pré-requis (dépendances) - Partie 1
Code BASH :
apt-get install unzip nginx ffmpeg pgadmin3 pgtop pg-activity postgresql postgresql-contrib openssl g++ make redis-tools redis-server git certbot python-certbot-nginx xauth mediainfo
Installer les pré-requis (dépendances) - Partie 2 (Node.js - Version 10 au moment de la création de cette page)
Rappel : N'utilisez pas les versions majeures impaires de Node.js.
Code BASH :
root@peertube:~#curl -sL https://deb.nodesource.com/setup_10.x | bash - root@peertube:~#apt-get install -y nodejs
Installer les pré-requis (dépendances) - Partie 3 (Yarn)
Code BASH :
root@peertube:~#curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - root@peertube:~#echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list root@peertube:~#apt-get update && apt-get install yarn root@peertube:~# yarn --version 1.12.3
Créer l'utilisateur système peertube et renseigner son mot de passe
Code BASH :
root@peertube:~#useradd -m -d /var/www/peertube -s /bin/bash -p peertube peertube root@peertube:~#passwd peertube Entrez le nouveau mot de passe UNIX : Retapez le nouveau mot de passe UNIX : passwd: password updated successfully
Créer le rôle peertube + la base de données PostgreSQL nommée peertube_prod
Code BASH :
root@peertube:~#su - postgres postgres@peertube:~$createuser -P peertube [CHOISIR UN MOT DE PASSE ET LE RETENIR !!!] postgres@peertube:~$createdb -O peertube -E UTF8 -T template0 peertube_prod postgres@peertube:~$psql -c "CREATE EXTENSION pg_trgm;" peertube_prod postgres@peertube:~$psql -c "CREATE EXTENSION unaccent;" peertube_prod
4 - Récupération & installation de Peertube
Créer les dossiers d'installation :
Code BASH :
root@peertube:~#su - peertube peertube@peertube:~$cd /var/www/peertube && sudo -u peertube mkdir config storage versions && cd versions
Récupérer le nom de la dernière version disponible :
Code BASH :
peertube@peertube:~$export VERSION=$(curl -s https://api.github.com/repos/chocobozzz/2018/217/releases/latest | grep tag_name | cut -d '"' -f 4) && echo "Latest Peertube version is $VERSION"
Récupération du .zip de la dernière version :
Code BASH :
peertube@peertube:~$cd /var/www/2018/217/versions peertube@peertube:~/versions$wget -q "https://github.com/Chocobozzz/2018/217/releases/download/${VERSION}/peertube-${VERSION}.zip"
Dézip et création d'un lien symbolique :
Code BASH :
peertube@peertube:~/versions$unzip peertube-${VERSION}.zip && rm peertube-${VERSION}.zip peertube@peertube:~/versions$cd ../ && ln -s versions/peertube-${VERSION} ./peertube-latest
Installation :
Code BASH :
peertube@peertube:~$cd ./peertube-latest && yarn install --production --pure-lockfile yarn install v1.12.3 [1/5] Validating package.json... ... ... ... ... Done in 20.68s. Done in 60.29s.
5 - Configurer Peertube + divers
Copier le modèle de fichier de configuration fourni :
Code BASH :
root@peertube:~#cd /var/www/peertube && sudo -u peertube cp peertube-latest/config/production.yaml.example config/production.yaml
Editez le fichier de configuration :
Code BASH :
root@peertube:~#vi /var/www/2018/217/config/production.yaml
Le remplacement des deux premières valeurs du tableau est indispensable ! Le reste peut être fait plus tard via l'interface d'administration web.
Nom valeur | Par défaut | Description | Exemple |
---|---|---|---|
webserver-hostname | example.com | FQDN instance | video.jonathandupre.fr |
database-password | peertube | Mot de passe du rôle peertube (postgresql) | |
log-level | info | Verbosité du log | warning |
admin-email | admin@example.com | Adresse courriel compte admin | |
transcoding-threads | 1 | Nombre de threads occupés pour l'encodage | Selon le nombre de cœurs de votre serveur (2 pour un quad core) |
Configurer NGINX
Copier le fichier de configuration fourni :
Code BASH :
root@peertube:~#cp /var/www/2018/217/peertube-latest/support/nginx/peertube /etc/nginx/sites-available/peertube
Remplacez le domaine peertube.example.com par le vrai nom de domaine de votre instance :
Code BASH :
root@peertube:~#sed -i 's/peertube.example.com/video.monsite.fr/g' /etc/nginx/sites-available/peertube
Activer ce fichier de configuration dans nginx :
Code BASH :
root@peertube:~#ln -s /etc/nginx/sites-available/peertube /etc/nginx/sites-enabled/peertube
6 - Procédure de génération du certificat Let's Encrypt
Maintenant assurez-vous que le nom de domaine pointe bien sur votre serveur dans la zone DNS (video.monsite.fr --> IP_SERVEUR). Cela est nécessaire pour Let's Encrypt.
Arrêter Nginx :
Code BASH :
root@peertube:~#systemctl stop nginx
Commenter les directives ssl_certificate and ssl_certificate_key (lignes 22 et 23) :
Code BASH :
root@peertube:~# vim /etc/nginx/sites-available/peertube
Lancer certbot et répondre aux questions de l'assistant :
Code BASH :
root@peertube:~#certbot --authenticator standalone --installer nginx --post-hook "systemctl start nginx"
Décommenter les directives ssl_certificate and ssl_certificate_key (lignes 22 et 23) :
Code BASH :
root@peertube:~#vim /etc/nginx/sites-available/peertube
Nginx est déja relancé par l'option post-hook de certbot, envoyer un signal pour qu'il recharge sa configuration :
Code BASH :
root@peertube:~#systemctl reload nginx
TCP/IP Tuning
Code BASH :
root@peertube:~#cp /var/www/2018/217/peertube-latest/support/sysctl.d/30-peertube-tcp.conf /etc/sysctl.d/ root@peertube:~#sysctl -p /etc/sysctl.d/30-peertube-tcp.conf net.core.default_qdisc = fq_codel net.ipv4.tcp_congestion_control = bbr
systemd
Copier l'unité fournie, l'ajouter au système et activer le lancement automatique de peertube au boot :
Code BASH :
root@peertube:~#cp /var/www/2018/217/peertube-latest/support/systemd/peertube.service /etc/systemd/system/ root@peertube:~#systemctl daemon-reload root@peertube:~#systemctl enable peertube
7 - Démarrer Peertube
A ce stade, il est acquis que Nginx, Postgres et Redis soient déjà lancés avant de démarrer Peertube.
Code BASH :
root@peertube:~#ps -ef | grep redis redis 24322 1 0 01:02 ? 00:00:01 /usr/bin/redis-server 127.0.0.1:6379
Code BASH :
root@peertube:~#ps -ef | grep nginx root 27491 1 0 01:50 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; www-data 27492 27491 0 01:50 ? 00:00:00 nginx: worker process www-data 27493 27491 0 01:50 ? 00:00:00 nginx: worker process www-data 27494 27491 0 01:50 ? 00:00:00 nginx: worker process www-data 27495 27491 0 01:50 ? 00:00:00 nginx: worker process
Code BASH :
root@peertube:~#ps -ef | grep postgres postgres 23454 1 0 00:49 ? 00:00:00 /usr/lib/postgresql/9.6/bin/postgres -D /db/postgresql/9.6/main -c config_file=/etc/postgresql/9.6/main/postgresql.conf postgres 23456 23454 0 00:49 ? 00:00:00 postgres: 9.6/main: checkpointer process postgres 23457 23454 0 00:49 ? 00:00:00 postgres: 9.6/main: writer process postgres 23458 23454 0 00:49 ? 00:00:00 postgres: 9.6/main: wal writer process postgres 23459 23454 0 00:49 ? 00:00:00 postgres: 9.6/main: autovacuum launcher process postgres 23460 23454 0 00:49 ? 00:00:00 postgres: 9.6/main: stats collector process
Ces 3 services sont UP, n'oubliez pas également la messagerie pour l'envoi des courriels si vous utilisez cette fonction. On peut lancer :
Code BASH :
root@peertube:~#systemctl start peertube
Le lancement se fait en background (démon), utiliser cette commande suivante pour voir si tout va bien (suivi du log) :
Code BASH :
root@peertube:~#journalctl -feu peertube
En cas d'erreur en boucle, faire un stop pour analyser le problème (stacktrace), au besoin le log par défaut sort dans /var/log/syslog. Si vous avez tout bien fait, vous pouvez vous connecter à votre instance en https :
8 - Se connecter à Peertube
L'utilisateur par défaut est "root" sur l'interface web, il est créé d'office dans la base PostgreSQL peertube_prod. Mais son mot de passe est dans les logs. Changeons-le dès maintenant en utilisant le script fourni :
Code BASH :
root@peertube:/var/log# su - peertube peertube@peertube:~$ cd /var/www/2018/217/peertube-latest && NODE_CONFIG_DIR=/var/www/2018/217/config NODE_ENV=production npm run reset-password -- -u root > peertube@1.0.1 reset-password /var/www/2018/217/versions/peertube-v1.0.1 > node ./dist/scripts/reset-password.js "-u" "root" New password? User password updated. peertube@peertube:~/peertube-latest$
Il ne vous reste plus qu'à l'utiliser sur l'interface pour rentrer :
Maintenant vous avez accès à tout pour créer les autres utilisateurs, configurer et uploader :
Rappel : n'utilisez pas l'utilisateur root pour publier des vidéos. root est un utilisateur technique qui sert uniquement pour administrer l'instance ponctuellement. Créez des comptes utilisateurs normaux et publiez vos vidéos avec ces autres comptes.