DockerでRedmineを動かす手順を記載します。
Table of Contents
1 データの永続性がないRedmineを動かす
- アップロードしたファイルはredmineのファイルシステムに保存されます。
- データベースはredmineコンテナのSQLiteが使われます。
- コンテナを削除するとredmineのデータは削除されます。
以下のコマンドでRedmineのコンテナを動かします。Redmineのコンテナは3000/tcpにHTTPサーバを公開します。そこでコンテナの3000/tcpをホストマシンの80/tcpにマッピングします。
$ docker run -d --name redmine -p 80:3000 redmine:latest
Dockerが動いてるマシンの80/tcpにアクセスします。
http://<ipaddr>
2 データを永続化させる
- コンテナの/usr/src/redmine/files等のアップロードされるデータをホストマシンのディレクトリにマッピングします。
- データベースを別コンテナのものを使用します。別コンテナではデータベースの格納先をホストマシンにマッピングします。
- MySQLかPostgreSQLを使った場合、Redmineのコンテナはデータベースの初期化を待ちません。Redmineのコンテナにrestart: alwaysを使っても、タイミングによっては再起動されなくなります。Redmineのコンテナでデータベースのクライアントのmysqladminコマンドやpsqlコマンドがインストールされておらず、healthcheckも利用できません。RedmineのDockerfileでmysqladminコマンドとpsqlコマンドをインストールし、docker-entrypoint.shでデータベースにアクセスできるようになったかを見るべきです。
以下のコマンドでdocker-composeをインストールします。
$ URL=https://github.com/docker/compose/releases/download/1.17.0/
$ curl -L ${URL}/"docker-compose-$(uname -s)-$(uname -m)" -o docker-compose
$ sudo cp docker-compose /usr/local/bin/docker-compose
$ sudo chmod a+x /usr/local/bin/docker-compose
$ rm -f docker-compose
2.1 SQLiteの場合
アップロードされるデータととデータベースを保存するディレクトリを作成します。
$ sudo mkdir -p /var/lib/some-redmine/sqlite $ sudo mkdir -p /var/lib/some-redmine/files $ sudo mkdir -p /var/lib/some-redmine/plugins $ sudo mkdir -p /var/lib/some-redmine/vendor/plugins $ sudo mkdir -p /var/lib/some-redmine/public/themes
以下のコマンドでRedmineを動かします。
$ mkdir redmine-sqlite
$ cd redmine-sqlite
$ cat <<EOF > redmine-sqlite.yml
version: '3.0'
services:
some-redmine:
image:
redmine:latest
restart:
always
ports:
- 80:3000
volumes:
- /var/lib/some-redmine/sqlite:/usr/src/redmine/sqlite
- /var/lib/some-redmine/files:/usr/src/redmine/files
- /var/lib/some-redmine/plugins:/usr/src/redmine/plugins
- /var/lib/some-redmine/vendor/plugins:/usr/src/redmine/vendor/plugins
- /var/lib/some-redmine/public/themes:/usr/src/redmine/public/themes
EOF
$ docker-compose -f redmine-sqlite.yml up
2.2 PostgreSQLの場合
データベースのクライアントをインストールします。Ubuntu 16.04の場合は以下の通りです。
$ sudo apt install -y postgresql-client-9.5
アップロードされるデータととデータベースを保存するディレクトリを作成します。
$ sudo mkdir -p /var/lib/some-redmine/sqlite $ sudo mkdir -p /var/lib/some-redmine/files $ sudo mkdir -p /var/lib/some-redmine/plugins $ sudo mkdir -p /var/lib/some-redmine/vendor/plugins $ sudo mkdir -p /var/lib/some-redmine/public/themes
データベースを初期化します。初期化するまでsleepを繰り返します。
$ docker run -d --name some-postgres \
-e POSTGRES_DB=redmine \
-e POSTGRES_USER=redmine \
-e POSTGRES_PASSWORD=redmine \
-p 5432:5432 \
-v /var/lib/some-postgres:/var/lib/postgresql/data \
postgres:latest
$ echo '127.0.0.1:5432:redmine:redmine:redmine' > ~/.pgpass
$ chmod 600 ~/.pgpass
$ while : ; do
psql -h 127.0.0.1 -U redmine -c '\q' > /dev/null 2>&1 && break
sleep 1
done
$ rm -f ~/.pgpass
$ docker rm -f some-postgres
以下のコマンドでRedmineを動かします。
$ mkdir redmine-postgres
$ cd redmine-postgres
$ cat <<EOF > redmine-postgres.yml
version: '3.0'
services:
some-redmine:
image:
redmine:latest
restart:
always
ports:
- 80:3000
environment:
REDMINE_DB_POSTGRES: some-postgres
REDMINE_DB_DATABASE: redmine
REDMINE_DB_USERNAME: redmine
REDMINE_DB_PASSWORD: redmine
volumes:
- /var/lib/some-redmine/files:/usr/src/redmine/files
- /var/lib/some-redmine/plugins:/usr/src/redmine/plugins
- /var/lib/some-redmine/vendor/plugins:/usr/src/redmine/vendor/plugins
- /var/lib/some-redmine/public/themes:/usr/src/redmine/public/themes
depends_on:
- some-postgres
some-postgres:
image:
postgres:latest
environment:
POSTGRES_DB: redmine
POSTGRES_USER: redmine
POSTGRES_PASSWORD: redmine
volumes:
- /var/lib/some-postgres:/var/lib/postgresql/data
EOF
$ docker-compose -f redmine-postgres.yml up
2.3 MySQLの場合
データベースのクライアントをインストールします。Ubuntu 16.04の場合は以下の通りです。
$ sudo apt install -y mariadb-client-10.0
アップロードされるデータととデータベースを保存するディレクトリを作成します。
$ sudo mkdir -p /var/lib/some-mysql $ sudo mkdir -p /var/lib/some-redmine/files $ sudo mkdir -p /var/lib/some-redmine/plugins $ sudo mkdir -p /var/lib/some-redmine/vendor/plugins $ sudo mkdir -p /var/lib/some-redmine/public/themes
データベースを初期化します。初期化するまでsleepを繰り返します。
$ docker run -d --name some-mysql \
-e MYSQL_RANDOM_ROOT_PASSWORD='yes' \
-e MYSQL_ROOT_PASSWORD=mysql \
-e MYSQL_DATABASE=redmine \
-e MYSQL_USER=redmine \
-e MYSQL_PASSWORD=redmine \
-p 3306:3306 \
-v /var/lib/some-mysql:/var/lib/mysql \
mariadb:latest
$ while : ; do
mysqladmin ping -h127.0.0.1 -uredmine -predmine && break
sleep 1
done
$ docker rm -f some-mysql
以下のコマンドでRedmineを動かします。
$ mkdir redmine-mysql
$ cd redmine-mysql
$ cat <<EOF > redmine-mysql.yml
version: '3.0'
services:
some-redmine:
image:
redmine:latest
restart:
always
ports:
- 80:3000
environment:
REDMINE_DB_MYSQL: some-mysql
REDMINE_DB_DATABASE: redmine
REDMINE_DB_USERNAME: redmine
REDMINE_DB_PASSWORD: redmine
volumes:
- /var/lib/some-redmine/files:/usr/src/redmine/files
- /var/lib/some-redmine/plugins:/usr/src/redmine/plugins
- /var/lib/some-redmine/vendor/plugins:/usr/src/redmine/vendor/plugins
- /var/lib/some-redmine/public/themes:/usr/src/redmine/public/themes
depends_on:
- some-mysql
some-mysql:
image:
mariadb:latest
environment:
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: redmine
MYSQL_USER: redmine
MYSQL_PASSWORD: redmine
volumes:
- /var/lib/some-mysql:/var/lib/mysql
EOF
$ docker-compose -f redmine-mysql.yml up
3 NFSサーバとデータベースサーバと連携する
- /usr/src/redmine/files等をNFSサーバのディレクトリにマッピングします。
- データーベースとして別マシンのIPアドレス、ポートなどを指定します。
3.1 NFSサーバ
NFSサーバのマシンでNFSサーバをインストールします。Ubuntu 16.04の場合は以下の通りです。
$ sudo apt install -y nfs-kernel-server
Redmineが使用するディレクトリを作成します。
$ sudo mkdir -p /var/lib/some-redmine $ sudo mkdir -p /var/lib/some-redmine/files $ sudo mkdir -p /var/lib/some-redmine/plugins $ sudo mkdir -p /var/lib/some-redmine/vendor/plugins $ sudo mkdir -p /var/lib/some-redmine/public/themes
ディレクトリをNFSで公開します。
$ cat <<EOF | sudo tee -a /etc/exports /var/lib/some-redmine 192.168.11.0/24(rw,sync,no_root_squash,no_subtree_check) EOF $ sudo exportfs -ra
3.2 データベースサーバ
データベースが使用するディレクトリを作成します。
$ sudo mkdir -p /var/lib/some-mysql
ここではDockerでデータベースを動かします。データベースの初期化の時間を十分取ってください(10秒程度)。
$ docker run -d --name some-mysql \
-e MYSQL_RANDOM_ROOT_PASSWORD='yes' \
-e MYSQL_ROOT_PASSWORD=mysql \
-e MYSQL_DATABASE=redmine \
-e MYSQL_USER=redmine \
-e MYSQL_PASSWORD=redmine \
-p 3306:3306 \
-v /var/lib/some-mysql:/var/lib/mysql \
mariadb:latest
3.3 Redmine
NFSクライアントをインストールします。Ubuntu 16.04の場合は以下の通りです。
$ sudo apt install -y nfs-common
NFSを使ったボリュームを作成します。REDMINE_NFS_IPADDRにはNFSサーバのIPアドレスを設定してください。
$ docker volume create --driver local \
--opt type=nfs \
--opt o=addr="${REDMINE_NFS_IPADDR},rw" \
--opt device=:/var/lib/some-redmine/files \
some-redmine-files
$ docker volume create --driver local \
--opt type=nfs \
--opt o=addr="${REDMINE_NFS_IPADDR},rw" \
--opt device=:/var/lib/some-redmine/plugins \
some-redmine-plugins
$ docker volume create --driver local \
--opt type=nfs \
--opt o=addr="${REDMINE_NFS_IPADDR},rw" \
--opt device=:/var/lib/some-redmine/vendor/plugins \
some-redmine-vendor-puglins
$ docker volume create --driver local \
--opt type=nfs \
--opt o=addr="${REDMINE_NFS_IPADDR},rw" \
--opt device=:/var/lib/some-redmine/public/themes \
some-redmine-public-themes
Redmineを動かします。REDMINE_MYSQL_IPADDRにはデータベースのIPアドレスを設定してください。
$ docker run -d --name some-redmine \
-e REDMINE_DB_MYSQL="${REDMINE_MYSQL_IPADDR}" \
-e REDMINE_DB_PORT=3306 \
-e REDMINE_DB_DATABASE=redmine \
-e REDMINE_DB_USERNAME=redmine \
-e REDMINE_DB_PASSWORD=redmine \
-v some-redmine-files:/usr/src/redmine/files \
-v some-redmine-puglins:/usr/src/redmine/plugins \
-v some-redmine-vendor-puglins:/usr/src/redmine/vendor/plugins \
-v some-redmine-public-themes:/usr/src/redmine/public/themes \
-p 80:3000 \
redmine:latest