Help us understand the problem. What is going on with this article?

Etherpad-liteをVPSにdocker入れてcentos:6コンテナにインストールしてみた

More than 3 years have passed since last update.

背景

  • すでに運用中の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 Dscreenをデタッチして休憩します。再開は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/
正常に動いていれば完了です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした