研究室に Qiita Team クローンの Knowledge を Docker (on Core OS) で導入してみた 

研究室に [Knowledge](https://support-project.org/knowledge_info/index) を導入してみたのでメモ。

# 経緯

## 研究室の情報共有を進めたい

- wiki はすでに存在するが更新は停滞しがち
    - キレイな階層構造を意識してしまい、投稿の心理的敷居が高い？
    - 投稿に対するコミュニケーションが取りづらい
- [Qiita Team](https://teams.qiita.com/) 良さそう
    - とりあえず投稿。検索するなり、必要に応じて後から整理
    - が、財政的に厳しい (関係者合わせると30人規模)
- [Knowledge](https://support-project.org/knowledge_info/index)
    - オープンソースの Qiita Team クローン
    - デザインが今風
    - 開発がアクティブ

## 共有したい情報

- 望遠鏡の運用情報 (装置の情報、トラブル対処記録)
- 開発情報 (設計・製作の過程)
- 研究を進める上での Tips (ツールの使い方など)
- 各自の研究進捗報告
- 研究室の運営情報 (事務手続き方法など)


## 構成

- コンテナ仮想化が便利そう
- Docker が一番流行っている
    - Knowledge も [Dockerfile](https://github.com/support-project/docker-knowledge) を公開している
- Core OS なるものがあるそうだ
- 既に研究室 web サーバーがあるので、リバースプロキシで Knowledge サーバーにアクセスさせる

# 手順

## 1. インストールメディアの準備

- Core OS の [ISO image](https://coreos.com/os/docs/latest/booting-with-iso.html) をダウンロード
- CD-R に焼く

## 2. Core OS のインストール

- 新しい PC を準備しておく
- インストールメディアからブートする
- 固定 IP で運用したいので、 network interface の名前を調べておく
    - `ifconfig`
- Core OS のインストール設定ファイルである、cloud-config.yml を作成する
    - 公式 : https://coreos.com/os/docs/latest/cloud-config.html
    - 参考にした :
        - http://qiita.com/ma2shita/items/e069b6019688d8e848f5
        - http://qiita.com/xshsaku/items/1ba3f930ff80bef685a6
    - core ユーザーを作成
    - 固定 IP を設定
    - docker サービスを起動させておく

```yml
#cloud-config

coreos:
  update:
    reboot-strategy: off

  units:
    -
      name: coreos-setup-environment.service
      command: restart
    - 
      name: systemd-networkd.service
      command: restart
    - 
      name: docker.service
      command: start
    -
      name: 10-static.network
      runtime: no
      content: |
        [Match]
        Name=eno1
        [Network]
        Address=192.168.aaa.xxx
        Gateway=192.168.aaa.yyy
        DNS=192.168.aaa.zzz

users:
  - 
    name: core
    passwd: `openssl passwd -1` で生成されるハッシュを書き込む
    groups:
      - sudo
      - docker
```

- cloud-config.yml を local で作成して scp でアップロードしたい場合
    - core ユーザーにパスワードを設定する
        - `sudo passwd core`
    - scp で送る
        - `scp cloud-config.yml coreos-host:`
- インストールを実行
    - `sudo coreos-install -d /dev/sda -c cloud-config.yml -v`

## 3. Knowledge をインストール

- Core OS にログイン
- 作業場所を作成

```
mkdir /home/core/knowledge
cd /home/core/knowledge
```

- Dockerfile を取得

```
wget https://raw.githubusercontent.com/support-project/docker-knowledge/master/Dockerfile
```

- docker を build

```
docker build -t knowledge:1.3.1 .
```

- docker を起動

```
docker run -d -p 80:8080 -v /home/core/knowledge:/root/.knowledge knowledge:1.3.1
```

- ブラウザから Core OS マシンの port 80 にアクセスし、Knowledge にアクセスできることを確かめる
- 初期ユーザーでログインし、管理者ユーザーを新規作成、初期ユーザーを削除


## 4. リバースプロキシの設定

### 4.1 Knowledge 側
- リバースプロキシを経由して https://lab-web-server/knowledge の URL を使いたいので、knowledge のインストール先を `/usr/local/tomcat/webapps/ROOT.war` から `/usr/local/tomcat/webapps/knowledge.war` に変更
    - Dockerfile の ADD から始まる行を変更する
- Knowledge に管理者ユーザーでログインし、「システム設定」 - 「システム設定」 - 「サービスのURL」 を適切に変更する

### 4.2 プロキシサーバ側

- 使用している web server は、apache
- 設定ファイルを新規作成

```
sudo emacs proxy.conf
```

- プロキシ設定を記述

```
<Location /knowledge/>
  ProxyPass http://192.168.aaa.xxx/knowledge/
  ProxyPassReverse http://192.168.aaa.xxx/knowledge/
  SSLRequireSSL
</Location>
```

- apache を再起動


## 5. PostgreSQL の使用

そのうち試す