+++ date = "2023-01-09" tags = ["rust","activitypub","sns","fly"] title = "mitraをfly.ioにdeployしてみた" slug = "mitra" +++ mitraは、rustで書かれた仮想通貨のwalletと連携可能なインスタンスです。 uiとbackendが素晴らしく、とてもシンプルです。 https://codeberg.org/silverpill/mitra https://codeberg.org/silverpill/mitra-web gotosocialと同じくmatrixの設計を参考にしているように感じられました。 ![](https://raw.githubusercontent.com/syui/img/master/other/mitra_20230111_0001.png) ```sh $ 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 ../ ``` ```yaml:config.yaml database_url: postgres://mitra:mitra@127.0.0.1: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`にしてください。 ```sh $ 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 ```sh 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 ``` ```toml:fly.toml 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 ```sh $ flyctl deploy --remote-only ``` - https://github.com/fly-apps/hello-rust - https://community.fly.io/t/error-deploying-fly-apps-hello-rust/5664 ### node m1だとcompileしないといけないらしいので時間がかかります。 archとかでやったほうがいいかも。 - node : 14 - npm : 7+ ```sh $ 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`を選択します。 ```sh $ 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 ```sh:.env.local #ENVIRONMENT=development ENVIRONMENT=production CONFIG_PATH=./config.yaml #VUE_APP_BACKEND_URL=https://example.com #PORT=8380 ``` ```yaml:config.yaml ipfs_api_url: 'http://0.0.0.0:5001' ipfs_gateway_url: 'http://0.0.0.0:8001' ``` ```toml:fly.toml 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" ``` ```sh $ fly ips list $ flyctl ips release 12.34.56.78 ``` - https://community.fly.io/t/announcement-shared-anycast-ipv4/9384 ### web-ui/about 改行コードには`\n`を使えます。 ```toml:config.toml instance_description: "foo\nbar" ``` ```html:/about/index.html foo bar ```