golang go get 私有库解决方案

注意:go get 只支持 https协议的库路径 ‼️

前言

​ 在我们开发过程中会自己封装一些工具库,在某个项目中使用。但是如果有别的项目想使用你封装的库,那么此时你就需要将工具库封装为一个go module,给其它项目导入。一般公司内部的库是不对外开放的,这时候就需要搭建代理去拉取私有仓库

原理架构图

img

准备工作

nginx 搭建

​ 详细安装教程可以参考这篇:https://blog.csdn.net/t8116189520/article/details/81909574

nginx 配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
	server {
		listen 443 ssl;
		server_name xxx.xxx.com;

		ssl_certificate           /etc/nginx/ssl/xxx.pem;
		ssl_certificate_key       /etc/nginx/ssl/xxx.key;

		# ssl验证相关配置
		ssl_session_timeout  5m;    # 缓存有效期
		ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    # 安全链接可选的加密协议
		ssl_prefer_server_ciphers on;   # 使用服务器端的首选算法

		location / {
			proxy_pass http://127.0.0.1:8080;
			proxy_redirect off;
			proxy_set_header Host $host;
		        proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

			proxy_http_version 1.1;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection "upgrade";
		}
	}
     }

govanityurls 配置

Use a custom domain in your Go import path

1
go install github.com/Lucareful/[email protected]   # 我封装了一些,匹配全路由

编辑 vanity.yaml文件

1
2
3
4
# 代理路由匹配的前缀
/xxx/xxx:
      repo: https://真实的私有仓库地址
      vsc: git

设置 govanityurls 为守护进程启动

systemd
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 新建服务文件 /etc/systemd/system/vanity.service

# 文件内容
[Unit]
Description= Custom domain in your Go import path
After=network.target

[Service]
Type=simple
WorkingDirectory=/root/govanityurls/ 						# vanity.yaml 文件存放的路径
ExecStart=/home/gopath/bin/govanityurls -host xxxx.xxx.com(nginx代理的域名)
Restart=always

[Install]
WantedBy=multi-user.target
supervisord
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[program:govanityurls]
directory = /root/govanityurls							# vanity.yaml 文件存放的路径
command = /home/gopath/bin/govanityurls -host xxxx.xxx.com(nginx代理的域名)
autostart = true
startsecs = 5
autorestart = true
startretries = 3
user = root
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
sweightasgroup=false
killasgroup=false
stdout_logfile = /root/log/go.log

总结

​ 上面的架构设计中参照了tonybai小厂内部私有go模块拉取方案,我在此省略了了goproxy的搭建,只为私有库搭建了一个代理,公有库从公共module获取即可。

img

参考资料