高性能な OSS の Wiki ツール! GROWI を Azure VM に Docker + HTTPS で構築!

高性能な OSS の Wiki ツール! GROWI を Azure VM に Docker + HTTPS で構築!

今回はオープンソースで公開されている高機能な Wiki ツールである GROWI を Docker compose で構築する手順を紹介します。構築先のサーバーは Azure 上に VM を展開します。

GROWI とは

GROWI はオープンソースで公開されている Wiki ツールです。Markdown で記述可能な Wiki サイトを構築することができます。検索機能に ErasticSearch を採用しているので、サイト内の検索機能が充実しています。いいね機能やお気に入り機能もあるので、情報を共有することによるコミュニケーション活性化が狙えます。

ドキュメントも公開されているので、詳細な使い方はこちらのサイトをご覧ください。

https://docs.growi.org/ja/guide/

Azure 上に VM を構築する

さくっと Azure VM を展開します。OS は Ubuntu 20.04 を採用しました。明確なシステム要件は公開されてませんが、2コア 4GB くらいのスペックはあった方がいいと思います。

また、NSG は次のように設定しておきます。SSH と TCP:3000 については管理用とセットアップ時のみに利用するので、ソース IP を絞っておくといいです。

Docker と docker-compose の準備

パッケージのアップデート

まずは基本のパッケージアップデートです。

sudo apt update
sudo apt upgrade -y

Docker インストール

Docker をインストールするための準備をします。必要なコンポーネントをインストールします。

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

Docker のリポジトリを登録します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update

Docker をインストールします。

sudo apt install -y docker-ce

Docker が起動できることを確認します。(確認したら Ctrl + C で停止)

sudo systemctl status docker

Docker を一般ユーザーでも実行できるように設定しておきます。

sudo gpasswd -a neadmin docker
sudo chmod 666 /var/run/docker.sock

docker-compose のインストール

インストールの前に docker-compose の最新安定バージョンを確認します。”rc” と付記されているのはプレリリース版なので、出来れば無い物を選択します。(手順確認時点では “1.26.0” が最新)

https://github.com/docker/compose/releases

export compose='1.26.0'
sudo curl -L https://github.com/docker/compose/releases/download/${compose}/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod 0755 /usr/local/bin/docker-compose

インストールした docker-compose のバージョンを確認します。

docker-compose -v

GROWI のセットアップ

GROWI のインストール

/opt 配下に GROWI をセットアップします。GitHub からクローンし、ディレクトリに移動します。

cd /opt
sudo git clone https://github.com/weseek/growi-docker-compose.git growi
cd growi

docker-compose の設定ファイルを編集します。

vi docker-compose.yml

ローカル以外からのアクセスを許可します。

変更前)
ports: - 127.0.0.1:3000:3000 # localhost only by default 
変更後)
ports: - 3000:3000 # localhost only by default

ErasticSearch のリソース割り当てを少し増強します。

変更前)
environment: - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms256m -Xmx256m" # increase amount if you have enough memory 
変更後)
environment: - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms2g -Xmx2g" # increase amount if you have enough memory

ファイルの保存先がデフォルトでは AWS S3 になっているので、AWS のセットアップをしたくない人はローカルに保存できるようにコメントを削除します。

変更前)
# - FILE_UPLOAD=local # activate this line if you use MongoDB GridFS rather than AWS 
変更後)
- FILE_UPLOAD=local # activate this line if you use MongoDB GridFS rather than AWS

GROWI を起動します。初回起動時はイメージのビルドがあるのでしばらく待ちます。

docker-compose up

起動したら http://<サーバーの IP アドレス>:3000 にアクセスして GROWI が起動していることを確認します。

初回アクセス時は GROWI の管理者アカウント作成を求められます。

セキュリティおいといて使えればいいのであればこれだけでも OK です。

GROWI の HTTPS 化

https-portal のコンポーネントを追加することで、簡単にサイトを HTTPS 化することが可能です。Let’s Encrypt で自動的に証明書を更新してくれます。仕組みとしては、GROWI サイトの前に HTTP/HTTPS を受けるプロキシーをおくような形です。

管理者アカウントでサインアップした後、サイト URL 設定だけ行います。DNS に登録するホスト名を確認し、設定しておきます。

また、 docker-compose.yml の方も編集します。次の内容を適切な階層に追加しておきます。

  services:
    # a fully automated HTTPS server powered by Nginx, Let's Encrypt
    # see https://github.com/SteveLTN/https-portal
    https-portal:
      image: steveltn/https-portal:1
      ports:
        - '80:80'
        - '443:443'
      links:
        - app:app
      environment:
        DOMAINS: 'example.com -> http://app:3000'
        STAGE: 'production'
        FORCE_RENEW: 'false'
        WEBSOCKET: 'true'
        CLIENT_MAX_BODY_SIZE: 0
      restart: unless-stopped
      volumes:
        - https-portal_data:/var/lib/https-portal
  volumes:
    https-portal_data:

上記の中で、DOMAINS は構築したサイトのホスト名を記載します。

変更前)
DOMAINS: 'example.com -> http://app:3000'
変更後の例)
DOMAINS: 'growi-test.ether-zone.com -> http://app:3000'

変更したら GROWI を再起動します。

docker-compose up

注意

上記の構成では、Let’s Encrypt の動作のために外部 DNS での名前解決が必要です。ローカル環境や外部からの接続ができない環境であれば、以下変更でオレオレ証明書で HTTPS 化の動きを確かめられます。

変更前)
STAGE: 'production'
変更後)
STAGE: 'local'