Cloudflare Tunnelを利用して、Ubuntu自宅サーバー(Docker)を公開する!

Cloudflare Tunnelを利用して、Ubuntu自宅サーバー(Docker)を公開する!
  • URLをコピーしました!

元々、XServer VPSを利用していたのですが、メモリ不足のため運用コストがかかりすぎていたので、自宅PCをサーバーにして「Cloudflare Tunnel」で公開していこうと思います。

自宅サーバー用に利用したのは、下記のPCです。
最近流行りのミニPCというやつですね。セールで5万円程度で中々のスペックですし、自宅に置いても場所を取らないので結構良いです!(色々なメーカーがありますが、MinisForumがまだよさそう。)

目次

CloudFlareのアカウント登録

ここは説明しませんが、CloudFlareのアカウント登録をしてください。
CloudFlare Tunnelを使うだけなら、Freeプランでいいかなと思います。

また、別途ドメインが必要です。
ドメインの登録がまだの方は、「Domain Registration>Register Domains」から登録してみてください。
お名前.comとかXServer VPSとかでドメインを取得しても問題ありません。

サイトを登録

ドメインを取得したら、「Add site」からドメインを紐づけてください。

Ubuntuにcloudflaredをインストール

ここからは、公開したいサーバーで作業をします。
Ubuntuにcloudflaredをインストールします。

  1. Cloudflareのパッケージ署名キーを追加
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
  1. Cloudflare の apt リポジトリを追加
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared jammy main" | sudo tee /etc/apt/sources.list.d/cloudflared.list

こちらのコマンドは、公式の手順から変更しています。最新のリポジトリにcloudflaredがないためです。
公式「echo “deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main” | sudo tee /etc/apt/sources.list.d/cloudflared.list」

エラー:10 https://pkg.cloudflare.com/cloudflared noble Release
  404  Not Found [IP: 2606:4700::6812:176 443]
パッケージリストを読み込んでいます... 完了
E: リポジトリ https://pkg.cloudflare.com/cloudflared noble Release には Release ファイルがありません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。
  1. リポジトリを更新し、cloudflaredをインストール
sudo apt-get update && sudo apt-get install cloudflared

CloudFlareにログイン

cloudflaredはインストールできたと思います。
コマンドでTunnelなどを作成したいので、cloudflareにログインします。

  1. Cloudflareにログイン
cloudflared tunnel login

ブラウザで許可するかどうか出てくるので、対象のドメインを許可するようにします。
許可すると、下記のようになっていると思います。

$ cloudflared tunnel login

A browser window should have opened at the following URL:

https://*************************************

If the browser failed to open, please visit the URL above directly in your browser.
You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
/home/**************************

CloudFlare Tunnelを作成

ログインできたら、Tunnelを作っていきます。
これもコマンドで作成できます。

  1. Cloudflare Tunnelを作成
cloudflared tunnel create [任意の名前]
Tunnel credentials written to /home/*****/******.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.

Created tunnel ***** with id *****

「jsonのパス」「id」は、設定ファイルで利用しますので、保存しておくようにしてください。

設定ファイルを作成

次に設定ファイルを作成します。具体的にtunnelの内容を記載します。

  1. 設定ファイルの作成(今回は、Dockerが81ポートを利用しているので、localhost:81をtunnelします。)
$ sudo mkdir -p /etc/cloudflared
$ cd cloudflared/
$ sudo nano config.yml
$ cat config.yml 
url: http://localhost:81
tunnel: [id(※cloudflared tunnel createで作られる)]
credentials-file: [jsonのパス(※cloudflared tunnel createで作られる)]

ルーティングを開始

  1. CNAMEトラフィックをトンネル サブドメインに向けるレコードを割り当てる
cloudflared tunnel route dns [id] [ドメイン]
2024-11-03T14:32:58Z INF Added CNAME [ドメイン] which will route to this tunnel tunnelID=[id]

tunnelを起動

ここまでできれば、tunnelを開始できます。

  1. cloudflared tunnel runを実行
cloudflared tunnel run [id]

これで自宅サーバーが公開されていると思います!

cloudflareをサービスで起動

このままだと、コマンドを起動しないと、tunnelが開始されないので、サービス登録しておきましょう。

  1. サービス設定を作成([id]はtunnel IDを入れてください。)
$ sudo nano /etc/systemd/system/cloudflared.service
$ cat /etc/systemd/system/cloudflared.service 
[Unit]
Description=Cloudflare Tunnel
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/cloudflared tunnel run [id]
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target
  1. サービスを開始
  2. サービスをenableに変更
$ sudo systemctl daemon-reload
$ sudo systemctl start cloudflared
$ sudo systemctl enable cloudflared

これで、システムが起動していれば、tunnelは動き続けていると思います。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

情報セキュリティを勉強するために始めたブログです。
新人のため、広い心を持って見ていただけると嬉しく思います。
楽しくプログラミングを勉強するために、「Teech Lab.」もありますので、ソフトウェア開発にも興味があればぜひ覗いて見てください!

目次