Docker で SSL/TLS 化された BitBucket と ownCloud を簡単に構築する
GitBucket を使うと Git リポジトリを、ownCloud を使うと DropBox クローンを利用することが出来ます。「各々を構築する」ことは当然可能ですが、Docker コンテナを利用すると構築の手間を大幅に省けます。コンテナを利用することは一長一短ですが、「構築の手間が省ける」以外にも「最新バージョンのコンテナが提供されたら、古いコンテナは廃棄して新しいコンテナに差し替えるだけで OK」といったメリットもあります (その場合、データをコンテナの外部へ保存するようにしておく必要があります)。
しかし、BitBucket と ownCloud を同じサーバで提供しようとする場合、「GitBucket 用のコンテナは TCP/80 で、ownCloud 用のコンテナは TCP/8080 で…」といった具合にポート番号を分けて運用する、といった工夫が必要になってしまいます。これはフロントに nginx-proxy を用意し、クライアントがアクセスしてきた FQDN に応じて通信を適切なコンテナに転送することで解消することが出来ます。また、昨今では Web サイトを SSL/TLS 化するケースが増えていますが、これも専用のコンテナを使うことで簡単にサーバ証明書の取得や更新を自動化することが出来ます。
Docker のインストール¶
まず最初に Docker をインストールします。
1 |
|
インストールが完了したら起動/自動起動の設定をしておきます。また、Docker を一般ユーザでも実行出来るように、該当ユーザを docker グループに追加しておきます。
1 2 3 |
|
Docker Compose のインストール¶
次は Docker Compose をインストールします。
1 2 |
|
Docker Compose 用の設定¶
ディレクトリ/ファイル設計¶
今回、ディレクトリは以下のように設計しました。Nginx-Proxy や GitBucket、ownCloud 等を各々、自由に操作出来るよう意図的にディレクトリを分けています。
1 2 3 4 5 |
|
また、Docker Compose 用の yml ファイルは以下のようにしました。
No. | yml ファイル | 用途 |
---|---|---|
1 | ~/.docker-compose.d/docker-compose.yml | リバースプロキシ & 証明書の自動更新 |
2 | ~/.docker-compose.d/git.example.com/docker-compose.yml | GitBucket |
3 | ~/.docker-compose.d/oc.example.com/docker-compose.yml | ownCloud |
設計通りにディレクトリを作成しておきます。
1 2 3 4 5 |
|
Nginx-Proxy¶
以下の 2 つのコンテナは組み合わせて使うと非常に便利です。
- jwilder/nginx-proxy
- Docker API で Socket を監視し、対応する FQDN 宛通信が来たら対応するコンテナへ通信を転送する
- jrcs/letsencrypt-nginx-proxy-companion
- Let's Encrypt で証明書を自動取得してくれる
但し、jwilder/nginx-proxy は client_max_body_size が 100MB に設定されているようで、jwilder/nginx-proxy 経由で通信をする際に 100MB 以上のファイルを転送することが出来ず、ownCloud 宛に 100MB を超える通信をしようとするとエラーになってしまいます。sig/nginx-proxy に client_max_body_size を 10GB に設定したコンテナを用意したので、今回はこちらを使います。
Docker Compose 用の yml ファイル (~/.docker-compose.d/docker-compose.yml) は以下のように記載しました。Docker API で Socket を監視するので、docker.sock を ro (ReadOnly) でマウントしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
コンテナを起動しておきます。
1 2 |
|
GitBucket¶
事前に GitBucket 用のデータディレクトリを作成しておきます。
1 |
|
GitBucket 用のコンテナは sken/gitbucket を利用させて頂きました。Dcoker Compose 用の yml ファイル (~/.docker-compose.d/git.example.com/docker-compose.yml) は以下のように記載しました。VIRTUAL_HOST には、このコンテナで使いたい FQDN を指定します。LETSENCRYPT_HOST は Let's Encrypt で取得するサーバ証明書の Common Name を指定します。通常は VIRTUAL_HOST と同じになります。LETSENCRYPT_EMAIL には証明書の有効期限が近くなった場合のお知らせメール等を受信するメールアドレスを指定します。
1 2 3 4 5 6 7 8 9 10 |
|
コンテナを起動しておきます。
1 2 |
|
ownCloud¶
事前に ownCloud 用のデータディレクトリを作成しておきます。
1 2 3 |
|
Dcoker Compose 用の yml ファイル (~/.docker-compose.d/oc.example.com/docker-compose.yml) は以下のように記載しました。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
コンテナを起動しておきます。
1 2 |
|
通信確認¶
ブラウザから https://git.example.com
や https://oc.example.com
へアクセスし、警告が表示されることも無く、正常にサービスへアクセス出来ることを確認します。これは Docker コンテナに関係無いことですが、GitBucket や ownCloud を初期設定状態でインターネットに晒していると危険なので、すぐに初期パスワード等は変更することをお勧めします。