Matrix je open source standard (protokol) pro VoIP, instant messaging a videohovory, tedy komunikaci v reálném čase. Poskytuje end-to-end šifrování spolu s podporou pro mosty k různým dalším alternativám zasílání zpráv, jako je Slack, IRC, Telegram nebo jakýkoli jiný klient XMPP. Může pracovat i s připojením s nízkou šířkou pásma.
V tomto tutoriálu vám ukážu, jak nainstalovat Matrix homeserver Synapse pomocí kontejnerů Docker.
Co je to domovský server Matrix?
Matrix je sám o sobě pouze specifikací a existuje mnoho implementací protokolu Matrix, které jsou veřejně dostupné.
Domácí servery jsou v podstatě jakékoli z těchto implementací nasazených na serveru, ke kterým můžete přistupovat prostřednictvím jakéhokoli klienta Matrix, jako je Element.
Může vyvstat otázka, proč zřizovat soukromé domácí servery, když už jsou některé veřejně dostupné?
Pro začátek můžete svůj soukromý domácí server sdílet se svými přáteli, rodinou nebo kolegy a používat jej jako své každodenní komunikační médium. Pokud se nezapojíte do konverzace s nějakým uživatelem z jiného domácího serveru, všechna data budou na vašem serveru v bezpečí.
To vám dává kontrolu nad každým jeho aspektem, který veřejné domácí servery nejsou schopny poskytnout.
Implementace homserveru Synapse Matrix pomocí kontejnerů Docker
V tomto tutoriálu budu používat Synapse, populární implementaci Matrix homeserveru. Synapse, napsaný v Pythonu, je vyvinut základním týmem Matrixu.
My v Linux Handbook upřednostňujeme docker před nativním nasazením, takže následující části se budou týkat nasazení Synapse prováděného pomocí Dockeru.
Předpoklad
- Systém/server Linux. Pro rychlé nasazení linuxového serveru v cloudu doporučujeme použít Linode.
- Fungující doména a přístup k jejím DNS záznamům (pokud ji nechcete nastavit na localhost)
- Měli byste mít nainstalovaný docker i docker-compose. Můžete postupovat podle našeho průvodce instalací Docker a Docker Compose na CentOS.
- Domnívám se, že znáte základní linuxové příkazy a nebojíte se používat terminál k úpravě konfiguračních souborů.
- Základní znalost Dockeru vám pomůže, ale výukový program můžete sledovat i bez něj.
Krok 1:Nastavení reverzního proxy
Než si ušpiníte ruce se Synapse, musíte nejprve nastavit svůj reverzní proxy kontejner a jeho doprovodný kontejner Let's Encrypt pro TLS certifikáty (chcete https, věřte mi).
Konfigurace kontejneru reverzního proxy
V produkčním prostředí nepoužíváte docker run ...
, používáte docker-compose
. Pojďme tedy nakonfigurovat jwilder/nginx-proxy
jako reverzní proxy.
Vytvořte adresář s názvem reverse-proxy a přepněte se do tohoto nově vytvořeného adresáře:
mkdir reverse-proxy && cd reverse-proxy
Nyní otevřete svůj oblíbený textový editor a vytvořte soubor s názvem docker-compose.yml
a přidejte následující obsah:
version: "3.3"
services:
proxy:
image: "jwilder/nginx-proxy"
container_name: "proxy"
volumes:
- "certs:/etc/nginx/certs"
- "vhost:/etc/nginx/vhost.d"
- "html:/usr/share/nginx/html"
- "/run/docker.sock:/tmp/docker.sock:ro"
networks: ["server"]
restart: "always"
ports:
- "80:80"
- "443:443"
Zde tedy nejprve definujete svou službu s názvem proxy
. Klíčové vlastnosti, které je třeba mít na paměti, jsou:
- Svazky certs, vhost a html budou sdíleny mezi
jwilder/nginx-proxy
ajrcs/letsencrypt-nginx-proxy-companion
kontejnery. - Docker socket je připojen pouze pro čtení na
/tmp/docker.sock
. - Používá jinou síť než výchozí síť mostu.
- Porty 80 a 443 jsou vázány pro http a https.
Nakonfigurujte letsencrypt-nginx-proxy-companion
Přidejte následující na konec stejného souboru pro psaní
letsencrypt:
image: "jrcs/letsencrypt-nginx-proxy-companion"
container_name: "letsencrypt"
volumes:
- "certs:/etc/nginx/certs"
- "vhost:/etc/nginx/vhost.d"
- "html:/usr/share/nginx/html"
- "/run/docker.sock:/var/run/docker.sock:ro"
environment:
NGINX_PROXY_CONTAINER: "proxy"
networks: ["server"]
restart: "always"
depends_on: ["proxy"]
Zde máte definovanou další službu s názvem letsencrypt. Pojďme si projít i tento:
- Všechny svazky z předchozí služby jsou zde také připojeny na stejná místa.
- Docker socket je vázán pouze pro čtení na
/var/run/docker.sock
. - Proměnná prostředí
NGINX_PROXY_CONTAINER
je nastaven na název kontejneru reverzního proxy kontejneru, což je v našem případě "proxy". - Sdílí stejnou síť „serveru“.
Na konec těchto dvou popisů služeb přidejte definice svazků a definici sítě, jak je uvedeno níže:
networks:
server:
external: true
volumes:
certs:
vhost:
html:
Zde je třeba poznamenat dvě důležité věci:
- Pro Synapse budete používat samostatný soubor pro psaní. Tímto způsobem budete mít modulární nasazení a budete moci snadno zrušit jednu službu, aniž by to ovlivnilo ostatní, nasazením reverzního proxy a doprovodu pomocí jiného souboru YAML.
- Síť je externí. To proto, abychom se vyhnuli problémům s jinými kontejnery, které nesdílejí stejnou síť kvůli způsobu
docker-compose
pojmenuje své svazky a sítě, když je ponechán, vytvoří se automaticky. Tím se dostáváme k vytvoření sítě. Použijte příkazdocker network create server
k vytvoření sítě.
Nyní, když je vše hotovo, uložte soubor a ukončete editor.
Nyní je čas spustit váš reverzní proxy server.
docker-compose up -d
Krok 2:Nastavení Synapse
Nyní je čas, abyste se konečně začali soustředit na to dobré. Nasazení synapse je tedy ve skutečnosti dvoufázový proces.
Nejprve jej potřebujete k vygenerování konfigurace, poté si v konfiguraci uděláte pořádek a nasadíte náš domácí server.
Začněme získáním nového souboru.
Vygenerovat konfiguraci
Vytvořte samostatný adresář s názvem „synapse“ a přepněte se do něj.
mkdir synapse && cd synapse
Vytvořte soubor s názvem docker-compose.yml
a otevři to, znáš vrtačku, že?
Ujistěte se, že používáte správné hodnoty pro sub.domain.com
v souboru yml zde:
version: "3.3"
services:
synapse:
image: "matrixdotorg/synapse:latest"
container_name: "synapse"
volumes:
- "./data:/data"
environment:
VIRTUAL_HOST: "sub.domain.com"
VIRTUAL_PORT: 8008
LETSENCRYPT_HOST: "sub.domain.com"
SYNAPSE_SERVER_NAME: "sub.domain.com"
SYNAPSE_REPORT_STATS: "yes"
networks: ["server"]
networks:
server:
external: true
Vzhledově se jedná o standardní soubor pro psaní, ale přesto je níže vysvětleno několik výjimečných možností:
- Používáte připojení k připojení namísto svazku, je to proto, že se tam vygeneruje konfigurační soubor a vy jej budete upravovat. Určitě můžete použít svazky, ale pak budete muset upravit soubor umístěný v
/var/lib/docker/volumes/<name>/_data
. - Proměnné prostředí
VIRTUAL_HOST
&LETSENCRYPT_HOST
jsou určeny pro kontejnery letsencrypt a reverzní proxy, které vygenerují potřebné změny konfigurace spolu s certifikáty, aniž byste museli ručně zasahovat. - Ujistěte se, že
SYNAPSE_SERVER_NAME
ukazuje na FQDN vašeho serveru Synapse (společně se subdoménou). - Nastavte
VIRUAL_PORT
na 8008. Kontejner synapse zpřístupňuje svým klientům port HTTP 8008, aby s ním mohli komunikovat. - Nakonec se ujistěte, že tento kontejner používá stejnou síť jako kontejner reverzního proxy, jinak kontejnery nebudou schopny komunikovat, což zase přeruší celý proces.
Potvrďte, že máte IP serveru přidanou do vašeho DNS záznamu A a že záznam CNAME ukazuje na přesnou subdoménu.
Vytvořte data
adresář a spusťte následující příkaz
docker-compose run --rm synapse generate
Tím se vygeneruje konfigurační soubor uvnitř ./data s názvem "homeserver.yaml".
Nakonfigurujte synapse
V homeserver.yaml
je spousta konfigurovatelných možností soubor, které jsou mimo rozsah tohoto výukového programu. Navrhuji, abyste si prošli komentáře v tomto souboru a přečetli zde.
Prozatím se přesvědčte o následujících změnách:
server_name
proměnná je nastavena na subdoménu podle vašeho výběru, jak je nastaveno v proměnné prostředíSYNAPSE_SERVER_NAME
.- TLS je nastaveno na hodnotu false. Používáte reverzní proxy, takže TLS je zpracováno prostřednictvím vašeho webového serveru. Nechte port být.
- Ujistěte se, že
enable_registration
je nastavena na hodnotu true, abyste se mohli zaregistrovat a používat svůj domovský server.
Uložte soubor a ukončete.
Nasaďte domovský server Synapse Matrix
Nyní, když je vše na svém místě, můžete spustit synapse pomocí tak jednoduchého příkazu jako
docker-compose up -d
Nyní je váš domácí server připraven k použití. Pokud subdoménu navštívíte ve webovém prohlížeči, měla by se vám zobrazit tato zpráva:
Použití PostgreSQL pro databázi [volitelné]
Ve výchozím nastavení používá synapse pro svou databázi SQLite. Nyní je to dobré pro testování a běžné použití, ale pro důležitější případ použití doporučuji použít PostgreSQL.
Přidat PostgreSQL do souboru pro psaní synapse
Přejděte do adresáře synapse, pokud tam ještě nejste, a otevřete docker-compose.yml
. Přidejte následující řádky do tohoto nového souboru.
postgresql:
image: postgres:latest
restart: always
environment:
POSTGRES_PASSWORD: somepassword
POSTGRES_USER: synapse
POSTGRES_DB: synapse
POSTGRES_INITDB_ARGS: "--encoding='UTF8' --lc-collate='C' --lc-ctype='C'"
volumes:
- "postgresdata:/var/lib/postgresql/"
networks: ["server"]
POSTGRES_INITDB_ARGS
proměnná je velmi potřebná. Nastavuje řazení, ctype a kódování používané pro postgresovou databázi. Ty jsou pro fungování synapse naprosto nezbytné. Přidejte svazek do sekce svazků:
volumes:
postgresdata:
Nakonfigurujte Synapse
Nyní musíte dát synapse vědět o databázi postgresql. Uděláte to úpravou starého homeserver.yaml
soubor. Otevřete tento soubor a zjistěte následující řádky:
database:
name: sqlite3
args:
database: /path/to/homeserver.db
Odstraňte je, protože je již nepotřebujeme. Místo toho přidejte následující:
database:
name: psycopg2
args:
user: synapse
password: somepassword
host: postgresql
database: synapse
cp_min: 5
cp_max: 10
Název databáze je psycopg2, což je PostgreSQL adaptér pro python.
Podívejte se pozorně, uvidíte podobnosti mezi tímto a proměnnými prostředí, které jste nastavili pro kontejner postgresql.
Pokud jde o hostitele, protože používáte docker-compose
a vlastní síť, synapse bude schopen automaticky přeložit název služby. Nemusíte si s tím dělat starosti.
Uložte soubor a ukončete.
Nasadit
No, co vlastně zbývá udělat? Nasaďte jej.
docker-compose up -d
Otestujte nasazení domácího serveru Synapse Matrix
Váš domácí server je připraven. Pojďme to otestovat. Matrix je jen protokol, Synapse je jen implementace. Abyste jej mohli používat jako nástroj pro zasílání zpráv, potřebujete klienta Matrix.
Zde je seznam různých klientů Matrix, kteří jsou k dispozici. Element je pravděpodobně jedním z nejpopulárnějších klientů Matrix, kterého můžete použít.
Až budete mít nainstalovaného klienta Matrix, spusťte jej. Zde si vytvořte účet.
Na registrační stránce vyplňte všechny údaje a na homeserveru zadejte subdoménu, kterou jste dříve používali. Klikněte na registrovat.
Nyní máte perfektně fungující nasazení Synapse, které můžete používat se svou rodinou nebo přáteli, aniž byste se museli starat o to, kde jsou vaše data uložena nebo něco podobného.
Nastavení federace v Synapse pomocí Dockeru [volitelné]
Federace je v podstatě schopnost komunikovat s uživateli na jiném domácím serveru.
Pokud je například vaše uživatelské ID @coolguy:coolserver.me, budete moci pozvat někoho jako @Greatme:awesome.us do místnosti na vašem homeserveru.
Podobně se můžete připojit k místnostem hostovaným na jiných domácích serverech.
Pokud již synapse běží, není třeba zastavovat kontejner(y). Stačí provést změny ve vašem proxy kontejneru NGINX. To sestává z ne více než tří krátkých a snadných kroků.
Existuje několik způsobů, jak zprovoznit federaci, ale mezi nimi ten, o kterém jsem zjistil, že je extrémně snadné ho sledovat a vyžaduje minimální změny ve vašem stávajícím nastavení, se nazývá delegování portů.
Ve výchozím nastavení se každý maticový server pokouší dosáhnout jiného maticového serveru přes port 8443. Následující proces v podstatě říká ostatním serverům, aby použily jiný port. Protože https již funguje na portu 443, jednoduše delegujete výchozí maticový komunikační port na 443.
Krok 1:Vytvořte konfigurační soubor pro naši reverzní proxy
Přejděte do adresáře reverzního proxy serveru Nginx. Vytvořte soubor s názvem synapse-federation
. Přidejte do tohoto souboru následující text:
location /.well-known/matrix/server {
return 200 '{"m.server": "$VIRTUAL_HOST:443"}';
}
Změňte $VIRTUAL_HOST
na příslušnou hodnotu, což je v podstatě doména, na které je vaše instance matice obsluhována (nastavená podle souboru synapse docker-compose).
Krok 2:Úprava souboru docker-compose.yml
Otevřete soubor docker-compose.yml
soubor a přidejte další položku do pole svazků:
- ./synapse-federation:/etc/nginx/vhost.d/$VIRTUAL_HOST
Znovu změňte $VIRTUAL_HOST
na příslušnou hodnotu.
Krok 3:Restartujte proxy server
Nyní musíte restartovat proxy server.
docker-compose up -d proxy
Tím se znovu vytvoří kontejner reverzního proxy. Nemusíte se obávat ztráty předchozí konfigurace, pokud jste po nasazení nic ručně nezměnili. Konfigurace je dynamická, takže vše bude v pořádku.
Otestujte změny
Změny můžete otestovat dvěma způsoby.
Zkuste se připojit do místnosti jako #servers:matrix.org
. Pokud máte jq
, proveďte následující příkaz nainstalováno:
curl https://federationtester.matrix.org/api/report?server_name=$VIRTUAL_HOST --silent | jq -r '.FederationOK'
Nebo použijte tento hack-y jeden:
curl https://federationtester.matrix.org/api/report?server_name=$VIRTUAL_HOST --silent | awk '/FederationOK/ {print $2}'
To by mělo mít výstup 'true'. A samozřejmě změňte $VIRTUAL_HOST
do domény obsluhující vaši instanci synapse.
Bylo to užitečné?
Doufám, že to pro vás bylo užitečné stejně jako tato zkušenost pro mě. Pokud chcete více takových článků, neváhejte se níže vyjádřit. Pokud narazíte na nějaký problém, zanechte komentář a já se vám pokusím pomoci.