DockerでRedmineしたい
Docker上でRedmineを動作させる
docker-composeがあると便利。
docker-machineも使ってる。
なので、上記のツールはあらかじめインストールしておく。
インストールせずともDocker+Redmineはできるが、だいぶ煩雑になる。
それに、単純にRedmineを動かせるようにするだけなら両ツールを使えば一瞬で完了しちゃう。
インストールしよう。
EC2上にRedmineを作る。
EC2上にDocker環境を構築する
1 2 3 4 |
// EC2上にDocker環境構築要請 docker-machine create -d amazonec2 --amazonec2-access-key [アクセスキー] --amazonec2-secret-key [シークレットキー] --amazonec2-vpc-id [VPCのid] --amazonec2-instance-type="t2.micro" --amazonec2-root-size="20" --amazonec2-region="ap-northeast-1" ec2.redmine // ec2.redmineをActiveにする eval "$(docker-machine env ec2.redmine)" |
Redmineを構築する
既にDockerでRedmineを構築するためのテンプレートがあるので、感謝しつつ使う。
https://github.com/sameersbn/docker-redmine
使い方もしっかり書かれてるので、そんなに困らないはず。
1 2 |
wget https://raw.githubusercontent.com/sameersbn/docker-redmine/master/docker-compose.yml docker-compose up |
これだけでRedmineできた。composeすごい。
http://[インスタンスのIPかURL]:10083
で構築したRedmineが見れるはず。
HTTPSを使いたい
デフォルトだとHTTPで通信してる。
オフィスの閉じたネットワーク内でのみ使うのであれば問題ない。
が、自宅や出先でも見たい、となるとHTTPだと困る。
外部の関係者が見ることもありHTTPSのみを使ってRedmineにアクセスできるようにした。
docker-compose.ymlを編集
環境変数REDMINE_PORTとREDMINE_HTTPSをいじる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
redmine: build: ./ links: - postgresql:postgresql environment: - TZ=Asia/Kolkata - REDMINE_PORT=443 - REDMINE_HTTPS=true - SMTP_ENABLED=false - SMTP_DOMAIN=www.example.com - SMTP_HOST=smtp.gmail.com - SMTP_PORT=587 - SMTP_USER=mailer@example.com - SMTP_PASS=password - SMTP_STARTTLS=true - SMTP_AUTHENTICATION=:login ports: - "443:443" - "80:80" volumes: - /srv/docker/redmine/redmine:/home/redmine/data |
.keyと.crtファイルを所定の場所に置く
ここを参考にしつつ。
https://github.com/sameersbn/docker-redmine#ssl
docker-machineのscpコマンドを使って用意したファイルを次のディレクトリ以下に転送する。
/srv/docker/redmine/redmine/certs
下記のスクリプトを見るとファイル名に決まりがあるので従っておく。
https://github.com/sameersbn/docker-redmine/blob/master/entrypoint.sh#L45
無事転送を終えたら、コンテナを再起動する。
1 |
docker-compose restart |
HTTPS接続できているか確認する。
Githubと連携したい
けっこう煩雑だった。。
このプラグインを使う。
https://github.com/koppen/redmine_github_hook
プラグインのインストール
1 |
docker-machine ssh [マシン名] |
ホストにログインしたら…
1 2 3 |
mkdir /srv/docker/redmine/redmine/plugins cd /srv/docker/redmine/redmine/plugins git clone git://github.com/koppen/redmine_github_hook.git |
plugin用のディレクトリを作成してredmine_github_hookをクローンする。
ホストから抜けて…
1 |
docker-compose restart |
コンテナを再起動したらインストール完了。
github側の設定
連携用の公開鍵をGithubに登録する
先述のdocker-redmineでRedmineを立てるともれなく鍵がついてくるので、それを利用する。
1 |
docker-machine ssh [マシン名] |
ホストにログインしたら…
/srv/docker/redmine/redmine/dotfiles/.ssh
以下にあるid_rsa.pubをGithubリポジトリのDeploy Keysや管理用アカウントのSSH Keysに登録しておく。
webhookを登録する
連携したいリポジトリのWebhook設定画面でwebhook用のURLを入力する。
project_idはredmineで作成したプロジェクトを一意に特定するためのid。
URLを見ればすぐ分かる。
https://[RedmineのURL]/projects/[project_id]
と、なってるので。
コンテナのホストマシン側の設定
リポジトリをクローンする
1 2 3 |
mkdir /srv/docker/redmine/redmine/repos cd /srv/docker/redmine/redmine/repos git clone --bare git@github.com:[管理用アカウントのUSER名]/[リポジトリ名].git |
Redmine側の設定
プロジェクト > 設定 > リポジトリ > 新しいリポジトリ で先ほどクローンしてきたリポジトリを登録する。
こんな感じ。
図を見てもらうと記入されているパスが先ほどクローンしてきたリポジトリのパスと異なっている。
これについてはdocker-compose.yml内に書かれたredmineの定義を見てもらえれば分かる。
1 2 |
volumes: - /srv/docker/redmine/redmine:/home/redmine/data |
このようにしてホストとコンテナ間で同じディレクトリを共有している。
で、Redmineはコンテナなので後者の/home/redmine/dataがルートとなるわけ。
動作確認
CURLなりで実際にwebhookを叩いてみる。
1 2 |
nihon_taro% curl -X POST 'https://[RedmineのURL]/github_hook?project_id=awesome' [" GithubHook: Executing command: 'git fetch origin'"," GithubHook: Command output: [\"From github.com:user_name/awesome\\n\", \" * branch HEAD -\u003e FETCH_HEAD\\n\"]"," GithubHook: Executing command: 'git fetch origin \"+refs/heads/*:refs/heads/*\"'"," GithubHook: Command output: []"," GithubHook: Redmine repository updated: (Git: 4863.5ms, Redmine: 8.4ms)"]% |
動作してそう(=^・^=)
感想
単純にRedmineを立てて「ウェーイ」ってやるのは簡単。
でも、プラグインを導入しようとするとモノによっては煩雑な手続きが必要になる。
この煩わしいところもなるべく自動化していきたいすね。