GNU/Linux >> Znalost Linux >  >> Linux

Jak nainstalovat Matrix Synapse Homeserver pomocí Dockeru

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 a jrcs/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:

  1. 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.
  2. 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říkaz docker 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.


Linux
  1. Jak nainstalovat Docker na Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04

  2. Jak nainstalovat Docker na CentOS

  3. Jak nainstalovat Docker na Ubuntu 22.04

  1. Jak nainstalovat Docker pomocí Ansible [Debian/Ubuntu]

  2. Jak nainstalovat WordPress pomocí Docker

  3. Jak nainstalovat Docker na Ubuntu 18.04?

  1. Jak nainstalovat Docker na CentOS 7

  2. Jak nainstalovat Docker na Raspberry Pi

  3. Jak nainstalovat Docker na CentOS 8