Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. <jumbotron> ====== 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 [[https://matrix.org/|serveur Matrix]], dans une [[jails:zfs|jail]]. </jumbotron> Vous devez vous préparer à fournir les [[https://www.freebsd.org/doc/handbook/ports.html|ports]] suivants: - un serveur web, ici [[ports:nginx|nginx]]; - un mécanisme pour fournir des clefs pour https, ici [[https://www.freshports.org/security/py-certbot-nginx|py-certbot-nginx]]; Ainsi qu'un serveur de base de données [[https://www.postgresql.org/|PostgreSQL]], installée dans une [[ports:db:postgresql|jail]], pour cet exemple. ===== La jail ===== Préparez une [[jails:zfs|jail]] nommée ''matrix'', dans le répertoire ''/jails/matrix'' avec les paramètres suivants: <file javascript /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 mount.fdescfs; # améliore les performances de python 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 } </file> Adaptez la configuration de la //jail// ''matrix'': <file ini matrix/etc/rc.conf.local> hostname = "matrix" </file> On assure le démarrage au reboot: <code bash> sysrc jail_enable = "YES" sysrc jail_list += "matrix" </code> ===== La base de donnée ===== Préparez votre base de donnée pour [[https://github.com/matrix-org/synapse/blob/master/docs/postgres.md|synapse-matrix]]. Dans cet exemple, le serveur est confiné dans une //jail// nommée ''pg'': <code bash> 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=# </code> ===== 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**. <code bash> root@popeye:/jails# certbot certonly --nginx -d kreuz.lapinbilly.eu </code> Rediriger les requêtes vers votre //jail//, pour cela, on va définir un fichier dédié pour //nginx//. <file nginx /usr/local/etc/nginx/matrix.conf [highlight_lines_extra="8"]> 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; 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"; location ~ ^(/_matrix|/_synapse/client) { proxy_pass http://192.168.0.20:8008; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; client_max_body_size 50M; proxy_http_version 1.1; } </file> Et l'utiliser dans nos [[:ports:nginx#serveur|serveurs nginx]] <file nginx /usr/local/etc/nginx/nginx.conf [highlight_lines_extra="5,11"]> server { listen 443 ssl http2 ; listen [::]:443 ssl http2 ; server_name kreuz.lapinbilly.eu; include matrix.conf; } server { listen 8448 ssl http2 default_server; listen [::]:8448 ssl http2 default_server; server_name kreuz.lapinbilly.eu; include matrix.conf; } </file> <note important> Le serveur en ''8448'', ne sert que si vous voulez rejoindre une fédération. N'oubliez pas d'ouvrir le pare-feu sur ce port. Par exemple, en l'ajoutant dans les ''tcp_services'' de pf.conf(5) </note> ===== Installer ===== Installez le port [[https://www.freshports.org/net-im/py-matrix-synapse/|net-im/py-matrix-synapse]] dans la //jail// ''matrix'': <code bash> root@popeye:# pkg -j matrix install net-im/py-matrix-synapse root@popeye:# sysrc -j matrix synapse_enable="YES" </code> Vous allez probablement devoir [[https://matrix-org.github.io/synapse/latest/usage/administration/admin_api/|administrer ce serveur]], le chemin le plus court est d'utiliser [[https://www.freshports.org/ftp/curl/|curl]]. Le port va créer un utilisateur et groupe ''synapse'', ainsi qu'un [[https://www.freebsd.org/doc/handbook/configtuning-starting-services.html|script de démarrage]] du même nom. Construisez le serveur: <code bash> 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 </code> Assurez vous l'utilisateur ''synapse'' ait la permission de lire ces fichiers et d'écrire dans ce répertoire. Au besoin, créer la hierarchie ''media_store'': <code bash> mkdir -p /usr/local/etc/matrix-synapse/media_store/local_content mkdir -p /usr/local/etc/matrix-synapse/media_store/local_thumbnails mkdir -p /usr/local/etc/matrix-synapse/media_store/remote_content mkdir -p /usr/local/etc/matrix-synapse/media_store/remote_thumbnail chown -R synapse /usr/local/etc/matrix-synapse/media_store chown synapse /usr/local/etc/matrix-synapse </code> ==== 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**. <code diff /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 </code> Réglez la [journalisation](https://github.com/matrix-org/synapse/blob/develop/docs/sample_log_config.yaml) pour que le fichier soit produit dans ''/var/log/'' <file ini serveur-name.log.config> filename: /var/log/matrix-synapse/homeserver.log </file> Autorisez le nettoyage des journaux par newsyslog(8): <file bash /etc/newsyslog.conf.d/matrix.conf> /var/log/matrix-synapse/homeserver.log synapse:wheel 640 7 1000 * J </file> ==== Mise en Service ==== Terminez l'installation en donnant les droits d'utilisation à l'utilisateur ''synapse'' sur son serveur: <code bash> root@matrix:/usr/local/etc# chown -R synapse matrix-synapse/ </code> Démarrez le service: <code bash> 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 </code> === Chef === Déclarez vous en tant qu'administrateur sur le serveur, une fois votre compte créé: <code bash> $ psql psql (11.17) Type "help" for help. postgres=# \c synapse You are now connected to database "synapse" as user "postgres". synapse=# UPDATE users SET admin = 1 WHERE name ='patron:kreuz.lapinbilly.eu' synapse-# </code> === Web === Redémarrez votre serveur web avec la nouvelle configuration <code bash> root@popeye:# service nginx restart </code> et ajoutez au moins un utilisateur au serveur matrix: <code bash> 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! </code> <note> Une exemple par la pratique: [[https://reuz.lapinbilly.eu/#/room/#bistrot:kreuz.lapinbilly.eu|kreuz.lapinbilly.eu]] </note> ===== Papoter ===== Pour papoter il vous faut un [[https://about.riot.im/|client]] et ajouter des utilisateurs, selon la procédure [[ports:web:matrix#Démarrage|indiquée précédemment]]. Tant que vous y êtes, créez votre [[ports:web:element-web|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é: <code bash> root@popeye:# mkdir -p .well-known/matrix </code> Donnez le à manger à Nginx, sous votre serveur ''https'' (443) par défaut. Il ne s'agit pas nécessairement de votre serveur **matrix**. <file nginx /usr/local/etc/nginx/nginx.conf> location /.well-known/matrix/ { root /usr/local/www/; default_type application/json; add_header Access-Control-Allow-Origin *; } </file> * Donnez un client par défaut: <file javascript /usr/local/www/.well-known/matrix/client> { "m.homeserver": { "base_url": "https://reuz.lapinbilly.eu" } } </file> * Donnez un serveur par délégation, pour rejoindre une fédération: <file javascript /usr/local/www/.well-known/matrix/server> { "m.server": "kreuz.lapinbilly.eu:443" } </file> ===== Administrer ===== L'[[https://matrix-org.github.io/synapse/latest/usage/administration/admin_api/|API]] est une interface Web à laquelle vous faites digérer du ''Json''. Par exemple, supprimer un salon: <code bash> curl --header "Authorization: Bearer Token_en_general_super_long" -X DELETE 'http://127.0.0.1:8008/_synapse/admin/v2/rooms/\!AYMErYZsVkpvmBlNkg:kreuz.lapinbilly.eu' -d '{"room_name":"newtest", "message":"salon precedent supprime."}' </code> Le token est donné par votre profil utilisateur, sous ''element-web'', il se trouve à la rubrique ''aide et a propos''. ports/web/matrix.txt Dernière modification : 2023/06/03 21:59de david