LoginSignup
2
2

More than 1 year has passed since last update.

gitlabをリバースプロキシ下で運用する場合のURL問題の解決

Posted at

はじめに

個人でgitサーバを運用していたのですがリポジトリ作成をするためにコンソールアクセスしたり,そもそもリポジトリの場所忘れたりしちゃうので思い切ってgitlabを運用しようとした際に,かれこれ1か月(実時間1週間くらい?)くらい悪戦苦闘したので自分の中で納得行くとこまでいけた今,一種の手順をまとめておこう!という趣旨の記事です.

解説しないこと

  • gitlabの入れ方(入れ方は公式や有志の記事がいっぱいある)
  • nginxの入れ方(同上)

事前環境

  • サーバソフトはすべてnginx
  • リバースプロキシはRTX1200(YAMAHAのL3スイッチです)下でNAPTを介してグローバルIPで待ち受けている
  • 外と直接つながっているのはリバースプロキシのみ
  • ドメインはすべてこのリバースプロキシを指している
  • SSL認証はリバースプロキシどまり(内部はhttp)
  • git, nextcloud, web用とそれぞれのサーバがリバースプロキシを稼働させているPCで稼働している.
  • gitlabへのドメインは仮に記事中では,domain.comとする

gitlab目標環境

  • gitlabで動かすnginxはgitlab内包のものを使う
  • リバースプロキシはaptでインストールしたnginx
  • gitlabにはドメインで外部からちゃんとアクセスできる
  • forkURLとかcloneURLとかちゃんとドメインURLになるようにする
  • あとはデフォルト

問題

リバースプロキシ配下で運用することについて

リバースプロキシ下でのgitlab運用方法を調べると,よくgitlab.rbexternal_urlをFQDN,すなわちdomain.comにする.とあるがこれでは内包されたnginxのserver_nameexternal_urlで指定したドメインで待ち受けることになってしまい自分の環境では不可能だった

ただ,これだけで言えばexternal_urlの値をローカルIPにでもしてしまえば一応は繋がるようになる.が,後述するがexternal_urlに設定した値はForkする際やコミット後のページ遷移時に利用されるため,ここをローカルIPにすると外部の人間が触れなくなってしまう.

解決法

今回取った解決法が以下

  1. いったんはgitlab.rbにてexternal_urldomain.comにしてしまう.
  2. ターミナル上で,gitlab-ctl reconfigureして構成.
  3. 構成後に,直接gitlabが利用しているnginxのconfファイルを弄ってserver_nameをローカルIPに変えてしまう

いわれてみれば...という内容ではあるが,3で設定した内容はgitlab-ctl reconfigureするたびにクリーンアップされてしまうため,仮にgitlabに構成変更があった場合は3を毎回行わなければならないという手間がある.
が,

  • reconfigureは明確にユーザが意思を持って行っている
  • reconfigureはそう頻繁には行わない
    ので今回は問題なしと判断しました.ただしupt upgradeで発生する場合あり.しっかりログでreconfigureしているのがわかるので今回はスルー.

手順

gitlab.rbの編集

/etc/gitlab/gitlab.rbを編集する.

32行目: external_url `domain.com`

再構成

ターミナル上で,

gitlab-ctl reconfigure

gitlab-http.confの編集

/var/opt/gitlab/nginx/conf/gitlab-http.confを編集する.

35行目: listen *:your port;
38行目: server_name your localIP:your port;
例:
listen *:11111;
server_name  192.168.23.2:11111;

gitlab再起動

ターミナル上で,

gitlab-ctl restart

proxyサーバの設定

リダイレクトなどで,gitlab-http.confで設定したserver_nameに飛ばせばおk.

 upstream test {
  2   server 192.168.23.2:111111 fail_timeout=0;
  3 }
 
 11 server {
 12   listen 443 ssl;
 13   server_name domain.com;
 14   server_tokens off;
 15
 16   client_max_body_size 10g;
 17
 18   access_log /var/log/nginx/gitlab_access.log;
 19   error_log  /var/log/nginx/gitlab_error.log;
 20
 #############
 #
 #SSLの証明書の場所とか...
 #
 #############
 26   location / {
 27     gzip off;
 28
 29     proxy_read_timeout     300;
 30     proxy_connect_timeout  300;
 31     proxy_redirect         off;
 32
 33     proxy_set_header  Host              $http_host;
 34     proxy_set_header  X-Real-IP         $remote_addr;
 35     proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
 36     proxy_set_header  X-Forwarded-Proto https;
 37     proxy_set_header  X-Frame-Options   SAMEORIGIN;
 38                                                                                                                                         
 39     proxy_pass  http://test;
 40 }
 41 }
 

おわりに

この方法の場合,apt upgradeなどでgitlabの更新が入った場合,自動でreconfigureが走るため,都度上記手順が必要.

2
2
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
2