ぴよぴよエンジニアの日記

クラウドベンダーに勤める見習いSEの日記です。発言は私自身の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

Bluemix 上に Redmine の Docker イメージをデプロイしてみた

今回は今までのエントリーとは少し違った変わり種です.


最近始めたチームプロジェクトを TiDD 風に進めたく、Redmine を運用することになりました.

Redmine をどこに構築するかいくつか選択肢がありましたが、せっかくなので Bluemix 上に構築することにしました.

今回は Bluemix 上に Redmine の Docker イメージをデプロイし、カスタムドメインhttps 化するまでの流れをやってみます.





前提

今回は以下の環境を使用しています.

  • macOS Sierra 10.12.5
  • Bluemix CLI version 0.5.4+ae22935-2017-05-18T06:24:28+00:00
  • Docker version 17.03.1-ce, build c6d412e



Docker のインストー

最初は Docker のインストールです.
(既に Docker をインストール済みの方は読み飛ばしていただいて構いません)


f:id:Santea:20170617221553j:plain

Install Docker for Mac | Docker Documentation

上記リンクから "Get Docker for Mac [Stable]" を選択し、Docker.dmg をダウンロードし、インストールします.

$ docker -v
Docker version 17.03.1-ce, build c6d412e

上記コマンドを実行し、バージョン情報が表示されていればインストール成功です.



Bluemix CLI とBluemix Container Service plug-in のインストー

IBM Bluemix Container Service

Docker イメージのデプロイ先として、IBM Bluemix Container を用います.


Bluemix Container を利用するためには Bluemix CLI が必要なのでまずはこれをインストールしましょう.

Bluemix CLI Home

上記リンクにアクセスし、CLI をダウンロードします.

f:id:Santea:20170617220734p:plain

Bluemix_CLI_0.5.4.pkg(Macの場合)を起動すると上記画面が表示されますので、手順に従ってインストールします.

$ bx -v
bx version 0.5.4+ae22935-2017-05-18T06:24:28+00:00

ターミナルで上記コマンドを実行してバージョン情報が表示されていればインストール成功です.


続いて Bluemix Container Service Container Service plug-in のインストールを行います.
コマンドラインで以下に続くコマンドを実行してください.

$bx login -a https://api.ng.bluemix.net

Bluemix CLI にログインします.

$bx plugin install IBM-Containers -r Bluemix
$bx plugin list
インストール済みプラグインをリストしています...

プラグイン名     バージョン   
IBM-Containers   1.0.0   

インストール済みプラグインのリストに IBM-Containers が表示されていればインストール成功です.



Redmine の Docker イメージを Bluemix にデプロイする

まずは Docker を起動しましょう.

f:id:Santea:20170617223309j:plain

Launcher で Docker を選択します.


f:id:Santea:20170617223437p:plain:w250

ステータスバーの Docker 項目が Docker is running となっていれば起動成功です.


次に Bluemix にログインします.

$ bx login
API エンドポイント: https://api.ng.bluemix.net

Email> example@mail.com

Password> 
認証中です...
OK

アカウントを選択します (または Enter キーを押してスキップします):
1. Daiki Kawanuma's Account (XXXXXXXXXXXXXXX)
Enter a number> 1
ターゲットのアカウント Daiki Kawanuma's Account (XXXXXXXXXXXXXXX)

ターゲットの組織 BlumixDev

ターゲットのスペース BluemixDev


                         
API エンドポイント:   https://api.ng.bluemix.net (API バージョン: 2.54.0)   
地域:                 us-south   
ユーザー:             example@mail.com   
アカウント:           Daiki Kawanuma's Account (XXXXXXXXXXXXXXX)   
組織:                 BlumixDev   
スペース:             BluemixDev  

コマンドラインで bx login コマンドを実行してください.
メールアドレスとパスワードを要求されます.
正常にログインできれば上記のような結果が返ってくるはずです.


Bluemix Container を初期化します.

$ bx ic init
古い構成ファイルを削除中です...
open /Users/DaikiKawanuma/.cf/config.json: no such file or directory
IBM Containers のクライアント証明書を生成中です...
クライアント証明書を /Users/DaikiKawanuma/.ice/certs/ に格納中です...

クライアント証明書を /Users/DaikiKawanuma/.ice/certs/containers-api.ng.bluemix.net/XXXXXXXXXX に格納中です...

OK
クライアント証明書が取得されました。

ローカルの Docker 構成を確認中です...
OK

ホスト名 registry.ng.bluemix.net のレジストリーで認証中
OK
コンテナーは IBM Containers レジストリーで認証されました。
プライベート Bluemix リポジトリーは URL registry.ng.bluemix.net/XXXXXXXXXX です。

IBM Containers と共に Docker CLI を使用するには、次の 2 つの方法から選択することができます。


オプション 1: このオプションでは、ローカル Docker ホストを管理するために Docker CLI を直接使用しながら、IBM Containers 上のコンテナーを管理するための「bluemix ic」を使用できます。
	この Cloud Foundry IBM Containers プラグインは、ローカル Docker 環境に影響を与えることなく使用してください。


	使用法の例:
	bluemix ic ps
	bluemix ic images

オプション 2: Docker CLI を直接使用します。 このシェルでは、これらの変数を設定することにより、ローカル Docker 環境をオーバーライドして IBM Containers に接続します。 以下のコマンドをコピーして貼り付けてください。
	注: このオプションでサポートされるのは、後ろに (Docker) が付く Docker コマンドのみです。 
 	export DOCKER_HOST=tcp://containers-api.ng.bluemix.net:8443
 	export DOCKER_CERT_PATH=/Users/DaikiKawanuma/.ice/certs/containers-api.ng.bluemix.net/XXXXXXXXXX
 	export DOCKER_TLS_VERIFY=1

	使用法の例:
	docker ps
	docker images

コマンドラインで bx ic init コマンドを実行してください.

プライベート Bluemix リポジトリーは URL registry.ng.bluemix.net/XXXXXXXXXX です。

正常に初期化できた場合、上記のようにリポジトリーの URL が発行されますので、こちらを控えておきましょう.


Redmine の Docker イメージを pull します.

$ docker pull redmine
Using default tag: latest
latest: Pulling from library/redmine
10a267c67f42: Pull complete 
0aaa89427703: Pull complete 
4e4351445696: Pull complete 
72c399ee88ad: Pull complete 
cd4fc9895ed7: Pull complete 
00facae99acf: Pull complete 
39fe42e23efc: Pull complete 
adcb64833163: Pull complete 
605738c68599: Pull complete 
eb8b57703d24: Pull complete 
b0d2fec5a473: Pull complete 
7bd6e321e449: Pull complete 
509199c744bc: Pull complete 
72bc2865edcf: Pull complete 
89bcf430a558: Pull complete 
Digest: sha256:6161e523b5a7d66eaa27c5e16eb62b327ea846f36e5b1f3d955bb333d631cec2
Status: Downloaded newer image for redmine:latest

コマンドラインで docker pull redmine コマンドを実行します.
全ての項目が Pull complete になれば正常に pull できています.


Docker イメージにタグ付けを行います.

docker tag redmine registry.ng.bluemix.net/XXXX/my_redmine

コマンドラインで上記のコマンドを実行します.
"XXXX" の部分には先ほど控えておいたレジストリの URL を指定します.
"my_redmine" の部分は Bluemix 上の Docker イメージ名になりますのでお好きな名前を付けてください.


Bluemix 上に Redmine の Docker イメージをデプロイします.

$ docker push registry.ng.bluemix.net/XXXX/my_redmine
The push refers to a repository [registry.ng.bluemix.net/XXXX/my_redmine]
bbaad5f84f54: Pushed
8a2f78a107d8: Pushed 
77e8840346cc: Pushed
dc33c98e0afc: Pushed
580223b85643: Pushed 
912c9c81592d: Pushed 
daf18abaed19: Pushed 
4166db05041d: Pushed
fb1319c5dbe9: Pushed
f4d4ef112a81: Pushed 
41636605749a: Pushed 
c682b1980b3e: Pushed
8157cc9b225e: Pushed
2a9adabb6623: Pushed
8d4d1ab5ff74: Pushed 
latest: digest: sha256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX size: 3466

コマンドラインで docker push コマンドを実行します.
push 以下の引数には先程タグ付けした値と同様のものを指定します.

なお、デプロイ中は Web 上で Bluemix にログインしないようにしましょう.
途中でログインした場合、認証に失敗し最終的にデプロイが成功しません.

間違ってログインしてしまった場合でも、再度デプロイし直せば正常にデプロイできます.



カスタムドメインの指定と証明書の登録

いよいよ Bluemix 上で Redmine を起動するというところですが、その前にカスタムドメインと証明書の登録を行いましょう.

まずは証明書を作ります.
今回は Redmine の運用が目的なので"オレオレ証明書"で良いことにします.

IBM Bluemix を独自ドメインで使う(SSL編) : まだプログラマーですが何か?
証明書については上記エントリーで解説されていますので、詳しく知りたい方はご覧ください.


証明書を作成します.

$ openssl req -new -key server.key -out server.csr

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Hakozaki
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Project-Respite
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:*.project-respite.com
Email Address []:

***残りは全て Enter***

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

コマンドラインで openssl req -new -key server.key -out server.csr コマンドを実行します.
いくつか回答項目が表示されますので、Email まで回答し、残りは全て Enter します.

openssl x509 -days 3653 -in server.csr -out server.crt -req -signkey server.key

Signature ok
subject=/C=JP/ST=Saitama/L=Urawa/O=Project-Respite/CN=*.project-respite.com
Getting Private key

更に上記のコマンドを実行すると、server.key, server.csr, server.crt が生成されているはずです.

ここまでで鍵生成は完了です.


次にカスタムドメインの登録を行います.

f:id:Santea:20170617231922j:plain:w450

Bluemix にログインし、ページ右上のアカウントの項目で、"組織の管理"を選択します.


f:id:Santea:20170617232402j:plain

移動先のページにて、"組織の編集"を選択します.


f:id:Santea:20170617232749j:plain

タブ上の"ドメイン"の中の、"ドメインの追加"を選択します.
ドメイン名を追加したら、下の保存を選択してください.


f:id:Santea:20170617234528j:plain

保存するとSSL証明書の欄のアイコンが変わると思いますので、こちらを選択します.


f:id:Santea:20170617235340j:plain:w550

ポップアップ上で先程生成した Server.crt と Server.key を参照します.


最後にドメインサービスに Bluemix の CNAME を登録します.

f:id:Santea:20170618000517p:plain

こちらはお名前.comの例ですが、上記のように CNAME に "secure.us-south.bluemix.net" を指定してください.


これで下準備は完了です.



Redmine の起動

いよいよ Bluemix 上で Redmine を起動します.

f:id:Santea:20170617231201j:plain

トップ画面で上端タブの右にある"カタログ"を選択します.

画面左端のすべてのカテゴリーから"アプリ"の中の"コンテナ"を選択します.

コンテナの項目に先程デプロイした "my_redmine" を選択します.


f:id:Santea:20170617235959j:plain

コンテナ方式は"スケーラブル"を選択します(単一だとカスタムドメインを指定できないため).
コンテナ名、サイズ、インスタンスはお好きなものを設定してください(今回は最小構成にしています).


f:id:Santea:20170618001246j:plain

ドメインにカスタムドメインを指定し、作成を選択すれば Redmine が起動されます.


f:id:Santea:20170618001609p:plain

起動画面はこんな感じです.
メモリ使用量 365GBHour/Month までは無料枠で使えます.



まとめ

今回は Bluemix 上に Redmine の Docker イメージをデプロイし、起動してみました.

慣れれば10分!とまではいかないまでも、30分程度あればすぐに Redmine を構築できると思います.


少規模であれば無料枠で運用できると思いますので、ぜひお試しください.


以上です.


参考