使用 goproxy 搭建 Go 模块代理服务器
出于多种原因,在使用 Go 语言编写应用时,可能会遇到下载第三方模块很慢甚至无法下载的问题。为此,可自建一个 Go 模块的代理服务器,加速访问。
搭建 goproxy 服务器 🔗
前置条件 🔗
goproxy
在运行时,依赖来 go
和 git
可执行文件。因此,需要安装 Go 和 Git。
安装 Go 🔗
对于 Go, 可参考它的官网页面 《Download and install》,在服务器下载和安装 Go。以下是命令行的示例(按需修改版本号和平台):
wget -O /tmp/go.tar.gz https://go.dev/dl/go1.24.2.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf /tmp/go.tar.gz
ln -s /usr/local/go/bin/go /usr/local/bin/go
安装 Git 🔗
在 Ubuntu 上,可使用 apt-get
安装:
apt-get install -y git-core
下载 goproxy 🔗
在 goproxy/goproxy 项目主页的 Releases 页面下载 goproxy 的可执行文件。将其加入到系统路径中(比如 /usr/local/bin
目录)。
运行 goproxy 🔗
运行 goproxy 的命令为:
goproxy server --address 127.0.0.1:8085 --cacher-dir /tmp/goproxy-cache --proxied-sumdbs "sum.golang.org"
注意:上面的命令设置了 --proxied-sumdbs
;如果不设置,那么 go
命令会使用默认的 https://sum.golang.org
作为 GOSUMDB,而访问这个地址可能也会遇到遇到下载第三方模块很慢甚至无法下载的问题。
创建 Systemd 服务文件 🔗
为了将 Goproxy 作为系统服务运行,可创建文件 /lib/systemd/system/goproxy.service
文件,内容如下:
[Unit]
Description=goproxy
After=network.target network-online.target
Requires=network-online.target
[Service]
Environment=GOMODCACHE=/tmp/goproxy-gomodcache
DynamicUser=true
ExecStart=/usr/local/bin/goproxy server --address 127.0.0.1:8085 --cacher-dir /tmp/goproxy-cache --proxied-sumdbs "sum.golang.org"
TimeoutStopSec=5s
[Install]
WantedBy=multi-user.target
此时启动服务,goproxy 启动后就会在 8085
端口监听请求,但从其他服务器是无法访问的。因为接下来要使用反向代理将服务暴露给外部。
服务器并配置HTTPS,将 goproxy 暴露给外部。
配置反向代理 🔗
使用 Nginx、Caddy 等工具可搭建反向代理服务器。为了配置站点的 SSL 证书,还需要配置好域名记录。以 Caddy 服务器为例,只需要添加如下配置:
replace-me-with-domain {
reverse_proxy localhost:8085
}
其中 replace-me-with-domain
是外部访问服务器的域名。 Caddy 服务器会自动地申请和续订 SSL 证书。
使用 Go 模块代理服务器 🔗
设置 GOPROXY
环境变量 🔗
在使用 goproxy 服务器的开发机上,全局性地修改 GOPROXY
环境变量的值。如下所示(需将 replace-me-with-domain
替换为真实域名):
go env -w GOPROXY=https://replace-me-with-domain,direct
在 MacOS 上,以上命令将 GOPROXY
环境变量的值写入 ~/Library/Application\ Support/go/env
文件中。其内容可能如下:
GO111MODULE=on
GOPROXY=https://replace-me-with-domain,direct
下载模块 🔗
在配置好 GOPROXY
环境变量后,使用 go get
命令就会从自建的服务器中下载模块,并使用它校验模块。