はじめに 最近、Discord の買収が危惧 されている。 Fediverse を眺めていたら、matrix というチャットツールがあるらしい。 これを構築して見ようと思う。
matrix とは matrix は、Slack や Discord のようなコミュニケーションツールであり、メッセージのやり取り、通話機能、E2E での通話暗号化、ブリッジ機能がある。
環境 OS: Ubuntu 20.04LTS 実行環境: Python3.9
1.実行環境の準備 公式のドキュメント に従い、実行環境を準備する。
terminal sudo apt update && sudo apt upgrade sudo apt install build-essential python3-dev libffi-dev python3-pip python3-setuptools sqlite3 libssl-dev virtualenv libjpeg-dev libxslt1-dev
私は、バックグラウンドアプリを構築する際は大体専用ユーザーを作るのが好きだ。
terminal sudo adduser matrix sudo gpasswd -a matrix sudo su - matrix
2.matrix をインストールする。 matrix をインストールする。git から引っ張ってくるわけではないみたい。
terminal mkdir -p ~/synapse virtualenv -p python3 ~/synapse/env source ~/synapse/env/bin/activatepip install --upgrade pip pip install --upgrade setuptools pip install matrix-synapse
update する際はsource ~/synapse/env/bin/activate && pip install -U matrix-synapse
を実行するといいらしい。
3.config の生成 matrix を設定していく。
terminal cd ~/synapsepython -m synapse.app.homeserver \ --server-name my.domain.name \ --config-path homeserver.yaml \ --generate-config \ --report-stats=[yes|no]
my.domain.name は matrix を置きたい domain に変更する、--report-stats=[yes|no]
は yes か no を指定してあげないとだめだ。
4.matrix の設定 デフォルトでは SQLite を使用するらしいが、確かに SQLite は簡単ではあるが重いので Postres を使うようにする。
terminal ~/synapse/env/bin/pip install "matrix-synapse[postgres]" sudo -u postgres bash createuser --pwprompt synapse_user psql
psql CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER synapse_user; quit;
synapse_user で指定したパスワードをhomeserver.yaml
のdatabase:
内に追加する。
homeserver.yaml 806 807 808 809 810 811 812 813 814 815 816 817 database: name: psycopg2 args: user: synapse_user - password: secretpassword + password: <pass> database: synapse host: localhost cp_min: 5 cp_max: 10
pb_hba.conf も変えておく。私の場合/etc/postgres/10/main/
内にあった。
/etc/postgres/10/main/pg_hba.conf - host synapse synapse_user ::1/128 md5
synapse_user にパスワードを指定していない場合、pg_hba.conf
内に
/etc/postgres/10/main/pg_hba.conf host all all ::1/128 ident
と書き足しておく。
homeserver.yaml
を変更しておく。
homeserver.yaml 54 55 56 57 - server_name: "SERVERNAME" + server_name: matrix.slum.cloud
homeserver.yaml 68 69 70 71 - web_client_location: https://riot.example.com/ + web_client_location: https://matrix.slum.cloud
5.nginx の設定 ドキュメント を参考に設定する。
/etc/nginx/sites-enabled/matrix.slum.cloud 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 server { listen 443 http2; listen [::]:443 http2; // For the federation port listen 8448 http2 ; listen [::]:8448 http2 ; server_name matrix.slum.cloud; location / { proxy_pass http://localhost:8008; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; // Nginx by default only allows file uploads up to 1M in size // Increase client_max_body_size to match max_upload_size defined in homeserver.yaml client_max_body_size 50M; } }
certbot で証明書を取得したら、listen hoge http2
に ssl を書き足しlisten hoge ssl http2
のようにする。
/etc/nginx/sites-enabled/matrix.slum.cloud 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 server { - listen 443 http2; - listen [::]:443 http2; + listen 443 ssl http2; + listen [::]:443 ssl http2; # For the federation port - listen 8448 http2 ; - listen [::]:8448 http2 ; + listen 8448 ssl http2 ; + listen [::]:8448 ssl http2 ; server_name matrix.slum.cloud; location / { proxy_pass http://localhost:8008; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; // Nginx by default only allows file uploads up to 1M in size // Increase client_max_body_size to match max_upload_size defined in hom> client_max_body_size 50M; } - ssl_certificate /etc/letsencrypt/live/matrix.slum.cloud/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/matrix.slum.cloud/privkey.pem; }
再び matrix の config を開く。
homeserver.yaml 552 553 554 555 556 557 558 559 560 561 562 // TLS セクション内の tls_certificate_path と tls_private_key_path を先ほど取得した証明書のパスを書き込む - #tls_certificate_path: "CONFDIR/SERVERNAME.tls.crt" + tls_certificate_path: "/etc/letsencrypt/live/matrix.slum.cloud/fullchain.pem" // PEM-encoded private key for TLS // - #tls_private_key_path: "CONFDIR/SERVERNAME.tls.key" + tls_private_key_path: "/etc/letsencrypt/live/matrix.slum.cloud/privkey.pem"
6.実行する terminal cd ~/synapsesource env/bin/activatesynctl start
無事動いたらしい。matrix
ユーザーを作成しておく。
terminal register_new_matrix_user -c homeserver.yaml http://localhost:8008
7.ログインする。 クライアントが必要っぽいのでelement から引っ張ってくる。
サインインを選択
Home Server を変更し認証情報を入力
ログインすることができあ
これで使うようにできた。
8.デーモン化する。 /etc/systemd/system/matrix.slum.cloud.service 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [Unit] Description =Synapse Matrix homeserver// If you are using postgresql to persist data, uncomment this line to make sure // synapse starts after the postgresql service. After =postgresql.service[Service] Type =notifyNotifyAccess =mainExecReload =/bin/kill -HUP $MAINPID Restart =on -abortUser =matrixGroup =matrixWorkingDirectory =/home/matrix/synapseExecStart =/home/matrix/synapse/env/bin/python -m synapse.app.homeserver --config-path=/home/matrix/synapse/homeserver.yamlSyslogIdentifier =matrix-synapse// adjust the cache factor if necessary // Environment=SYNAPSE_CACHE_FACTOR=2.0 [Install] WantedBy =multi-user.target
設定したら
terminal sudo systemctl start matrix.slum.cloud sudo systemctl enable matrix.slum.cloud
これでデーモン化することができる。
参考 ・Matrix の Homeserver、Synapse を Debian 10 にインストールする ・Slack 系 分散 SNS「Matrix」を構築する ・systemd