XServer VPS × Cloudflare Tunnelで固定IP不要・ポート開放なしで個人開発アプリを公開する手順【2025】
なぜXServer VPS + Cloudflare Tunnelなのか
個人開発のアプリを外部公開しようとすると、こんな壁にぶつかります。
- 自宅サーバー → ISPが固定IPを有料提供、ルーターのポート開放が必要、停電リスク
- VPS単体 → ファイアウォール設定ミスで攻撃を受けるリスク、DDos対策が手薄
Cloudflare Tunnel(旧 Argo Tunnel) を使えば、VPS側でインバウンドポートを一切開けずに、Cloudflareのエッジ経由でHTTPS公開できます。VPSからCloudflareへのアウトバウンド接続だけで完結するため、攻撃対象となるポートが存在しない、という構成です。
XServer VPSは国内屈指のコストパフォーマンスと東京リージョンのレイテンシの低さから、この構成のホスティング先として非常に相性が良いです。
全体アーキテクチャ
[ユーザーのブラウザ]
↓ HTTPS (443)
[Cloudflare Edge]
↓ Tunnel(アウトバウンドのみ)
[XServer VPS: cloudflared デーモン]
↓ localhost
[アプリプロセス (Node.js / Python / Docker など)]
ポイントは VPS 側の 22番ポート(SSH)以外は完全にクローズ したままで運用できること。Cloudflare が TLS 終端・DDoS 緩和・WAF を担ってくれます。
事前準備チェックリスト
| 項目 | 備考 |
|---|---|
| XServer VPS の契約 | 最小プラン(1vCPU / 512MB)でも動作確認済み |
| Cloudflare アカウント | 無料プランで Tunnel 機能が使用可能 |
| 独自ドメイン | Cloudflare に移管 or ネームサーバー変更が必要 |
| OS | Ubuntu 22.04 LTS を前提に解説 |
Step 1: XServer VPS を契約してUbuntuをセットアップする
XServer VPSのコントロールパネルから Ubuntu 22.04 LTS を選択してインストールします。初期設定として以下を行います。
# パッケージ更新
sudo apt update && sudo apt upgrade -y
# ファイアウォール設定(SSH のみ許可)
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status
Status: active と表示され、22/tcp のみ ALLOW になっていればOKです。80/443 は開けなくて構いません。これがこの構成の最大のメリットです。
Step 2: アプリを起動しておく
例として Node.js アプリ(ポート 3000)を使います。
# Node.js 20 をインストール
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# サンプルアプリ
mkdir ~/myapp && cd ~/myapp
cat > index.js << 'EOF'
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello from XServer VPS + Cloudflare Tunnel!\n');
}).listen(3000, '127.0.0.1');
console.log('Listening on localhost:3000');
EOF
node index.js &
127.0.0.1:3000 でリッスンしている点がポイントです。外部からは直接アクセスできません。
Step 3: cloudflared をインストールする
# cloudflared の最新版をインストール(2025年4月時点)
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb \
-o cloudflared.deb
sudo dpkg -i cloudflared.deb
cloudflared --version
注意: バージョンは頻繁に更新されます。インストール前に GitHub Releases で最新版を確認してください。
Step 4: Cloudflare にログインしてトンネルを作成する
# ブラウザで認証(コマンド実行後に表示されるURLを開く)
cloudflared tunnel login
認証が完了したら ~/.cloudflared/cert.pem が生成されます。
# トンネルを作成(名前は任意)
cloudflared tunnel create myapp-tunnel
# トンネルIDを確認
cloudflared tunnel list
Step 5: 設定ファイルを書く
mkdir -p ~/.cloudflared
cat > ~/.cloudflared/config.yml << 'EOF'
tunnel: <YOUR_TUNNEL_ID> # Step 4 で確認したID
credentials-file: /root/.cloudflared/<YOUR_TUNNEL_ID>.json
ingress:
- hostname: app.example.com # Cloudflare 管理下のドメイン
service: http://localhost:3000
- service: http_status:404
EOF
Step 6: Cloudflare DNS に CNAME レコードを追加する
cloudflared tunnel route dns myapp-tunnel app.example.com
これだけで Cloudflare のダッシュボードに app.example.com → <tunnel-id>.cfargotunnel.com の CNAME が自動追加されます。手動でDNSを触る必要はありません。
Step 7: systemd サービスとして常駐させる
手動起動では VPS 再起動時に止まってしまいます。systemd に登録して自動起動を設定します。
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared
Active: active (running) になればセットアップ完了です。
Step 8: 動作確認
ブラウザで https://app.example.com にアクセスします。
Hello from XServer VPS + Cloudflare Tunnel!
と表示されれば成功です。証明書は Cloudflare が自動発行するため、Let’s Encrypt の手動更新も不要です。
セキュリティをさらに強化するオプション
Cloudflare Access で認証を追加する
Cloudflare Zero Trust の Access を使えば、Google / GitHub 認証を挟んで特定ユーザーだけにアクセスを許可できます。社内ツールや開発中のアプリに最適です(無料枠:50ユーザーまで)。
IP ジオブロッキング
Cloudflare ダッシュボードの「セキュリティ → WAF」から、日本以外のIPを弾くルールを数クリックで設定できます。
コスト試算(月額目安)
| 項目 | 費用 |
|---|---|
| XServer VPS 最小プラン | 約 490円〜 |
| Cloudflare Tunnel | 無料 |
| 独自ドメイン(.com) | 約 150円〜 |
| 合計 | 約 640円〜 |
自宅サーバーの電気代や固定IP費用と比較すると、かなり低コストで安定した本番環境を持てます。
まとめ
- XServer VPS + Cloudflare Tunnel の組み合わせで、固定IP不要・ポート開放なしの安全な公開構成が実現できる
- VPS側は SSH(22) のみ開放、残りは UFW でブロックするだけでよい
cloudflaredを systemd に登録すれば再起動後も自動復帰- Cloudflare Access を追加すれば認証付きの限定公開も無料で可能
- 月額 640円〜という低コストで個人開発の本番環境を持てる
「自宅サーバーは管理が大変、でもクラウドは高い」という悩みを解決する、現時点でベストに近い個人開発向け公開構成です。ぜひ試してみてください。