随着数据泄露问题日益严重和大模型的快速发展,越来越多的公司将研发环境迁移至内网。而由于网络限制或安全策略,直接访问外部资源(如Go模块仓库)可能会受到限制。这就需要我们在公司内网中搭建一个离线的Go语言开发环境,以确保能够顺利地进行项目开发。
对于整个公司来说nexus可能是更好的选择。作为开发人员在我司实际使用中却感觉诸多不便,其中依赖的缺失就是一大问题,即使可以手动导包,往往直接依赖和间接依赖的手动导入也非常繁琐,需要先到外网将所有依赖下载,然后再到内网一个个手动导入。既然在外网已经下载了需要的依赖,那么直接使用外网的依赖制作内网无需再导入依赖的Go环境是不是可以呢。本文将以此来展开演示。
鉴于当前大多数应用程序都采用Docker进行部署,本文将主要以Docker的形式演示如何在公司内网中创建一个离线的Go语言开发环境。我们将介绍所需的工具、配置步骤以及注意事项。希望本文能为您在公司内网中搭建Go语言离线环境提供参考。
下载Golang构建镜像
建议使用最新版本,不单性能提升,漏洞也会有修复
docker pull golang:1.24.2-alpine3.21
下载需要的依赖
- 外网可以建一个demo项目,将内网或者专网用的的
go.mod
在demo中写一份。外网配置代理,然后执行
go mod tidy
将所有的依赖下载到本地
- 切换到windows电脑
go-mod
目录上一级,linux:/root/go/pkg/
通过go env
查看GOMODCACHE
对应的值
cd C:\Users\Administrator\go\pkg\ # 切换到GOMODCACHE对应目录的上一级
离线镜像制作
编写Dockerfile
Dockerfile,联网环境,上一步获取镜像可不做,根据
# syntax=docker/dockerfile:1.4
ARG GO_VERSION=1.24.2
ARG ALPINE_VERSION=3.21
ARG PLATFORM=amd64
# 使用多平台构建
FROM --platform=${PLATFORM} golang:${GO_VERSION}-alpine${ALPINE_VERSION}
COPY mod /go/pkg/mod
ENV GOSUMDB=off
# 下一行按实际配置,也可以不配置
# ENV GOPROXY=http://nexus-pri.cloud.xxx.net/repository/public-go,direct
将Dockerfile放置于GOMODCACHE目录:
默认目录如下:
- linux:`/root/go/pkg/ `,
- Windows: `C:\Users\Administrator\go\pkg\`
执行构建镜像
- arm64
docker build -t golang-arm:1.24.2-alpine3.21 --platform=linux/arm64 .
- amd64/x86
docker build -t golang-amd:1.24.2-alpine3.21--platform=linux/amd64 .
内网使用
开发电脑
直接将外网mod
拷贝到开发环境电脑,然后配置
go env -w GOSUMDB=off
go env -w GOPROXY=http://nexus-pri.cloud.xxx.net/repository/public-go,direct
Dockerfile
# 多阶段构建
#构建一个 builder 镜像,目的是在其中编译出可执行文件mck
#构建时需要将此文件放到代码根目录下
FROM golang-amd:1.24.2-alpine3.21
ADD . /build/src
WORKDIR /build/src
#去掉了调试信息 -ldflags="-s -w" 以减小镜像尺寸
RUN go env -w GO111MODULE=on \
&& go env -w CGO_ENABLED=0 \
&& go env \
&& go mod tidy \
&& go build -ldflags="-s -w" -o ha/build/src/cmd/ha/main.go
FROM alpine:3.21
#更新软件源 使用挂载卷挂载 /etc/localtime:/etc/localtime做宿主机时间映射
#RUN apk update --no-cache && apk add --no-cache tzdata \
# && apk add --no-cache docker-cli
##设置本地时区,这样我们在日志里看到的是北京时间了
#ENV TZ Asia/Shanghai
WORKDIR /home
COPY --from=builder /build/src/config/config.yml /home/config/config.yml
COPY --from=builder /build/src/ha /home/ha
CMD ["./ha"]
EXPOSE 9680
评论区