【Gitlab】ApacheとNginxを共存させ、特定のドメインかつ特定のポートの場合のみNginx→Gitlabにアクセスさせる方法
これやりたい人絶対多いはずなんだけどググり方が悪いのか全然同じ人がいなかった。
なおかつネットにある情報があまりにバラバラすぎて本気でGit本を買おうかと思ったけどヒイヒイ言いながら何とか実現できた。
まずは
通知メールの為にGitlab専用Gmailアカウント開設しておく
これは適当に。
ここからが本題
環境
サーバー:AWSのEC2(centos7)
状況:Apache80ポートでEC2のIPアドレスにアクセスすると普通にページが見れる。
とまあいわゆる良くあるごく普通のサーバー環境。
サーバー構成イメージ
多分これが肝。これをイメージ出来ないと構築は不可です。
------------------------------------------------------------------------------------
| クライアント |
---------------------------------------------------------------
↓80ポート ↓7000ポート
Apache → Nginx(unicorn 8001ポート)
9000ポートで転送 ↓
リバースプロキシ GitLab
------------------------------------------------------------------------------------
※9000,7000,8001ポートというのは完全に任意。
使ってないポートを適当な番号で指定してよい。
アクセスしたときの流れ
①httpd.conf
→ /var/www/git.xxxxx/index.html にアクセスされるとApacheで表示されて、
そのままリバースプロキシでポート番号を変更してアクセス。
つまり9000ポートに転送するイメージ。
<VirtualHost *:80>
ServerName git.xxxxx
DocumentRoot /var/www/git.xxxxx
ProxyRequests off
ProxyPass / http://git.xxx.xxx:9000
ProxyPassReverse / http://git.xx.xxxx:9000
(略
②Nginxで9000ポートをListenして、Nginxで表示→7000ポートでGitlab管理画面が表示。
(GitlabがインストールされてないとNginxのドキュメントルートが表示される。)
念のためNginxのメモ↓ 困ったら確認。
・基本設定
/etc/nginx/nginx.conf
→ポート:9000、server localhost (ここは自分なので変えない)
・vhost設定
/etc/nginx/conf.d/default.conf
→ドキュメントルート指定 /usr/share/nginx/html/ (デフォルトのまま)
・Nginxのテスト
nginx -t
・Nginxログ
/var/log/nginx/error.log
設定開始
■Gitlabポート解放
AWSログイン→対象のEC2のセキュリティグループ→インバウンド
で7000を許可。(AWSじゃないならiptablesで解放)
■Gitlab設定
① /etc/gitlab/gitlab.rb
→httpポート番号を設定する。
external_url 'http://xxx.xx.jp:7000'とかで待ちうけポートを記載。
② /var/opt/gitlab/nginx/conf/gitlab-http.conf
→gitlabのまちうけ7000をlistenする。
→server_name git.xxxxxxxにする。
※gitlab-ctl reconfigure すると一部リセットされるので注意。
③ /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
→ここも上記と同様に変更。メールアドレス等もここに記載。
今回は取得しておいたgmail経由で送ることにした。
time_zone: 'Asia/Tokyo'
email_from: xxxx@gmail.com
email_display_name: xxxxGitlabチーム(好きなように記載)
email_reply_to: xxxx@gmail.com
host: git.xxxx
port: 7000
※gitlab-ctl reconfigure すると一部リセットされるので注意。
④ /var/opt/gitlab/gitlab-rails/etc/unicorn.rb
あまり理解していないけどこのunicornというのがGitlabの接続に必要で、これのポート番号が競合していたので変更した。
今回は8888が競合してたのを8001にしてみたらうまくいった。
こんな風に↓
listen "127.0.0.1:8001"
■Gitlab設定反映
gitlab-ctl reconfigre (設定を読み込む。これやると②とかのファイルが多分初期に戻るのでまたやる必要あり。)
gitlab-ctl restart (再起動後に少し時間かかるので502になっても慌てない)
その他
・GitLab のデータ場所
デフォルトの状態では、以下の場所にデータが格納される。けど多分みることない。
/opt/gitlab
/var/opt/gitlab
・GitLab のログ
/var/log/gitlab/nginx/gitlab_access.log
/var/log/gitlab/nginx/gitlab_error.log
/var/log/gitlab/nginx/current
/var/log/gitlab/gitlab-workhorse/current
・unicornのログ
/var/log/gitlab/unicorn
htpasswdファイルを作成
/var/opt/gitlab/nginx/conf/htpasswd
設定ファイル /etc/gitlab/gitlab.rb に下記を記載。
nginx['custom_gitlab_server_config'] = "auth_basic 'Restricted';\n auth_basic_user_file htpasswd;\n"
■なんかうまくいかないときの覚書
絶対またやる時詰まるのでメモ
基本的にうまくいかないのはポート番号が被ってることが多かった。
既に使われてると思っていいのは
80
8080
8000
8888(追記:もしかしたらこれは使われてないかも。。。)
とかくらい?
自分はこのうち8080,8000,8888を使ってしまい気づいたが他の人は全然つまらないのだろうか。。
ネットでもなかなか出てこなかったので数日潰れました。
んでポート番号はGitlab(今回は7000)だけあける必要あり。
でもNginxとかunicornとかは別に自分自身だから外からじゃないから開ける必要はないという理解。
※もちろん80はあけるよ!てか開けてるよね。。
■CSS等の場所
/opt/gitlab/embedded/service/gitlab-rails/public/assets
ssh接続できないときは・・・
たぶんsshd_configで既にポート番号を変えていると思うので、
(変えてなかったらやらなくていいかも)
それに合わせてssh_configのポート番号も有効にしつつ指定のものに変更してやる。
日本語化パッチ
GitHubクローン「GitLab」を日本語化して使う方法 - Qiita
完成
■管理画面
http://git.xxx.xxx:7000/
■設定
テストプロジェクトを作成
http://git.xxxxxxxx:7000/ユーザー名/myhelloworld.git
centosで運用する場合
git clone ssh://git@localhost:xx22/ユーザー名/myhelloworld.git
違うサーバーからなら
git clone ssh://git@IPアドレス:xx22/ユーザー名/myhelloworld.git
PCからGUI設定して運用する場合(Gittortoiseとか)
ssh://git.xxxxxxxx:xx22/ユーザー名/myhelloworld.git
ポート番号つけるのいやなら下記をいじるらしいけどCSSがどうしても崩れるので検証途中。
1.
/opt/gitlab/embedded/service/gitlab-rails/config/application.rb
config.relative_url_root = "/gitlab" のコメントアウトを外す
2.
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
relative_url_root: /gitlab とかにする。
3.
/var/opt/gitlab/gitlab-rails/etc/unicorn.rb
ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab" を最終行に追記する
4.
/var/opt/gitlab/gitlab-shell/config.yml
gitlab_url: "http://127.0.0.1:8888" を
gitlab_url: "http://127.0.0.1:8888/gitlab" に変更する
5.
gitlabを再起動する
gitlab-ctl restart
Last.
/var/log/gitlab/nginx/gitlab_error.log や
/var/log/gitlab/unicorn/unicorn_stderr.logにエラーが出力されていないことを確認