このインストール方法は公式に推奨されていません。自己責任で実行してください。
Discourse チームは、公式インストールガイド を使用したインストールのみを推奨しています。
これは非サポートのインストールです。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 などの代替サーバー環境、またはコマンドラインから立ち上がるその他の環境についてはサポートを提供していません。
そこで、この設定と手順を共有することにしました。もしかしたら誰かの役に立つかもしれません。
[もし誰かがこの方法を試す場合は、結果について教えていただくか、このチュートリアルを改善できるかどうかお知らせください。
]
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 の追加インスタンスをインストールするには…








