Matrix (Synapse) a Element – Raspberry Pi Ubuntu 24.04 server LTS Docker

Funkcie (Čo to dokáže?)

  • End-to-End šifrovanie (E2EE): Tvoje správy sú šifrované priamo v zariadení. Ani ty ako admin servera si ich (teoreticky) neprečítaš v databáze.
  • Federácia: Môj server na IP 10.10.8.5 sa môže (ak to dovolím) prepojiť s ostatnými servermi na svete (napr. matrix.org).
  • Mosty (Bridges): Matrix dokáže pomocou doplnkov prepojiť správy z WhatsAppu, Telegramu alebo Signalu do jednej aplikácie.
  • Multimédiá: Podpora pre prenos súborov, hlasové správy a video hovory (cez Jitsi alebo LiveKit).
  • Synchrónnosť: Môžeš byť prihlásený na mobile, webe aj desktope naraz a všetko sa okamžite synchronizuje.

Minimálne HW požiadavky (Raspberry Pi / Ubuntu)

Matrix (Synapse) je napísaný v Pythone a vie byť celkom „hladný“ na RAM, najmä ak začneš používať federáciu (pripájať sa do veľkých miestností).

KomponentMinimum (1-5 používateľov)Odporúčané (pre plynulý chod)
CPUARMv7 / ARMv8 (RPi 3 a novšie)RPi 4 alebo 5 (4 jadrá)
RAM1 GB (veľmi tesné, treba Swap)2 GB – 4 GB
Disk16 GB MicroSD (Class 10)32 GB+ (ideálne SSD cez USB 3.0)
Sieť100 Mbps (Ethernet)1 Gbps Ethernet

Poznámka

Nakoľko tento manuál vznikol po inštalácií a konfigurácií Matrix Chat, tak sa mi odlišujú IP adresy a porty.

Vytvorenie priečinkov

V kontajneroch vytvoríme nový priečinok napr. chat

mkdir chat

Vytvoríme tomto priečinku chat vytvoríme ďalší priečinok s názvom element

mkdir element

Vytvorenie config.janson

v textovom editore vytvoríme config.janson

nano config.janson

Do neho vložíme, IP adresu, na ktorej chceme aby bežala služba

{
  "default_server_config": {
    "m.homeserver": {
      "base_url": "http://10.10.8.5:8008",
      "server_name": "10.10.8.5"
    }
  }
}

Generovanie počiatočnej konfigurácie Synapse

Pred spustením samotného Compose musíme vygenerovať základné konfiguračné súbory Synapse (homeserver.yaml), inak kontajner nenaštartuje správne.

sudo docker run -it --rm \
  -v $(pwd)/data:/data \
  -e SYNAPSE_SERVER_NAME=10.10.8.5 \
  -e SYNAPSE_REPORT_STATS=no \
  matrixdotorg/synapse:latest generate

Výstup:

sudo docker run -it --rm \
> -v $(pwd)/data:/data \
> -e SYNAPSE_SERVER_NAME=10.10.8.5 \
> -e SYNAPSE_REPORT_STATS=no \
> matrixdotorg/synapse:latest generate
[sudo] password for ivan:
Unable to find image 'matrixdotorg/synapse:latest' locally
latest: Pulling from matrixdotorg/synapse
53196b1f47bd: Pull complete
e7f2a93f0c7a: Pull complete
3c389b3eef21: Pull complete
b08101a833d6: Pull complete
ad999efbff48: Pull complete
6a1e34c16502: Pull complete
2bc10f896e2b: Pull complete
338cdf1f8dc0: Pull complete
ddd420bbfc56: Pull complete
fcc2c9933709: Pull complete
Digest: sha256:9d6bef0a269608d4422bbc5a39140f4a7f667802bcdac143eac0f41f80924dcf
Status: Downloaded newer image for matrixdotorg/synapse:latest
Creating log config /data/10.10.8.5.log.config
Setting ownership on /data to 991:991
Generating config file /data/homeserver.yaml
Generating signing key file /data/10.10.8.5.signing.key
A config file has been generated in '/data/homeserver.yaml' for server name '10.10.8.5'. Please review this file and customise it to your needs.

Vytvorenie docker-compose.yaml

Vytvoríme docker-compose.yaml (ja som to chcel zámerne na porte 4000)

services:
  synapse:
    image: matrixdotorg/synapse:latest
    container_name: synapse
    restart: always
    environment:
      SYNAPSE_SERVER_NAME: "10.10.8.5"
      SYNAPSE_REPORT_STATS: "no"
    volumes:
      - ./data:/data
    ports:
      - "8008:8008"

  element:
    image: vectorim/element-web:latest
    container_name: element
    restart: always
    ports:
      - "4000:80"
    volumes:
      - ./element/config.json:/app/config.json


Spustenie docker compose

Potom spustíme príkazok

sudo docker compose up -d

Môžeme sledovať logy

sudo docker logs -f synapse
sudo docker logs -f element

Teraz môžeme ísť na webovú stránku

http://10.10.8.5:4000/

Vytvorenie užívateľa

Keď všetko prebehne v poriadku, vytvoríme užívateľa idealne prveho, ako admin

sudo docker exec -it synapse register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml

Nevytvárajú sa účty pomocou GUI, ale len pomocou príkazového riadku

Otvoríme si, chat vo webovom prehliadači a klikneme na Invite už vopred vytvoreného užívateľa

Vypisuje sa to v takomto tvare

Verejný chat

Ak chceme mať chat verejný je potrebné urobiť portforwarding. Je potrebné urobiť 2.

  • Jedno pravidlo na prístup na webové rozhranie u mňa port 3090
  • Druhé, aby sa mohli odosielať správy

Vo fortigate to vyzerá následovne

Potom následne ísť do FireWall Policy

A tu vytvorené pravidla pridať

Potom následne kliknúť na Apply

Potom u poskytovateľa domený je potrebné urobiť A záznam

Upozornenie mobilná aplikácia potrebuje SSL certifikát, inak sa nedokáže pripojiť na server

naspäť