CloudPanelにDiscourseをインストール

:warning: このインストール方法は公式に推奨されていません。自己責任で実行してください。

Discourse チームは、公式インストールガイド を使用したインストールのみを推奨しています。

:information_source: これは非サポートのインストールです。CloudPanel の経験があり、システム管理者としての知識を持ち、Docker やリバースプロキシに精通し、標準的なインストールを成功させた経験がある人向けです。

CloudPanel を選ぶ理由

なぜ CloudPanel を実行している VPS または専用サーバーに Discourse フォーラムをインストールしたいのでしょうか?

私の理由は以下の通りです。

サーバーとサイトの管理にはグラフィカルインターフェースを使用することを好みます。これまでに Web ホスティングコントロールパネル のほとんどを利用したことがあります。

他のパネルと比較して、CloudPanel は非常に 軽量で最小限 で、整理整頓された 設計です。必要な機能がすべて備わっており、非常にシンプルで直感的に表示されます。それだけです。不要な機能は何もありません。

私は Ghost ブログ、Wordpress サイト、Drupal サイト、そして Discourse フォーラムなど、さまざまな種類のサイトの開発、ホスティング、管理を行っています。Discourse フォーラムを Ghost ブログや Wordpress、Drupal サイトと同じサーバーでホストできるサーバーが 1 つあれば十分です(Discourse のインスタンスごとに別々のサーバーを購入して維持したくありません)。

CloudPanel には、標準装備として組み込みの Nginx と、リバースプロキシの設定・管理のためのシンプルなインターフェースが含まれています。これにより、1 つのサーバー上で Discourse の複数のインスタンスを、他の種類のウェブサイトと一緒に実行することが可能になります。

Discourse チーム(およびここ Meta フォーラムのスタッフ)は、Cpanel や Plesk、あるいは今回のような CloudPanel などの代替サーバー環境、またはコマンドラインから立ち上がるその他の環境についてはサポートを提供していません。

そこで、この設定と手順を共有することにしました。もしかしたら誰かの役に立つかもしれません。

[もし誰かがこの方法を試す場合は、結果について教えていただくか、このチュートリアルを改善できるかどうかお知らせください。:heart_eyes: ]

Docker のインストール

Putty(またはその他のターミナル)で、ルートディレクトリから以下のコマンドを実行します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io

CloudPanel でリバースプロキシサイトを作成する

+ Add Site ボタンをクリックします…

私の Discourse インスタンスではドメイン名 noobish.me を使用しています。以降の説明でこのドメイン名が表示される場合は、noobish.me を実際のドメイン名(例:yoursite.com)に置き換えてください。

→ CloudPanel で、Discourse フォーラムをホストしたいドメインに対して新しい「リバースプロキシサイト」を作成します(もちろん、ドメインの DNS A レコードは CloudPanel の IP アドレスを指している必要があります)。

ドメインの準備と SSL の設定

私のサイトでは、Cloudflare のネームサーバーを使用してドメインを指しています。Cloudflare では SSL を「Full」または「Full (strict)」に設定します。

また、Cloudflare のページルールを作成します。その理由については、こちらの投稿 をご覧ください。

また、ドメイン用の無料の Cloudflare SSL 原点証明書を使用しており、それを Cloudflare アカウントからダウンロードした証明書と秘密鍵を貼り付けるだけで、該当するサイトの「SSL/TLS」サイト設定内で CloudPanel に「インポート」しています。

Discourse のインストール

Putty(またはその他のターミナル)に戻り、ルートディレクトリから(c d Enter でルートに戻る)→ Discourse 標準インストール を以下のコマンドを使用してインストールします…

git clone https://github.com/discourse/discourse_docker.git /var/discourse

Enter

cd /var/discourse

Enter

chmod 700 containers

スタンドアロン設定のコピー

次に、ファイル /var/discourse/standalone.yml/var/discourse/containers/ 内の app.yml としてコピーし、サイト設定に応じて編集します。

cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

app.yml ファイルの編集

特定のサイト設定に応じて app.yml ファイルを変更するほか、保存する前にそのファイル内で さらに 3 つの変更を行う必要があります。

templates: セクションの下に以下を追加します。

  - "templates/web.socketed.template.yml"

Cloudflare を使用しているため、templates: セクションの下に以下も追加します。

  - "templates/cloudflare.template.yml"

expose: セクションの下で、以下の行をコメントアウトします。

  #- "80:80"   # http
  #- "443:443" # https

env: セクションの下に以下を追加します。

   DISCOURSE_FORCE_HTTPS: true
参考までに、Cloudflare と Mailgun の両方を使用している noobish.me での動作中の app.yml の内容を見るには、ここをクリックしてください。
## これはオールインワンのスタンドアロン Discourse Docker コンテナテンプレートです
##
## このファイルに変更を加えた後は、必ず再構築してください
## /var/discourse/launcher rebuild app
##
## 編集時は *非常に* 注意してください!
## YAML ファイルは、空白やアライメントのミスに非常に敏感です!
## 必要に応じて http://www.yamllint.com/ を訪れてこのファイルを検証してください

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/web.socketed.template.yml"
  - "templates/cloudflare.template.yml"

params:
  db_default_text_search_config: "pg_catalog.english"

  ## db_shared_buffers を総メモリの最大 25% に設定します。
  ## 検出された RAM に基づいてブートストラップによって自動的に設定されますが、上書きすることも可能です
  db_shared_buffers: "4096MB"

  ## ソートパフォーマンスを向上させることができますが、接続ごとのメモリ使用量が増加します
  #db_work_mem: "40MB"

  ## このコンテナで使用する Git リビジョンはどれですか?(デフォルト: tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  DISCOURSE_FORCE_HTTPS: true

  ## 同時 Web リクエストのサポート数。メモリと CPU コア数に依存します。
  ## 検出された CPU に基づいてブートストラップによって自動的に設定されますが、上書きすることも可能です
  UNICORN_WORKERS: 8

  ## TODO: この Discourse インスタンスが応答するドメイン名
  ## 必須です。Discourse は IP アドレスのみでは動作しません。
  DISCOURSE_HOSTNAME: 'noobish.me'

  ## 上記で指定したホスト名と同じ (-h オプション) でコンテナを起動したい場合は、以下のコメントアウトを外してください
  #DOCKER_USE_HOSTNAME: true

  ## TODO: 初期登録時に管理者および開発者として登録されるメールアドレスのリスト(カンマ区切り)
  ## 例: 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'admin@noobish.me'

  ## TODO: 新規アカウントの検証や通知の送信に使用する SMTP メーラーサーバー
  # SMTP アドレス、ユーザー名、パスワードは必須です
  # 警告:SMTP パスワードに '#' 文字が含まれていると問題が発生する可能性があります!
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: postmaster@noobish.me
  DISCOURSE_SMTP_PASSWORD:  pYdRLyQW
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (オプション、デフォルトは true)
  #DISCOURSE_SMTP_DOMAIN: noobish.me    # (一部のプロバイダーで必須)
  DISCOURSE_NOTIFICATION_EMAIL: noreply@noobish.me    # (通知を送信するアドレス)

  ## この Discourse インスタンスの http または https CDN アドレス(取得用に設定)
  ## 詳細は https://meta.discourse.org/t/14857 をご覧ください
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## IP アドレス検索用の Maxmind 地理情報 IP アドレスキー
  ## 詳細は https://meta.discourse.org/t/-/137387/23 をご覧ください
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Docker コンテナはステートレスです。すべてのデータは /shared に保存されます
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## プラグインはここに記述します
## 詳細は https://meta.discourse.org/t/19157 をご覧ください
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## ビルド後に実行する任意のカスタムコマンド
run:
  - exec: echo "Beginning of custom commands"
  ## 最初の登録時の 'From' メールアドレスを設定したい場合は、以下のコメントを外して変更してください:
  ## 最初のサインアップメールが届いたら、再度コメントアウトしてください。一度だけ実行すれば十分です。
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"

その後、app.yml ファイルを保存して終了します…

CTRL-X

y

Enter

次に、app.yml ファイルの権限を設定します…

chmod o-rwx containers/app.yml

そして…

アプリのブートストラップ

cd /var/discourse
./launcher bootstrap app

これには相当な時間がかかります。ブートストラップ処理の最後で、以下のコマンドが求められます。

./launcher start app

Vhost ファイルの編集

次に、CloudPanel に戻り、Discourse サイトの「Vhost Editor」に以下のコードを貼り付けます(既存の内容を上書きします)。もちろん、yoursite.com を実際のドメイン名に置き換えてください。

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  {{ssl_certificate_key}}
  {{ssl_certificate}}
  server_name yoursite.com;
  {{root}}

  {{nginx_access_log}}
  {{nginx_error_log}}

  if ($scheme != "https") {
    rewrite ^ https://$host$uri permanent;
  }

  location ~ /.well-known {
    auth_basic off;
    allow all;
  }

  {{settings}}

  add_header Cache-Control no-transform;

  location / {
                proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
                proxy_set_header Host $http_host;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;

  }
}

Nginx の再起動

次に、Nginx を再起動する必要があります。これは CloudPanel の管理エリアにあるボタンをクリックすることで実行できます…

おめでとうございます!

これで、ブラウザからサイトの URL にアクセスし、Discourse セットアップウィザードを実行できます…

平和に共存

これで、クリーンで軽量な管理パネルを使用して、Ghost、Wordpress、Drupal、その他の種類のサイトと同じ場所で Discourse サイトをセルフホストし、管理できるようになりました。今後、ターミナルやコマンドラインを使用する必要性は最小限に抑えられます。


Discourse の追加インスタンスをインストールするには…

「いいね!」 3

これらの手順を削除し、このエラーを生成せずに app.yml を作成する必要があります。混乱します。

(ファイル全体を置き換えるのであれば、なぜ例をコピーするのですか?)既存のサンプルから何を変更する必要があるかを言う方が良いでしょう。ソケットテンプレートと強制 HTTPS のようです。

これにより、2 つの postgres コピーが使用され、1 つの postgres よりも多くの RAM を消費します。機能しますが、ベストプラクティスではありません。

この例がフォローするのに適していない理由はいくつかあり、サポートが非常に困難になります。ご自身で解決策を見つけられたことは嬉しいですが、人々をこの道に進ませるのは良いことではないと思います。

「いいね!」 3

@pfaffman --ありがとうございます。

おっしゃる通りです。目的は達成できますが、手順が煩雑すぎます。順序も間違っています。ご提案に感謝いたします。修正します。

なぜそう思われるのか、明確にしていただけますか?

なぜなら、それは複雑であり、自分で理解できる人にとってのみ良い考えだからです。それはかなり無駄が多く、単に2つのディスコースを実行することが目標である場合、ほとんどの場合、2つの別々のVMの方が安価で簡単なソリューションです。

「いいね!」 2

改めて @pfaffman さん、ありがとうございます。手順を簡略化し、同じサーバーに2つ目のDiscourseサイトを追加するセクションを削除しました。

「いいね!」 1

このメッセージを受け取りました

sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io
usage: gpg [options] --dearmor [file]
curl: (23) Failed writing body

なぜですか?

アントニオさん、こんにちは。ようこそ。

これはDiscourseの問題ではなく、Dockerの問題のようです。OSとdocker-ceのアップデートで検索した方が、ここで質問するよりも良い結果が得られるでしょう。

Discourseを使おうとしていますか?それともCloudPanelですか?

「いいね!」 1

ガイドに従ったばかりです。Dockerインストールの最初のコマンドを実行したところ、サーバーから次のような応答がありました。
コマンドは次のとおりです。

「いいね!」 1

各行末のバックスラッシュは不要です。バックスラッシュは改行をエスケープし、シェルは次の行を同じ行の継続として扱います。

この場合、単一のコマンドとして実行しようとするため、エラーが発生しています。
sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable\"

行末のバックスラッシュを削除するだけで解決します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io
「いいね!」 2

ありがとうございます、これで正常に動作します

「いいね!」 2

@Simon_Manning 様、ありがとうございます。トップ投稿チュートリアルのコードスニペットからバックスラッシュを削除しました。

「いいね!」 2

申し訳ありません、このエラーが発生しました: FAILED

Pups::ExecError: /usr/local/bin/ruby -e 'if ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com"; puts "Aborting! Mail is not configured!"; exit 1; end' failed with return #<Process::Status: pid 112 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params "/usr/local/bin/ruby -e 'if ENV[\"DISCOURSE_SMTP_ADDRESS\"] == \"smtp.example.com\"; puts \"Aborting! Mail is not configured!\"; exit 1; end'"
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
214c73c4474ed59e7b6fb7f42143ce126d2b453022b08770da3af31ca2fdaaba

CloudPanel は知りませんが、エラーメッセージは自己説明的なようです。

'if ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com"; puts "Aborting! Mail is not configured!"; exit 1; end'
'if ENV[\"DISCOURSE_SMTP_ADDRESS\"] == \"smtp.example.com\"; puts \"Aborting! Mail is not configured!\"; exit 1; end'\"

./discourse-setup の実行中、または app.yml (いつでも手動で編集できます) 内でメールが設定されていなかったようです。 :thinking:

「いいね!」 2

皆さん、こんにちは。私はフェルミ高校の教授で、学校のためにディスコースコミュニティをインストールしようとしています。クラウドパネルを使用しているので、このガイドに従いましたが、何かが足りないようです。助けていただき、より詳細なガイドを提供していただけますか?どうぞよろしくお願いします。

「いいね!」 1

sysadminの知識があまりない場合、高度なインストールは求めているものではないと思います。もう一つ考慮すべき重要な点は、そのようなインストールは#unsupported-installの対象となり、問題が発生した場合にここで助けてもらえる可能性が低くなることです。

予算があり、コミュニティの規模によっては、別のサーバーでDiscourseをホストし、標準のインストールに従う方が良いかもしれません。

「いいね!」 1

申し訳ありませんが、このようなサービスは何のためにあるのでしょうか? 私の意見では、ガイドはあまり詳細ではなく、システム管理者向けに作られているようです。単にさまざまな手順を示すだけで十分でしょう。私が育ったところでは、「誰も教育を受けて生まれてくるわけではない」と言われています。ご協力とご尽力に感謝いたします。

「いいね!」 1

まさにその通りです。だからこそ、標準インストールをお勧めしたのです。

そして、@denvergeeks、だからこそ、私は最初からこのようなガイドを作成するのは良い考えだと思わなかったのです。書くのも、維持するのも大変で、確認できるのはあなただけです。

「いいね!」 4

申し訳ありませんが、同意できません。すでにさまざまなドメインでクラウドパネルを使用しています。さらに、ディスコースコミュニティはサブドメインで実行され、著者の前提は非常に明確です(ガイドは、VPSにさまざまなサービスがインストールされているクラウドパネルを使用しているユーザー向けです)。すべてをより詳細に説明するには、少しの努力が必要です。結局のところ、知識の共有はコミュニティの基盤です。そうでなければ、すでにインストールされてすぐに使用できるソフトウェアを購入したでしょう。いずれにしても、誰かを悩ませたくありません。助けが得られるなら感謝しますが、そうでなければ二度と邪魔しません。

「いいね!」 1

@denvergeeks メール設定は通常の運用に不可欠であり、標準のインストールへのリンクはありますが、現在のガイドの記述方法は、メール設定や特定のセットアップに重要となる可能性のあるその他のさまざまな情報を回避しています。

「Discourseのインストール」から「アプリのブートストラップ」までのセクションを、次のようなものに置き換える価値があるかどうか疑問に思います。

Discourseのインストールと設定

標準のインストール手順のステップ1〜6に従ってください。

<現在の「アプリ.ymlファイルの編集」セクションの内容を実行してください>

Discourseを再構築します。

./launcher rebuild app

その後、「おめでとうございます!」セクションで、スクリーンショットの後に、「標準のインストールドキュメントの残りの部分を続行してください。」のような一文を追加します。基本的に、ガイドを再構築して、代替のインストール手順を提供するのではなく、標準のインストールを補完する追加の手順を提供します。

CloudPanelに関する提供された情報は非常に役立ち、手順も明確だと思います。Discourse側は、標準のインストールからの逸脱を減らすことで、より安全になり、unsupported-install タグを付けることで、そこには危険があることが(より)明確になるという点で、さらに改善される可能性があります。

「いいね!」 2

議論は元のトピックから少し逸れていますが、喜んでお手伝いさせていただきますのでご安心ください。 :slight_smile:

要約すると、次のようになります。

基本的なIT知識があれば、標準のインストールに従うことができます。また、ドメイン名が必要であり、Mailgunのようなメール送信サービスを設定する必要があります(チュートリアルはこちら:Configure Mailgun for email when using Digital Ocean for DNS

通常、このフォーラムの範囲外の事項についてはお手伝いしないことに注意してください。たとえば、「ドメイン名の登録方法は?」という質問はここには当てはまりません。

基本的なIT知識がなく、予算に応じて、Marketplace で有料サポートを依頼できます。

最後に、Discourseのマネージド有料プランも検討できます。このプランでは、ほぼすべてのことが私たちによって処理され、チームサポートにアクセスできます。

また、学校のために言及されているので、教育目的で割引を提供していることも知っておいてください。

教育機関または非営利団体向けの割引はありますか?

はい!法的に認められた教育機関であれば、85%の割引を提供しています。法的に認められた連邦税免除の非営利団体であれば、50%の割引を提供しています。これらの割引は、基本、プロ、ビジネスプランにのみ適用され、他の割引と組み合わせることはできません。また、月払いまたは年払いのデビット/クレジットカードで支払う必要があります。[トライアル開始後、お問い合わせいただければ、アカウントに割引を追加します。

「いいね!」 4