A minap beállítottam egy Matrix home szervert a baráti körnek. Gondolkoztam rajta, hogy szükségem van-e a federation-re, és végül úgy döntöttem, hogy igen. Emellé még be kellett állítanom egy TURN szervert, hogy a hívások normálisan működjenek mindenki számára, mivel ha valaki NAT-olva van, akkor ott rendszerint nem hajlandó rendesen csatlakozni. A konténert egy Hetzner cloud VPS-en indítottam, Debian 10 alatt.

 

Szükséged lesz egy futó docker service-re, ha még nincs fent, akkor a https://get.docker.com/ segítségével egyszerűen telepíteni tudod. Javaslom egy git repository létrehozását ahová a docker-compose és nginx config fájlokat fel tudod pusholni.

Amennyiben még nincs feltéve a docker compose, úgy tedd fel az adott disztribúciónak megfelelően. (Ubuntu esetén apt install docker-compose)

Debian 10 esetén töltsd le a legfrissebb verziót (amit itt találsz: https://github.com/docker/compose/releases):

curl -L https://github.com/docker/compose/releases/download/1.28.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

Az nginx reverse proxy-hoz szükséged lesz egy SSL certificate-re, az alábbiakban a Let’s Encrypt certificate-jét fogjuk használni a certbot segítségével. Ha még nincs telepítve a certbot, akkor telepítsd a repository-ból:

apt install certbot

Majd pedig regisztráld a domain címedet:

certbot certonly --standalone

Jegyezd fel az SSL cert helyét, vagy használd a statikus címet (én a továbbiakban ezt fogom használni), ami az alábbi kéne, hogy legyen:

/etc/letsencrypt/archive/matrix.weboldalad.hu/

Hozd létre az nginx konfigurációs fájlt, ami reverse proxy-ként fog működni a Matrix Synapse szervernek és a federation-nek:

root@szerver:# vim /root/docker-config/nginx/conf.d/matrix.weboldalad.hu.conf 
server {
    listen 80;
        server_name matrix.weboldalad.hu;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
	listen 8448 ssl;
        server_name matrix.weboldalad.hu;

        access_log /var/log/nginx/matrix.weboldalad.hu.access.log;
        error_log /var/log/nginx/matrix.weboldalad.hu.error.log;

# amennyiben a letsencrypt soft linkjeit hasznalod es ujonnan generaltad az ssl certeket, akkor erdemes ujrainditani a docker service-t, mert nagy valoszinuseggel nem fogja latni a linkeket rendesen

        ssl on;
        ssl_certificate /etc/nginx/ssl/matrix.weboldalad.hu/fullchain1.pem;
        ssl_certificate_key /etc/nginx/ssl/matrix.weboldalad.hu/privkey1.pem;

	ssl_protocols TLSv1.2 TLSv1.3;
	ssl_prefer_server_ciphers on; 
	ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
	ssl_ecdh_curve secp384r1;
	ssl_session_timeout  10m;
	ssl_session_cache shared:SSL:10m;
	resolver 1.1.1.1 valid=300s;
	resolver_timeout 5s; 
	add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
	add_header X-Frame-Options DENY;
	add_header X-Content-Type-Options nosniff;
	add_header X-XSS-Protection "1; mode=block";

	location ~* ^(\/_matrix|\/_synapse\/client) {  
		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;
		client_max_body_size 50M;
	}
}

Hozz létre egy docker-compose.yaml fájlt a kedvenc szerkesztőddel, és illeszd be az alábbiakat, valamint szerkeszd meg az igényeidnek megfelelően:

version: '2'
services:
 web:
  image: nginx
  restart: unless-stopped
  container_name: nginx
  ports:
   - "80:80"
   - "443:443"
   - "8448:8448"
  volumes:
   - /root/docker-config/nginx/conf.d/:/etc/nginx/conf.d/
   - /etc/letsencrypt/archive/matrix.weboldalad.hu/:/etc/nginx/ssl/matrix.zoliben.com
  links:
   - synapse

 synapse:
  image: matrixdotorg/synapse
  restart: unless-stopped
  volumes:
   - /data/matrix:/data

A Mátrix konfigurációs és egyéb fájljait (többek között a feltöltött képeket is) a /data/matrix mappában tárolom a példában.

Hozd létre a konfigurációs fájlokat:

docker run -it --rm -v /data/matrix:/data -e SYNAPSE_SERVER_NAME=matrix.weboldalad.hu -e SYNAPSE_REPORT_STATS=yes matrixdotorg/synapse:latest generate

Ezután még szükség van a federation beállítására a konfigurációs fájlban: /data/matrix/homeserver.yaml
Keresd meg a „listeners:” részt, és töröld a kommenteket a 8448-as portra vonatkozó rész elől, hogy hasonlóan fessen (mivel reverse proxy-t használunk, ezért nincs szükség TLS-re az applikáció szintjén):

listeners:
  # TLS-enabled listener: for when matrix traffic is sent directly to synapse.
  #
  # Disabled by default. To enable it, uncomment the following. (Note that you
  # will also need to give Synapse a TLS key and certificate: see the TLS section
  # below.)
  #
  - port: 8448
    type: http
    tls: false
    resources:
      - names: [client, federation]

  # Unsecure HTTP listener: for when matrix traffic passes through a reverse proxy
  # that unwraps TLS.
  #
  # If you plan to use a reverse proxy, please see
  # https://github.com/matrix-org/synapse/blob/master/docs/reverse_proxy.md.
  #
  - port: 8008
    tls: false
    type: http
    x_forwarded: true

    resources:
      - names: [client, federation]
        compress: false