admin管理员组

文章数量:1031308

【Golang】企业内网/专网离线搭建Go环境实战指南

背景说明

随着数据泄露问题日益严重和大模型的快速发展,越来越多的公司将研发环境迁移至内网甚至专网。而由于网络限制或安全策略,直接访问外部资源(如Go模块仓库)可能会受到限制。这就需要我们在公司内网中搭建一个离线的Go语言开发环境,以确保能够顺利地进行项目开发。

对于整个公司来说nexus可能是更好的选择。作为开发人员在我司实际使用中却感觉诸多不便,其中依赖的缺失就是一大问题,即使可以手动导包,往往直接依赖和间接依赖的手动导入也非常繁琐,需要先到外网将所有依赖下载,然后再到内网一个个手动导入。既然在外网已经下载了需要的依赖,那么直接使用外网的依赖制作内网无需再导入依赖的Go环境是不是可以呢。本文将以此来展开演示。

鉴于当前大多数应用程序都采用Docker进行部署,本文将主要以Docker的形式演示如何在公司内网中创建一个离线的Go语言开发环境。我们将介绍所需的工具、配置步骤以及注意事项。希望本文能为您在公司内网中搭建Go语言离线环境提供参考。

下载Golang构建镜像

建议使用最新版本,不单性能提升,漏洞也会有修复

代码语言:javascript代码运行次数:0运行复制
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对应的值
代码语言:javascript代码运行次数:0运行复制
cd C:\Users\Administrator\go\pkg\ # 切换到GOMODCACHE对应目录的上一级

离线镜像制作

编写Dockerfile

Dockerfile,联网环境,上一步获取镜像可不做,根据

代码语言:javascript代码运行次数:0运行复制
# 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=,direct

将Dockerfile放置于GOMODCACHE目录:

默认目录如下:

  • linux:/root/go/pkg/
  • Windows: C:\Users\Administrator\go\pkg\

执行构建镜像

  • arm64
代码语言:javascript代码运行次数:0运行复制
docker build -t golang-arm:1.24.2-alpine3.21 --platform=linux/arm64 .
  • amd64/x86
代码语言:javascript代码运行次数:0运行复制
docker build -t golang-amd:1.24.2-alpine3.21--platform=linux/amd64 .

内网使用

开发电脑

直接将外网mod拷贝到开发环境电脑,然后配置

代码语言:javascript代码运行次数:0运行复制
go env -w GOSUMDB=off
go env -w GOPROXY=,direct

Dockerfile

代码语言:javascript代码运行次数:0运行复制
# 多阶段构建
#构建一个 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

总结

本文介绍了在内网环境中搭建离线Go开发环境的方案。为应对网络限制导致的依赖管理问题,使用Docker在外网下载所有依赖后,制作包含这些依赖的镜像,迁移到内网使用。通过多平台构建(如amd64和arm64)确保兼容性,利用Docker的镜像机制快速搭建环境,提升开发效率。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-09,如有侵权请联系 cloudcommunity@tencent 删除go企业镜像开发环境配置

【Golang】企业内网/专网离线搭建Go环境实战指南

背景说明

随着数据泄露问题日益严重和大模型的快速发展,越来越多的公司将研发环境迁移至内网甚至专网。而由于网络限制或安全策略,直接访问外部资源(如Go模块仓库)可能会受到限制。这就需要我们在公司内网中搭建一个离线的Go语言开发环境,以确保能够顺利地进行项目开发。

对于整个公司来说nexus可能是更好的选择。作为开发人员在我司实际使用中却感觉诸多不便,其中依赖的缺失就是一大问题,即使可以手动导包,往往直接依赖和间接依赖的手动导入也非常繁琐,需要先到外网将所有依赖下载,然后再到内网一个个手动导入。既然在外网已经下载了需要的依赖,那么直接使用外网的依赖制作内网无需再导入依赖的Go环境是不是可以呢。本文将以此来展开演示。

鉴于当前大多数应用程序都采用Docker进行部署,本文将主要以Docker的形式演示如何在公司内网中创建一个离线的Go语言开发环境。我们将介绍所需的工具、配置步骤以及注意事项。希望本文能为您在公司内网中搭建Go语言离线环境提供参考。

下载Golang构建镜像

建议使用最新版本,不单性能提升,漏洞也会有修复

代码语言:javascript代码运行次数:0运行复制
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对应的值
代码语言:javascript代码运行次数:0运行复制
cd C:\Users\Administrator\go\pkg\ # 切换到GOMODCACHE对应目录的上一级

离线镜像制作

编写Dockerfile

Dockerfile,联网环境,上一步获取镜像可不做,根据

代码语言:javascript代码运行次数:0运行复制
# 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=,direct

将Dockerfile放置于GOMODCACHE目录:

默认目录如下:

  • linux:/root/go/pkg/
  • Windows: C:\Users\Administrator\go\pkg\

执行构建镜像

  • arm64
代码语言:javascript代码运行次数:0运行复制
docker build -t golang-arm:1.24.2-alpine3.21 --platform=linux/arm64 .
  • amd64/x86
代码语言:javascript代码运行次数:0运行复制
docker build -t golang-amd:1.24.2-alpine3.21--platform=linux/amd64 .

内网使用

开发电脑

直接将外网mod拷贝到开发环境电脑,然后配置

代码语言:javascript代码运行次数:0运行复制
go env -w GOSUMDB=off
go env -w GOPROXY=,direct

Dockerfile

代码语言:javascript代码运行次数:0运行复制
# 多阶段构建
#构建一个 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

总结

本文介绍了在内网环境中搭建离线Go开发环境的方案。为应对网络限制导致的依赖管理问题,使用Docker在外网下载所有依赖后,制作包含这些依赖的镜像,迁移到内网使用。通过多平台构建(如amd64和arm64)确保兼容性,利用Docker的镜像机制快速搭建环境,提升开发效率。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-09,如有侵权请联系 cloudcommunity@tencent 删除go企业镜像开发环境配置

本文标签: Golang企业内网专网离线搭建Go环境实战指南