LoginSignup
43
45

More than 5 years have passed since last update.

Docker上にRedmineをたてる

Last updated at Posted at 2014-07-14

Dockerを使って各プロセスを分離し、Redmineを構築してみました。

環境について

用意するコンテナは3種類。コンテナ間はDocker Linkで連携する。

docker_redmine

  • Nginx用コンテナ
    • CentOS 6.5
    • nginx  
  • Redmine用コンテナ

    • CentOS 6.5
    • unicorn
    • ruby 2.1.0
    • redmine 2.5.2
  • MySQL用コンテナ

    • CentOS 6.5
    • MySQL 5.5

環境構築

MySQLコンテナの起動

docker runコマンドで起動する。
Dockerfileはこちら

$ docker run -d --name mysql mattuso/redmine_mysql

Dockerfile作成の際は実行順序や実行コマンドに気をつける。
MySQLはフォアグラウンドで実行する必要があるのでCMD /usr/bin/mysqld_safeとした。
service mysql startとするとMySQL起動後にプロセス自体が終了してしまう。

Redmineコンテナの起動

次にunicornとredmineの入ったコンテナを起動する。
bundle installとか走るので時間がかかります。
Dockerfileはこちら

$ docker run -d --name unicorn --link mysql:db mattuso/redmine_unicorn

ここで、--link mysql:dbとすることで mysql というコンテナの情報を、 db というエイリアスで利用切るようにしている。これにより下記のような環境変数が利用できるようになる。

env
DB_NAME=/unicorn/db
DB_PORT=tcp://172.17.0.12:3306
DB_PORT_3306_TCP_PORT=3306
DB_PORT_3306_TCP_PROTO=tcp
DB_PORT_3306_TCP_ADDR=172.17.0.12
DB_PORT_3306_TCP=tcp://172.17.0.12:3306

これをRedmineの設定ファイルに記述することで自動的に連携させることが出来る。

database.yml
production:
  adapter: mysql2
  database: redmine
  host: <%= ENV.fetch('DB_PORT_3306_TCP_ADDR') %>
  port: <%= ENV.fetch('DB_PORT_3306_TCP_PORT') %>
  username: redmine
  password: "redmine"
  encoding: utf8

NginXコンテナの起動

最後にNginxコンテナを起動する。
Dockerfileはこちら

$ docker run -d --name nginx --link unicorn:app -p 80:80 mattuso/redmine_nginx

先ほど同様、 unicorn コンテナを app として連携する。
今回は環境変数ではなく hosts の連携機能を利用し、Nginxの設定を記述している。
upstreamのディレクティブでは環境変数の引用が出来ないみたいです。。ポートの記述を排除するためにアプリとの連携用のポートは80にした方が無難かもしれません。

nginx.conf
http {
    upstream webapps{
      server app;           ←appはhostsで名前解決できる
    }
}

server {
    listen       80;
    server_name  localhost.com;

    location / {
        proxy_pass http://webapps;
    }
}

また、-p 80:80とすることでホストサーバへのアクセスがフォワードされるようにしておく。

アクセス

http://<ホストサーバIP> にアクセスすればOKです。

残件

データとかログをホストサーバと共有しないと、コンテナを入れ替えるとデータが飛びます。
あと、静的コンテンツはNginxが返すようにしてあげるのもいいかも。

こうしたらいいんじゃない?みたいなのありましたら、GitHubまでお願います。

43
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
45