1925 文字
10 分

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. インストール用のトークンが発行される

サーバ側のインストール#

Terminal window
# 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 で、ルーティングを設定します。

SubdomainDomainService
*teraren.comhttp://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 TunnelVPS
月額コスト$0(電気代のみ)$5〜$50/月
CDN自動付与(Cloudflare)別途設定が必要
WAF / DDoS自動付与別途設定が必要
SSLCloudflareが自動管理Let’s Encrypt等
リソース物理マシンの全リソースプランに依存
回線速度家庭回線に依存(上り制限あり)安定
冗長性なし(停電で止まる)データセンター品質
物理管理自分でやる(電源、冷却、故障)不要

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

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

運用上の注意点#

cloudflaredの監視#

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

Terminal window
# ステータス確認
systemctl status cloudflared
# ログ確認
journalctl -u cloudflared -f

Cloudflareの無料プランの制限#

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

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

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

まとめ#

自宅サーバ + 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で運用を回す
Cloudflare Tunnel×Coolify:自宅サーバを安全に外部公開する
https://blog.teraren.com/posts/coolify-cloudflare-tunnel/
作者
Yuki Matsukura
公開日
2026-03-14
ライセンス
CC BY-NC-SA 4.0
この記事が役に立ったら
GitHub Sponsorsで応援できます

コメント