Installer riot sur son propre serveur

Informatique 10 août 2018

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 ;)

Mots clés

Dryusdan

Chasseur de bug et régleur de problÚme (alias DevOps).