自宅でホストしているアプリをCloudflaredとCloudflare Tunnelを使って公開する
自宅のポートを空けたりリバースプロキシ建てたりするのが面倒な時にかなり便利
1. Cloudflaredのインストール
インストールとは書いたけどDockerで使うのが良いと思う
2. Tunnelの設定
secretはbase64でエンコードした値
config_srcはcloudflareとlocalが選べる
今回は全部IaC化したかったのでcloudflareで管理するようにした
application.example.comへのアクセスをhttp://localhost:8080へプロキシする設定だと↓みたいになる
複数アプリをホストする場合はingress_ruleを追加するだけ
code:tunnel.tf
resource "cloudflare_tunnel" "home_server" {
account_id = cloudflare_account.main.id
name = "home-server"
secret = var.tunnel_secret
config_src = "cloudflare"
}
resource "cloudflare_tunnel_config" "home_server" {
account_id = cloudflare_account.main.id
tunnel_id = cloudflare_tunnel.home_server.id
config {
ingress_rule {
hostname = "application.example.com"
origin_request {}
}
ingress_rule {
service = "http_status:404"
origin_request {}
}
}
}
tunnel_tokenは後で使うのでoutputsに追加しておくと良いかもしれない
code:outputs.tf
output "home_server_tunnel_token" {
value = cloudflare_tunnel.home_server.tunnel_token
sensitive = true
}
3. DNSの設定
cloudflare_tunnelにcnameが生えているのでそれを使ってDNSレコードを設定する
code:record.tf
resource "cloudflare_record" "cname_application" {
zone_id = cloudflare_zone.main.id
name = "application"
type = "CNAME"
value = cloudflare_tunnel.home_server.cname
proxied = true
}
4. Cloudflaredの設定
cloudflared tunnel runで起動
$ cloudflared tunnel run --token <TOKEN>