IDCF Cloud で crowi-plus を起動するまで 

linux も docker もよくわかってない人が書いた文章です

# 簡易概要

## 今回やること

IDCF Cloud を利用して、仮想マシン作ってサーバー立てて、crowi-plus を起動して
自宅、職場、実家、ネカフェで閲覧できる自分用 wiki を作成する

紹介してるページはいっぱいあるけど、全くうまくいかなかったので自分用にまとめ

## [IDCF Cloud](https://account.idcfcloud.com/auth/login?service=https%3A%2F%2Fconsole.idcfcloud.com%2F) とは
月 500 円からサーバーを立てられるクラウドサービス
サーバーを起動している時間でお金を取られるらしい  

電気代考えたら VirtualBox よりいいだろうし
そもそも自宅 PC の VirtualBox に職場からアクセスする方法わからんし、という理由で利用
初期設定も楽なので、いろいろ設定を試してミスったら削除、が楽チンでよい

## [crowi-plus](https://demo.crowi-plus.org/) とは

便利な wiki である [crowi](http://site.crowi.wiki/) をフォークした、かゆい所に手が届く wiki
本家より微妙な部分もあるけど、現状日々更新されてるっぽい
https://qiita.com/yuki-takei/items/5df9601039ccfc1df01f

# 手順

## IDCF Cloud でサーバー借りて、ログインするまで

1. アカウントを[新規作成](https://account.idcfcloud.com/auth/login?service=https%3A%2F%2Fconsole.idcfcloud.com%2F)する
1. コンピューティング -> 仮想マシン -> 仮想マシン作成 で設定したら作成
1. コンピューティング -> IP アドレス -> IP アドレス で IP アドレスの確認
1. コンピューティング -> IP アドレス -> IP アドレスの名前 -> ファイアウォール で設定
1. コンピューティング -> IP アドレス -> IP アドレスの名前 -> ポートフォワーディング で設定
1. 仮想マシンの起動が完了していたら、Teraterm とかで SSH 接続
    - コンピューティング -> 仮想マシン -> 仮想マシン選択 -> コンソール で起動状態確認可能

### 仮想マシン設定
￥500。実際安い
ただし、crowi-plus の検索用プラグインの **Elasticsearch** はめっちゃメモリを食うらしく、
**1 GB のマシン**だと、通常設定では **crowi-plus が（あまり）立ち上がらない**
これでかなり嵌った

```txt
- ゾーン：pascal
- マシンタイプ：￥200（1CPU * 0.8GHz、RAM 1G）
- イメージ：CentOS、Ubuntu（Debian、Redhut はわからん）
- ボリューム：￥300（ルートディスク 15GB、データディスク 未入力）
- SSH Key：
    - 初めての場合は秘密鍵を .txt として保存
      色んな環境で使うことを想定するなら Dropbox とかに置いとく
    - すでに作成済であれば普通に選択
    - 作成してるけど選択できない場合は、秘密鍵の .txt をアップロード
- 仮想マシン台数：1 台
- ネットワークインターフェース：デフォルトのものがチェックされている
- 詳細情報：仮想マシン名をつける。他チェック２つはつけたまま
```

**秘密鍵**（SSH Key）は SSH 接続で必要なので、なくさないように注意
**なくしたらアクセスする手段がなくなる**（と思う）
DropBox とかに保存して、自宅、職場とかで使いまわせるようにしてる
セキュリティ的にやばそうだけど、いい方法は思いつかない

### IP アドレス
デフォルトで 1 個用意されてると思う
「IP アドレス＋設定したポート」で SSH 接続したり、crowi-plus にアクセスする

### ファイアーウォール
仮想マシンを削除しても設定は消えない
自宅、職場、実家・・・とどんどん増やしていく
セキュリティ的にはだめそう

| コメント | ソースCIDR | タイプ | ポートレンジ |
| --- | --- | --- | --- |
| 自宅 | My IP（を選択すると自動設定される） | CustomTCP | 8000-65535（開きたいポートだけを選択）|
| 職場 | 〃 | 〃 | 〃 |

### ポートフォワーディング
VirtualBox とかでやるやつ
仮想マシンを削除すると設定は消える
パブリックポートに設定したポートは、ファイアウォールで設定していないといけない

| コメント | パブリックポート | プライベートポート | 仮想マシン |
| --- | --- | --- | --- |
| SSH（適当） | CustomTCP 選択/9999（適当） | 22 | さっき作成したやつを選択 |
| crowi-plus（適当） | CustomTCP 選択/30000（適当） | 3000（crowi-plus のデフォルトは 3000） | さっき作成したやつを選択 |

### SSH 接続
1. [Teraterm](https://ttssh2.osdn.jp/) とか落としてきて起動
1. ホスト： IP アドレス画面に表示されてる IP アドレス入力
1. ポート：ポートフォワーディングで、プライベートポート 22 を設定したやつのパブリックポートの方を入力
1. OK 押下
1. セキュリティ警告がでたら続行押下
1. ユーザ名：root、パスワード：空欄
1. RSA/DSA鍵を使う：仮想マシン作成時に選択した秘密鍵の .txt を選択
1. OK 押下で、ここまでの設定があってれば、すぐ仮想マシンに繋がる

なんか失敗したら仮想マシン削除して、もっかい作り直そう
自分の PC で VirtualBox 使うより楽チンちん

## crowi-plus 導入まで

### Ubuntu
必要になったら書く

### CentOS
crowi-plus の起動が終わったら、プライベートポート 3000 で設定したやつのパブリックポートからアクセスできるようになる
他の人があっさり流してるこの部分で相当ハマッた

```
// docker、docker-compose のインストールから、普通に使用できるようにするまで
// update 長い
# yum -y update
// docker 適当にやると最新バージョンをインストールできない
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum -y install docker-ce
# systemctl enable docker.service
# systemctl start docker.service
# yum info docker-ce
// docker-compose 1.11 より 1.18 とかの新しいバージョンではだめなのかわからん
# curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod 755 /usr/local/bin/docker-compose
# visudo
// /usr/local/bin 追加
（ユーザー作成後に他設定と一緒にやったほうがいいけど、docker 設定なのでこっちに記述）
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/local/bin:/usr/bin

// ユーザー作成まで
# useradd hogeuser
# passwd hogeuser
// パスワード設定 //
# visudo
// %wheel 左のコメントアウト外す
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

# usermod -aG wheel hogeuser

// メモリのスワップ
# dd if=/dev/zero of=/swapfile1 bs=2M count=1024
# chmod 600 /swapfile1
# mkswap /swapfile1
# swapon /swapfile1

// crowi-plus
# su hogeuser
$ cd ~
$ git clone https://github.com/weseek/crowi-plus-docker-compose.git crowi-plus
$ cd crowi-plus
$ cp examples/https-portal/docker-compose.override.yml .
// Dockerfile の修正（コメントアウト外す）
$ vim Dockerfile

RUN echo "install plugins" \
  && npm install --save \
     crowi-plugin-lsx \
     crowi-plugin-pukiwiki-like-linker \
  && echo "done."
# you must rebuild if install plugin at least one
RUN npm build:prod

// docker-compose.dev.yml の修正
// 使用メモリを 256m とかに抑える
$ vim docker-compose.dev.yml
environment:
  - "ES_JAVA_OPTS=-Xms256m -Xmx256m"

// docker-compose.yml の修正
$ vim docker-compose.yml

// 127.0.0.1:3000:3000 の部分
ports:
  - 3000:3000
// タイムアウトを 60s から伸ばす
  - timeout 180s
// 使用メモリを（ｒｙ。docker-compose.dev.yml との違いは不明environment:
  - "ES_JAVA_OPTS=-Xms256m -Xmx256m"  # decrease amount or just comment out this line if you cannot allocate enough memory

// -d でバックグラウンド実行
$ sudo docker-compose up
// 止める場合
$ sudo docker-compose stop
```

#### 解説や注意
**docker のインストール**
ミスるとバージョン違いで docker-compose のコマンドがうまくいかない

**/usr/local/bin を追加**
しないと、いちいち /usr/local/bin/docker-compose って打つ羽目になる

**wheel 周りの設定**
docker-compose をユーザーが使用できるようにするため（だったと思う）

**cp examples/https-portal/docker-compose.override.yml .**
わからん
http プロキシがどうとか
https://github.com/weseek/crowi-plus-docker-compose/tree/master/examples/https-portal

**メモリのスワップ**
ユーザーでなく、root でないとコマンドが実行できなかった
初回の docker-compose up 時に
Elasticsearch の部分でメモリが足りなくて途中で落ちるらしい
91% chunk asset optimization とかいう部分で止まる
ES_JAVA_OPTS で設定したメモリとは違うっぽい

**メモリのオプション**
Elasticsearch はデフォで 2GB 使う仕様になってるらしいし、
オプションも 2g とか書いてあって、IDCF は 1GB で借りてるんだから
そら動かんよなあ、と

メモリが足りない環境ならコメントアウトしろ、と書いてるが、
256m って書いたほうが安定して起動できてる気がする
どのくらいが最適な設定かは不明

**タイムアウトを伸ばした理由**
crowi-plus 起動時に
Problem with dial: dial tcp 172.18.0.4:9200: getsockopt: connection refused. Sleeping 1s
のようなログが表示されるが
Elasticsearch が起動しきるまえにタイムアウトを迎えて、crowi-plus にアクセスできなくなるため
（メモリ問題に気づく前のことなので、別にタイムアウト伸ばさなくてもいいかもしれない）

**なんか途中でエラーでて止まった**
初回 docker-compose up で、ProtocolException だかなんだかがでて止まった
一旦 SSH 接続切って、再接続した後もう一度 docker-compose up したら動いた
なにそれ・・・

**Redmineとか動かしたら、crowi-plus 起動しなくなった**
調べ中
crowi-plus だけ動かすなら、これでいけると思う

# 参考
一部
> 最強のWiki「Crowi」のフォーク、「crowi-plus」を公開した話
https://qiita.com/yuki-takei/items/5df9601039ccfc1df01f

> 月額500円でDockerを使ってCrowiを運用する on @Qiita
https://qiita.com/isaoshimizu/items/e3de3e6a0a3dd7602b9f

> Crowi-Plusを導入する@CentOS7
https://qiita.com/fumitti/items/b7cf00cebc7d4350a1ff

> crowi-plusをEC2(t2.micro)で動かす
https://qiita.com/7tsuno/items/4db90d6c5fad7388efa3

> CentOSでuserをsudo可能にする on @Qiita
https://qiita.com/Esfahan/items/a159753d156d23baf180

# コピペ用

```
yum -y update
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl enable docker.service
systemctl start docker.service
yum info docker-ce
curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod 755 /usr/local/bin/docker-compose

useradd hogeuser
passwd hogeuser

visudo

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/local/bin:/usr/bin

usermod -aG wheel hogeuser

dd if=/dev/zero of=/swapfile1 bs=2M count=1024
chmod 600 /swapfile1
mkswap /swapfile1
swapon /swapfile1

su hogeuser
cd ~
git clone https://github.com/weseek/crowi-plus-docker-compose.git crowi-plus
cd crowi-plus
cp examples/https-portal/docker-compose.override.yml .
vim Dockerfile

RUN echo "install plugins" \
  && npm install --save \
     crowi-plugin-lsx \
     crowi-plugin-pukiwiki-like-linker \
  && echo "done."
# you must rebuild if install plugin at least one
RUN npm build:prod

vim docker-compose.dev.yml

environment:
  - "ES_JAVA_OPTS=-Xms256m -Xmx256m"

vim docker-compose.yml

ports:
  - 3000:3000

  - timeout 180s

environment:
  - "ES_JAVA_OPTS=-Xms256m -Xmx256m"  # decrease amount or just comment out this line if you cannot allocate enough memory

sudo docker-compose up
```