fly.ioとnorthflankの感想
herokuの移行先として挙げられるfly.io, northflankの感想になります。
https://news.ycombinator.com/item?id=32599398
fly.io
が個人的には合っていると思いました。
fly.ioはdockerで動かしますが、goなどのbuild, deployが非常に快適でわかりやすかったです。mastodonはredisが入っているため動かすには工夫が必要ですが、go, rust, phoenixなどはそれらが必要ない場合が多く、go, rustはsingle-binaryなので、fly.tomlも書きやすい。
gitea
例えば、giteaはfly.ioで簡単に動きました。dockerを利用するので当たり前かもしれませんが、herokuでは相当の工夫が必要でした。
# create a directory to store fly.io application config
mkdir gitea-on-fly
# enter into the newly created directory
cd gitea-on-fly
# tell fly.io you wish to create a new application in the amsterdam region (there are many other regions you could pick too)
# pick any name for the app that you'd like, in the example we are using `gitea-on-fly`
flyctl launch --name gitea-on-fly --no-deploy --region ams
# give the newely create application persistant storage, so your data persists between app updates
flyctl volumes create gitea_data --size 1 --region ams --app gitea-on-fly
app = "gitea-on-fly"
kill_timeout = 5
[build]
image = "gitea/gitea:latest" # latest is the most recent stable release
[env]
GITEA__database__DB_TYPE="sqlite3"
GITEA__database__PATH="/data/gitea/gitea.db"
GITEA__server__DOMAIN="gitea-on-fly.fly.dev"
GITEA__server__SSH_DOMAIN="gitea-on-fly.fly.dev"
GITEA__server__ROOT_URL="https://gitea-on-fly.fly.dev"
GITEA__security__INSTALL_LOCK="true" # Don't show installer
# GITEA__service__DISABLE_REGISTRATION="true" # TODO: uncomment once you have created your first user
# persist data
[[mounts]]
destination = "/data"
source = "gitea_data"
# ssh traffic
[[services]]
internal_port = 22
protocol = "tcp"
[[services.ports]]
port = 22
# https traffic
[[services]]
internal_port = 3000
protocol = "tcp"
[[services.ports]]
handlers = ["http"]
force_https = true
port = 80
[[services.ports]]
handlers = ["tls", "http"]
port = 443
$ flyctl deploy
$ flyctl open
https://blog.gitea.io/2022/04/running-gitea-on-fly.io/
cloudflare + fly.io + gitea(ssh)
cloudflare : dns -> cname -> disable proxy(dns only)
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "ssh"]
url = [email protected]:user/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[remote "origin"]
url = [email protected]:user/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[remote "http"]
url = https://example.com/user/repo.git
fetch = +refs/heads/*:refs/remotes/http/*
[branch "main"]
remote = origin
merge = refs/heads/main
$ git push ssh main
$ git push origin main
$ git push http main
ent-ogent
fly.ioではent-ogentも簡単でした。
https://entgo.io/ja/blog/2022/02/15/generate-rest-crud-with-ent-and-ogen/
app = "ent-ogent"
kill_signal = "SIGINT"
kill_timeout = 5
[build]
builder = "paketobuildpacks/builder:base"
buildpacks = ["gcr.io/paketo-buildpacks/go"]
[env]
PORT = "8080"
[processes]
api = "bin/t"
[[services]]
internal_port = 8080
processes = ["api"]
protocol = "tcp"
[[services.ports]]
force_https = true
handlers = ["http"]
port = 80
[[services.ports]]
handlers = ["tls", "http"]
port = 443
ただし、freeで運用するとなると、fly.ioはvmが3つまでです。
そこでnorthflankを試してみることにしました。
northflankはwebUIをポチポチやってればできます。大体はわかると思います。
goの場合、buildpackを選択し、build-contextを/
にしました。
-
addons : postgresを追加し、connectionを確認します。のちにenvのDATABASE_URLに入れます。いくつかenvが設定されるのでコードのほうを変更してもいい。
-
services/port&dns : custom domainでcnameします。verifyしたら、後にselectします。
-
services/cmd-overide : binaryを指定します。/bin/t
-
services/environment : DATABASE_URLを追加します。postgres-connection
-
services/builds : ここでコードをbuildします。
-
services/instances(continer) : logはここから確認します。
ちなみに、northflank/cliも使ってみましたが、使いづらい印象があります。
$ yarn global add @northflank/cli
$ northflank login
$ sudo northflank forward addon --addonId postgres