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で複数ドメインが使えるようになった。

参考


Related #gcp

Cloud FunctionsのNode.jsバージョンを更新する

package.jsonとcloudbuild.yamlを更新

Cloud BuildでFirebase Hostingのデプロイを行う

リポジトリへのpush以外をトリガーにしたい場合に使用

Firebase HostingのデプロイをWebhook(API)経由で行う

デプロイボタンが作れるようになった

CloudRunでnode.jsを動かす

リポジトリにpushしたらCloudRun上に自動デプロイ

IPv6 IPoE環境で自宅のRaspberryPiにsshできるようにする

GCPにssh port forwardingすることで実現できた