golang go get 私有库解决方案#
注意:go get 只支持 https协议的库路径 ‼️
在我们开发过程中会自己封装一些工具库,在某个项目中使用。但是如果有别的项目想使用你封装的库,那么此时你就需要将工具库封装为一个go module
,给其它项目导入。一般公司内部的库是不对外开放的,这时候就需要搭建代理去拉取私有仓库
原理架构图#
准备工作#
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";
}
}
}
|
Use a custom domain in your Go import path
编辑 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获取即可。
参考资料#