LoginSignup
2
5

More than 5 years have passed since last update.

docker-composeで複数のgitbucketを立ててHTTPS(SSL)接続

Last updated at Posted at 2018-11-11

やりたいこと

CASE1)

gitbucket~クライアント間接続をHTTPS(SSL)にしたい

どうやらgitbucket(ver 4.21現在)でこれを実現するには、フロントにプロキシを設ける必要がある。

そして

CASE2)

・複数のプロジェクトでgitbucketを使いたい
・各プロジェクトは相互の情報を見えないようにしたい

この場合も、「グループ」という機能はあるが、プロジェクト毎にアクセス制限を厳密に分ける運用をしようとすると不十分。
dockerで個別に立てれば確実に分類はできる。
※アカウントは個々に発行する必要はある

まとめるとこんな感じをdocker-composeで作ってみる

gitbucketnginx.png

設定

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.mydomainhttps://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
2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5