User Tools

Site Tools


doc:appunti:linux:sa:matrix

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:matrix [2022/04/18 15:25] – [Creazione di un account] niccolodoc:appunti:linux:sa:matrix [2026/09/15 12:02] (current) – [Avvio del container Docker] niccolo
Line 71: Line 71:
  
 Ciò significa che **ogni utente** di questo nodo Matrix dovrà essere **creato dall'amministratore**. In alternativa è possibile avere l'auto-registrazione, come viene offerta ad esempio dal nodo di riferimento **matrix.org**. Ciò significa che **ogni utente** di questo nodo Matrix dovrà essere **creato dall'amministratore**. In alternativa è possibile avere l'auto-registrazione, come viene offerta ad esempio dal nodo di riferimento **matrix.org**.
- 
  
 ==== Ottenere i certificati SSL/TLS da Let's Encrypt ==== ==== Ottenere i certificati SSL/TLS da Let's Encrypt ====
Line 138: Line 137:
  
 Con la configurazione vista sopra, chiamando l'URL **%%http://matrix.example.org/%%**, si viene rediretti prima verso il protocollo HTTPS e quindi al percorso **%%https://matrix.example.org/_matrix/static/%%**. A questo URL c'è semplicemente un messaggio che avvisa dell'homeserver Synapse in esecuzione e invita ad **installare un client**. Con la configurazione vista sopra, chiamando l'URL **%%http://matrix.example.org/%%**, si viene rediretti prima verso il protocollo HTTPS e quindi al percorso **%%https://matrix.example.org/_matrix/static/%%**. A questo URL c'è semplicemente un messaggio che avvisa dell'homeserver Synapse in esecuzione e invita ad **installare un client**.
 +
 ==== Alternativa: matrix-synapse senza reverse proxy ==== ==== Alternativa: matrix-synapse senza reverse proxy ====
  
Line 155: Line 155:
 openssl dhparam -out /etc/matrix-synapse/homeserver.tls.dh 2048 openssl dhparam -out /etc/matrix-synapse/homeserver.tls.dh 2048
 </code> </code>
- 
-==== Creazione di un account ==== 
- 
-Avendo disabilitato l'auto-registrazione, si deve creare manualmente il primo **account**, essendo il primo esistente lo faremo di tipo **amministratore**. Useremo il comando **register_new_matrix_user**, che però richiede la seguente opzione nel file di configurazione: 
- 
-<file> 
-registration_shared_secret: MySecret 
-</file> 
- 
-Eseguendo il comando successivo sulla stessa macchina, non è necessario digitare tale password; questa verrà letta direttamente dal file yaml: 
- 
-<code> 
-register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008 
-</code> 
- 
-<code> 
-New user localpart [root]: niccolo 
-Password: 
-Confirm password: 
-Make admin [no]: yes 
-Sending registration request... 
-Success! 
-</code> 
- 
-==== Reset password ==== 
- 
-Generare un nuovo hash con il tool **hash_password** (incluso nel pacchetto Debian **matrix-synapse**): 
- 
-<code> 
-hash_password -p MySecret 
-$2b$12$6Q.zARcyW0nnRzmmo8d1H.NblSGbj309lBevr/1kiGmtE0FFJGP0S 
-</code> 
- 
-Collegarsi al database di backend, individuare l'utente e modificare la tabella: 
- 
-<code sql> 
-SELECT name FROM users; 
-SET password_hash='$2b$12$6Q.zARcyW0nnRzmmo8d1H.NblSGbj309lBevr/1kiGmtE0FFJGP0S'  
-WHERE name='@niccolo:matrix.rigacci.org'; 
-</code> 
- 
  
 ==== Configurazione del DNS ==== ==== Configurazione del DNS ====
Line 207: Line 166:
  
 Gli utenti del nostro nodo saranno conosciuti alla federazione con il nome **%%@username:matrix.example.org%%**. Gli utenti del nostro nodo saranno conosciuti alla federazione con il nome **%%@username:matrix.example.org%%**.
 +
 ==== Debug ==== ==== Debug ====
  
Line 275: Line 235:
   - Nella app è possibile adesso tappare il pulsante **prosegui**.   - Nella app è possibile adesso tappare il pulsante **prosegui**.
   - Per ulteriore conferma è necessario **immettere la propria password** dell'account Matrix.   - Per ulteriore conferma è necessario **immettere la propria password** dell'account Matrix.
 +
 +===== Gestione utenti =====
 +
 +==== Creazione di un account ====
 +
 +Avendo disabilitato l'auto-registrazione, si deve creare manualmente il primo **account**, essendo il primo esistente lo faremo di tipo **amministratore**. Useremo il comando **register_new_matrix_user**, che però richiede la seguente opzione nel file di configurazione:
 +
 +<file>
 +registration_shared_secret: MySecret
 +</file>
 +
 +Eseguendo il comando successivo sulla stessa macchina, non è necessario digitare tale password; questa verrà letta direttamente dal file yaml:
 +
 +<code>
 +register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008
 +</code>
 +
 +<code>
 +New user localpart [root]: niccolo
 +Password:
 +Confirm password:
 +Make admin [no]: yes
 +Sending registration request...
 +Success!
 +</code>
 +
 +==== Reset password ====
 +
 +Generare un nuovo hash con il tool **hash_password** (incluso nel pacchetto Debian **matrix-synapse**):
 +
 +<code>
 +hash_password -p MySecret
 +$2b$12$6Q.zARcyW0nnRzmmo8d1H.NblSGbj309lBevr/1kiGmtE0FFJGP0S
 +</code>
 +
 +Collegarsi al database di backend, individuare l'utente e modificare la tabella:
 +
 +<code sql>
 +SELECT name FROM users;
 +SET password_hash='$2b$12$6Q.zARcyW0nnRzmmo8d1H.NblSGbj309lBevr/1kiGmtE0FFJGP0S' 
 +WHERE name='@niccolo:matrix.rigacci.org';
 +</code>
  
 ===== Test dal client web riot.im ===== ===== Test dal client web riot.im =====
Line 281: Line 283:
  
 ^ Other homeserver  | %%https://matrix.example.org%%  | ^ Other homeserver  | %%https://matrix.example.org%%  |
-^ Username          |  |+^ Username          | %%@username:matrix.host.tld%%   |
 ^ Password          |  | ^ Password          |  |
 +
 +Una sessione avviata in questa pagina web può essere anche verificata (passare da //Not trusted// a //Trusted//) utilizzando i normali metodi della verifica da altro dispositivo trusted oppure utilizzando la security key.
 +
 +In generale, se si effettua la disconnessione dal client web di Element, la sessione viene distrutta. I nostri interlocutori dovrebbero vederla scomparire immediatamente dall'elenco delle sessioni attive dell'utente, visualizzabile in //room properties// => **2 people** => **%%[account]%%** => **Security**.
  
 ===== Installazione della app Element ===== ===== Installazione della app Element =====
Line 383: Line 389:
  
 La nostra ricetta semplificata **tiene fermo il servizio Matrix per tutto il tempo della migrazione**. Con database di una certa dimensione questa operazione potrebbe richiedere diversi minuti; vedere le **[[https://github.com/matrix-org/synapse/blob/v1.7.0/docs/postgres.md|istruzioni originali]]** per un metodo che esegue la migrazione in due o tre **passaggi incrementali**. La nostra ricetta semplificata **tiene fermo il servizio Matrix per tutto il tempo della migrazione**. Con database di una certa dimensione questa operazione potrebbe richiedere diversi minuti; vedere le **[[https://github.com/matrix-org/synapse/blob/v1.7.0/docs/postgres.md|istruzioni originali]]** per un metodo che esegue la migrazione in due o tre **passaggi incrementali**.
 +
 +===== Synapse in container Docker =====
 +
 +Per sapere la **versione** di Synapse contenuta in una **immagine Docker** (il container viene creato e subito dopo rimosso):
 +
 +<code>
 +docker run --rm \
 +  --entrypoint python \
 +  matrixdotorg/synapse:latest \
 +  -c 'import synapse; print(synapse.__version__)'
 +1.159.0
 +</code>
 +
 +Se invece Synapse è eseguito in un **virtual environment Python**:
 +
 +<code>
 +/opt/venvs/matrix-synapse/bin/python3
 +>>> import synapse
 +>>> print(synapse.__version__)
 +1.155.0
 +</code>
 +
 +===== Migrazione da virtual environment Python a container Docker =====
 +
 +Gli oggetti da migrare sono:
 +
 +  * Directory **/etc/matrix-synapse/** che contiene i file di configurazione.
 +  * Directory **/var/lib/matrix-synapse/** che contiene il //media_store//.
 +  * PostgreSQL database **synapse** e relativo utente.
 +  * Configurazione **reverse proxy** Apache.
 +  * **Nome a dominio** nel DNS.
 +
 +Sulla macchina destinazione NON si esegue la configurazione iniziale, ma si crea il named volume che conterrà i file di configurazione e il media_store:
 +
 +<code>
 +docker volume create synapse-data
 +</code>
 +
 +Viene creata la directory **/var/lib/docker/volumes/synapse-data/_data/** che sarà la radice del volume.
 +
 +Nella radice di tale volume si devono copiare i file dalla vecchia installazione:
 +
 +  * **homeserver.yaml**
 +  * **homeserver.signing.key**
 +  * **log.yaml**
 +
 +È consigliabile rinominare il file **homeserver.signing.key** usando il **SYNAPSE_SERVER_NAME**, come farebbe la procedura  //generate// di Synapse, quindi qualcosa del tipo **matrix.example.org.signing.key**. Il nome del file deve essere correttamente indicato nel file di configurazione yaml dal parametro **signing_key_path**.
 +
 +Si devono copiare anche il media store e la directory uploads originali nella radice del volume Docker, con questo mapping:
 +
 +  * **/var/lib/matrix-synapse/media/** => **/data/media_store/**
 +  * **/var/lib/matrix-synapse/uploads/** => **/data/uploads/**
 +
 +I parametri che è necessario aggiustare nel file homeserver.yaml sono:
 +
 +<file>
 +log_config: "/data/log.yaml"
 +media_store_path: "/data/media_store"
 +uploads_path: "/data/uploads"
 +signing_key_path: "/data/homeserver.signing.key"
 +bind_addresses:
 +  - '0.0.0.0'
 +database:
 +  name: "psycopg2"
 +  args:
 +    ...
 +    host: host.docker.internal
 +    port: 5432
 +</file>
 +
 +Sulla macchina origine si esegue il dump del database:
 +
 +<code>
 +su - postgres -c "pg_dump -Fc synapse" \
 +    > synapse-$(hostname)-$(date +%Y-%m-%d).dump
 +</code>
 +
 +Quindi sulla macchina destinazione si esegue il restore:
 +
 +
 +==== Permessi ====
 +
 +Verificare che i file di configurazione siano leggibili solo dall'utente con UID 991 (nell'immagine Docker di matrix/synapse è l'utente utilizzato per eseguire il servizio):
 +
 +<code>
 +cd /var/lib/docker/volumes/synapse-data/_data
 +chown 991:991 homeserver.yaml homeserver.signing.key
 +chmod 0600 homeserver.yaml homeserver.signing.key
 +</code>
 +
 +FIXME Anche il media_store e la directory uploads devono essere sistemate.
 +
 +==== Avvio del container Docker ====
 +
 +=== Istruzioni generiche ===
 +
 +Le [[https://hub.docker.com/r/matrixdotorg/synapse|istruzioni]] per avviare un container Docker di Synapse prevedono anzitutto il download dell'[[https://hub.docker.com/r/matrixdotorg/synapse|immagine di Synapse]] e quindi l'esecuzione una tantum di un container per generare il volume e la configurazione:
 +
 +<code>
 +docker run -it --rm \
 +    --mount type=volume,src=synapse-data,dst=/data \
 +    -e SYNAPSE_SERVER_NAME=my.matrix.host \
 +    -e SYNAPSE_REPORT_STATS=yes \
 +    matrixdotorg/synapse:latest generate
 +</code>
 +
 +Questa prima esecuzione rimuove il container subito dopo averlo creato per via dell'opzione **%%--rm%%**. Quello che importa è che viene creato il volume **/data** e al suo interno viene creata la configurazione necessaria ad eseguire Synapse. La generazione della configurazione è dovuta al fatto che viene passato il comando **generate** all'immagine Docker di Synapse.
 +
 +Successivamente si crea il container definitivo, che conterrà l'istanza di Synapse in esecuzione:
 +
 +<code>
 +docker run -d --name synapse \
 +    --mount type=volume,src=synapse-data,dst=/data \
 +    -p 8008:8008 \
 +    matrixdotorg/synapse:latest
 +</code>
 +
 +Tale container usa lo stesso volume creato in precedenza (e quindi la configurazione in esso contenuta) e resta in esecuzione. Si possono usare i comandi docker standard per far sì che il container venga avviato automaticamente al bootstrap della macchina, ecc.
 +
 +=== Istruzioni specifiche per la migrazione ===
 +
 +FIXME
  
 ===== Web References ===== ===== Web References =====
doc/appunti/linux/sa/matrix.1650288350.txt.gz · Last modified: by niccolo