背景
- すでに運用中のVPSがあります。石狩あたりで動いています。そこでは、Etherpad-lite、MySQLをはじめとして、いろんなアプリケーションが動いています。
- 今回は、そこにポート番号を変えてあらたなEtherpad-liteをもう1つ動かします。既存の環境への影響を最小限ににするためにdockerを使います。
- Ethepad-liteのバックエンドのDBは、ホスト(ここではVPSのこと)で動いているMySQLが使えればいいのですが、ホストのMySQLはバージョンが5.1とちょっと古く、最新のEtherpad-liteとは合いません。そこで、MySQLもあらたにdockerで導入します。
- Etherpad-liteのログはホスト側のログディレクトリに吐き出します。
- Etherpad-lite導入がメインテーマなので、dockerはインストール済み(yum install docker-io)、centos:6のイメージは取得済みの状態から始めます。
- バージョンは次の通りです。
- Etherpad-lite 1.5.7
- CentOS6.7(←VPS)
- MySQL5.7(←dockerイメージ)
大まかな流れ
次の通りです。
- ホスト側で公開用ポートを開けます(順番的には後でもいいです)。
- MySQLのコンテナを起動して、データベースを作成します。
- centos:6のコンテナを起動して、Etherpad-liteをインストールします。
- Etherpad-liteが動くことを確認したら、いったんcentos:6のコンテナからexitして、コンテナをイメージ化します。このイメージから再度コンテナを起動します。
具体的な手順
TIPS: 作業中にsshが切れてもすぐに戻れるように、実際はscreen
してから下記の手順を実行します。
ホスト側で公開用ポートを開ける
現在のiptablesを表示します。
$ sudo iptables -L --line-numbers
公開用ポートを開けます。ホストの9001で既存のEtherpad-liteが動いているので、新たなehterpad-liteのインスタンスは19001で動かします。ルールを挿入する位置(下記の例では8)、環境に合わせて変わります。
$ sudo iptables -I Firewall 8 -p tcp --dport 19001 -m state --state NEW -j ACCEPT
iptablesを保存します。
$ sudo su -
# cd /etc/sysconfig
# iptables-save > iptables
# service iptables restart
# exit
MySQLのコンテナを起動する
ホストでは既に3306で古いMySQLが動いているので、ホストの13306をコンテナの3306に割り当てます。
$ sudo docker pull mysql:5.7
$ sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=rt_password -d -p 13306:3306 mysql:5.7
データベースを作成する
ホストからコンテナのMySQLに接続してデータベースを作成します。
$ mysql -u root -p -h 127.0.0.1 -P 13306
mysql> create database `etherpad-lite`;
mysql> grant all privileges on `etherpad-lite`.* to 'etherpad'@'%' identified by 'ep_password';
mysql> exit
Etherpad-lite用のコンテナを起動する
イメージは下記の通り取得済みです。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 6 3bbbf0aca359 3 months ago 190.6 MB
ホスト側のログのディレクトリ(下記の例では/var/log/etherpad-lite
)は、無ければ先に作ります。そして、コンテナを起動します。
$ sudo docker run -i -t --name="etherpad-lite" --net="host" -v /var/log/etherpad-lite:/log centos:6 /bin/bash
インストールする
コンテナの中にいる状態で作業します。
node.js
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install nodejs npm --enablerepo=epel
abiword
# rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
# yum install abiword --enablerepo=nux-dextop
TIPS: この辺で疲れてくるので、いったんctrl-A D
でscreen
をデタッチして休憩します。再開はscreen -r
(sshが切れてアタッチされたままの場合は場合はscreen -dr <PID>
)です。
git
# yum install git
etherpad-lite
# git clone git://github.com/ether/etherpad-lite.git
設定ファイルの編集
引き続きコンテナの中で設定ファイルを編集します。
# cd etherpad-lite
# cp settings.json.template settings.json
# vi settings.json
ポート番号の変更、DBの変更、abiwordのpathの登録、管理者パスワードの設定、ログの設定などを行います。編集したところだけ抜粋すると下記の通りです。
//IP and port which etherpad should bind at
"ip": "0.0.0.0",
"port" : 19001,
/* "dbType" : "dirty",
//the database specific settings
"dbSettings" : {
"filename" : "var/dirty.db"
},
*/
// MySQL Configuration
"dbType" : "mysql",
"dbSettings" : {
"user" : "etherpad",
"host" : "127.0.0.1",
"port" : "13306",
"password": "ep_password",
"database": "etherpad-lite"
},
"abiword" : "/usr/bin/abiword",
"users": {
"admin": {
"password": "changeme1",
"is_admin": true
}
},
"logconfig" :
{ "appenders": [
{ "type": "file",
"filename": "/log/etherpad-lite.log",
"maxLogSize": "10240",
"backups": 3
}
]
}
Etherpad-liteの依存関係の解決を行います。
# ./bin/installDeps.sh
いろいろメッセージが出ますが、気にせず次に進みます。
Etherpad-liteを起動します。
# ./bin/run.sh --root
下記のURLを開いて動作確認します(もちろんホスト名は環境に合わせて変わります)。
http://your.etherpad-lite.host:19001/
正常に動くことを確認できたら、コンテナからいったん抜けます。
# exit
イメージを作成して再起動
上で作業したコンテナを確認します。
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39239a97120c centos:6 "/bin/bash" 59 minutes ago Exited (0) 2 minutes ago etherpad-lite
4be8ad0ec49a mysql:5.7 "/entrypoint.sh mysq About an hour ago Up About an hour 0.0.0.0:13306->3306/tcp mysql
コンテナからイメージを作ります。時間がかかります。
$ sudo docker commit 39239a97120c etherpad-lite:centos6
fea7c19bb5c61576476dd7e36bca1a1b51a1b9bf4cf4a6a928b1f4ce937f7ffd
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
etherpad-lite centos6 fea7c19bb5c6 4 minutes ago 773.3 MB
mysql 5.7 596847483ae2 2 days ago 360.2 MB
centos 6 3bbbf0aca359 3 months ago 190.6 MB
元のコンテナは削除し、先ほど作ったイメージからあらたなコンテナを起動します。今度はコンテナはデタッチ状態で起動し、dockerからEtherpad-liteを起動します。
$ sudo docker rm 39239a97120c
39239a97120c
$ sudo docker run -d --name="etherpad-lite" --net="host" -v /var/log/etherpad-lite:/log etherpad-lite:centos6 /etherpad-lite/bin/run.sh --root
下記のURLを開いて再度動作確認します。ログも出ているか見ておきましょう。
http://your.etherpad-lite.host:19001/
正常に動いていれば完了です。