GNU/Linux >> Linux Esercitazione >  >> Linux

Come installare Matrix Synapse Homeserver usando Docker

Matrix è uno standard (protocollo) open source per VoIP, messaggistica istantanea e videochiamate, ovvero comunicazione in tempo reale. Fornisce la crittografia end-to-end insieme al supporto per i bridge verso varie altre alternative di messaggistica come Slack, IRC, Telegram o qualsiasi altro client XMPP. Può funzionare anche con connessioni a bassa larghezza di banda.

In questo tutorial, ti mostrerò come installare l'homeserver Synapse di Matrix usando i contenitori Docker.

Cos'è un homeserver Matrix?

Matrix di per sé è solo una specifica e ci sono molte implementazioni del protocollo Matrix disponibili pubblicamente.

Gli homeserver sono fondamentalmente tutte quelle implementazioni distribuite su un server, a cui puoi accedere tramite qualsiasi client Matrix come Element.

La domanda che potrebbe sorgere è:perché creare homeserver privati ​​se alcuni sono già disponibili pubblicamente?

Bene, per cominciare, puoi condividere il tuo server domestico privato tra i tuoi amici, familiari o colleghi e usarlo come mezzo di comunicazione quotidiano. A meno che non ti impegni in una conversazione con un utente di un altro server domestico, tutti i dati saranno al sicuro nel tuo server.

Questo ti dà il controllo su ogni aspetto che gli homeserver pubblici non sono in grado di fornire.

Deplying-synapse Matrix implementazione homserver utilizzando i contenitori Docker

In questo tutorial userò Synapse, una popolare implementazione dell'homeserver Matrix. Scritto in Python, Synapse è sviluppato dal core team di Matrix.

Noi di Linux Handbook preferiamo la finestra mobile alla distribuzione nativa, quindi le sezioni seguenti tratteranno la distribuzione di sinapsi eseguita utilizzando Docker.

Prerequisito

  • Un sistema/server Linux. Ti consigliamo di utilizzare Linode per distribuire rapidamente un server Linux nel cloud.
  • Un dominio funzionante e accesso ai suoi record DNS (a meno che tu non voglia configurarlo su localhost)
  • Dovresti avere installato sia docker che docker-compose. Puoi seguire la nostra guida sull'installazione di Docker e Docker Compose su CentOS.
  • Credo che tu abbia una conoscenza dei comandi essenziali di Linux e che tu non abbia paura di usare il terminale per modificare i file di configurazione.
  • La conoscenza di base di Docker ti aiuterà, ma puoi seguire il tutorial anche senza di essa.

Passaggio 1:imposta il proxy inverso

Prima di sporcarti le mani con Synapse, devi innanzitutto configurare il tuo container proxy inverso e il suo contenitore Let's Encrypt per i certificati TLS (Vuoi https, fidati di me).

Configurazione del contenitore del proxy inverso

In un ambiente di produzione, non utilizzi docker run ... , usi docker-compose . Quindi, configuriamo il jwilder/nginx-proxy come proxy inverso.

Crea una directory denominata proxy inverso e passa a questa directory appena creata:

mkdir reverse-proxy && cd reverse-proxy

Ora apri il tuo editor di testo preferito, crea un file chiamato docker-compose.yml e aggiungi i seguenti contenuti:

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"

Quindi qui, prima definisci il tuo servizio, chiamato proxy . Le caratteristiche chiave da tenere a mente sono:

  • I volumi certs, vhost e html verranno condivisi tra jwilder/nginx-proxy e jrcs/letsencrypt-nginx-proxy-companion contenitori.
  • Il socket docker è montato in sola lettura su /tmp/docker.sock .
  • Utilizza una rete diversa dalla rete bridge predefinita.
  • Le porte 80 e 443 sono associate, rispettivamente per http e https.

Configura Letencrypt-nginx-proxy-companion

Aggiungi quanto segue alla fine dello stesso file di composizione

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"]

Qui hai un altro servizio definito, chiamatoletsencrypt. Esaminiamo anche questo:

  • Anche qui tutti i volumi del servizio precedente sono montati nelle stesse posizioni.
  • Il socket docker è vincolato in sola lettura a /var/run/docker.sock .
  • La variabile d'ambiente NGINX_PROXY_CONTAINER è impostato sul nome del contenitore del contenitore del proxy inverso, che nel nostro caso è "proxy".
  • Condivide la stessa rete di "server".

Alla fine di queste due descrizioni dei servizi, aggiungi le definizioni dei volumi e la definizione della rete, come di seguito:

networks:
    server:
        external: true

volumes:
    certs:
    vhost:
    html:

Due cose importanti da notare qui:

  1. Utilizzerai un file di composizione separato per Synapse. In questo modo, avrai una distribuzione modulare e sarai in grado di interrompere facilmente un servizio, senza influire sugli altri, distribuendo il proxy inverso e il compagno utilizzando un file YAML diverso.
  2. La rete è esterna. Questo per evitare qualsiasi problema con altri contenitori che non condividono la stessa rete a causa di come docker-compose denomina i suoi volumi e reti quando viene lasciato viene creato automaticamente. Quindi questo ci porta a creare la rete. Usa il comando docker network create server per creare la rete.

Ora che tutto è fatto, salva il file ed esci dall'editor.

Ora è il momento di avviare il tuo server proxy inverso.

docker-compose up -d

Passaggio 2:imposta Synapse

Ora è il momento di iniziare finalmente a concentrarti sulla parte buona. Quindi la distribuzione di sinapsi è davvero un processo in due fasi.

Innanzitutto, è necessario per generare una configurazione, quindi riordinare la configurazione e distribuire il nostro server home.

Iniziamo con l'ottenere il file di composizione.

Genera configurazione

Crea una directory separata denominata "synapse" e passa ad essa.

mkdir synapse && cd synapse

Crea un file chiamato docker-compose.yml e aprilo, conosci il trapano, giusto?

Assicurati di utilizzare i valori corretti per sub.domain.com nel file yml qui:

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

Questo è un file di composizione standard a quanto pare, ma di seguito vengono spiegate ancora un paio di opzioni straordinarie:

  • Stai usando un montaggio bind invece di un volume, questo perché il file di configurazione verrà generato lì e devi modificarlo. Puoi sicuramente usare i volumi, ma poi dovrai modificare il file che si trova in /var/lib/docker/volumes/<name>/_data .
  • Le variabili d'ambiente VIRTUAL_HOST &LETSENCRYPT_HOST sono per i contenitori letencrypt e reverse proxy, che genereranno le modifiche alla configurazione necessarie insieme ai certificati, senza che tu intervenga manualmente.
  • Assicurati SYNAPSE_SERVER_NAME punta all'FQDN del tuo server Synapse (insieme al sottodominio).
  • Imposta VIRUAL_PORT a 8008. Il contenitore della sinapsi espone la porta HTTP 8008 per consentire ai suoi client di comunicare con essa.
  • Infine, assicurati che questo container utilizzi la stessa rete del container proxy inverso, altrimenti i container non saranno in grado di comunicare, il che a sua volta interromperà l'intero processo.

Conferma di aver aggiunto l'IP del server al record A del tuo DNS e un record CNAME punta al sottodominio esatto.

Crea un data directory ed eseguire il comando seguente

docker-compose run --rm synapse generate

Questo genererà il file di configurazione all'interno di ./data, chiamato "homeserver.yaml".

Configura sinapsi

Ci sono molte opzioni configurabili in homeserver.yaml file, che non rientrano nell'ambito di questo tutorial. Ti suggerisco di esaminare i commenti in quel file e leggere qui.

Per ora, assicurati solo delle seguenti modifiche:

  • Il server_name variabile è impostata sul sottodominio di tua scelta, come impostato nella variabile di ambiente SYNAPSE_SERVER_NAME .
  • TLS è impostato su false. Stai utilizzando un proxy inverso, quindi TLS viene gestito tramite il tuo server web. Lascia stare il porto.
  • Assicurati enable_registration è impostato su true, in modo che tu possa registrarti e utilizzare il tuo server home.

Salva il file ed esci.

Distribuire l'homeserver Synapse Matrix

Ora che tutto è a posto, puoi avviare la sinapsi usando un comando semplice come

docker-compose up -d

Ora il tuo server domestico è pronto per essere utilizzato. Se visiti il ​​sottodominio in un browser web, dovresti vedere un messaggio come questo:

Utilizzo di PostgreSQL per il database [opzionale]

Per impostazione predefinita, synapse utilizza SQLite per il suo database. Ora va bene per i test e l'uso occasionale, ma per un caso d'uso più importante, consiglio di utilizzare PostgreSQL.

Aggiungi PostgreSQL per comporre il file in sinapsi

Vai alla directory delle sinapsi se non ci sei già e apri docker-compose.yml . Aggiungi le seguenti righe a questo file di composizione.

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"]

Il POSTGRES_INITDB_ARGS variabile è molto necessaria. Imposta le regole di confronto, ctype e codifica usate per il database postgres. Questi sono assolutamente necessari per il funzionamento delle sinapsi. Aggiungi il volume alla sezione dei volumi:

volumes:
    postgresdata:

Configura sinapsi

Ora devi far sapere a sinapsi del database postgresql. Puoi farlo modificando il vecchio homeserver.yaml file. Apri quel file e scopri le seguenti righe:

database:
    name: sqlite3
    args:
        database: /path/to/homeserver.db

Rimuovili perché non ne abbiamo più bisogno. Aggiungi invece quanto segue:

database:
    name: psycopg2
    args:
        user: synapse
        password: somepassword
        host: postgresql
        database: synapse
        cp_min: 5
        cp_max: 10

Il nome del database è psycopg2, che è un adattatore PostgreSQL per Python.

Guarda da vicino, vedrai le somiglianze tra questo e le variabili di ambiente che hai impostato per il contenitore postgresql.

Per quanto riguarda l'host, poiché stai usando docker-compose e una rete personalizzata, synapse sarà in grado di risolvere automaticamente il nome del servizio. Non devi preoccuparti di questo.

Salva il file ed esci.

Distribuisci

Ebbene, cosa resta da fare davvero? Distribuiscilo.

docker-compose up -d

Verifica la distribuzione dell'homeserver Synapse Matrix

Il tuo homeserver è pronto. Proviamolo. Matrix è solo un protocollo, Synapse è solo un'implementazione. Hai bisogno di un client Matrix per poterlo utilizzare come uno strumento di messaggistica.

Ecco un elenco di vari client Matrix disponibili. Element è probabilmente uno dei client Matrix più popolari che puoi utilizzare.

Quando hai installato il client Matrix, eseguilo. Crea un account qui.

Nella pagina di registrazione, compila tutti i dettagli e sull'homeserver, inserisci il sottodominio che avevi utilizzato in precedenza. Clicca su Registrati.

Ora hai una distribuzione Synapse perfettamente funzionante che puoi utilizzare con la tua famiglia o i tuoi amici senza doversi preoccupare di dove sono archiviati i tuoi dati o cose del genere.

Configurazione della federazione in Synapse con Docker [opzionale]

La federazione è fondamentalmente la capacità di comunicare con gli utenti su un server home diverso.

Ad esempio, se il tuo userid è @coolguy:coolserver.me potrai invitare qualcuno come @Greatme:awesome.us in una stanza del tuo homeserver.

Allo stesso modo, puoi anche unirti alle stanze ospitate su altri server domestici.

Se hai già la sinapsi in esecuzione, non è necessario arrestare i contenitori. Devi solo apportare modifiche al tuo contenitore proxy NGINX. Questo consiste in non più di tre semplici e brevi passaggi.

Ci sono un paio di modi per far funzionare Federation, ma tra questi, quello che ho trovato estremamente facile da seguire e che richiede modifiche minime alla configurazione esistente, si chiama delega della porta.

Per impostazione predefinita, ogni server di matrice tenta di raggiungere un altro server di matrice tramite la porta 8443. Il processo seguente indica sostanzialmente agli altri server di utilizzare una porta diversa. Poiché https funziona già nella porta 443, delegherai semplicemente la porta di comunicazione della matrice predefinita a 443.

Passaggio 1:crea un file di configurazione per il nostro proxy inverso

Entra nella directory del proxy inverso di Nginx. Crea un file, chiamato synapse-federation . Aggiungi il seguente testo a questo file:

location /.well-known/matrix/server {
    return 200 '{"m.server": "$VIRTUAL_HOST:443"}';
}

Cambia $VIRTUAL_HOST al suo valore appropriato, che è fondamentalmente il dominio in cui viene servita l'istanza di matrice (impostato in base al file di composizione docker di sinapsi).

Passaggio 2:modifica docker-compose.yml

Apri il tuo docker-compose.yml file e aggiungi un'altra voce all'array dei volumi:

 - ./synapse-federation:/etc/nginx/vhost.d/$VIRTUAL_HOST

Di nuovo, cambia $VIRTUAL_HOST al valore appropriato.

Fase 3:riavvia il server proxy

Ora devi riavviare il server proxy.

docker-compose up -d proxy

Questo ricreerà il contenitore del proxy inverso. Non devi preoccuparti della perdita di alcuna configurazione precedente, a meno che tu non abbia modificato qualcosa manualmente dopo la distribuzione. La configurazione è dinamica, quindi andrà tutto bene.

Verifica le modifiche

Puoi testare le modifiche in due modi.

Prova a entrare in una stanza virtuale come #servers:matrix.org . Esegui il comando seguente, se hai jq installato:

curl https://federationtester.matrix.org/api/report?server_name=$VIRTUAL_HOST --silent | jq -r '.FederationOK'

Oppure usa questo più hack-y:

curl https://federationtester.matrix.org/api/report?server_name=$VIRTUAL_HOST --silent | awk '/FederationOK/ {print $2}'

Questo dovrebbe produrre "vero". E ovviamente cambia $VIRTUAL_HOST al dominio che serve la tua istanza di sinapsi.

È stato utile?

Spero che questo ti sia stato utile tanto quanto l'esperienza lo è stata per me. Se vuoi più articoli come questo, sentiti libero di commentare in basso. In caso di problemi, lascia un commento e cercherò di aiutarti.


Linux
  1. Come installare Docker su Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04

  2. Come installare Docker usando Ansible [Debian/Ubuntu]

  3. Come installare WordPress utilizzando Docker

  4. Come installare Docker su Ubuntu 18.04?

  5. Come installare Docker su Ubuntu 22.04

Come installare Gitea usando Docker su Ubuntu 20.04

Come installare Docker su Debian 10

Come installare Docker su CentOS

Come installare Gitea su Ubuntu usando Docker

Come installare Matrix Synapse su Ubuntu 20.04

Come installare Docker su Ubuntu 18.04