やりたいこと
CASE1)
gitbucket~クライアント間接続をHTTPS(SSL)にしたい
どうやらgitbucket(ver 4.21現在)でこれを実現するには、フロントにプロキシを設ける必要がある。
そして
CASE2)
・複数のプロジェクトでgitbucketを使いたい
・各プロジェクトは相互の情報を見えないようにしたい
この場合も、「グループ」という機能はあるが、プロジェクト毎にアクセス制限を厳密に分ける運用をしようとすると不十分。
dockerで個別に立てれば確実に分類はできる。
※アカウントは個々に発行する必要はある
まとめるとこんな感じをdocker-composeで作ってみる
設定
nginxのプロキシ化は以下が便利
https://github.com/jwilder/nginx-proxy
参考)
http://fusic-kiban.hatenablog.com/entry/2017/11/08/090000
docker-compose.yaml設定
version: '3'
services:
nginx:
container_name: nginx
image: jwilder/nginx-proxy
ports:
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /home/ec2-user/certs/:/etc/nginx/certs/
environment:
- DEFAULT_HOST=nodeapp.local
restart: always
gitbucket1:
container_name: gitbucket1
image: gitbucket/gitbucket
volumes:
- ~/gitbucket/gitbucket1/:/gitbucket/
environment:
- VIRTUAL_HOST=gitbucket1.mydomain
- VIRTUAL_PORT=8080
- CERT_NAME=mydomain
- HTTPS_METHOD=noredirect
restart: always
gitbucket2:
container_name: gitbucket2
image: gitbucket/gitbucket
volumes:
- ~/gitbucket/gitbucket2/:/gitbucket/
environment:
- VIRTUAL_HOST=gitbucket2.mydomain
- VIRTUAL_PORT=8080
- CERT_NAME=mydomain
- HTTPS_METHOD=noredirect
restart: always
ポイント
・environmentにVIRTUAL_HOSTを設定するとnginx-proxyはそこに設定されたサブドメインにプロキシしてくれる。
・VIRTUAL_PORTは、nginx-proxyはデフォルトでは80ポートに連携するため、それ以外のポートで受け取る場合は指定する。
・CERT_NAMEには、ホスト側に配置したSSL証明書(ドメイン名.crt、ドメイン名.key)のドメイン名を記載する。サブドメインごとに個別証明書は不要。
・例ではホストの/home/ec2-user/certs/にドメインのSSL証明書(ドメイン名.crt、ドメイン名.key)を配置
・HTTPS_METHODは80→443のリダイレクトをオフにする設定
・各gitbucketはポートフォワード設定(ports)を書いていないので、直接8080に接続できず、nginx経由に。逆に言えば、個々のgitbucketコンテナのポートは同じ8080共通で良い。
上記で
docker-compose up
すれば、それぞれ https://gitbucket1.mydomain 、https://gitbucket2.mydomain にアクセスすると、個別のgitbucketが使えるようになる。
もちろんDNSとSSL証明書は要設定。
gitbucketでcloneする際は、httpsかsshになるが、上記例ではsshの29418はフォワードしないため、httpsで行う。
参考)
SSLをオレオレ証明書などで設定すると、git cloneで以下のようなエラーになる
fatal: unable to access 'https://gitbucket1.mydomain/git/root/test.git/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
一応、以下の設定で解消はできる
※gitのssl証明書の検証をスキップする方法
git config --global http.sslVerify false