ポート開放不要で自宅サーバーを安全に公開する方法
主なポイント
- ポート開放不要で自宅サーバーを安全に公開
- Cloudflare TunnelのQuick Tunnelsを利用して簡単に公開
- Docker ComposeとPythonのhttp.serverを組み合わせた手軽なセットアップ
はじめに
自宅サーバーをインターネットに公開する際、従来はルーターのポート開放や動的DNS(DDNS)の設定など、ネットワークに関する複雑な設定が必要でした。しかし、これらの手順は初心者にとってハードルが高く、セキュリティリスクも伴います。そこで、CloudflareのQuick Tunnels機能とDocker Composeを組み合わせることで、アカウント不要かつポート開放なしで簡単に自宅サーバーを公開する方法を紹介します。
必要なツールと技術
- Docker Compose
- Cloudflare Tunnel(Quick Tunnels)
- Pythonのhttp.serverモジュール
全体構成
本構成では、以下の2つのサービスをDocker Composeで管理します。
サービス名 | 役割 | 使用イメージ |
---|---|---|
web | Pythonのhttp.serverを用いた簡易ウェブサーバー | python:3.9-slim-buster |
cloudflared | Cloudflare Tunnelを利用して外部からのアクセスを可能にする | cloudflare/cloudflared:latest |
Docker Composeの設定
Docker Composeを使用することで、複数のコンテナを一元管理し、簡単に起動・停止が可能です。以下に示す docker-compose.yml
ファイルは、Pythonのhttp.serverとCloudflare Tunnelを連携させるための設定例です。
services:
web:
image: python:3.9-slim-buster
entrypoint: python -m http.server 8000
cloudflared:
image: cloudflare/cloudflared:latest
depends_on:
- web
command: tunnel --no-autoupdate --url http://web:8000
設定内容の詳細
webサービス
Pythonの公式イメージを使用します。エントリーポイントとして python -m http.server 8000
を指定することで、ポート8000番で簡易的なウェブサーバーを起動します。
cloudflaredサービス
Cloudflare Tunnelの公式イメージを使用し、Pythonで起動したサーバーに依存して起動します。コマンドとして tunnel --no-autoupdate --url http://web:8000
を指定することで、webサービスのポート8000番にトンネルを接続します。
Cloudflare Quick Tunnelsの概要
Cloudflare Quick Tunnelsは、Cloudflareが提供するトンネリングサービスで、アカウントを作成せずに簡単に外部からのアクセスを自身のサーバーに接続することができます。従来のトンネリングサービスと異なり、設定が非常にシンプルで、初心者でも容易に利用可能です。
サーバーの起動とトンネルURLの取得
Docker Composeを使用してサーバーをバックグラウンドで起動すると、Cloudflare Tunnelが生成する外部アクセス用のURLは毎回変動します。これを自動的に取得し、利用可能にするために以下のBashスクリプトを用意しました。
#!/bin/bash
mkdir -p data
docker compose logs cloudflared | grep "trycloudflare.com" | grep -o "https://[^ ]*trycloudflare.com" | head -n 1 > data/tunnel_url.txt
if [ -s data/tunnel_url.txt ]; then
echo "Tunnel URL found:"
cat data/tunnel_url.txt
else
echo "Tunnel URL not found."
fi
スクリプトの役割
-
ログの確認:
docker compose logs cloudflared
コマンドでcloudflaredサービスのログを取得します。 -
URLの抽出:
grep
コマンドを用いて、生成されたトンネルURL(https://*.trycloudflare.com
)を抽出します。 -
ファイルへの保存: 抽出したURLを
data/tunnel_url.txt
に保存します。 - 結果の表示: URLが正常に取得できた場合は表示し、取得できなかった場合はエラーメッセージを表示します。
実際のセットアップ手順
1. 環境の準備
まず、DockerおよびDocker Composeがインストールされていることを確認してください。インストールされていない場合は、公式サイトの手順に従ってインストールを行ってください。
2. プロジェクトディレクトリの作成
次に、プロジェクト用のディレクトリを作成し、そこに移動します。
mkdir my-home-server
cd my-home-server
3. Docker Composeファイルの作成
上述の docker-compose.yml
ファイルを作成します。任意のテキストエディタを使用して以下の内容を保存してください。
services:
web:
image: python:3.9-slim-buster
working_dir: /app
volumes:
- ./app:/app
entrypoint: python -m http.server 8000
cloudflared:
image: cloudflare/cloudflared:latest
depends_on:
- web
command: tunnel --no-autoupdate --url http://web:8000
4. サーバーの起動
Docker Composeを使用してサービスをバックグラウンドで起動します。
docker compose up -d
5. トンネルURLの取得
作成したBashスクリプトを実行して、生成されたトンネルURLを取得します。以下の手順で実行してください。
chmod +x get_tunnel_url.sh
./get_tunnel_url.sh
実行結果として、data/tunnel_url.txt
にトンネルURLが保存されます。このURLをブラウザに入力することで、自宅サーバーにアクセスすることができます。
まとめ
本記事では、Cloudflare TunnelのQuick Tunnels機能とDocker Compose、Pythonのhttp.serverを組み合わせることで、ポート開放不要かつアカウント不要で自宅サーバーを簡単に公開する方法を紹介しました。これにより、初心者でもセキュアかつ手軽にウェブサーバーをインターネットに公開することが可能になります。今後、自宅サーバーを利用したプロジェクトやサービスの公開にぜひ活用してみてください。