Discourse/Dockerのインストール

フォーラムCMSであるDiscourseをインストールする手順について。

従来のフォーラムCMSであるphpBBからの乗り換えです。Dockerのコンテナとして動作させます。
既に稼働しているApacheサーバと共存させるため、ポート番号を80以外に指定してインストールします。Apacheのmod_proxyにより同一グローバルIP内でポート80へのアクセスにはwww.example.com、ポート8088へのアクセスにはwww.example-discouse.comを対応させます。

インストール環境はUbuntu Server 16.04です。

まず初めに以下のライブラリをインストールします。

$ sudo apt-get install libxml2-dev

Apacheのproxyとproxy_httpモジュールを有効にします。

$ sudo a2enmod proxy
$ sudo a2enmod proxy_http

/etc/apache2/sites-available内にdiscourse.confを作成し下記を記述します。

<VirtualHost *:80>
  ServerName www.example-discourse.com
  ProxyPass / http://localhost:8088/
  ProxyPassReverse / http://localhost:8088/
</VirtualHost>

SeverNameは任意です。
上記設定を有効にし、Apacheを再起動します。

$ sudo a2ensite discourse.conf

Apacheを再起動します。

$ sudo service apache2 restart

Docker/Gitのインストール

下記コマンドでDockerとGitがセットでインストールされます。

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

Discourseのインストール

$ sudo -s
# mkdir /var/discourse
# git clone https://github.com/discourse/discourse_docker.git /var/discourse
# cd /var/discourse

discourse-setup内で

check_ports() {
    check_port "8088"
    check_port "443"
    echo "Ports 8088 and 443 are free for use"
}

80を8088と書換えてセットアップコマンドを実行します。check_port "443"は、メインサーバで使用する場合削除して下さい。

# ./discourse-setup

以下の設問への答えを予め用意して下さい。

    Hostname for your Discourse? [discourse.example.com]: 
    Email address for admin account? [me@example.com]: 
    SMTP server address? [smtp.example.com]: 
    SMTP user name? [postmaster@discourse.example.com]: 
    SMTP port [587]:
    SMTP password? []:

containersフォルダ内にapp.ymlが作成されますが、ここでもポートの指定が必要です。

注意)443ポートをメインサーバで使用する場合、この行は削除します。

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

以下コマンドで再ビルドします。

# ./launcher rebuild app

指定したアドレスを入力すると下記のようなサイトが表示されます。

Docker上で起動しているDiscourseアプリの起動・停止は以下コマンドとなります。

$ sudo ./launcher start app
$ sudo ./launcher stop app

Let’s EncryptによるSSL接続に対応させます。

Let’s Encryptをインストールしたディレクトリに移動します。

$ cd /opt/letsencrypt

certbot-autoによりApacheのSSL設定ファイル、SSL認証ファイルの作成などを実行します。

$ sudo certbot --apache -d sub_domain2.example.com

httpへのアクセスをhttpsへリダイレクトするかどうか以下メッセージが表示されるので番号を入力して下さい。

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

参考サイト

Discourseマニュアルアップデート

試験サーバ:Ubuntu18.04

マニュアルアップデートでエラーが発生した場合、再ビルド・インストール

Docker-CEのアップデートでもエラーが発生したためDocker-CEをマニュアルで再インストール後、コンテナapp、イメージlocal_discourse/appを削除、app.ymlから再ビルド。

$ cd /var/discourse
$ sudo ./launcher destroy app
$ sudo git pull
$ sudo ./launcher rebuild app
Usage: launcher COMMAND CONFIG [--skip-prereqs] [--docker-args STRING]
Commands:
    start:      Start/initialize a container
    stop:       Stop a running container
    restart:    Restart a container
    destroy:    Stop and remove a container
    enter:      Use nsenter to get a shell into a container
    logs:       View the Docker logs for a container
    bootstrap:  Bootstrap a container for the config based on a template
    rebuild:    Rebuild a container (destroy old, bootstrap, start new)
    cleanup:    Remove all containers that have stopped for > 24 hours

Options:
    --skip-prereqs             Don't check launcher prerequisites
    --docker-args              Extra arguments to pass when running docker

ドメイン変更

ドメイン名を変更する場合、app.yml 内でドメインを変更後、リビルドします。

$ cd /var/discourse
$ sudo nano containers/app.yml
env:
.....
.....
  DISCOURSE_HOSTNAME: www.example.com
.....
.....

リビルド

$ sudo ./launcher rebuild app

他サーバへの移行

移行先サーバで最新版Discoursegitクローン、バックアップディレクトリを作成

$ sudo mkdir /var/discourse
$ sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse
$ cd /var/discourse
$ sudo mkdir -p /var/discourse/shared/standalone/backups/default

バックアップファイルと containers/app.yml を移行先サーバへコピー

$ sudo scp /path/to/backup/backup.tar.gz root@192.168.1.1:/var/discourse/shared/standalone/backups/default
$ sudo scp /var/discourse/containers/app.yml  root@192.168.1.1:/var/discourse/containers

移行先サーバでリビルド

$ sudo cd /var/discourse
$ sudo ./launcher rebuild app

移行先サーバでリストア

$ sudo ./launcher enter app ---> enter docker container
# discourse enable_restore
# discourse restore sitename-2019-02-03-042252-v20190130013015.tar.gz
# exit

注) ./launcher enter app は、下記 docker exec コマンドと同義です。

$ docker exec -ti app bash