背景
因為go mod的各種限制作箍,使用gitlab私有庫會有各種限制和問題浩销,最后還是需要通過https訪問账磺。所以最后痛定思痛和屎,把內(nèi)部gitlab給從http切換到了https
目標(biāo)是實現(xiàn)能夠愉快的:
go get -u git.xx.com/xx/xx
環(huán)境說明
- 公司原本的gitlab是搭建在內(nèi)部局域網(wǎng)里的介汹,所以用了一個公網(wǎng)不可能訪問到的域名gitlab.xx.com袱蚓。所以這次的切換躏升,也需要把gitlab的域名配置切換到公司證書有效的域名下:git.our-compayname.com
- 公司的證書是*.our-companyname.com的泛域名證書啤斗,所以可以用來給gitlab做證書跃巡。只需要在內(nèi)部局域網(wǎng)設(shè)置好ip和域名的對應(yīng)位置即可败明∫壕ィ可以在使用公司證書的情況下歌殃,又保證只有內(nèi)部網(wǎng)絡(luò)可以訪問乔妈。
- 免費版本的gitlab只支持二級目錄go get,既 git.xx.com/xx/xx氓皱。但是也可以用一個比較土的方法規(guī)避這個問題路召,到三級目錄的時候,module包名要寫成git.xx.com/xx/xx/xx.git
go get -u git.xx.com/xx/xx/xx.git
就是包名和引用路徑的名字看著特別一言難盡波材,別的沒問題
- gitlab是通過docker-compose搭建的股淡,所以改配置也在docker-compose里
配置步驟
- 修改docker-compose.yml配置
version: '3.3'
services:
web:
image: 'gitlab/gitlab-ee:latest'
restart: always
hostname: 'git.xx.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://git.xx.com'
nginx['enable'] = true
nginx['redirect_http_to_https'] = true
letsencrypt['enable'] = true
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
說明:
- 把https啟動, nginx['enable'] = true
- 注意端口80廷区,443唯灵,22都要開放。22是給ssh用的
- 證書的話隙轻,如果是阿里云那邊申請的埠帕,給的是pem的,把pem后綴名改成crt就行了
- 把證書根據(jù)配置的域名放到/etc/gitlab/ssl目錄下
git.xx.com.crt git.xx.com.key
- 更新鏡像
docker-compose up -d
- gitlab啟動需要比較長的一個時間玖绿。等啟動后敛瓷,進入一個舊的項目,就會發(fā)現(xiàn)镰矿,git clone的地址變了
git@gitlab.xx.com:xx/xx/dataserver.git => git@git.xx.com:xx/xx/dataserver.git
- 切換本地庫的git地址
# 查看當(dāng)前地址
git config remote.origin.url
# 結(jié)果
git@gitlab.xx.com:xx/xx/dataserver.git
# 切換到新地址
git config remote.origin.url git@git.xx.com:xx/xx/dataserver.git
# 查看當(dāng)前地址
git config remote.origin.url
# 結(jié)果
git@git.xx.com:xx/xx/dataserver.git
- 引用本地私有庫,把GOPRIVATE設(shè)置好就行啦
export GOPROXY=https://goproxy.cn
export GOPRIVATE=git.xx.com
然后就能各種愉快的go get了