2022-11-21 / @syui

matrix , fly / fly

fly.ioとmatrix

今回は、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は重要な箇所だけ載せています。

version: 1

global:
  server_name: syui.cf
  well_known_server_name: "syui.cf: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"
}
$ 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
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"]
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"
$ 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
# 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したあと、webからloginしましょう。

matrixの仕組みはmastodonに似ています。

例えば、element-webでは他サーバーを選択した上で、$app.fly.devを使用してloginできます。

login後は$domainになります。

ref

https://codeberg.org/gerald/dendrite-on-flyio