はじめに
個人で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.rb
のexternal_url
をFQDN,すなわちdomain.com
にする.とあるがこれでは内包されたnginxのserver_name
がexternal_url
で指定したドメインで待ち受けることになってしまい自分の環境では不可能だった
.
ただ,これだけで言えばexternal_url
の値をローカルIPにでもしてしまえば一応は繋がるようになる.が,後述するがexternal_url
に設定した値はForkする際やコミット後のページ遷移時に利用されるため,ここをローカルIPにすると外部の人間が触れなくなってしまう.
解決法
今回取った解決法が以下
- いったんは
gitlab.rb
にてexternal_url
をdomain.com
にしてしまう. - ターミナル上で,
gitlab-ctl reconfigure
して構成. - 構成後に,直接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が走るため,都度上記手順が必要.