inletsで複数ドメインが使えるようにする
前回の記事でngrokの代わりにinletsを使うようにしたが、解説記事の方法だと一つのドメインしか設定することができない。
inletsのREADMEにあるようにupstreamを複数指定した際に正しくアクセスできるように追加の設定を行う。
inlets client \
--remote=$REMOTE \
--token $TOKEN \
--upstream="store1.example.com=http://127.0.0.1:8001,store2.example.com=http://127.0.0.1:8002"
ドメイン管理にはCloudflareを利用しているので、Cloudflareでの設定方法をまとめておく。
Cloudflare設定
- inlets severが動いているサーバのIPをワイルドカード(*)としてAレコードに追加
- MyProfile => API Tokens => Global API Keyの値をメモしておく
inlets server(GCP)設定
- caddyの「To build Caddy with plugins」を実施する
- caddyディレクトリを作成し、以下のgoファイルを設置
// main.go
package main
import (
"github.com/caddyserver/caddy/caddy/caddymain"
_ "github.com/caddyserver/dnsproviders/cloudflare"
)
func main() {
caddymain.Run()
}
- ビルド
go mod init caddy
go get github.com/caddyserver/caddy
go build
- Caddyfileにワイルドカード設定を記述
Caddyfile
*.example.com {
tls {
dns cloudflare
}
proxy / 127.0.0.1:8080 {
transparent
}
proxy /tunnel 127.0.0.1:8080 {
transparent
websocket
}
}
- systendファイルにEnvironmentFileを追加
# /etc/systemd/system/caddy.service
[Unit]
Description=Caddy Server Service
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=1
StartLimitInterval=0
WorkingDirectory=/root/caddy
ExecStart=/root/caddy/caddy
LimitNOFILE=65536
EnvironmentFile=/etc/sysconfig/caddy
[Install]
WantedBy=multi-user.target
- 環境変数を設定
# /etc/sysconfig/caddy
CLOUDFLARE_API_KEY=
CLOUDFLARE_EMAIL=
- systemd再読み込み
sudo systemctl daemon-reload
sudo systemctl restart caddy
- エラーになっていないか確認
sudo systemctl status caddy
Serving HTTPS on port 443
https://*.example.com
inlets client設定
- 複数サーバを別ポートで立ち上げる
- 下記コマンドのようにupstreamを複数指定する
inlets client \
--remote=$REMOTE \
--token $TOKEN \
--upstream="store1.example.com=http://127.0.0.1:8001,store2.example.com=http://127.0.0.1:8002"
browserにて
- store1.example.com, store2.example.comにアクセスしてそれぞれ結果が帰ってくることを確認
これでinletsで複数ドメインが使えるようになった。