11
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

簡単に自宅サーバーを公開!Cloudflare Quick TunnelsとDocker Composeでポート開放不要

Posted at

ポート開放不要で自宅サーバーを安全に公開する方法

主なポイント

  • ポート開放不要で自宅サーバーを安全に公開
  • 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を組み合わせることで、ポート開放不要かつアカウント不要で自宅サーバーを簡単に公開する方法を紹介しました。これにより、初心者でもセキュアかつ手軽にウェブサーバーをインターネットに公開することが可能になります。今後、自宅サーバーを利用したプロジェクトやサービスの公開にぜひ活用してみてください。

参考資料


11
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?