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側の設定
- Cloudflare Zero Trust にログイン
- Networks → Tunnels → Create a Tunnel
- Tunnel名を入力(例:
home-server) - インストール用のトークンが発行される
サーバ側のインストール
# Debianの場合curl -L https://pkg.cloudflare.com/cloudflare-main.gpg \ | sudo tee /usr/share/keyrings/cloudflare-archive-keyring.gpgecho "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.listsudo apt update && sudo apt install cloudflared
# サービスとして登録sudo cloudflared service install <TOKEN>systemctl status cloudflared で active (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 -fCloudflareの無料プランの制限
無料プランでも十分使える。主な制限:
| 項目 | 無料プラン |
|---|---|
| リクエスト数 | 無制限 |
| 帯域幅 | 無制限 |
| 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時代のセルフホスト戦略について書きます。
シリーズ記事
- Vercel月額$42→自宅サーバ月額$0。Coolifyで個人サービス基盤を作った話
- Coolifyインストールから「プロンプトでデプロイ」まで:Claude Code MCP実践
- Coolifyハンズオン:Hono・Go・Railsを実際にデプロイしてみる
- Cloudflare Tunnel×Coolify:自宅サーバを安全に外部公開する(この記事)
- API-firstなインフラが生き残る:LLM時代のセルフホスト戦略
- ZabbixでDockerコンテナをリソース監視する:Coolify環境の可視化
- Coolify環境のバックアップ戦略:6つのDBを自動ダンプ+復旧手順
- Coolify環境のログ管理と障害対応:Docker + Zabbix + Discordで運用を回す



