GitLab8.6 入れてみた

# WebサーバにGitLabを入れてみた
主に参考したところ：[公式](https://about.gitlab.com/),[他](http://to-developer.com/blog/?p=1726)  

# バージョン等
- CentOS 7.2
- GitLab Community Edition 8.6.5

# エラーと対処
## PostgreSQL
一度GitLabを起動，停止してから`sudo gitlab-ctl reconfigure`を実行すると

```shell-session:shell
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
  ```
と出て失敗していた．  
postgresqlのソケットが変に残ってしまっていたらしい．
色々調べたが解決しなかった．[参考](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/738)，[参考2](https://github.com/gitlabhq/gitlabhq/issues/9766)

妥協策：/etc/gitlab/gitlab.rb内でPostgreSQLのパラメータをなにか変更してから`gitlab-ctl reconfigure`を実行する．すると，ちゃんとPostgreSQLを終了して設定変更しようと努めてくれるらしい． 
もう少しちゃんとした解決方法があったら教えて下さい．

## いつまで経っても502 Bad Gateway
`sudo gitlab-ctl start`として対象のポートをブラウザで開いても，GitLabの502 Bad Gatewayの画面  
解決：ポートが使用中だった．他にも設定に不備があると502 Bad Gatewayで止まる様子．

## 通知メールの送信
Webサーバであまりメール送信などをさせたくなかった．
Gmailアカウントを作成し，それで送るようにした．[参考](http://h-otter.hatenablog.jp/entry/2015/07/31/220511)

# リバースプロキシとそれによる問題と対処
## apache起動済みのサーバで動かす
gitlabをnginxのサブディレクトリ運用にし，apacheでリバースプロキシする．[参考1](http://urashita.com/archives/3074) [参考2](http://qiita.com/tnamao/items/a7bb1ca868b594eaf788)
外向きにポートを余分に開きたくないため，`external_url`は以下のようにした．

```rb:/etc/gitlab/gitlab.rb
external_url 'http://127.0.0.1:8080/gitlab'
```
## 表示されるURLやSSH Hostがおかしい
`git clone`等のために表示されるURLやSSH Hostに，/etc/gitlab/gitlab.rbで設定したexternal_urlがそのまま出てきている．
別の変数として定義し，対応する部分に設定する．[参考](http://biokids.org/?%A4%C9%A4%D6%A4%AA%2F%B3%AB%C8%AF%A4%B7%A4%E8%A4%A6%A1%AA%2FGitLab%207.3.2%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB)

### SSH
表示は成功

```rb:/etc/gitlab/gitlab.rb
gitlab_rails['gitlab_ssh_host'] = 'example.com'
```
```erb:/opt/gitlab/embedded/cookbooks/gitlab/templates/default/gitlab.yml.erb
ssh_host: <%= @gitlab_ssh_host %>
```
しかし，SSHからの`git clone`などができない．

```shell-session:shell
GitLab: API is not accessible
fatal: Could not read from remote repository.
```
解決：サブディレクトリ設定で行っていた，以下の変更点は必要なかった

```erb:/opt/gitlab/embedded/cookbooks/gitlab/templates/default/gitlab-shell-config.yml.erb
gitlab_url: "<%= @api_url %>" # こっちが正解
↓
gitlab_url: "<%= @api_url %>/gitlab" # 必要なかった
```
このせいで，gitlab-shell-congig.ymlを見てみると`example.com/gitlab/gitlab`になっていた．これを修正するとSSH越しの`git clone`などができた．  
おそらくバージョンの違いのせい．

### HTTP
以下のように設定してみた．

```rb:/etc/gitlab/gitlab.rb
gitlab_rails['gitlab_repo_url'] = 'example.com'
```
```erb:/opt/gitlab/embedded/cookbooks/gitlab/templates/default/gitlab.yml.erb
url: <%= @gitlab_repo_url %>
```
しかし，表示は変わらず，さらにassets関係やアバター画像も表示できていなかった．どちらも参照しているURLが`127.0.0.1:8080`となっていたため，それを探す．

解決：色々試してみた結果，/var/opt/gitlab/gitlab-rails/etc/gitlab.ymlの`host`と`port`を参照しているらしいことが判明．
  ~~今後も`gitlab-ctl reconfigure`をする可能性はあるので，templateから変更．変更点は以下の通り．~~
  4/28追記：/opt/gitlab/embedded/cookbooks/gitlab/templates/default/gitlab.yml.erbにはここは編集しても消えちゃうよ！って書かれていました．なので，/etc/gitlab/gitlab.rbで指定する名前をgitlab.yml.erbのものに合わせます．

```erb:/etc/gitlab/gitlab.rb
gitlab_rails['gitlab_host'] = 'example.com'
gitlab_rails['gitlab_port'] = 80
```
```erb:/opt/gitlab/embedded/cookbooks/gitlab/templates/default/gitlab.yml.erb
# デフォルトのまま
host: <%= gitlab_host %>
port: <%= gitlab_port %>
```
これでHTTPのURL表示も，アバターの表示もうまくいった．[こちら](http://www.dracula.mydns.jp/blog/?p=367)のようにassetsのリバースプロキシも必要なさそう．