🔒

Cloudflare Tunnel×Coolify:自宅サーバを安全に外部公開する

に公開

概要

  • 自宅サーバを外部公開するのにポート開放は不要Cloudflare TunnelでOutbound接続だけで公開できる
  • CDN・WAF・DDoS対策・SSL証明書が全部無料でついてくる
  • CoolifyのPRプレビュー環境と組み合わせると、PRごとに一時的なURLが自動生成される

第1回でCoolifyの選定理由、第2回でインストールとMCP、第3回で実際のデプロイを紹介しました。今回は「自宅サーバをどうやって安全に外部公開するか」の話。

自宅サーバ公開の課題

自宅サーバでサービスを公開するには、いくつかハードルがあります。

課題 内容
ポート開放 ルーターのNAT設定が必要。セキュリティリスクが増える
固定IPなし 多くの家庭回線はIPが変わる。DDNSが必要
DDoS 自宅IPが攻撃対象になると回線ごと死ぬ
SSL証明書 Let's Encryptで取れるが、80/443ポートの開放が前提

ポート開放は本当にやりたくない。自宅のIPアドレスがバレたら、サーバだけでなく家庭のネットワーク全体がリスクにさらされる。

Cloudflare Tunnelとは

Cloudflare Tunnel(旧称Argo Tunnel)は、サーバからCloudflareへOutbound接続だけでトンネルを張るサービス。ポート開放不要、固定IP不要、DDNS不要。

ポイント:

  • 自宅サーバ側の cloudflared がCloudflareにOutbound接続する。Inbound接続は一切ない
  • 自宅のIPアドレスは外部に公開されない。Cloudflareが全部受けてくれる
  • CDN・WAF・DDoS対策が自動的に適用される。設定不要

cloudflaredのインストール

Cloudflare側の設定

  1. Cloudflare Zero Trust にログイン
  2. Networks → Tunnels → Create a Tunnel
  3. Tunnel名を入力(例: home-server
  4. インストール用のトークンが発行される

サーバ側のインストール

# Debianの場合
curl -L https://pkg.cloudflare.com/cloudflare-main.gpg \
  | sudo tee /usr/share/keyrings/cloudflare-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-archive-keyring.gpg] \
  https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" \
  | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install cloudflared

# サービスとして登録
sudo cloudflared service install <TOKEN>

systemctl status cloudflaredactive (running) なら成功。

Public Hostnameの設定

Cloudflare Zero Trust Dashboard → Tunnels → 作成したTunnel → Public Hostname で、ルーティングを設定します。

Subdomain Domain Service
* teraren.com http://localhost:80

ワイルドカード(*)を設定するのがポイント。 これで *.teraren.com 宛のリクエストがすべてトンネル経由でCoolifyサーバに届く。Coolify側のTraefikがHostヘッダを見て、適切なコンテナにルーティングしてくれます。

個別のサービスごとにDNSレコードを追加する必要がない。Coolifyで新しいアプリを作ってドメインを設定するだけで、即座にアクセス可能になります。

CoolifyとCloudflare Tunnelの連携

SSL/TLSの設定(重要)

ここでハマりポイントがあります。CoolifyのドメインはHTTP(http://)で設定する必要がある。

なぜか。Cloudflare → cloudflared → Coolify の経路で、SSL終端はCloudflareが担当する。Coolify側でもHTTPSにすると、Cloudflare→Coolify間で二重暗号化になって接続できない。

❌ ダメな設定: Coolifyのドメインに https://app.teraren.com
   → Cloudflare(SSL) → Tunnel → Coolify(SSL) = 二重暗号化でエラー

✅ 正しい設定: Coolifyのドメインに http://app.teraren.com
   → Cloudflare(SSL) → Tunnel → Coolify(HTTP) = 正常動作

エンドユーザーは https://app.teraren.com でアクセスする。SSLはCloudflareが処理するので、通信は暗号化されている。Coolify↔Cloudflare間はトンネル内なので、HTTPでも安全。

Cloudflare側のSSL設定

Cloudflare Dashboard → SSL/TLS で、暗号化モードを確認。

モード 動作 推奨
Off 暗号化なし
Flexible ブラウザ→Cloudflareのみ暗号化
Full ブラウザ→Cloudflare→オリジン
Full (Strict) 上記+オリジン証明書検証 △(自宅サーバでは不要)

Fullが推奨。自宅サーバ側にLet's Encrypt証明書がなくても、Tunnel経由なので問題ない。

ネットワーク構成の全体像

PRプレビュー環境

CoolifyにはPRプレビュー環境の機能がある。PRを作るたびに一時的なURLが自動生成されて、レビュワーがデプロイ済みの状態で確認できる。Vercelのプレビュー機能と同じ。

設定方法

Coolifyのアプリ設定 → Preview Deployments で有効化。URLテンプレートはデフォルトで {{pr_id}}.{{domain}}

設定
本番ドメイン app.teraren.com
PR #42 のプレビュー 42.app.teraren.com

ワイルドカードDNSを設定済みなら、追加のDNS設定は不要。PRがマージされたらプレビュー環境は自動で削除される。

MCPでの活用

PR #42 のプレビュー環境を確認して。動いてる?

MCP経由でプレビューデプロイの状態確認も可能。外部の人にURLを共有してフィードバックをもらうフローが、Coolify + Cloudflare Tunnelだけで完結する。

VPSとの比較

「自宅サーバじゃなくてVPSでいいのでは?」という疑問への回答。

観点 自宅サーバ + Cloudflare Tunnel VPS
月額コスト $0(電気代のみ) $5〜$50/月
CDN 自動付与(Cloudflare) 別途設定が必要
WAF / DDoS 自動付与 別途設定が必要
SSL Cloudflareが自動管理 Let's Encrypt等
リソース 物理マシンの全リソース プランに依存
回線速度 家庭回線に依存(上り制限あり) 安定
冗長性 なし(停電で止まる) データセンター品質
物理管理 自分でやる(電源、冷却、故障) 不要

個人サービスで「いつでも絶対に落ちない」ことが求められないなら、自宅サーバの方がコスパは圧倒的に良い。CDNとWAFが無料でついてくるのは、Cloudflare Tunnelを通す自宅サーバだけのメリットです。VPSでCloudflareを使うのは追加設定が必要だけど、自宅Tunnelなら構造上必ずCloudflareを経由するので、設定忘れもない。

回線速度だけは弱点。うちは100Mbps回線なので、大量のトラフィックには向かない。でも、Cloudflare CDNがキャッシュしてくれるので、静的アセットはCDNから配信される。オリジンへのリクエストは思ったより少ない。

運用上の注意点

cloudflaredの監視

cloudflaredが落ちると全サービスが外部からアクセスできなくなる。systemdのサービスとして動いているので、基本的には自動再起動されるけど、Zabbix等で死活監視しておくと安心。

# ステータス確認
systemctl status cloudflared

# ログ確認
journalctl -u cloudflared -f

Cloudflareの無料プランの制限

無料プランでも十分使える。主な制限:

項目 無料プラン
リクエスト数 無制限
帯域幅 無制限
Tunnel数 無制限
Workers 100,000リクエスト/日
Cacheルール 10個
Page Rules 3個

リクエスト数も帯域幅も無制限。個人サービスの規模なら、有料プランにアップグレードする必要はまずない。

まとめ

自宅サーバ + Cloudflare Tunnel + Coolify の組み合わせは、個人開発者にとってかなり強力。

得られるもの コスト
ポート開放なしの外部公開 $0
CDN + キャッシュ $0
WAF + DDoS対策 $0
SSL証明書 $0
PRプレビュー環境 $0
無制限のサービスデプロイ $0

全部タダ。やらない理由はありません。

次回の 第5回 では、API-firstがインフラ選定にどう影響するか、LLM時代のセルフホスト戦略について書きます。

シリーズ記事

  1. Vercel月額$42→自宅サーバ月額$0。Coolifyで個人サービス基盤を作った話
  2. Coolifyインストールから「プロンプトでデプロイ」まで:Claude Code MCP実践
  3. Coolifyハンズオン:Hono・Go・Railsを実際にデプロイしてみる
  4. Cloudflare Tunnel×Coolify:自宅サーバを安全に外部公開する(この記事)
  5. API-firstなインフラが生き残る:LLM時代のセルフホスト戦略
  6. ZabbixでDockerコンテナをリソース監視する:Coolify環境の可視化
  7. Coolify環境のバックアップ戦略:6つのDBを自動ダンプ+復旧手順
  8. Coolify環境のログ管理と障害対応:Docker + Zabbix + Discordで運用を回す
株式会社マインディア テックブログ

Discussion