1
0
hugo/content/blog/2022-11-21-dendrite.md
2024-12-21 23:10:54 +09:00

132 lines
3.4 KiB
Markdown

+++
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