元々、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をインストールします。
- 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
- 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
エラー: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 ページを参照してください。
- リポジトリを更新し、cloudflaredをインストール
sudo apt-get update && sudo apt-get install cloudflared
CloudFlareにログイン
cloudflaredはインストールできたと思います。
コマンドでTunnelなどを作成したいので、cloudflareにログインします。
- 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を作っていきます。
これもコマンドで作成できます。
- 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 *****
設定ファイルを作成
次に設定ファイルを作成します。具体的にtunnelの内容を記載します。
- 設定ファイルの作成(今回は、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で作られる)]
ルーティングを開始
- CNAMEトラフィックをトンネル サブドメインに向けるレコードを割り当てる
cloudflared tunnel route dns [id] [ドメイン]
2024-11-03T14:32:58Z INF Added CNAME [ドメイン] which will route to this tunnel tunnelID=[id]
tunnelを起動
ここまでできれば、tunnelを開始できます。
- cloudflared tunnel runを実行
cloudflared tunnel run [id]
これで自宅サーバーが公開されていると思います!
cloudflareをサービスで起動
このままだと、コマンドを起動しないと、tunnelが開始されないので、サービス登録しておきましょう。
- サービス設定を作成([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
- サービスを開始
- サービスをenableに変更
$ sudo systemctl daemon-reload
$ sudo systemctl start cloudflared
$ sudo systemctl enable cloudflared
これで、システムが起動していれば、tunnelは動き続けていると思います。