技術的な話

Azure上にGROWI Docker版をインストールしてみる

GROWIとは

以下公式からの引用です。

Growi

GROWI は個人・法人向けの Wiki | ナレッジベースツールです。
会社や大学の研究室、サークルでのナレッジ情報を簡単に共有でき、作られたページは誰でも編集が可能です。

知っている情報をカジュアルに書き出しみんなで編集することで、チーム内での暗黙知を減らすことができます。
当たり前に共有される情報を日々増やしていきましょう。

本記事ではDocker版のインストールを紹介しています。それ以外にもサーバーに直接インストールも出来るようです。公式がサポートしているのは以下になります。

  • Ubuntu
  • CentOS

Azure上にVMを構築

VM構築は適当にポチポチします。必要最低限のスペックです。

  • 仮想マシン名:ご自由に(今回はgrowi-testとしました)
  • リージョン:Japan East
  • イメージ:Ubuntu Server 20.04 LTS - x64 Gen2
  • サイズ:Standard_DS1_v2

その他アクセス可能なポート番号としては以下を設定しています。

  • 22(SSH)
  • 80(HTTP)
  • 443(HTTPS)

上記以外は基本的にデフォルトで設定しました。

VMがデプロイされた後はSSHアクセスするための秘密鍵が自動でダウンロードされます。お好みのクライアントツールで秘密鍵を読み込ませてアクセスします。

また、DNSでアクセス出来るようにポータル上でDNS名を設定しておきます。

今回はgrowi-test.japaneast.cloudapp.azure.comと設定しました。growi-test以降は自動で設定されます。

Docker及びdocker composeのインストール

VMにSSHでログイン出来るようになったら次にDockerをインストールしていきます。

以下に公式リンクをまとめてあります。

GROWIをインストール

公式のドキュメントでインストール可能です。

手順は非常に簡単で以下の2手順になります。

  1. Githubからcomposeファイルのダウンロードする。
  2. デフォルトのままであればそのまま起動する。

composeファイルの設定

このままだとアクセス出来ないのでcomposeファイルを少し修正します。

具体的には、80ポート(HTTP)でサーバーにアクセスするとappコンテナの3000ポートに転送するように設定しています。

### 変更前
version: '3'

services:
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 127.0.0.1:3000:3000    # localhost only by default

### 変更後
version: '3'

services:
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 80:3000

動作確認

ブラウザを開き、設定したDNSを元にURLバーに以下を入力します。

http://growi-test.japaneast.cloudapp.azure.com(ご自身の環境によって変更してください)

入力後に以下のような画面が表示されればOKです。アクセス出来ない場合はhttpsになっていないか、綴りが合っているかの確認を行ってください。

GROWIの初期設定や各種機能を有効化

ファイルアップロード先をMongoDBにする

GROWIには画像や各種ファイルをアップロード可能です。

保存先にはサーバー上、MongoDB等を選択可能ですが、個人的にはMongoDBに保存しておいた方が良いと思っています。専用のバックアップコンテナがMongoDBのバックアップしかしないので、ファイル類も丸ごとバックアップできるためです。その分バックアップのファイル容量も大きくなりますがそこは致し方無いかなと思っています。

こちらはGROWIの管理画面やcomposeファイルから変更可能です。

composeファイルの場合はappコンテナの環境変数のコメントアウトを外します。

HackMDの有効化する

複数人で同時に記事編集可能となる機能になります。

CodiMDをベースに開発されているようです。

これも公式でしっかりサポートされており、composeファイルを編集することで簡単に導入することが可能です。

composeファイルの設定

色々ごっちゃになりがちですが、設定を以下に貼り付けておきます。

まずはappコンテナの設定です。DNS等はご自身の設定を確認して適宜変更してください。

ここで追加、変更したのは以下になります。

  • APP_SITE_URL:アプリのURL(色々使われているので設定しておいた方が良い)
  • HACKMD_URI:利用者(ブラウザ)から見たhackmdコンテナのURI
  • HACKMD_URI_FOR_SERVER:appコンテナから見たhackmdコンテナのURI

version: '3'

services:
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 80:3000    # localhost only by default
    links:
      - mongo:mongo
      - elasticsearch:elasticsearch
    depends_on:
      - mongo
      - elasticsearch
    environment:
      - APP_SITE_URL=http://growi-test.japaneast.cloudapp.azure.com
      - MONGO_URI=mongodb://mongo:27017/growi
      - ELASTICSEARCH_URI=http://elasticsearch:9200/growi
      - PASSWORD_SEED=changeme
      - FILE_UPLOAD=mongodb   # activate this line if you use MongoDB GridFS rather than AWS
      # - FILE_UPLOAD=local     # activate this line if you use local storage of server rather than AWS
      - MATHJAX=1             # activate this line if you want to use MathJax
      # - PLANTUML_URI=http://  # activate this line and specify if you use your own PlantUML server rather than public plantuml.com
      - HACKMD_URI=http://growi-test.japaneast.cloudapp.azure.com:3100    # activate this line and specify HackMD server URI which can be accessed from GROWI client browsers
      - HACKMD_URI_FOR_SERVER=http://hackmd:3000  # activate this line and specify HackMD server URI which can be accessed from this server container
      # - FORCE_WIKI_MODE='public'    # activate this line to force wiki public mode
      # - FORCE_WIKI_MODE='private'   # activate this line to force wiki private mode

次にhackmd側の設定を見ていきます。

ここで追加、変更したのは以下になります。

  • GROWI_URI:アプリのURI

version: '3'

services:
  # HackMD(CodiMD) container
  # see https://github.com/hackmdio/codimd#configuration
  #
  hackmd:
    build:
      context: ./hackmd
    environment:
      - GROWI_URI=http://growi-test.japaneast.cloudapp.azure.com
      - CMD_DB_URL=mysql://hackmd:hackmdpass@mariadb:3306/hackmd
      - CMD_CSP_ENABLE=false
    ports:
      - 3100:3000   # localhost only by default
    depends_on:
      - mariadb
    restart: unless-stopped

  ##
  # MariaDB
  # see https://hub.docker.com/_/mariadb/
  mariadb:
    image: mariadb:10.3
    command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
    environment:
      - MYSQL_USER=hackmd
      - MYSQL_PASSWORD=hackmdpass
      - MYSQL_DATABASE=hackmd
      - MYSQL_RANDOM_ROOT_PASSWORD=true
    restart: unless-stopped
    volumes:
      - mariadb_data:/var/lib/mysql

volumes:
  mariadb_data:

VMのポート開放

hackmdにアクセス可能なようにVMのポートを開けておきます。

VMのネットワークから受信ポートの規則を追加します。

追加するのは3100/TCPポートになります。

動作確認

上記設定を済ませた後でコンテナを再起動します。

GROWIにアクセスすると、右上にHackMDのボタンが追加されます。

実際にボタンを押した時、以下のように編集画面が開けば問題無く動作しています。

Markdownで数式を使用出来るようにする

composeファイルを開いてappの環境変数を変更することで簡単に有効化することが可能です。

以下のcomposeファイルのenvironment部分にあるMATHJAX=1のコメントアウトを外して再度コンテナを起動することで有効化されます。

### 変更前
version: '3'

services:
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 80:3000
    -- 中略 --
    environment:
      - MONGO_URI=mongodb://mongo:27017/growi
      - ELASTICSEARCH_URI=http://elasticsearch:9200/growi
      - PASSWORD_SEED=changeme
      # - FILE_UPLOAD=mongodb   # activate this line if you use MongoDB GridFS rather than AWS
      # - FILE_UPLOAD=local     # activate this line if you use local storage of server rather than AWS
      # - MATHJAX=1             # activate this line if you want to use MathJax

### 変更後
version: '3'

services:
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 80:3000
    -- 中略 --
    environment:
      - MONGO_URI=mongodb://mongo:27017/growi
      - ELASTICSEARCH_URI=http://elasticsearch:9200/growi
      - PASSWORD_SEED=changeme
      # - FILE_UPLOAD=mongodb   # activate this line if you use MongoDB GridFS rather than AWS
      # - FILE_UPLOAD=local     # activate this line if you use local storage of server rather than AWS
      - MATHJAX=1             # activate this line if you want to use MathJax

今後について

ここまでの手順でGROWIをとりあえずAzureVM上にインストールしてみました。

かなり簡単に導入可能なのでWiki導入を迷っている人は検討しても良いと思います。個人的には使い易いと思っています。

今後はセキュリティに気を付けようということでSSL対応や認証周りの設定を記事にしていく予定です。

-技術的な話
-, , ,