# installer matrix / synapse avec docker sur linux

description : comment installer le serveur matrix : synapse avec docker sur linux
categories : Sysadmin;
tags : Linux; Docker; Freec0ding;
Table Of Contents

intro

Ici, je vais détailler l'installation de synapse , le serveur matrix sur linux.

database

Pour installer la base de données, voir : comment installer mysql et postgresql avec docker sur linux.

Je crée la base de données pour synapse : Set up database :

sudo docker exec -it postgresql-container bash
su - postgres
1
2
createuser --pwprompt synapse_user
createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse

matrix

src : https://hub.docker.com/r/matrixdotorg/synapse :

Je crée le dossier utilisé pour le serveur synapse :

sudo mkdir -p /srv/matrix/data

Le fichier docker-compose pour matrix : matrix-docker-compose.yml :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
volumes:
  matrix_data:
    name: matrix-data
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /srv/matrix/data

networks:
  matrix_network:
    name: matrix-network
  sql_network:
    name: sql-network
    external: true

services:
  synapse:
    image: matrixdotorg/synapse:latest
    container_name: synapse-container
    restart: always
    volumes:
      - matrix_data:/data
    networks:
      - matrix_network
      - sql_network
    environment:
      - SYNAPSE_SERVER_NAME=matrix.freec0ding.dev
      - SYNAPSE_REPORT_STATS=no

Je génère le fichier de configuration pour synapse :

sudo docker-compose -p matrix -f ./matrix-docker-compose.yml run --rm synapse generate

Je backup le fichier de config pour synapse :

sudo cp /srv/matrix/data/homeserver.yaml /srv/matrix/data/homeserver.yaml.orig

J'édite le fichier de config /srv/matrix/data/homeserver.yaml pour utiliser postgresql :

1
2
3
4
5
6
7
8
9
database:
  name: psycopg2
  args:
    user: "synapse_user"
    password: "example-password"
    dbname: "synapse"
    host: "postgresql"
    cp_min: 5
    cp_max: 10

Je crée le container synapse-container :

sudo docker-compose -p matrix -f ./matrix-docker-compose.yml up -d

Je crée un utilisateur admin pour le serveur synapse :

sudo docker exec -it synapse-container bash
register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml --user sysc4ll --password example-password

nginx

Pour installer nginx, voir : comment installer nginx avec docker sur linux.

Le fichier de config synapse.conf dans le container web : /srv/web/nginx/conf/conf.d/synapse.conf :

src : synapse reverse_proxy.html#nginx

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    # For the federation port
    listen 8448 ssl default_server;
    listen [::]:8448 ssl default_server;

    server_name matrix.freec0ding.dev;

    ssl_certificate /etc/letsencrypt/live/freec0ding.dev/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/freec0ding.dev/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/freec0ding.dev/chain.pem;

    location ~ ^(/_matrix|/_synapse/client) {
        # note: do not add a path (even a single /) after the port in `proxy_pass`,
        # otherwise nginx will canonicalise the URI and cause signature verification
        # errors.
        proxy_pass http://synapse:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;

        # Nginx by default only allows file uploads up to 1M in size
        # Increase client_max_body_size to match max_upload_size defined in homeserver.yaml
        client_max_body_size 50M;
    
        # Synapse responses may be chunked, which is an HTTP/1.1 feature.
        proxy_http_version 1.1;
    }
}

Je restart le container nginx :

sudo docker exec nginx-container service nginx restart

Je peux maintenant me connecter avec un client comme : https://element.io/ sur matrix.freec0ding.dev en utilisant sysc4ll comme username et example-password comme mot de passe.

Table Of Contents