GCP で自宅サーバーを公開する
Published on 2024/01/19 , Last updated 2024/02/12Tags
概要
GCP と rathole を使用して Tunnel を構築し自宅のサーバーを公開します。
Tunnel を構築して自宅のサーバーを公開するその他の方法は こちら を参照してください。
前提条件
- GCP のアカウントが必要です。
- Domain が必要です。今回は Google Domains で取得済みです。
- Docker, Docker Compose が使用できる必要があります。
手順
Tunnel の構築
GCP のファイアウォール、Tunnel、DNS を設定します。
ファイアウォールの設定
VPC ファイアウォールのルールを作成します。
-
GCP にログインします。
-
サイドメニューから
VPC ネットワーク
のファイアウォール
選択します。 -
ファイアウォール ルールを作成
を選択します。 -
項目に次の値を入力し
作成
ボタンを選択します。項目名 入力値 備考 名前 home-server 任意の値 説明 home-server のルール 任意の値 ターゲットタグ home-server 任意の値 送信元 IPV4 範囲 0.0.0.0/0 プロトコルとポート > 指定したプロトコルとポート > TCP 80 TCP チェックボックスにチェックを入れます。今回は自宅サーバーを port 80 で公開します。
Tunnel の設定
Compute Engine で rathole を起動して Tunnel を構築します。
Compute Engine のインスタンスは Google Cloud の無料プログラム を参考に設定します。
-
サイドメニューから
Compute Engine
のVM インスタンス
選択します。 -
インスタンスを作成
を選択します。 -
項目に次の値を入力し
作成
ボタンを選択します。項目名 入力値 備考 名前 instance-1 任意の値 リージョン オレゴン: us-west1 マシン構成 > シリーズ E2 マシン構成 > マシンタイプ e2-micro ブートディスク > OS Ubuntu ブートディスク > バージョン Ubuntu 18.04 LTS ブートディスク > ブートディスクの種類 標準永続ディスク ブートディスク > サイズ (GB) 30 ファイアウォール > HTTP トラフィックを許可する 許可 チェックボックスにチェックを入れる ファイアウォール > HTTPS トラフィックを許可する 許可 チェックボックスにチェックを入れる 詳細オプション > ネットワーキング > ネットワーク タグ home-server ファイアウォールのターゲットタグを入力する -
作成したインスタンスの
SSH
を選択し SSH 接続します。 -
インスタンスのポートを開放します。
ufw を有効にします。
sudo ufw enable
開放するポートを追加します。
2333
は rathole 、80
は自宅サーバーのポート番号です。sudo ufw allow 2333 sudo ufw allow 80
ufw をリロードします。
sudo ufw reload
-
インスタンスに docker と docker-compose をインストールします。
-
rathole の設定ファイル
server.toml
を作成します。詳細は readme を参照してください。# server.toml [server] bind_addr = "0.0.0.0:2333" [server.services.home-server] token = "home-server-token" type = "tcp" bind_addr = "0.0.0.0:80"
-
rathole の
docker-compose.yaml
を作成します。2333
は rathole 、80
は自宅サーバーのポート番号です。version: "3.7" services: # https://github.com/rapiz1/rathole tunnel: image: rapiz1/rathole restart: unless-stopped command: ["--server", "/app/server.toml"] tty: true ports: # rathole - 2333:2333 # home server - 80:80 volumes: - /home/st-little/server.toml:/app/server.toml
-
インスタンスで rathole を起動します。
docker-compose up -d
予算の設定
-
サイドメニューから
お支払い
を選択します。 -
お支払いのサイドメニューから
請求先アカウント
を選択します。 -
お支払いのサイドメニューから
予算とアラート
を選択します。 -
予算を作成
を選択します。 -
項目に次の値を入力し
終了
ボタンを選択します。項目名 入力値 備考 範囲 > 名前 home-server 任意の値 金額 > 目標金額 1000 予算の上限金額
DNS の設定
-
サイドメニューから
ネットワーキング
のCloud DNS
を選択します。 -
ゾーンを作成
を選択します。 -
項目に次の値を入力し
作成
ボタンを選択します。項目名 入力値 備考 ゾーンのタイプ 公開 ゾーン名 mc-zone 任意の値 DNS 名 DNS 名の接尾辞 説明 home-server DNS 任意の値 -
作成したゾーンを選択し
ゾーンの詳細
を表示します。 -
レコードセットの追加
を選択します。 -
項目に次の値を入力し
作成
ボタンを選択します。項目名 入力値 備考 DNS 名 DNS ゾーンのサブドメイン リソース レコードのタイプ A IPv4 アドレス VM インスタンスの外部 IP Tunnel の設定
で作成した Compute Engine のインスタンス
自宅サーバーの公開
-
rathole の設定ファイル
client.toml
を作成します。詳細は readme を参照してください。# client.toml [client] remote_addr = "myserver:2333" [client.services.home-server] token = "home-server-token" type = "tcp" local_addr = "home-sever:80"
-
自宅サーバーと Tunnel の
docker-compose.yaml
を作成します。今回の自宅サーバーは nginx を使用します。version: "3.7" services: # https://hub.docker.com/_/nginx home-sever: restart: unless-stopped image: nginx:latest ports: - "80:80" # https://github.com/rapiz1/rathole tunnel: restart: unless-stopped image: rapiz1/rathole:latest command: ["--client", "/app/client.toml"] volumes: - ./client.toml:/app/client.toml
-
自宅サーバーと Tunnel を起動します。
docker-compose up -d
停止する場合は次のコマンドを実行します。
docker-compose down
削除する場合は次のコマンドを実行します。
docker-compose rm
-
自宅サーバーにアクセスできることを確認します。