GitLab+SSL+Apacheのインストールから設定まで

2014/08/28追記:最新版はこちら⇒GitLab+SSL+Apacheのインストールから設定まで(update 1)

 

2014/08/26 追記:大幅に更新しました。ReverseProxy先にhttpsを指定する旨みがないからhttpsをやめた、など。

自宅環境だとあんまりありがたみはないのだけれど、他の環境で構築するとき等々のためにノウハウだけでも溜め込んどこうかと思い立ったわけですよ。環境はCentOS6.5 64bit。今日CentOSのサイトに行ってみると7.0が出ていて、試しで入れてみたけれどマシンスペックが悪いのか安定しなかったので7.0では断念。
では、さっそく。

大まかな手順

  1. GitLabインストール
  2. GitLab設定
  3. apache設定

GitLabのインストール

GitLabのサイトからDownloadページに移動し、インストール環境を選択すると方法が出てきます。現時点でのCentOS6.5ならこんなのが出てくる。openssh-serverやらpostfixやらもinstallしてるけれど、ほとんどの環境では入っていると思うのでオフライン環境でもあまり問題にはならないかな、と。

wget https://downloads-packages.s3.amazonaws.com/centos-6.5/gitlab-7.2.0_omnibus-1.el6.x86_64.rpm
sudo yum install openssh-server
sudo yum install postfix
sudo service postfix start
sudo chkconfig postfix on
sudo rpm -i gitlab-7.2.0_omnibus-1.el6.x86_64.rpm

DownloadページのOS一覧にはRHELがないけれど、ものはrpmなのでもちろんインストールできます。(RHELで実証済。)

インストールすると以下の文面が表示される。設定するならreconfigureしてねとのこと。

$ sudo rpm -i gitlab-7.2.0_omnibus-1.el6.x86_64.rpm 
Thank you for installing GitLab!
You can configure GitLab for your system by running the following command:

sudo gitlab-ctl reconfigure

 GitLabの設定

設定をするのでsudo gitlab-ctl reconfigureを実行。ちなみにgitlab-ctlはgitlabを開始したり停止などが可能。パラメータについてはgitlab-ctlでとりあえず実行すれば簡単なHelpみたいなものがでる。

gitlab-ctl reconfigureを実行すると設定内容にしたがって/opt/gitlab以下や/var/opt/gitlab以下のファイルを適切な内容に買えてくれます。元になるファイルは/etc/gitlab/gitlab.rbなのでまずはこれを設定。

# Change the external_url to the address your users will type in their browser  
external_url 'http://gitlab.example.com'

初期段階ではexternal_urlしかないが、ここにいろいろな設定を書き込んでいく。

SSLアクセスの設定

Enable HTTPSの章に設定内容が記載されている。ただしFront側にApache等がいてReverseProxyの先とするならば特にする必要はないかと。今回は最終的にapacheで443ポートを使いたいのでSSLの設定をする必要はないのだけれど一応記載しておく。

gitlabの入口はexternal_urlで指定する。httpsならURLもそうすること。下の例はhttpアクセスした場合はhttpsへredirectするようにredirect_http_to_httpsをtrueにし、httpの受付ポートを8000に設定した。

external_url "https://gitlab.example.com:4443"
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 8000

次に証明書と秘密キー。Defaultではetc/gitlab/ssl以下のcrtやkeyファイルが指定されておりファイル名はFQDN(host名.ドメイン)になっている。reconfigureした際に出力するnginxの設定内容が以下。

  ssl_certificate /etc/gitlab/ssl/<Host名>.crt;
  ssl_certificate_key /etc/gitlab/ssl/<Host名>.key;

このパスでよければ何もしなくてよいが、初期状態ではこの位置に証明書も秘密キーも作られていないので作っておくこと。

証明書や秘密キーのパスの変更は次の書式でいける。もちろん書き込むファイルはgitlab.rb。

nginx['ssl_certificate'] = "/etc/gitlab/ssl/<適当な名前>.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/<適当な名前>.key"

サブディレクトリ運用のための設定

初期設定のままだとhttp://<FQDN>/でgitlabにつながるが、これをhttp://<fqdn>/gitlabに変更する。

以下を修正する前に必ずgitlab-ctl reconfigureを実行し設定内容を変更しておくこと。以下の修正内容のほとんどがreconfigureを行うと消えてしまうものである。reconfigureが必要な修正をやり残していないかを確認すること。

変更方法については/opt/gitlab/embedded/service/gitlab-rails/config/application.rbの「Relative url support」あたりに書かれている。

    # Relative url support
    # Uncomment and customize the last line to run in a non-root path
    # WARNING: We recommend creating a FQDN to host GitLab in a root path instead of this.
    # Note that following settings need to be changed for this to work.
    # 1) In your application.rb file: config.relative_url_root = "/gitlab"
    # 2) In your gitlab.yml file: relative_url_root: /gitlab
    # 3) In your unicorn.rb: ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab"
    # 4) In ../gitlab-shell/config.yml: gitlab_url: "http://127.0.0.1/gitlab"
    # 5) In lib/support/nginx/gitlab : do not use asset gzipping, remove block starting with "location ~ ^/(assets)/"
    #
    # To update the path, run: sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
    #

変更したファイルの場所は以下の通り。

  • /opt/gitlab/embedded/service/gitlab-rails/config/application.rb
  • /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
  • /var/opt/gitlab/gitlab-rails/etc/unicorn.rb
  • /var/opt/gitlab/gitlab-shell/config.yml
  • /var/opt/gitlab/nginx/etc/gitlab-http.conf

/gitlabに変更したものの静的なファイルの位置が変わっていないのでこれらを変えることにしましょう。

webページとしてのコンテンツは/opt/gitlab/embedded/service/gitlab-rails/publicにある。ついでに言うと、ここがコンテンツのルートディレクトリ。これらをgitlabにコピーする。

cd /opt/gitlab/embedded/service/gitlab-rails
cp -r public gitlab
mv gitlab public

ここまで修正したらgitlab-ctl startを実行し指定したURLでつながるかを確認。

apacheの設定

apacheを80/443ポートで稼働させ、/gitlabだった場合はReverseProxyとして動くように設定する。

/etc/httpd/conf/httpd.confや/etc/httpd/conf.d以下にあるconfファイルがapacheが読み込む設定ファイルになる。今回行った設定は以下のようにした。

80ポート側の設定。

    RewriteEngine on
    SSLProxyEngine on
    RewriteCond %{REQUEST_URI} ^/gitlab
    RewriteCond %{HTTPS} !=on
    RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R]

443ポート側の設定。/etc/gitlab/gitlab.rbのexternal_urlがhttp://gitlab.example.com:8000と設定したときを想定した内容にしている。

    RewriteEngine on
    SSLProxyEngine on
    RewriteCond %{REQUEST_URI} ^/gitlab
    RewriteRule (.*) http://127.0.0.1:8000%{REQUEST_URI} [P]

URIがhttp://<FQDN>/gitlabならhttps://<FQDN>/gitlabへRedirectし、https://<FQDN>/gitlabで受け取ったときはReverseProxyとしてhttp://127.0.0.1:800/gitlabのコンテンツを取得する。この時、8000版ポートはFirewallなどで外から見えないようにしておくこと。

apacheのconfの設定としてはこれで以上だが、このまま実行するとエラーが発生しつなげない場合がある。

(13)Permission denied: proxy: HTTPS: attempt to connect to 127.0.0.1:4443 (*) failed

原因はconnectionを貼る権限がなくて接続に失敗したよ、っといったもの。以下のコマンドを実行することで接続できるようになる。

setsebool httpd_can_network_connect 1
setsebool -P httpd_can_network_connect 1

1つ目は現在の状態において値を変更する。ただし、再起動をすると状態が戻る。状態を恒久的にするには-Pをつけることで再起動後も設定を反映するこができる。

設定は以上になる。あとはhttpdとgitlabを開始し初期設定等々を行えばいい。

まだ最適化するところがある。が、ひとまずここらへんで。

以下、参考にしたサイト。