Cloudflare Tunnelを使った家庭用インターネットへのDiscourseインストール

[Discourse が Raspberry Pi で実行できるようになった ことで、ホームラボで小規模なインスタンスを実行することが一般的なユースケースになるでしょう。しかし、多くの家庭用 ISP は、Discourse が必要とするポート 80/443 への着信トラフィックをブロックしています。

デモサイト https://discourse-on-a-pi.falco.dev/ では、この問題を回避するために Cloudflare Tunnel を使用しました。あなたもできます!

トンネルの設定

まず、以下のガイドに従ってください。

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide

必要な変更は、url: http://localhost:8000url: http://localhost:80 に変更することだけです。トンネルはバックグラウンドで実行したままにしておいてください。

Rocket Loader の無効化

Discourse が正しく機能するためには、Cloudflare Rocket Loader を無効にする必要があります。

https://community.cloudflare.com/t/how-can-i-remove-the-rocket-loader-script-from-the-header-tag-on-my-website/4229/2

Discourse のインストール

本番環境に Discourse をインストールする方法 に従いますが、app.yml ファイルが作成されたら、5 秒間のカウントダウンが表示されたときに CTRL+C を押してください。

次に、ファイルの上部数行を編集して、次のようになっていることを確認します。

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/cloudflare.template.yml"
#  - "templates/web.ratelimited.template.yml"
## Let's Encrypt (https) を追加したい場合は、これらの 2 行のコメントを解除してください
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

そして、env: セクションの下に次の行を追加します。

DISCOURSE_FORCE_HTTPS: true

その後、./launcher rebuild app を実行します。

待っている間に、次のように常に HTTPS にリダイレクトするページルールをインストールします。

数分後、トンネル/Discourse の設定で使用したドメインで新しい Discourse インスタンスが利用可能になります :tada:

「いいね!」 38

ポートについて言及した方が良いと思います。ユーザーがargo tunnelを使用することにした場合、tunnelの設定と同じポートを設定する必要があります。例えば:

-80:80
#-443:443

その後、tunnelにリッスンさせる必要があります。
http://localhost:80

私が使用しているのは、それらを接続するためにunixソケットを使用することです。

「いいね!」 5

Isn’t that what I mention here:

?

「いいね!」 7

ラファエル様

チュートリアルありがとうございます。

上記ガイドに従ってすべて実行し、問題なく動作しましたが、

アカウントを有効化するためにメール内のリンクをクリックすると、正しいウェブページにリダイレクトされ、有効化ボタンが表示されます。しかし、このボタンが機能しません。フォーラムでガイダンスを調べたところ、ドメインからIPへの問題のようです。

configでforce_httpsがtrueに設定されていることを確認しました。

何か考えはありますか?(添付スクリーンショット)この機能しないボタンについて、同様の問題に遭遇しましたか?

「いいね!」 3

これで解決できました。

ロケットローダーが無効になっていることを確認してください :wink:

よろしく!

「いいね!」 6

ついに、Raspberry PiにDiscourseをインストールしました。しかし、Cloudflare Tunnelsで問題が発生しています。

ドメインでDiscourseサイトにアクセスできません。config.ymlの設定に何か問題があるのでしょうか?

url: http://localhost:80
tunnel: 371dd57c-************
credentials-file: /home/pi/.cloudflared/371dd57c-*********.json
「いいね!」 3

トンネルコマンドの出力は何ですか?設定の誤りがあれば明記してください。

「いいね!」 3

cloudflared tunnel info の出力:

cloudflared tunnel info ******
2022-01-24T04:55:47Z INF デフォルトのオリジン証明書パスを特定できません。[~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] にファイル cert.pem がありません originCertPath=
2022-01-24T04:55:47Z ERR --origincert オプションでオリジン証明書パスを指定する必要があります。または、TUNNEL_ORIGIN_CERT 環境変数を設定してください。詳細については、https://developers.cloudflare.com/argo-tunnel/reference/arguments/ を参照してください。originCertPath=
tunnel ID の解析エラー: オリジン証明書を特定できません: 端末から実行したときにクライアントが origincert パスを指定しませんでした
「いいね!」 2

証明書ファイルを紛失したようですね。rootで実行している場合、ファイルは配置した場所ではなく、

ではなく、

/root/.cloudflared/

の下にあるはずです。

「いいね!」 2

cert.pem ファイルはすでにあります。

「いいね!」 2

そして、pi ユーザーとしてトンネルを開始しようとしていますか、それとも root として開始しようとしていますか?

「いいね!」 3

piユーザーとしてこのコマンドを使用しています

cloudflared tunnel run <UUIDまたは名前>

「いいね!」 2

こんにちは @bekircem さん、

Cloudflared が Cloudflare のエッジへの接続を開始できたようです。

Cloudflare で CNAME を Argo Tunnel ID に設定してルーティングを有効にしましたか?

よろしく、

Alex.

「いいね!」 3

@Stiginさん、返信ありがとうございます。

はい、コマンドラインからのルーティングを有効にしています。

「いいね!」 2

@bekircem さん、興味深いですね。うーん!!
ウェブサイトのアドレスにアクセスした際に、現在どのようなエラーが表示されていますか?それは単なる一般的なCloudflare Argo Tunnelのエラーページでしょうか?

以下のコマンドを実行して、実行中のコンテナを表示してください: docker ps
そして、以下のコマンドを実行して、現在実行中のトンネルを表示してください: cloudflared tunnel list
|| Argoルートや関連性のないコンテナは必ずぼかしてくださいね :wink:

Alex.

「いいね!」 3

ウェブサイトのアドレスにアクセスした際に、現在どのようなエラーが表示されていますか?Cloudflare Argo Tunnelのエラーページが表示されているだけでしょうか?

いいえ、Cloudflare Argo Tunnelのエラーページは表示されていません。

ERR_NAME_NOT_RESOLVED

docker ps

CONTAINER ID   IMAGE                 COMMAND        CREATED        STATUS        PORTS                                                                      NAMES
f1bde9b70f55   local_discourse/app   “/sbin/boot”   11 hours ago   Up 11 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app

rootユーザーとしてこのコマンドを使用した場合 cloudflared tunnel list

2022-01-24T15:55:03Z INF デフォルトのオリジン証明書パスを特定できません。[~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] にファイル cert.pem がありません originCertPath=
2022-01-24T15:55:03Z ERR --origincert オプションを指定するか、TUNNEL_ORIGIN_CERT 環境変数を設定する必要があります。詳細については、https://developers.cloudflare.com/argo-tunnel/reference/arguments/ を参照してください。 originCertPath=
オリジン証明書が見つかりません: クライアントはターミナルから実行する際に origincert パスを指定しませんでした

piユーザーとしてこのコマンドを使用した場合 cloudflared tunnel list

各トンネルの詳細情報は、「cloudflared tunnel info <name/uuid>」で取得できます。
ID                                   NAME      CREATED              CONNECTIONS
371dd57c-**************** ze****2022-01-24T03:35:19Z

これは正常ですか?

config.ymlファイルでDISCOURSE_HOSTNAMEにサブドメインを使用する必要がありますよね?

更新:Cloudflaredをアンインストールし、rootユーザーで再インストールしたところ、正常に動作しました。以前の試行で具体的にどこで間違っていたのか、まだ理解できていません。

「いいね!」 2

Raspberry Pi でサイトをなんとか実行して公開できました。

どうやったのかよくわかりません。Cloudflared を削除して root ユーザーで再インストールしました。すると動作しました…

2 つ質問があります。

1- SSL 証明書が正しく機能していないようで、Discourse の管理者アカウントにログインできません。(シークレットウィンドウで実行されているようです。キャッシュの問題でしょうか?) フルまたはフル(厳格)を使用していますか?

2- cloudflared をサービスとして実行することについて質問があります。https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/run-as-service

cloudflared tunnel run <UUID or NAME> コマンドでトンネルを実行しました。しかし、iterm ウィンドウを閉じると動作しなくなりますか?

すでにログインしていて、~/.cloudflared/ に設定ファイルがある場合、これらは /etc/cloudflared/ にコピーされます。

設定ファイルがない場合は、上記にリストされているフィールドを含む config.yml ファイルを作成する必要があります。cloudflared --config CONFIG-FILE service install を実行することで、カスタムファイルを渡すことができます。

/etc/cloudflared/ に設定ファイルがないことを確認しました。この場合、このサービスを自動的に実行するにはどうすればよいですか?

ありがとうございます。

「いいね!」 2

Cloudflare Tunnelサービスに関するより具体的な質問は、https://community.cloudflare.com/tag/cloudflaretunnel でより良い回答が得られる場合があります。

「いいね!」 3

@bekircemさん、こんにちは。

cloudflared が証明書を見つけられない問題は、再インストールで解決したと思います。

Cloudflare をサービスとして実行することに関してですが、サービスを手動で実行した際に作成した設定ファイルは /etc/cloudflared に移動する必要があります。

個人的なサイトをここにリンクすることについては不明なため、削除が必要な場合はお知らせください。私のブログの1つで、「Setup and Run Cloudflared as a Service」というセクションで説明しています。

結果をお知らせください!

Alexより。

「いいね!」 4

返信ありがとうございます。

素晴らしいブログ記事ですね。共有いただきありがとうございます。

Cloudflared をサービスとして実行する

sudo cloudflared service install

config.yml ファイルは自動的に /etc/cloudflared/ にコピーされます。

sudo systemctl start cloudflared

sudo systemctl enable cloudflared

そして、正常に動作しています。まだ再起動は試していませんが、動作することを願っています。

「いいね!」 4