## 第一阶段 ====> Nodejs打包编译输出前端资源 FROM node:20-alpine AS build-node # 前端程序 # COPY ./omc_web /web COPY./omc_web/src /web/src COPY./omc_web/public /web/public COPY./omc_web/index.html /web/index.html COPY./omc_web/.env.production /web/.env.production COPY./omc_web/.env.development /web/.env.development COPY./omc_web/package-lock.json /web/package-lock.json COPY./omc_web/package.json /web/package.json COPY./omc_web/tsconfig.json /web/tsconfig.json COPY./omc_web/tsconfig.node.json /web/tsconfig.node.json COPY./omc_web/vite.config.ts /web/vite.config.ts RUN npm config set registry https://registry.npmmirror.com RUN cd /web && npm install && npm run build RUN touch /web/dist/config.js && echo 'sessionStorage.clear()' | tee /web/dist/config.js # 后端程序 # COPY ./omc_api /api COPY ./omc_api/features /api/features COPY ./omc_api/lib /api/lib COPY ./omc_api/src /api/src COPY ./omc_api/sshsvc /api/sshsvc COPY ./omc_api/swagger_docs /api/swagger_docs COPY ./omc_api/go.sum /api/go.sum COPY ./omc_api/go.mod /api/go.mod COPY ./omc_api/main.go /api/main.go # 系统文件 COPY ./omc_api/docker/linux /linux ## 第二阶段 ====> Go打包编译输出后端程序 FROM golang:1.24-alpine AS build-golang # 从上个阶段复制文件 COPY --from=build-node /web/dist /web COPY --from=build-node /api /api COPY --from=build-node /linux /linux # 安装其他依赖 RUN apk add gcc musl-dev libpcap-dev # 设置变量 ENV CGO_ENABLED 1 ENV GOOS linux ENV GOPROXY https://goproxy.cn,direct ARG VERSION RUN cd /api && go mod download RUN cd /api && go build -o omc -v -ldflags "-s -w \ -X 'be.ems/src/framework/config.Version=$VERSION' \ -X 'be.ems/src/framework/config.BuildTime=$(date)' \ -X 'be.ems/src/framework/config.GoVer=$(go version)'" RUN cd /api/sshsvc && go build -o sshsvc -v -ldflags "-s -w \ -X 'be.ems/lib/global.Version=${VERSION}' \ -X 'be.ems/lib/global.BuildTime=$(date)' \ -X 'be.ems/lib/global.GoVer=$(go version)'" ## 第三阶段 ====> 构建前后端融合镜像 FROM ubuntu:22.04 # 更新apt并安装必要工具 RUN apt update -y && apt install -y \ sudo systemd libpcap-dev tzdata nginx # 设置时区和语言环境 ENV LANG="en_US.UTF-8" ENV TZ="Asia/Shanghai" WORKDIR /usr/local/etc/omc COPY --from=build-golang /linux / COPY --from=build-golang /web /usr/local/etc/omc/web COPY --from=build-golang /api/omc /usr/local/bin/omc COPY --from=build-golang /api/sshsvc/sshsvc /usr/local/bin/sshsvc EXPOSE 80 443 33030 CMD ["/sbin/init"] # 构建 # docker build --build-arg VERSION=241101 -t omc:2.241101 . # docker run -it omc:2.241101 sh # service ssh start && service nginx start && /usr/local/bin/omc --env prod -c /usr/local/etc/omc/omc.yaml