GitLab搭建並接入自建Nginx

  • 2019 年 11 月 7 日
  • 筆記

前言

我一生的文章都會放在這裡,我的部落格,我希望每一行程式碼,每一段文字都能幫助你。https://github.com/CrazyCodes/Blog

大家好,我是CrazyCodes,這篇文章的標題有些嚴肅了,算是非常單純的教學文,願可以幫助到有需要的人。

GitLab

GitLab與GitHub和碼雲一樣,都是以web形式存在的在線管理Git倉庫並且都擁有優雅的可視化操作頁面。當然這篇文章咱們不介紹這沒用的。

因為GitLab/Hub或者碼雲對免費用戶不是夠友好,無論是在庫的容量或者協作人員都有些許限制,GitHub的提交速度對中國程式設計師更是慢如蝸牛。

網路上關於GitLab安裝的文章並不少,因為GitLab在安裝過程中會默認再安裝一個Nginx,這必然會與已有Nginx衝突,寫這篇文章主要的目的還是對已存在Nginx服務的伺服器如何配置GitLab做一個指導。

安裝

伺服器版本:(阿里雲) CentOS Linux release 7.6.1810 GitLab版本:12.4.0-ee Nginx版本:nginx/1.17.0

基本都算是比較新的版本了,廢話不多說,我們開始吧!

第一步:進入GitLab官網

https://about.gitlab.com/install/

第二步: 執行一大堆牛逼的命令

sudo yum install -y curl policycoreutils-python openssh-server  sudo systemctl enable sshd  sudo systemctl start sshd  sudo firewall-cmd --permanent --add-service=http  sudo firewall-cmd --permanent --add-service=https  sudo systemctl reload firewalld

第三步:下載GitLab安裝文件

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

第四步:安裝

sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ee

EXTERNAL_URL 這個配置就默認好了,畢竟咱們也不用GitLab自帶的Nginx

第五步:完成

就是這麼簡單,安裝完成了。第一次訪問的時候會要求重新設置密碼。用戶名默認為 root

配置

安裝完成後,需要對現有的GitLab做一些配置更改。

官方文檔:https://docs.gitlab.com/12.4/omnibus/settings/nginx.html#using-a-non-bundled-web-server

禁用NGINX

在文件

/etc/gitlab/gitlab.rb

下,將配置設置為false

nginx['enable'] = false

設置所屬用戶

需要將自建Nginx的所屬用戶加入到配置內 在文件

/etc/gitlab/gitlab.rb

下,將配置設置為 www-data

對於Debian/Ubuntu,默認用戶是www-data 對於RHEL/CentOS,NGINX用戶是nginx

當然如果安裝nginx未指定所屬用戶,也有可能會是root。當然可以通過命令

cat /usr/local/nginx/conf/nginx.conf | grep user

查看所屬用戶,實際就在配置文件里寫著

user  root;      #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '      #                  '"$http_user_agent" "$http_x_forwarded_for"';

回到正題,修改配置為root(剛剛講過了,為啥是root)

web_server['external_users'] = ['root']

這個設置是一個數組,可以添加多個用戶。設置好後運行命令

sudo gitlab-ctl reconfigure

配置已生效

添加虛擬主機

GitLab已經為開發者準備好相應的vhost文件。可以通過訪問下方鏈接獲取 https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server 配置完成後執行

nginx -s reload

既完成,原理很簡單,其他配置我也不是太明白,大概則是使用反向代理轉發了一下請求這樣子。

問題

在最新版本中,如果按照上述方式配置,可能會在提交過程中出現422錯誤,具體原因不清楚,我遇到這個問題後配置了ssl,解決了這個問題。

致謝

大多都是官方的文字,可能只是不太好找,所以網路上經常出現這個問題,但都無解,所以寫這麼個水文,幫助需要的人,當然,提倡還是去看官網的文檔。

感謝你看到這裡,希望本篇文章可以幫到你。