Ceci est une ancienne révision du document !
Papoter avec Matrix
Matrix est un protocole de bavardage, assez proche de irc, qui permet de créer des salons et surtout de chiffrer de bout en bout.
Cet article va vous décrire l'installation d'un serveur Matrix, dans une jail.
Vous devez vous préparer à fournir les ports suivants:
- un serveur web, ici nginx;
- un mécanisme pour fournir des clefs pour https, ici py-certbot-nginx;
Ainsi qu'un serveur de base de données PostgreSQL, installée dans une jail, pour cet exemple.
La jail
Préparez une jail nommée matrix
, dans le répertoire /jails/matrix
avec les paramètres suivants:
- /etc/jail.conf
matrix { host.hostname = matrix; # Hostname ip4.addr = "lo1|192.168.0.11"; # IP address of the jail mount.devfs; # /dev/random pour SSL path ="/jails/matrix"; # Path to the jail exec.start = "/bin/sh /etc/rc"; # Start command exec.stop = "/bin/sh /etc/rc.shutdown"; # Stop command depend=pg; # depend on postgresql jail }
Adaptez la configuration de la jail matrix
:
- matrix/etc/rc.conf.local
hostname="matrix"
La base de donnée
Préparez votre base de donnée pour synapse-matrix.
Dans cet exemple, le serveur est confiné dans une jail nommée pg
:
root@pg:/ # su - postgres $ createuser --pwprompt synapse_user Enter password for new role: Enter it again: $ psql psql (11.7) Type "help" for help. postgres=# CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER synapse_user; CREATE DATABASE postgres=#
Le serveur web
Créez une entrée DNS, ici kreuz.lapinbilly.eu
, pour votre serveur et rediriger le tout vers la jail matrix
.
Obtenez un certificat SSL.
root@popeye:/jails# certbot certonly --nginx -d kreuz.lapinbilly.eu
Rediriger les requètes vers votre jail:
- /usr/local/etc/nginx/nginx.conf
server { listen 443 ssl http2 ; listen [::]:443 ssl http2 ; server_name kreuz.lapinbilly.eu; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Frame-Options "SAMEORIGIN" always; add_header Strict-Transport-Security "max-age=31536000"; ssl_certificate /usr/local/etc/letsencrypt/live/kreuz.lapinbilly.eu/fullchain.pem; ssl_certificate_key /usr/local/etc/letsencrypt/live/kreuz.lapinbilly.eu/privkey.pem; location / { proxy_pass http://192.168.0.11:8008; proxy_set_header X-Forwarded-For $remote_addr; } }
Installer
Installez le port net-im/py-matrix-synapse dans la jail matrix
:
root@popeye:# pkg -j matrix install net-im/py-matrix-synapse root@popeye:# sysrc -j matrix synapse_enable="YES"
Le port va créer un utilisateur et groupe synapse
, ainsi qu'un script de démarrage du même nom.
Construisez le serveur:
root@popeye:# jexec matrix root@matrix: cd /usr/local/etc/matrix-synapse/ python3.7 -m synapse.app.homeserver --server-name kreuz.lapinbilly.eu --config-path homeserver.yaml --generate-config --report-stats=no
Configurer
Adaptez le serveur à la jail et au serveur de base de données, c'est à dire permettre au serveur matrix d'écouter les requêtes venant de l'hôte et lui indiquer le chemin vers le serveur PostgreSQL.
- /usr/local/etc/matrix-synapse/homeserver.yaml
--- homeserver.yaml 2020-04-12 11:27:03.532105000 +0000 +++ /usr/local/etc/matrix-synapse/homeserver.yaml 2020-04-12 10:00:51.404995000 +0000 @@ -208,7 +208,7 @@ tls: false type: http x_forwarded: true - bind_addresses: ['::1', '127.0.0.1'] + bind_addresses: ['192.168.0.11'] resources: - names: [client, federation] @@ -554,12 +554,16 @@ ## Database ## database: - # The database engine name - name: "sqlite3" + name: "psycopg2" # Arguments to pass to the engine args: - # Path to the database - database: "/usr/local/www/syn/homeserver.db" + database: "synapse" + user: "synapse_user" + password: "yourpassword" + host: 192.168.0.10 + port: 5432 + cp_min: 5 + cp_max: 10
Mise en Service
Terminez l'installation en donnant les droits d'utilisation à l'utilisateur synapse
sur son serveur:
root@matrix:/usr/local/etc# chown -R synapse matrix-synapse/
Démarrez le service:
root@matrix:/usr/local/etc# service synapse start Starting synapse. This server is configured to use 'matrix.org' as its trusted key server via the 'trusted_key_servers' config option. 'matrix.org' is a good choice for a key server since it is long-lived, stable and trusted. However, some admins may wish to use another server for this purpose. To suppress this warning and continue using 'matrix.org', admins should set 'suppress_key_server_warning' to 'true' in homeserver.yaml. -------------------------------------------------------------------------------- 2020-04-12 09:31:51,783 - twisted - 192 - INFO - None - Redirected stdout/stderr to logs 2020-04-12 09:31:51,784 - root - 257 - WARNING - None - ***** STARTING SERVER ***** 2020-04-12 09:31:51,784 - root - 258 - WARNING - None - Server /usr/local/lib/python3.7/site-packages/synapse/app/homeserver.py version 1.10.0 2020-04-12 09:31:51,784 - root - 259 - INFO - None - Server hostname: kreuz.lapinbilly.eu 2020-04-12 09:31:51,784 - synapse.app.homeserver - 340 - INFO - None - Setting up server 2020-04-12 09:31:51,784 - synapse.server - 240 - INFO - None - Setting up. 2020-04-12 09:31:51,800 - synapse.storage.data_stores - 48 - INFO - None - Preparing database 'master'... 2020-04-12 09:31:55,423 - synapse.storage.prepare_database - 309 - INFO - None - Upgrading schema to v55 2020-04-12 09:31:55,424 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 55/access_token_expiry.sql 2020-04-12 09:31:55,425 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 55/track_threepid_validations.sql 2020-04-12 09:31:55,492 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 55/users_alter_deactivated.sql 2020-04-12 09:31:55,493 - synapse.storage.prepare_database - 309 - INFO - None - Upgrading schema to v56 2020-04-12 09:31:55,494 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/add_spans_to_device_lists.sql 2020-04-12 09:31:55,495 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/current_state_events_membership.sql 2020-04-12 09:31:55,496 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/current_state_events_membership_mk2.sql 2020-04-12 09:31:55,496 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/delete_keys_from_deleted_backups.sql 2020-04-12 09:31:55,497 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/destinations_failure_ts.sql 2020-04-12 09:31:55,498 - synapse.storage.prepare_database - 393 - INFO - None - Applying engine-specific schema 56/destinations_retry_interval_type.sql.postgres 2020-04-12 09:31:55,519 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/device_stream_id_insert.sql 2020-04-12 09:31:55,520 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/devices_last_seen.sql 2020-04-12 09:31:55,521 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/drop_unused_event_tables.sql 2020-04-12 09:31:55,524 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/event_expiry.sql 2020-04-12 09:31:55,551 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/event_labels.sql 2020-04-12 09:31:55,579 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/event_labels_background_update.sql 2020-04-12 09:31:55,580 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/fix_room_keys_index.sql 2020-04-12 09:31:55,589 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/hidden_devices.sql 2020-04-12 09:31:55,590 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/nuke_empty_communities_from_db.sql 2020-04-12 09:31:55,595 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/public_room_list_idx.sql 2020-04-12 09:31:55,602 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/redaction_censor.sql 2020-04-12 09:31:55,602 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/redaction_censor2.sql 2020-04-12 09:31:55,603 - synapse.storage.prepare_database - 393 - INFO - None - Applying engine-specific schema 56/redaction_censor3_fix_update.sql.postgres 2020-04-12 09:31:55,604 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/redaction_censor4.sql 2020-04-12 09:31:55,605 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/remove_tombstoned_rooms_from_directory.sql 2020-04-12 09:31:55,606 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/room_key_etag.sql 2020-04-12 09:31:55,606 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/room_membership_idx.sql 2020-04-12 09:31:55,607 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/room_retention.sql 2020-04-12 09:31:55,633 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/signing_keys.sql 2020-04-12 09:31:55,706 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/signing_keys_nonunique_signatures.sql 2020-04-12 09:31:55,715 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/state_group_room_idx.sql 2020-04-12 09:31:55,715 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/stats_separated.sql 2020-04-12 09:31:55,831 - synapse.storage.prepare_database - 378 - INFO - None - Running script 56/unique_user_filter_index.py 2020-04-12 09:31:55,848 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/user_external_ids.sql 2020-04-12 09:31:55,865 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 56/users_in_public_rooms_idx.sql 2020-04-12 09:31:55,873 - synapse.storage.prepare_database - 309 - INFO - None - Upgrading schema to v57 2020-04-12 09:31:55,874 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 57/delete_old_current_state_events.sql 2020-04-12 09:31:55,874 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 57/device_list_remote_cache_stale.sql 2020-04-12 09:31:55,899 - synapse.storage.prepare_database - 378 - INFO - None - Running script 57/local_current_membership.py 2020-04-12 09:31:55,954 - synapse.storage.prepare_database - 389 - INFO - None - Applying schema 57/rooms_version_column.sql 2020-04-12 09:31:55,988 - synapse.storage.data_stores - 58 - INFO - None - Starting 'main' data store 2020-04-12 09:31:55,998 - synapse.storage.data_stores.main.event_push_actions - 499 - INFO - None - Searching for stream ordering 1 month ago 2020-04-12 09:31:55,999 - synapse.storage.data_stores.main.event_push_actions - 504 - INFO - None - Found stream ordering 1 month ago: it's 0 2020-04-12 09:31:55,999 - synapse.storage.data_stores.main.event_push_actions - 506 - INFO - None - Searching for stream ordering 1 day ago 2020-04-12 09:31:55,999 - synapse.storage.data_stores.main.event_push_actions - 511 - INFO - None - Found stream ordering 1 day ago: it's 0 2020-04-12 09:31:56,005 - synapse.storage.data_stores - 68 - INFO - None - Starting 'state' data store 2020-04-12 09:31:56,005 - synapse.storage.data_stores - 81 - INFO - None - Database 'master' prepared 2020-04-12 09:31:56,005 - synapse.server - 243 - INFO - None - Finished setting up. root@matrix:/usr/local/etc/matrix-synapse# sockstat -l USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS synapse python3.7 59360 14 tcp4 192.168.0.11:8008 *:* root syslogd 58747 5 dgram /var/run/log root syslogd 58747 6 dgram /var/run/logpriv
Web
Redémarrez votre serveur web avec la nouvelle configuration
root@popeye:# service nginx restart
et ajoutez au moins un utilisateur au serveur matrix:
root@matrix:/usr/local/etc/matrix-synapse# register_new_matrix_user -c homeserver.yaml https://kreuz.lapinbilly.eu:443 New user localpart [root]: Password: Confirm password: Make admin [no]: yes Sending registration request... Success!
Papoter
Pour papoter il vous faut un client et ajouter des utilisateurs, selon la procédure indiquée précédemment.
Tant que vous y êtes, créez votre propre client.
auto configuration
Vous allez indiquer, via des requêtes json
données directement pas nginx, des informations sur votre serveur.
Créez un répertoire dédié:
root@popeye:# mkdir -p .well-known/matrix
Donnez le à manger à Nginx, sous votre serveur https
(443) par défaut. Il ne s'agit pas nécessairement de votre serveur matrix.
- /usr/local/etc/nginx/nginx.conf
location /.well-known/matrix/ { root /usr/local/www/; default_type application/json; add_header Access-Control-Allow-Origin *; }
- Donnez un client par défaut:
- /usr/local/www/.well-known/matrix/client
{ "m.homeserver": { "base_url": "https://reuz.lapinbilly.eu" } }
- Donnez un serveur par délégation, pour rejoindre une fédération:
- /usr/local/www/.well-known/matrix/server
{ "m.server": "kreuz.lapinbilly.eu:443" }