mitraをfly.ioにdeployしてみた
mitraは、rustで書かれた仮想通貨のwalletと連携可能なインスタンスです。
uiとbackendが素晴らしく、とてもシンプルです。
https://codeberg.org/silverpill/mitra
https://codeberg.org/silverpill/mitra-web
gotosocialと同じくmatrixの設計を参考にしているように感じられました。
$ git clone https://codeberg.org/silverpill/mitra
$ cd mitra
$ cp config.yaml.example config.yaml
$ cargo build --release --features production
$ cat .env.local
ENVIRONMENT=development
#ENVIRONMENT=production
CONFIG_PATH=./config.yaml
#CONFIG_PATH=/app/server/config.yaml
#VUE_APP_BACKEND_URL=https://example.com
#VUE_APP_BACKEND_URL=http://example.com:8380
#PORT=8380
$ git clone https://codeberg.org/silverpill/mitra-web
$ cd mitra-web
$ npm install --no-save
$ npx allow-scripts
$ npm run build
$ mv dist ../
database_url: postgres://mitra:[email protected]:55432/mitra
storage_dir: files
web_client_dir: dist
http_host: '0.0.0.0'
http_port: 8380
instance_uri: example.com
instance_title: Mitra
instance_short_description: My instance
instance_description: My instance
registrations_open: true
#http_host: '127.0.0.1'
#instance_uri: example.com:8380
fly.ioではinstance_uri: example.com
を使用します。portを指定すると502になります。
また、http_host: 0.0.0.0
にしてください。
$ docker-compose up -d
$ ./target/release/mitra
---
$ curl -sL http://127.0.0.1:8380/api/v1/instance
fly.ioのdockerでやろうと思うと、けっこう大変です。
.dockerignore
にmitra/{target,files}
を追加しておいてください。
Dockerfile
FROM rust:latest as builder
WORKDIR /app
ADD mitra/ ./
RUN cargo build --release --features production
RUN mv target/release/mitra ./
RUN mv target/release/mitractl ./
RUN mkdir -p /app/files
app = "xxx"
kill_signal = "SIGINT"
kill_timeout = 10
[env]
PORT = "8380"
[experimental]
cmd = "./mitra"
[[services]]
internal_port = 8380
protocol = "tcp"
[[services.ports]]
handlers = ["http"]
port = 80
[[services.ports]]
handlers = ["tls", "http"]
port = 443
[mounts]
source="mitra_data"
destination="/app/files"
deploy
$ flyctl deploy --remote-only
node
m1だとcompileしないといけないらしいので時間がかかります。
archとかでやったほうがいいかも。
$ paru -S nvm
$ nvm install v14
$ nvm use v14
$ npm i -g npm
$ npm -v
$ node -v
$ nvm use v14
cloudflare
他のインスタンスではcname -> dns-only
を選択しますが、mitraではcname -> proxied
を選択します。
$ fly certs create $app.fly.dev
$ fly certs create $sub.example.com
$ fly certs show $sub.example.com
cname : _acme-challenge.$app
, $app.fly.dev.xxx.flydns.net
, Proxied
cname : $sub
, $app.fly.dev
, Proxied
option
#ENVIRONMENT=development
ENVIRONMENT=production
CONFIG_PATH=./config.yaml
#VUE_APP_BACKEND_URL=https://example.com
#PORT=8380
ipfs_api_url: 'http://0.0.0.0:5001'
ipfs_gateway_url: 'http://0.0.0.0:8001'
app = "xxx"
kill_signal = "SIGINT"
kill_timeout = 10
[env]
PORT = "8380"
[experimental]
cmd = "./mitra"
allowed_public_ports = []
auto_rollback = true
[[services]]
http_checks = []
internal_port = 8380
processes = ["app"]
protocol = "tcp"
script_checks = []
[services.concurrency]
hard_limit = 25
soft_limit = 20
type = "connections"
[[services.ports]]
force_https = true
handlers = ["http"]
port = 80
[[services.ports]]
handlers = ["tls", "http"]
port = 443
[[services.ports]]
handlers = ["tls", "http"]
port = 5001
[[services.ports]]
handlers = ["tls", "http"]
port = 8001
[mounts]
source="mitra_data"
destination="/app/files"
$ fly ips list
$ flyctl ips release 12.34.56.78
web-ui/about
改行コードには\n
を使えます。
instance_description: "foo\nbar"