WebサーバにGitLabを入れてみた
バージョン等
- CentOS 7.2
- GitLab Community Edition 8.6.5
エラーと対処
PostgreSQL
一度GitLabを起動,停止してからsudo gitlab-ctl reconfigure
を実行すると
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
と出て失敗していた.
postgresqlのソケットが変に残ってしまっていたらしい.
色々調べたが解決しなかった.参考,参考2
妥協策:/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アカウントを作成し,それで送るようにした.参考
リバースプロキシとそれによる問題と対処
apache起動済みのサーバで動かす
gitlabをnginxのサブディレクトリ運用にし,apacheでリバースプロキシする.参考1 参考2
外向きにポートを余分に開きたくないため,external_url
は以下のようにした.
external_url 'http://127.0.0.1:8080/gitlab'
表示されるURLやSSH Hostがおかしい
git clone
等のために表示されるURLやSSH Hostに,/etc/gitlab/gitlab.rbで設定したexternal_urlがそのまま出てきている.
別の変数として定義し,対応する部分に設定する.参考
SSH
表示は成功
gitlab_rails['gitlab_ssh_host'] = 'example.com'
ssh_host: <%= @gitlab_ssh_host %>
しかし,SSHからのgit clone
などができない.
GitLab: API is not accessible
fatal: Could not read from remote repository.
解決:サブディレクトリ設定で行っていた,以下の変更点は必要なかった
gitlab_url: "<%= @api_url %>" # こっちが正解
↓
gitlab_url: "<%= @api_url %>/gitlab" # 必要なかった
このせいで,gitlab-shell-congig.ymlを見てみるとexample.com/gitlab/gitlab
になっていた.これを修正するとSSH越しのgit clone
などができた.
おそらくバージョンの違いのせい.
HTTP
以下のように設定してみた.
gitlab_rails['gitlab_repo_url'] = 'example.com'
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のものに合わせます.
gitlab_rails['gitlab_host'] = 'example.com'
gitlab_rails['gitlab_port'] = 80
# デフォルトのまま
host: <%= gitlab_host %>
port: <%= gitlab_port %>
これでHTTPのURL表示も,アバターの表示もうまくいった.こちらのようにassetsのリバースプロキシも必要なさそう.