简介:本文详细介绍如何利用Gitee代码托管平台与Docker容器技术,实现前端项目的自动化部署。通过Webhook触发、Docker镜像构建及容器化部署,构建高效、稳定的CI/CD流水线。
在传统的前端项目部署流程中,开发者需手动执行以下步骤:本地构建生产环境代码、上传构建产物至服务器、手动重启服务进程。这种模式存在三大核心问题:
通过引入Gitee + Docker的自动化部署方案,可实现:
| 组件 | 版本 | 作用说明 |
|---|---|---|
| Gitee | 企业版 | 代码托管与Webhook触发 |
| Docker | 20.10+ | 容器化运行环境 |
| Nginx | 1.21+ | 静态资源服务与反向代理 |
| GitHub Actions(可选) | 2.0+ | 替代方案中的CI工具 |
[开发者本地] → [Gitee代码仓库]↓(Webhook触发)[GitHub Actions/自建CI] → [Docker Build]↓(镜像推送)[私有Docker Registry] → [服务器拉取]↓(容器启动)[Nginx容器] ←→ [前端应用容器]
https://your-ci-server/webhookapplication/jsonPush Events
// .gitee/PUSH_MESSAGE.md 示例{"version": "1.0.0","build_env": "production","rollback_point": false}
# 基础镜像选择FROM node:16-alpine as builderWORKDIR /appCOPY package*.json ./RUN npm install --productionCOPY . .RUN npm run build# 生产环境镜像FROM nginx:alpineCOPY --from=builder /app/dist /usr/share/nginx/htmlCOPY nginx.conf /etc/nginx/conf.d/default.confEXPOSE 80CMD ["nginx", "-g", "daemon off;"]
建议将.dockerignore文件配置为:
node_modules.git*.log*.envDockerfiledocker-compose.yml
name: Frontend CI/CDon:push:branches: [ main ]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Docker Buildrun: |docker build -t my-frontend:latest .docker tag my-frontend:latest registry.example.com/my-frontend:$(git rev-parse --short HEAD)- name: Docker Pushrun: docker push registry.example.com/my-frontend:$(git rev-parse --short HEAD)
推荐使用Jenkins或Drone CI,关键配置项:
version: '3.8'services:frontend:image: registry.example.com/my-frontend:latestrestart: unless-stoppedenvironment:- NODE_ENV=productionports:- "80:80"volumes:- ./nginx.conf:/etc/nginx/conf.d/default.confhealthcheck:test: ["CMD", "curl", "-f", "http://localhost"]interval: 30stimeout: 10sretries: 3
#!/bin/bash# 安全检查if [ "$(id -u)" -ne 0 ]; thenecho "请使用root用户运行此脚本"exit 1fi# 变量定义IMAGE_TAG=$(git rev-parse --short HEAD)CONTAINER_NAME="frontend_app"# 部署流程docker pull registry.example.com/my-frontend:$IMAGE_TAGdocker stop $CONTAINER_NAME || truedocker rm $CONTAINER_NAME || truedocker run -d --name $CONTAINER_NAME \-p 80:80 \registry.example.com/my-frontend:$IMAGE_TAG
建议采用以下环境变量配置:
# .env.productionREACT_APP_API_BASE=https://api.example.comPUBLIC_URL=/# .env.stagingREACT_APP_API_BASE=https://api-staging.example.comPUBLIC_URL=/staging
在Dockerfile中通过ARG传递环境:
ARG BUILD_ENV=productionCOPY .env.${BUILD_ENV} ./.env
推荐集成Prometheus + Grafana监控方案:
stub_status接口建议维护两个镜像标签:
latest:指向当前生产版本stable:指向经过验证的稳定版本回滚操作流程:
# 查看历史版本docker images | grep my-frontend# 执行回滚docker tag registry.example.com/my-frontend:stable registry.example.com/my-frontend:latestdocker service update --image registry.example.com/my-frontend:latest frontend_service
解决方案:
--build-arg CACHE_DATE=$(date)参数控制缓存推荐Nginx配置:
server {listen 80;server_name example.com;location /api {proxy_pass http://backend-server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';}}
listen 443 ssl http2;
gzip on;gzip_types text/plain text/css application/json application/javascript;
location ~* \.(js|css|png|jpg)$ {expires 1y;add_header Cache-Control "public";}
通过Gitee与Docker的自动化部署方案,前端团队可实现:
未来演进方向:
建议开发者从基础方案开始实施,逐步完善监控体系和容灾机制,最终构建完整的DevOps体系。实际部署时需特别注意安全配置,包括:
--cap-drop)