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