update: #
git server(gitea,gitlab) 部署在linux环境中并且开启ssh 登录, git 代码中设置使用 ssh 的方式进行 clone/push/pull等操作,比如
git config --global url."[email protected]:".insteadOf "https://git.server.com/"
#~/.gitconfig
[url "[email protected]:"]
insteadOf = https://git.server.com/
一般处理内网私有仓库会遇到好几个的问题:
- https证书生成,信任问题
- ip:port转成域名问题
- private repository config issue
- CI issue
- …
以目前内网git仓库的地址为192.168.1.199:3000
,而且没有设置域名访问,最终要达到以git.server
域名访问,可通过 go get -v git.server/qnzs/helper
拉取内网包.
梳理出来的部署设置步骤如下:
host设置 #
- /etc/hosts
127.0.0.1 git.server
nginx代理以及证书设置 #
自签证书可通过以下命令生成
openssl req -x509 -newkey rsa:2048 -keyout myservice.key -out myservice.cert -days 1095 -nodes -subj "/CN=git.server"
在系统添加自签名证书信任支持
Linux参考How to install certificates for command line
macOS直接打开cert文件,并且找到git.server
名的证书,右键设置为always trust
配置nginx config文件
upstream gitea {
server 192.168.1.199:3000; #git(gitea)在内网的服务地址
}
server {
listen 80;
server_name git.server;
# 选择重定向到https去
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server{
listen 443 ssl;
server_name git.server;
#ssl on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 20m;
ssl_session_tickets on;
ssl_certificate /Users/jialinwu/go12/src/xo/myservice.cert; # 自签发的cert
ssl_certificate_key /Users/jialinwu/go12/src/xo/myservice.key; # 自生成的key
location / {
proxy_cache off;
if ($http_user_agent ~* '^go.*') {
return 200 "<!DOCTYPE html><html><head><meta content='$host$uri git http://$host$uri.git' name='go-import'></head></html>";
}
proxy_pass http://gitea;
}
}
go环境设置私有repos地址 #
这样go 不会请求goproxy地址,而是从本地dns服务中搜寻repos的信息
go env -w GOPRIVATE=git.server
go项目中设置go mod文件 #
根据实际tag版本编辑更新
require helper v1.0.0
replace helper v1.0.0 => git.server/qnzs/helper v1.0.0
CI环境正常也要支持如上的配置,还有更直接快速的解决方法,可以在git clone $helper 后,sed 替换git.server/qnzs/helper v1.0.0
成绝对路径,如
git clone http://192.168.1.199:3000/qnzs/helper.git /data/go/src/helper
sed -i ';s;git.server/qnzs/helper v1.0.0;/data/go/src/helper;g' go.mod
可能会遇到的问题错误提示: #
private repository 问题
verifying git.server/qnzs/[email protected]: git.server/qnzs/[email protected]: reading https://mirrors.aliyun.com/goproxy/sumdb/sum.golang.org/lookup/git$
server/qnzs/[email protected]: 410 Gone
证书信任问题
go get git.server/qnzs/gitproxy: unrecognized import path “git.server/qnzs/gitproxy” (https fetch: Get https://git.server/qnzs/gitproxy?go-get=1: x509: certifi
cate signed by unknown authority)
go.mod文件格式不对问题 很可能是 包名和=之间 少了空格,如
replace helper v1.0.0 =>git.server/qnzs/helper v1.0.0
正确应该为
replace helper v1.0.0 => git.server/qnzs/helper v1.0.0
usage: replace module/path [v1.2.3] => other/module v1.4
or replace module/path [v1.2.3] => ../local/directory
代理后meta信息不匹配问题 通过判断 $http_user_agent 设置meta信息解决(走https或者ssh)
?go-get=1: no go-import meta tags ())