Installer riot sur son propre serveur

Par Dryusdan le

Dans ce petit article je vais vous expliquer comme installer le client Riot sur son propre serveur.
Déjà, qu'est ce que Riot. Riot est un client web opensource pour Matrix. Matrix est un protocole de chat libre et décentralisé. Couplé avec Turn il permet de faire chat, appel vidéo et appel audio.
Je fais surtout cet article pour aider ceux qui veulent installer Riot car mine de rien il est rare de trouver un tuto pour l'installer, par contre pour l'utiliser ça, il y en a. Cependant des tutos pour installer Synapse (serveur Matrix) ça il y en a donc je vais pas l'expliquer une énième fois ici...
Près ? Let's go !

Tout d'abord vous allez avoir besoin de wget, de tar, de useradd et de votre serveur frontal préféré (le miens étant nginx le tuto appliquera une configuration nginx, mais vous pouvez utiliser celui que vous voulez :) ) et votre client ACME (pour avoir un certificat x509), ici lego. Vous aurez aussi besoin d'un domaine / sous domaine, ici riot.domain.tld (beaucoup d'idée dans ce choix ^^ ) Une fois que vous êtes sur que vous avez ces commandes, rendez vous sur le dépot git : https://github.com/vector-im/riot-web/releases à l'onglet release. Vous récuperez le lien du logiciel le plus récent (ici le v0.16.0) :

cd /tmp/
wget https://github.com/vector-im/riot-web/releases/download/v0.16.0/riot-v0.16.0.tar.gz
Ensuite vous l'extrayez et vous le déplacer :
tar -xvf riot-v0.16.0.tar.gz
mv riot-v0.16.0 /var/www/riot
On créer l'utilisateur :
useradd -g www-data -M riot
Puis on attribut les droits au dossier :
chown -R riot:www-data /var/www/riot
Vous vous rendez dans le dossier, copiez le `config.sample.json` en `config.json` et vous le modifiez à votre sauce
cd /var/www/riot
cp config.sample.json config.json
vim config.json

Maintenant, Nginx !
Il faut d'abord génerer le certificat x509 :

mkdir -p /var/www/letsencrypt/riot.domain.tld
lego -m ssl@domain.tld --webroot /var/www/letsencrypt/riot.domain.tld/ --path /etc/nginx/ssl/ -d riot.domain.tld -t ec384 run
ec384 peut être remplacé par rsa4096 Il s'agit ici du type de certificat et de sa longueur souhaité. Une fois le certificat génerer il suffit juste de créer le fichier `riot.conf` dans le dossier /etc/nginx/sites-enabled/ et d'y ajouter les lignes suivante :
root /var/www/riot/;
index index.html index.php index.htm;
location / {
	try_files $uri $uri/ =404;
}
Ne mettez JAMAIS votre client riot sur le même sous domaine que le client Matrix au risque de permettre des failles XSS ! Le fichier nginx dans toute sa longueur (à adapter selon vos besoins quand même :
server {
	listen 80;
	listen [::]:80;
	server_name riot.domain.tld;

        location /.well-known/acme-challenge {
                root /var/www/letsencrypt/riot.domain.tld;
                allow all;
        }

        location / {
                return 301 https://riot.domain.tld$request_uri;
        }
 
}

 
    
server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;
	server_name riot.domain.tld;
	root /var/www/riot/;
	index index.html index.php index.htm;

	access_log /var/log/nginx/riot.domain.tld.access.log;
	error_log /var/log/nginx/riot.domain.tld.error.log;

	add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Frame-Options "SAMEORIGIN" always;
	add_header Strict-Transport-Security "max-age=31536000";
	ssl_dhparam /etc/nginx/ssl/private/dhparam.pem;
    
    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_ecdh_curve X25519:P-521:P-384:P-256;
    ssl_prefer_server_ciphers on;
    
    ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA";
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 15m;
    ssl_session_tickets off;

	ssl_certificate /etc/nginx/ssl/certificates/riot.domain.tld.crt;
	ssl_certificate_key /etc/nginx/ssl/certificates/riot.domain.tlkd.key;
    
	location / {
		try_files $uri $uri/ =404;
	}

    location = /robots.txt {
		allow all;
		log_not_found off;
		access_log off;
     }

     location = /favicon.ico {
		log_not_found off;
		access_log off;
     }

     location /.well-known/acme-challenge {
         root /var/www/letsencrypt/riot.domain.tld;
         allow all;
     }

}

Voilà, petit tuto rapide. Si vous voyez une faute, une idée d'amélioration n'hésitez pas et si vous voulez partager votre configuration Apache, Haproxy etc, n'hésitez pas non plus ;)

PS : j'ai lancé un serveur matrix et un client riot sur drycat, vous pouvez venir, c'est ouvert ;)