Det här sätter du upp
Matrix är ett öppet chattnätverk. Precis som med e-post kan vem som helst köra en server, och människor på olika servrar pratar med varandra som om de vore på samma server. Här består din server av två containrar i en pod, under en egen användare som heter matrix:
- Synapse, referensservern för Matrix,
- PostgreSQL, dess databas.
Caddy, som du satte upp i Podman-guiden, sköter HTTPS framför den. Adresserna ser ut som @anna:example.com, medan själva servern körs på matrix.example.com, så att example.com kan fortsätta vara din webbplats.
Varje steg nedan har körts på en nyinstallerad VC-P Alloy (2 vCPU, 8 GB) hos Melonslab med Debian 13. Federationstestet från Matrix godkände servern över IPv4 och IPv6, en användare på testservern gick med i ett publikt rum på matrix.org och tog emot dess meddelanden, och allt startade igen av sig självt efter en omstart av servern. Med servern ansluten till det rummet använde Synapse och PostgreSQL under 200 MB minne. Röst- och videosamtal kräver mer resurser och sätts upp i samtalsguiden.
Innan du börjar
Du behöver:
- en server uppsatt som i Podman-guiden, med Caddy igång;
- en domän, till exempel
example.com, med en A-post och en AAAA-post förmatrix.example.comsom pekar på din server; - ett sätt att publicera två små filer på
https://example.com, antingen via Caddy på den här servern eller där din webbplats ligger (steg 6).
Exemplen använder example.com. Byt genomgående ut det mot ditt eget.
1. Skapa användaren
Som root:
useradd -m -s /bin/bash matrix
loginctl enable-linger matrix
machinectl shell matrix@
Allt fram till steg 6 körs som matrix.
2. Skapa Synapses konfiguration
podman run --rm -v matrix-data:/data \
-e SYNAPSE_SERVER_NAME=example.com -e SYNAPSE_REPORT_STATS=no \
docker.io/matrixdotorg/synapse:latest generate
Det skapar en volym, matrix-data, med Synapses konfiguration, dess hemligheter och serverns signeringsnyckel, som är dess identitet i Matrix-nätverket. Servernamnet blir en del av varje adress och kan inte ändras senare, så välj det med omsorg.
3. Skapa databaslösenordet
pw=$(openssl rand -hex 24)
printf %s "$pw" | podman secret create matrix-db-password -
printf 'database:\n name: psycopg2\n args:\n user: synapse\n password: "%s"\n dbname: synapse\n host: 127.0.0.1\n' "$pw" | podman secret create synapse-database -
unset pw
Den första hemligheten går till PostgreSQL. Den andra är databasdelen av Synapses konfiguration, som Synapse läser som en fil, så lösenordet skrivs inte in i någon av filerna nedan.
4. Definiera podden
mkdir -p ~/.config/containers/systemd ~/matrix
Skapa ~/.config/containers/systemd/matrix.pod:
[Pod]
PodName=matrix
# Only Caddy, on this server, can reach Synapse: the port is not open to the internet.
PublishPort=127.0.0.1:8082:8008
[Install]
WantedBy=default.target
Skapa ~/.config/containers/systemd/matrix-db.container:
[Container]
ContainerName=matrix-db
Image=docker.io/library/postgres:18-alpine
Pod=matrix.pod
Volume=matrix-db:/var/lib/postgresql
Environment=POSTGRES_USER=synapse POSTGRES_DB=synapse
Environment="POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C"
Secret=matrix-db-password,type=env,target=POSTGRES_PASSWORD
AutoUpdate=registry
[Service]
Restart=always
Synapse kräver en databas med sorteringsordningen C, som POSTGRES_INITDB_ARGS ställer in när databasen skapas första gången.
Skapa ~/.config/containers/systemd/matrix-synapse.container:
[Unit]
After=matrix-db.service
[Container]
ContainerName=matrix-synapse
Image=docker.io/matrixdotorg/synapse:latest
Pod=matrix.pod
Volume=matrix-data:/data
Volume=%h/matrix/synapse.yaml:/config/synapse.yaml:ro
Secret=synapse-database,type=mount,target=/config/database.yaml,uid=991,gid=991,mode=0400
Exec=run --config-path /data/homeserver.yaml --config-path /config/synapse.yaml --config-path /config/database.yaml
AutoUpdate=registry
[Service]
Restart=always
Och ~/matrix/synapse.yaml, dina egna inställningar:
public_baseurl: https://matrix.example.com/
Synapse läser de tre konfigurationsfilerna i tur och ordning, och en inställning i en senare fil ersätter samma inställning i en tidigare. På så sätt hamnar dina ändringar utanför den genererade filen: här den publika adressen och bytet från den inbyggda SQLite-databasen till PostgreSQL. Synapse släpps med några veckors mellanrum, och latest med AutoUpdate håller den uppdaterad; den uppdaterar sin databas själv när den startar.
5. Starta den
systemctl --user daemon-reload
systemctl --user start matrix-pod
podman logs -f matrix-synapse
När loggen visar Synapse now listening on TCP port 8008 trycker du Ctrl+C. En varning strax innan, om att Synapse inte kunde lyssna på 0.0.0.0, är ofarlig: den lyssnar på [::], som även täcker IPv4.
6. Sätt Caddy framför
Gå tillbaka till root med exit och byt till Caddys användare:
machinectl shell caddy@
Lägg till det här blocket sist i ~/Caddyfile:
matrix.example.com {
reverse_proxy /_matrix/* 127.0.0.1:8082
reverse_proxy /_synapse/client/* 127.0.0.1:8082
}
Bara de sökvägar som Matrix-appar och andra servrar använder skickas vidare, så Synapses admingränssnitt går bara att nå från själva servern.
Nu till de två filerna på https://example.com. De talar om för andra servrar och appar att Matrix-servern för example.com är matrix.example.com. Om example.com pekar på den här servern lägger du till:
example.com {
header /.well-known/matrix/* Content-Type application/json
header /.well-known/matrix/* Access-Control-Allow-Origin *
respond /.well-known/matrix/server `{"m.server": "matrix.example.com:443"}`
respond /.well-known/matrix/client `{"m.homeserver": {"base_url": "https://matrix.example.com"}}`
}
Om example.com redan har ett block i Caddyfile lägger du de fyra raderna i det blocket i stället: Caddy godtar inte två block för samma adress. Om din webbplats körs någon annanstans publicerar du samma två filer där, på /.well-known/matrix/server och /.well-known/matrix/client, med samma två headers.
Starta om Caddy, vilket kort avbryter alla webbplatser den serverar:
systemctl --user restart caddy
7. Skapa ditt konto
Gå tillbaka till root med exit, byt till användaren matrix med machinectl shell matrix@ och kör:
podman exec -it matrix-synapse register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008
Den frågar efter användarnamn och lösenord, och om kontot ska vara admin. Ingen kan registrera sig på servern på egen hand, så skapa konton åt andra på samma sätt.
Logga in med en Matrix-app, till exempel Element från element.io: ange example.com som server, så hittar appen matrix.example.com själv. I Element är privata chattar end-to-end-krypterade som standard.
8. Kontrollera federationen
Öppna https://federationtester.matrix.org, ange example.com och kontrollera att den rapporterar att allt fungerar. Gå sedan med i ett publikt rum på en annan server från din app. Första gången du går med i ett stort rum kan det ta några minuter, eftersom din server hämtar rummets historik.
9. Håll den uppdaterad
Slå på Podmans dagliga uppdateringar för den här användaren:
systemctl --user enable --now podman-auto-update.timer
10. Säkerhetskopiera
mkdir -p ~/backup
podman exec matrix-db pg_dump -U synapse synapse > ~/backup/synapse-db.sql
podman volume export matrix-data --output ~/backup/matrix-data.tar
Det sparar databasen i en egen fil och konfigurationen, signeringsnyckeln och uppladdade filer i ett arkiv. Kopiera sedan ~/backup till en annan maskin och förvara kopian säkert: den som har signeringsnyckeln kan uppträda som din server.
Felsökning
Federationstestet rapporterar ett problem med .well-known. Öppna https://example.com/.well-known/matrix/server i en webbläsare; den ska visa JSON-texten från steg 6.
Synapse avbryter starten med ett meddelande om databasens sorteringsordning (collation). Databasen skapades utan sorteringsordningen C, och POSTGRES_INITDB_ARGS gäller bara för en tom volym. På en ny server stoppar du podden, raderar databasen med podman volume rm matrix-db och startar igen.
Synapse meddelar att konfigurationsfilen inte finns. Steg 2 har inte körts som den här användaren, eller så har volymen i steg 2 och i matrix-synapse.container olika namn.
Samtal och mer
Röst- och videosamtal kräver en egen samtalstjänst. Samtalsguiden lägger till en på den här servern, för Elements appar och för äldre appar. Hermes Agent kan ansluta till den som en AI-assistent du chattar med.
Med din Matrix-server på en server hos Melonslab lagras dina konton, rum och meddelanden i Sverige, på en server du själv styr över, där svensk lag och EU-rätt gäller.