定制go get的包路径

缘由

当工程使用gitlab作为代码管理工具,各个工程会按照群组分类,但代码中引入包名的时候却不希望路径带有群组,又或者gitlab域名带有端口号。这样go get下来的路径会不美观。如:

# 项目路径为
https://xxx.xxx.com:90/Gxxx/xxx

# Go get后go/src下的目录结构为
xxx.xxx.com:90/Gxxx/xxx

# 项目中却希望以如下方式引入包
xxx.xxx.com/xxx

⚠️注意:

若想要go get gitlab上的项目,需要在命令行执行如下命令。
git config --global url."git@xxx.xxx.com:".insteadOf "https://xxx.xxx.com:90/"
在~/.gitconfig文件中查看是否配置成功。

思路

利用反向代理将xxx.xxx.com:90/Gxxx映射到xxx.xxx.com上,本地只要go get xxx.xxx.com/xxx会去真实的路径上拉取代码。

实现

  1. 前置条件

    1. 阿里云服务器一台(centos)
    2. 服务器配置好go环境
    3. 执行go get github.com/denyu95/govanityurls
  2. 路径映射

    # 路径映射由govanityurls项目完成,启动govanityurls即可。(监听8080端口)
    1. 在root目录下创建govanityurls目录。
    2. 放入vanity.yaml配置文件。
    3. 使用Supervisord守护进程的工具启动govanityurls。
  3. 代理转发

    # 配置nginx代理转发 80端口-》8080端口
    1. https 需要申请证书
    2. 得到 xxx.xxx.pem 和 xxx.xxx.key 放到 /etc/nginx/ssl 目录下
    3. 启动nginx
  4. 配置文件

    vanity.yaml

    /gowechat:
    repo: https://github.com/xxx/gowechat
    /subscriptionserver:
    repo: https://xxx.xxx.com:90/xxx/subscriptionserver

    supervisord.d/govanityurls.ini

    [program:govanityurls]
    directory = /root/govanityurls
    command = /root/go/bin/govanityurls -host xxx.xxx.com
    autostart = true
    startsecs = 5
    autorestart = true
    startretries = 3
    user = root
    redirect_stderr = true
    stdout_logfile_maxbytes = 20MB
    stdout_logfile_backups = 20
    stopasgroup=false
    killasgroup=false
    stdout_logfile = /root/log/go.log

    nginx.conf

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

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

    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";
    }
    }

补充

团队需要维护vanity.yaml配置文件,需要不断补充项目映射关系。