« チケットの表示ページで(ユーザとか)DBからSELECTできるようにするプラグイン | トップページ | Dockerでkanon(Trac)を動かしてみた2 - イメージの作成 »

2017年8月27日 (日)

Dockerでkanon(Trac)を動かしてみた

長い間他の仕事をしていて、久しぶりにサーバ管理に戻ってきました。戻ってくると、VM(仮想マシン)が山ほどあり、Kanon使っているだけなのに、無駄にリソースを消費するし、多すぎてもう管理できなくなってます(T_T)。ということで、だいぶほったらかしていた「DockerでKanonを動かす」をやってみることにしました。Dockerfileの細かい内容は知らなくても使えるので、この記事ではGithubのイメージを持ってきて試す記事になってます。
○要件
・ コンテナのなかに複数プロジェクト(kanonなら問題なし)
・ VMのなかに複数の仕切られた空間
・ Dockerのビルドでインストールまで(ほぼ)完了する
・ 実行時にプロジェクト作成/trac-admin実行できる
・ データは永続化する
・ 再起動時に自動起動
○調べて試したこと

・ コミットしないで終了して再起動すると元に戻る
データの永続化はボリュームをマウントする。 今回はデータボリュームコンテナにする
・ ビルド時にデータがある場所に、実行時に空のマウントするとデータは消える
Dockerfile内のビルドの最後で、マウントするフォルダ(/var/opt/kanon, /etc/opt/kanon, /opt/kanon/lib)を退避しておき、コンテナの起動時に動くスクリプトで、初回の一回だけデータをコピーする。
・ 複数のコンテナの起動はDocker-composeで簡単にできる
docker-compose.ymlファイル内のサービスの定義をコピーして、名前とポートとデータボリュームコンテナ名を変更するだけ。必要ならホストのFirewallはあけてください。
・ コンテナ内では一つのサービス、apacheはFOREGROUNDで
・ コンテナの自動再始動はrestart: alwaysでできる

docker-compose.ymlファイル内で指定
Kanonのコンテナを作成することは置いておいて、DockerHubから持ってきたイメージでの確認の手順です。
0. インストール
・ OSのインストール
CentOS の GNOME Desktopでインストールする,ユーザはsudo使えるように管理者にしておいた方がいいでしょう。
・ dockerのインストール
$ sudo yum update && yum -y install docker
$ sudo systemctl start docker
$ sudo systemctl enable docker
・ docker-composeのインストール
https://github.com/docker/compose/releases にインストール方法が書いてます(一応rcはやめて一つ前のものにする)
$ curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` > docker-compose
$ chmod +x ./docker-compose
$ sudo mv ./docker-compose /usr/bin/docker-compose
1. フォルダ作成して移動
$ mkdir kanon_containers
$ cd kanon_containers
2. docker-compose.ymlファイル作成
$ vi docker-compose.yml
version: '2'
services:
  kanon_1:
    # とりあえず動くように作ったコンテナを持ってくる
    image: okazakiyuji/kanon:org
    volumes: # 運用時に変更されるフォルダにデータボリュームコンテナをマウントする
      - kanon_1-var:/var/opt/kanon
      - kanon_1-etc:/etc/opt/kanon
      - kanon_1-lib:/opt/kanon/lib
    ports:
      - "8081:80"
    restart: always # 再起動時に再始動
  kanon_2: # portとデータボリュームコンテナ名を変更して二つ目のKanon
    image: okazakiyuji/kanon:org
    volumes:
      - kanon_2-var:/var/opt/kanon
      - kanon_2-etc:/etc/opt/kanon
      - kanon_2-lib:/opt/kanon/lib
    ports:
      - "8082:80" # 別のポート
    restart: always
volumes:
  kanon_1-var:
    driver: local
  kanon_1-etc:
    driver: local
  kanon_1-lib:
    driver: local
  kanon_2-var:
    driver: local
  kanon_2-etc:
    driver: local
  kanon_2-lib:
    driver: local
3. Dockerイメージを持ってくる
$ sudo docker pull okazakiyuji/kanon:org
コンテナの中身についてはあとで…
4. コンテナを起動する
$ sudo docker-compose up -d
...
コンテナ起動中
...
$ curl http://localhost:8081/trac
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Available Projects</title>
  </head>
  <body>
    <h1>Available Projects</h1>
    <ul>
    </ul>
  </body>
※ localhost:8081/tracでプロジェクトがないが、エラーは出ないことを確認
サーバの外から見えない場合はFirewallの設定を変更してください
$ curl http://localhost:8082/trac
...
※ localhost:8082/tracでプロジェクトがないが、エラーは出ないことを確認
5. プロジェクトを作成
$ sudo docker-compose exec kanon_1 /bin/bash
[root@6b47e7284acc /]# /opt/kanon/bin/kanon-create-project test1 svn default n
...
プロジェクトの作成
...
[root@6b47e7284acc /]# exit
$ sudo docker-compose exec kanon_2 /bin/bash
[root@fad824e04e58 /]# /opt/kanon/bin/kanon-create-project test2 svn default n
...
プロジェクトの作成
...
$ curl http://localhost:8081/trac
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Available Projects</title>
  </head>
  <body>
    <h1>Available Projects</h1>
    <ul>
      <li>
        <a href="/trac/test1" title="My example project">test1</a>
      </li>
    </ul>
  </body>
</html>
※ localhost:8081/tracでプロジェクトtestが追加されていることを確認
$ curl http://localhost:8082/trac
...
※ localhost:8082/tracでプロジェクトtest2が追加されていることを確認
6. 再起動してもコンテナが起動するかを確認
$ sudo reboot now
...
再起動
...
※ localhost:8081/tracでプロジェクトtestが追加されていることを確認
7. データコンテナを削除
確認後に削除したい場合は次のように
$ sudo docker-compose down
$ sudo docker volume ls
...
local               kanoncontainers_kanon_1-etc
local               kanoncontainers_kanon_1-lib
local               kanoncontainers_kanon_1-var
local               kanoncontainers_kanon_2-etc
local               kanoncontainers_kanon_2-lib
local               kanoncontainers_kanon_2-var
$ sudo docker volume rm kanoncontainers_kanon_1-etc kanoncontainers_kanon_1-lib kanoncontainers_kanon_1-var
$ sudo docker volume rm kanoncontainers_kanon_2-etc kanoncontainers_kanon_2-lib kanoncontainers_kanon_2-var
これで運用までうまくいくと思うんですが…

|

« チケットの表示ページで(ユーザとか)DBからSELECTできるようにするプラグイン | トップページ | Dockerでkanon(Trac)を動かしてみた2 - イメージの作成 »

Trac」カテゴリの記事

Docker」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: Dockerでkanon(Trac)を動かしてみた:

« チケットの表示ページで(ユーザとか)DBからSELECTできるようにするプラグイン | トップページ | Dockerでkanon(Trac)を動かしてみた2 - イメージの作成 »