Discourse が Apache とプロキシリダイレクトで読み込まれない

Discourse への移行を完全に意図していたにもかかわらず、CentOS/Nginx に特化した現在のドキュメントが皆無だったため、DigitalOcean の非常に親切で忍耐強い方が、私が作成したスレッドに返信してくれました。試行錯誤の末、私と同じ状況にある Discourse の見込みユーザー向けの、簡単に 따라할 수 있는チュートリアルを一緒に作成してくれました。

おさらいすると、その状況は以下の通りです:

Apache と同じサーバーに Discourse をインストールする | Ubuntu 18.04 | DigitalOcean

credit to Bobbyiliev @ DigitalOcean
Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean (最初の回答)

前提条件

  • 万が一の問題に備え、Droplet のバックアップを取得しておくことを強くお勧めします。何か問題が発生した場合、動作するバージョンに戻すことができます。
  • Droplet に SSH で接続します。
  • Apache がインストールされている必要があります。インストール手順は以下をご覧ください:

ステップ 1 - Docker のインストール

Docker のインストール手順は以下をご覧ください:

ステップ 2 - Discourse のダウンロード

まず、Discourse ファイルを格納するディレクトリを作成します:

mkdir /var/discourse

その後、公式の Discourse Docker イメージを /var/discourse にクローンします。

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

ステップ 3 - Discourse をポート 8080 でリッスンするように設定する

PostgreSQL、Redis などの必要なサービスが含まれている standalone.yml テンプレートを使用します。

以下のコマンドでサンプルファイルをコピーします:

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

その後、お好みのエディタでファイルを編集します。/var/discourse/containers/app.yml を開き、23 行目と 24 行目のポート設定を更新します:

## このコンテナが公開する TCP/IP ポートは?
expose:
  - "8080:80"   # ホストポート 8080 をコンテナポート 80 (http) に転送
  - "8443:443"   # ホストポート 8443 をコンテナポート 443 (https) に転送

また、SSL 証明書をお持ちでない場合は、16 行目をコメントアウトしてください:

  #- "templates/web.ssl.template.yml"

- "templates/web.ssl.template.yml の行の前に # を追加してください。そうしないと Discourse が起動しません。

ステップ 4 - Discourse のセットアップ

ディレクトリを変更します:

cd /var/discourse

次に、Discourse を起動します(これがサービスの初回起動であるため、app.yml ファイルで行った新しい変更を反映してアプリケーションがブートストラップされます):

./discourse-setup

注意:有効なメールサーバー設定を入力してください。そうしないとセットアップが失敗する可能性があります。

ステップ 5 - Apache の設定

/etc/apache2/sites-available/forum.example.com.conf という名前の新しいファイルを作成し、以下の Vhost コンテンツを追加します:

<VirtualHost *:80>
  ServerName forum.example.com
  ServerAlias www.forum.example.com

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  </IfModule>
</VirtualHost>
  • 以下のコマンドで Vhost を有効化します:
a2ensite forum.example.com
  • Mod Proxy を有効化します:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
  • Apache を再起動します:
systemctl restart apache2

その後、ドメイン名から直接 Discourse にアクセスできるようになります。


注 1:Discourse のインストール中、app.yml が上書きされ、16 行目と 17 行目(SSL)のコメントアウトが解除されることがあります。その場合は、再度それらの行をコメントアウトし、アプリを再ビルドしてください(ディレクトリ変更を忘れないでください):./launcher rebuild app

注 2:このガイドでは Discourse に対して SSL は有効化されていません。当然ながら、Apache で既に Let’s Encrypt SSL を有効化している場合、それを Discourse でも有効化する方法に関するドキュメントは見当たりません。もし解決策を見つけた方がいらっしゃれば、ご連絡ください。

「いいね!」 4