2024-04-23 13:21:26 +00:00
|
|
|
+++
|
|
|
|
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:
|
2024-04-23 13:28:33 +00:00
|
|
|
server_name: syui.ai
|
|
|
|
well_known_server_name: "syui.ai:443"
|
2024-04-23 13:21:26 +00:00
|
|
|
|
|
|
|
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
|