Discourse

トップ > チップス > Discourse
2015-12-05, discourse docker

Discourseをインストールする

Discourseという今風の掲示板ウェブアプリを立ち上げる手順です。さくらのVPS(CentOS6)で実行しています。

まずはdocker-engineのインストール。以下を実行するとdocker-engineというrpmがインストールされ、同時に色々ごにょごにょとやってくれるみたいです(この辺のブラックボックス感が苦手なんですけれど、単に自分が無知なだけか…)。

# wget -qO- https://get.docker.com/ | sh

discourseをGitHubから取得し、設定ファイルを用意します。

# mkdir /var/discourse
# git clone https://github.com/discourse/discourse_docker.git /var/discourse
# cd /var/discourse
# cp samples/standalone.yml containers/app.yml

設定ファイルの内容を環境に合わせて書き換えます。以下は修正箇所の抜粋です。今回、このVPSで既にApache(httpd)とPostfixが動いていましたので、その構成に沿った内容になっています。discourseのポートは8080(適当な空き番号)で動かして、Apacheのバーチャルホストで共存させる作戦です。メールサーバもローカルのものを利用します。この時、普段の感覚で「localhost」と設定しても、dockerの環境では通用しません(ホスト側を指しません)ので注意してください。

containers/app.yml
  - "8080:80" # fwd host port 8080 to container port 80 (http)
  DISCOURSE_DEVELOPER_EMAILS: 'me@example.com'
  DISCOURSE_HOSTNAME: 'discourse.lmlab.net'
  DISCOURSE_SMTP_ADDRESS: discourse.lmlab.net # (mandatory)
  DISCOURSE_SMTP_PORT: 25 # (optional)

設定を保存したら以下のコマンドを実行します。これには数分かかります(公式には8分かかる、と書かれています)。

# service docker start
# ./launcher bootstrap app

設定完了後、以下のコマンドでdiscourseが立ち上がります。

# ./launcher start app

停止するときは「stop」、設定を変更したら「rebuild」など他にも便利なサブコマンドが用意されています。ただし、今回は、設定ファイルを書き換えて「rebuild」をしても変更が反映されませんでした(「destroy」で正しく破棄されていない?)。以下のdockerコマンドで、local_discourseイメージを明示的に削除したらうまく反映されました。

# docker rmi (IMAGE ID)

設定したURLにブラウザでアクセスして表示を確認します。設定ファイルに記載したメールアドレスでアカウントを作成すると、そのアカウントが管理者権限を持ちます。ロケール(言語)の設定など、諸々の設定はここから可能です。

周辺の設定

DNS:
動作させるドメインとIPを登録してください。弊社はbindを使っています。お名前.comなど、DNSサーバのレンタルサービスが使える場合は、設定画面から登録可能です。

HTTPD:
サーバ上で単体で動かす(=ホスト側にポート80を使うデーモンが居ない)場合は不要ですが、他のウェブコンテンツも既に配信している場合は、バーチャルホストでリクエストを切り分けるなどの工夫が必要です。今回は以下のように設定しました。折角のNginxのパワーを台無しにするので、アクセスが多くなりそうなときはこういう使い方は止めましょう。

/etc/httpd/conf.d/discourse.conf
<VirtualHost *:80>
  ServerName discourse.lmlab.net
  ProxyPass / http://discourse.lmlab.net:8080/
  ProxyPassReverse / http://discourse.lmlab.net:8080/
</VirtualHost>

SMTP:
ここが一番苦戦しました。Postfix側では他所からのアクセスとみなされて、メールリレーが拒否されてしまいます。dockerの接続元IPとメールアドレスに設定したドメインを以下のように追加することでリレーが許可されるようになりましたが、これが必要十分かどうか、ちと自身がありません(^_^;

/etc/postfix/main.cf
#mynetworks_style = host <- コメントアウト
mynetworks = 172.17.0.0/16, 127.0.0.0/8
relay_domains = $mydestination, discourse.lmlab.net

プラグイン

Adsenseを挟み込むプラグインをインストールしました。app.ymlに設定を挟みこんでbootstrap(またはrebuild)を実行します。広告のIDなどの設定は、管理画面にログインして行います。広告のサイズはここでの指示に従ってください。表示位置やレベル(どのユーザに対して広告を見せるか)などの設定も可能です。

残った課題

- デザインをカスタマイズするには?
- バックアップはどうするの?(サーバが突然落ちたらデータはどうなる?)

参考URL

この記事は役に立ちましたか?