从零到部署:用Docker Compose一键搞定Go-Admin前后端分离项目

张开发
2026/4/21 4:27:20 15 分钟阅读

分享文章

从零到部署:用Docker Compose一键搞定Go-Admin前后端分离项目
从零到部署用Docker Compose一键搞定Go-Admin前后端分离项目在当今云原生技术蓬勃发展的时代容器化部署已成为现代应用开发的标准实践。对于Go-Admin这样基于GinVue的前后端分离项目传统的手动部署方式不仅步骤繁琐而且难以保证环境一致性。本文将带你体验如何用Docker Compose实现一条命令启动全栈服务的优雅部署方案。1. 环境准备与项目架构解析Go-Admin是一个功能完善的前后端分离权限管理系统脚手架后端采用Go语言编写基于Gin框架前端使用VueElement UI构建。其核心功能包括RBAC权限控制、JWT鉴权、代码生成器等非常适合作为中后台项目的开发起点。典型技术栈组成后端服务Go 1.15 / Gin / GORM前端界面Vue 3 / Element Plus / Axios数据存储MySQL 8.0基础设施Docker 20.10 / Docker Compose 2.0提示建议使用Docker Desktop 4.0版本以获得最佳体验Windows/Mac用户需确保已启用WSL2集成2. 容器化部署方案设计2.1 项目结构规划我们需要为整个系统设计合理的容器编排方案以下是建议的目录结构go-admin-docker/ ├── backend/ │ ├── Dockerfile # 后端镜像构建文件 │ └── config/ │ └── settings.yml # 生产环境配置 ├── frontend/ │ └── Dockerfile # 前端镜像构建文件 ├── db/ │ └── init.sql # 数据库初始化脚本 └── docker-compose.yml # 编排主文件2.2 多阶段构建策略为优化镜像大小和安全性我们采用多阶段构建后端Dockerfile示例# 构建阶段 FROM golang:1.18-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED0 GOOSlinux go build -o go-admin . # 运行阶段 FROM alpine:latest WORKDIR /app COPY --frombuilder /app/go-admin . COPY config/settings.yml ./config/ EXPOSE 8000 CMD [./go-admin, server, -c, config/settings.yml]前端Dockerfile关键配置FROM node:16 as build-stage WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build FROM nginx:alpine COPY --frombuild-stage /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 803. Docker Compose编排实战3.1 编写docker-compose.yml以下是完整的编排文件示例version: 3.8 services: mysql: image: mysql:8.0 container_name: go-admin-mysql environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-secret} MYSQL_DATABASE: ${DB_NAME:-go_admin} MYSQL_USER: ${DB_USER:-admin} MYSQL_PASSWORD: ${DB_PASSWORD:-admin123} volumes: - mysql_data:/var/lib/mysql - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql ports: - 3306:3306 healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] interval: 5s timeout: 10s retries: 5 backend: build: ./backend container_name: go-admin-backend depends_on: mysql: condition: service_healthy environment: DB_HOST: mysql DB_PORT: 3306 DB_NAME: ${DB_NAME:-go_admin} DB_USER: ${DB_USER:-admin} DB_PASSWORD: ${DB_PASSWORD:-admin123} ports: - 8000:8000 restart: unless-stopped frontend: build: ./frontend container_name: go-admin-frontend depends_on: - backend ports: - 8080:80 restart: unless-stopped volumes: mysql_data:3.2 关键配置说明环境变量覆盖技巧创建.env文件实现配置隔离DB_ROOT_PASSWORDyour_secure_password DB_NAMEgo_admin_prod DB_USERgo_admin_user DB_PASSWORDuser_secure_pass后端配置动态注入database: driver: mysql source: ${DB_USER}:${DB_PASSWORD}tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}?charsetutf8parseTimeTruelocLocaltimeout1000ms数据库初始化脚本示例db/init.sqlCREATE DATABASE IF NOT EXISTS go_admin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON go_admin.* TO admin%; FLUSH PRIVILEGES;4. 部署与运维实践4.1 一键启动与停止启动完整服务栈docker-compose up -d --build查看服务日志docker-compose logs -f backend停止并清理资源docker-compose down -v4.2 常见问题排查数据库连接问题检查MySQL容器健康状态docker inspect -f {{.State.Health.Status}} go-admin-mysql进入容器手动测试连接docker exec -it go-admin-backend sh /app # ./go-admin migrate -cconfig/settings.yml前端API代理配置 在nginx.conf中添加location /api { proxy_pass http://backend:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }4.3 生产环境优化建议镜像安全扫描docker scan go-admin-backend资源限制配置services: backend: deploy: resources: limits: cpus: 1 memory: 1G日志收集方案services: backend: logging: driver: json-file options: max-size: 10m max-file: 35. 进阶扩展方案5.1 CI/CD集成示例GitHub Actions工作流片段name: Build and Deploy on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkoutv2 - run: docker-compose -f docker-compose.prod.yml up -d --build - run: docker system prune -f5.2 多环境配置管理通过不同compose文件实现环境隔离# 开发环境 docker-compose -f docker-compose.yml -f docker-compose.dev.yml up # 生产环境 docker-compose -f docker-compose.yml -f docker-compose.prod.yml up环境差异示例docker-compose.prod.ymlservices: backend: image: registry.example.com/go-admin:${TAG:-latest} deploy: replicas: 3 configs: - source: prod_settings target: /app/config/settings.yml configs: prod_settings: file: ./config/settings.prod.yml5.3 监控方案集成Prometheus监控配置示例services: backend: environment: METRICS_ENABLED: true METRICS_PORT: 9090 ports: - 9090:9090 prometheus: image: prom/prometheus ports: - 9091:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml

更多文章