+++ date = "2022-11-21" tags = ["matrix", "fly"] title = "fly.ioとmatrix" slug = "matrix-dendrite" +++ 今回は、fly.ioでmatrix-serverを立ててみました。serverは`dendrite`を採用します。 https://github.com/matrix-org/dendrite fly.ioにはいくつか制約があり、dockerfileをdeployすることになります。 したがって、versionを`matrixdotorg/dendrite-monolith:v0.3.11`に固定します。configはv1を使用します。 `matrixdotorg/dendrite-monolith:latest`はconfig v1,2に関わらずpanic(golang)を起こします。 そのうちconfigはv2で書き直す予定ですが、v2で書いた人は教えてもらえると嬉しいです。configは重要な箇所だけ載せています。 ```yml:dendrite.yaml version: 1 global: server_name: syui.ai well_known_server_name: "syui.ai:443" kafka: addresses: - kafka:9092 topic_prefix: Dendrite use_naffka: true naffka_database: connection_string: file:///data/dendrite.db max_open_conns: 10 max_idle_conns: 2 conn_max_lifetime: -1 ``` DNSでA(ipv4),AAAA(ipv6), SRVなども設定しておいてください。sub-domainの場合はmain-domainの`.well-known/matrix/server`に以下のようなファイルを置きます。 https://matrix-org.github.io/dendrite/installation/domainname ``` { "m.server": "matrix.example.com:8448" } ``` ```sh $ sudo systemctl start docker $ sudo docker run --rm -it -v $(pwd):/key -w /key --entrypoint /usr/bin/generate-keys matrixdotorg/dendrite-monolith:v0.3.11 --tls-cert server.crt --tls-key server.key --private-key matrix_key.pem ``` ```sh:Dockerfile.txt FROM matrixdotorg/dendrite-monolith:v0.3.11 COPY matrix_key.pem dendrite.yaml server.crt server.key /etc/dendrite/ CMD ["--config","/etc/dendrite/dendrite.yaml", "--tls-cert", "/etc/dendrite/server.crt", "--tls-key", "/etc/dendrite/server.key"] ``` ```yml:fly.toml app = "xxx" kill_signal = "SIGINT" kill_timeout = 20 [[services]] internal_port = 8008 protocol = "tcp" [services.concurrency] hard_limit = 100 soft_limit = 80 [[services.ports]] handlers = ["tls", "http"] port = "443" [[services.ports]] handlers = ["tls", "http"] port = "8443" [[services.tcp_checks]] interval = "10s" grace_period = "5s" timeout = "2s" [mounts] source="xxx_data" destination="/data" ``` ```sh $ app=xxx $ flyctl launch --name $app --no-deploy --region ams $ flyctl volumes create ${app}_data --size 1 --region ams --app $app # これはwebからやったほうがいい $ flyctl certs add $domain # add : $app.fly.dev # add : $mydomain # deployする際はignoreに注意 $ cat .dockerignore $ flyctl deploy ``` ```sh # userを作成します # https://matrix-org.github.io/dendrite/administration/createusers $ flyctl ssh console $ /usr/bin/create-account -config /etc/dendrite/dendrite.yaml -username USERNAME -password xxx ``` ここから[test](https://federationtester.matrix.org/)したあと、[web](https://matrix.org/)から[login](https://matrix.to/)しましょう。 matrixの仕組みはmastodonに似ています。 例えば、[element-web](https://app.element.io/#/login)では他サーバーを選択した上で、`$app.fly.dev`を使用してloginできます。 login後は`$domain`になります。 ![](https://raw.githubusercontent.com/syui/img/master/other/matrix-server-origin.png) ### ref https://codeberg.org/gerald/dendrite-on-flyio