Gin实战9:项目快速部署全攻略


一、📌 开篇简介

  • Dockerfile 最佳实践(多阶段构建)
  • Docker 运行,docker-compose 运行
  • Gitleb ci 集成部署

二、🔧 部署前准备清单

  1. Dockerfile 编写 该Dockerfile使用多阶段构建:第一阶段用golang镜像编译项目,设置国内代理加速依赖下载;第二阶段用debian精简镜像运行编译后的二进制文件,暴露8080端口并挂载配置文件目录。
FROM golang:1.23 AS builder

COPY . /src
WORKDIR /src

ENV CGO_ENABLED=0 GOOS=linux
RUN GOPROXY=https://goproxy.cn make build

FROM alpine:latest

COPY --from=builder /src/bin/study_gin /app/

WORKDIR /app

EXPOSE 8080
VOLUME /data/conf

CMD ["./study_gin", "-conf", "/data/conf/"]
  1. 编译
docker build -t study_gin:latest -f deploy/docker/Dockerfile ./

如果镜像拉取存在网络问题可以配置镜像加速

三、🚀 部署

  1. Docker 命令执行
sudo docker run  -p 8080:8080   -v $(PWD)/configs:/data/conf study_gin:latest
  1. Docker compose 部署
    • docker-compose.yml 配置:使用study_gin镜像创建容器,挂载配置文件目录(使用环境变量配置),暴露8080端口,部署配置为单副本更新策略,失败自动重启。
name: Study_Gin
services:
  erp_server:
    image: study_gin:latest # 指定镜像
    container_name: study_gin
    volumes:
      - $CONFIG:/data/conf
    ports:
      - 8080:8080
    command: [ "./study_gin", "-conf", "/data/conf/"]
    deploy:
      mode: replicated
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
  • 启动服务
docker-compose up -d

四、🔐 Gitleb 配置部署

  1. 配置Gitleb 创建 .gitlab-ci.yml 文件,配置部署脚本。该代码定义CI/CD流水线的两个阶段:构建阶段编译代码并构建Docker镜像,部署阶段在生产环境启动容器。两个阶段仅在develop分支触发
stages:        
  - build
  - deploy

build-job:
  stage: build
  only:
    - develop
  script:
    - echo "Compiling the code..."
    - docker build -t study_gin:latest -f deploy/docker/Dockerfile ./
    - docker image prune -f
deploy-job:     
  stage: deploy 
  environment: production
  only:
    - develop
  script:
    - cd deploy/docker
    - export IMAGE=study_gin:latest
    - export CONFIG=/home/web/erp/conf
    - docker compose up --force-recreate -d

五、🔧 部署总结

  • 多阶段构建优化镜像 Go应用编译后生成独立二进制文件,建议在Dockerfile中使用多阶段构建:第一阶段用golang镜像编译,第二阶段用scratch/alpine镜像仅复制二进制文件,可减少镜像体积并提升安全性。

  • 注意环境变量注入 Go应用常通过环境变量加载配置(如数据库连接),需在docker-compose.yml中明确声明environment字段,避免硬编码敏感信息。生产环境建议配合.env文件管理变量,但需确保文件不被提交至代码库。

  • 处理依赖缓存加速构建 在Dockerfile中优先执行COPY go.mod go.sum ./和RUN go mod download,利用Docker层缓存机制,避免代码变动时重复下载依赖。docker-compose.yml中可配置cached卷挂载GOPATH/pkg/mod加速本地开发构建。


感谢你的关注和支持,回复【Gin实战】 获取完整代码; 接下来是否有想实现的功能呢?评论区留言吧!

wx

关注公众号

©2017-2023 鲁ICP备17023316号-1 Powered by Hugo