Docker

QNAPのNASにRedmineをセットアップする

QNAP TS-231Pを買いました!
このTS-231PにRedmineを設定していきます。

NASの管理画面のContainer StationからDocker Hubのイメージを取得して色々なアプリ/サービスを動かせます。自分で作ったイメージでコンテナを作ることも可能です。
Cotainer Stationはアプリストアから別途インストールが必要です。

Container Station → 作成 → Docker Hub → 「Redmine」を検索。
Redmine公式のイメージがあります。

イメージ名のリンクからDocker Hubのイメージ解説ページに飛ぶと…Docker Composeの設定例が載ってますね。

で、これをこうして… こうじゃ!

イメージをダウンロード済みなので速いです、3分で新しいRedmineが起動しました。
終わりです。

Container StationでDocker Compose

速すぎてよく分からないですね。
要はDocker Composeの設定を書いて、データベースコンテナとRedmineコンテナの二つのコンテナを連携させてます。

RedmineはPostgreSQL/MySQL/SQLiteの3種類のデータベースに対応しています。なのでPostgreSQLかMySQLのコンテナも作成します。SQLite3ならDBコンテナはいらないと思います。

私の買ったTS-231PのCPUはARMアーキテクチャです。Amazonに買収されたイスラエルのCPUメーカー Annapurna labsの設計で、AWSで使われてるらしいです。

MySQLのコンテナは「ARM CPUのLinux向けイメージがない」というエラーで、作成できません。Intel CPUのモデルだと問題なく使えると思います。

PostgreSQLはARM/Linux向けイメージがありますので、DBはPostgreSQLにします。確か昔のRedmineはPostpreSQL/SQLite3しか対応してなかったように記憶してます。

下準備

テーマやjQueryを格納しているpublicフォルダ用の共有フォルダを作成しておきます。

後ほどDocker Composeの設定で、Redmineコンテナがこの共有フォルダを同期するように設定します。フォルダ作成と同期設定をして永続化しておかないと、コンテナが再起動する度にpublicフォルダが空になってしまい、テーマが消えます。

適当なところに共有フォルダを作って、Redmineのリリースファイル内にあるpublic以下のファイルを入れておきます。

redmine-publicを作成してpublic内のファイルをアップロード

この場合、QNAP TS-231Pでのフルパスは /share/redmine-publicです。

また、自分はminimalflat2テーマを使っているので、併せて入れておきます。

必要に応じて、同じ要領でプラグインを格納するplugins用の共有フォルダも作成しておいてください。これも設定していないとコンテナ再起動時に消えます。

Docker Composeを設定する

作成 → アプリケーションの作成に進みます。

Docker Composeを書くためのモーダルウィンドウになります。

アプリケーション名を入れます。ハイフン不可。
yml形式で Docker Composeの設定を書きます。

version: '3'

services:
  redmine:
    image: redmine
    restart: always
    ports:
      - 32790:3000
    environment:
      REDMINE_DB_POSTGRES: db
      REDMINE_DB_PASSWORD: secret
    volumes:
      - /share/redmine-public:/usr/src/redmine/public

    
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: secret
      POSTGRES_DATABASE: redmine

サービスが二つ、RedmineとPostgresSQLです。
それぞれ、設定します。

サービス名 redmine:でRedmineの設定をします。

  • 使用イメージ:redmine、バージョン指定をしてないのでLatestを取得します。
  • 再起動ポリシー:コンテナがダウンしたら常に再起動
  • ポート番号:左側がブラウザでアクセスするポート、右側がコンテナが使用するポート
  • 環境変数
    • REDMINE_DB_POSTGRES: 後述するデータベースのサービス名
    • REDMINE_DB_PASSWORD: DBへの接続パスワード、ユーザー名は無指定の場合root
  • マウントするボリューム
    • NASの/share/redmine-publicをコンテナ内の/usr/src/redmine/publicにマウント

次に、db:でPostgreSQLの設定をします。

  • 使用イメージ: PostgreSQL
  • 再起動ポリシー
  • 環境変数
    • POSTGRES_PASSWORD: Redmineが使うパスワード、先に設定したのと同じもの
    • POSTGRES_DATABASE: Redmineが使用するデータベース名

最低限、これでいけます。

Yamlチェッカーもあるので文法が間違いないか確認しておきます。

コンテナ起動

「作成」を押すとバックグラウンドタスクにコンテナの作成と起動が追加されます。イメージが未取得だとdocker pull(ダウンロード)もやってくれると思います。

右上のアイコンにタスクが1個あると表示される。
「概要」タブから実行中のコンテナが確認できます。コンテナごとの状態も確認できます。
redmineコンテナではデータベースのマイグレーション処理が走ってます。
最後にWebサーバが起動したら、URLが表示されます。

RedmineコンテナのWebサーバが起動したら、ports:で指定したポートにブラウザでアクセスします。今回は32790番ですね。

初期状態のRedmine

これでもうRedmineを使い始めることができます。

Redmineコンテナ-ホストのファイル共有

デフォルトの設定だとRedmineでアップロードしたファイルの入るfilesだけ、共有フォルダに同期されます。

ContainerStationのボリュームタブを開きます。アクション列のメガネアイコンで使用中のコンテナを表示、「プルーン」を実行すると使われていないボリュームを全て削除です。マウントポイントがTS-231P内でのフォルダ位置です。

FileStationで表示するとここです。

/Container/container-station-data/lib/docker/volumes
/538955fb672279d5a9d753406318b2d82707b0fb458c1cb6d50ac9b6cb628061
/_data

階層がとても深いです。_dataディレクトリの上はコンテナの識別子がそのままディレクトリ名になってます。特にコンテナの名前を決めてないので、ハッシュですね。

GitリポジトリをRedmineと連携させたいので、コンテナとの共有フォルダもう一つ指定しておきます。

volumes:
  - /share/git:/usr/src/redmine/git_repositories

ローカルの/share/gitをマウントします。 /share/gitにはリモートリポジトリが入っています。
Redmineでリポジトリの設定をすると、こういう具合にgitの履歴を見ることができます。

TS-231PにGitを入れるにも若干、手間がありますが割愛。 SSHで接続して別途入れたパッケージ管理ソフトを使います。

ちょっと…な点

ちょっと微妙な気配があるのは、Docker HubのRedmine公式イメージはWEBサーバがWebrickなところです。公式のインストールガイドによるとWebrickは開発用なので、本番では使わないようにとのことです。

Passengerで動くイメージを使うとなると、Webサーバのコンテナも要りそうなので、ちょっと設定が分からない。

それとGitを入れようとしたところ公式のヘルプによると

Git の使用に替わるものとして、Container Station の GitLab を使用することができます。

qnap.com QNAP NAS で Git を使用する方法

必要なのはGitであってGitHubクローンじゃないですけども…コンテナのGitLabで代用になるのかな。

余談

Redmineイメージ単体でデータベースはSQLite3を使うなら、実はデータベース用のコンテナの設定は要りません。Docker Composeもなしで、設定も全部デフォルトでもContainer Stationが上手いことやってくれます。

ここから「作成」でも一応はRedmineが起動する

ただし、DBもテーマフォルダもコンテナ再起動の度に消えてしまいます。

コンテナが再起動かかると、こんな具合にHTMLだけで表示される
左が再起動後のRedmineコンテナの内部ファイル、右が正しい状態

Redmineをちょっと触ってみたいとか、お試しぐらいなら使えるのかな。
ボリュームマウントしてpublicとdbフォルダを永続化してやれば、実用にも耐えるかもしれません。

コンテナに入るには、コンテナのリストから「端末」でbashを実行します。イメージによってはシェルがBashではないので注意。