PSI进销存软件自动化部署与持续集成
为什么需要自动化部署
进销存软件通常需要部署到多个客户环境,传统的手工部署方式效率低、易出错。自动化部署可以确保部署过程的一致性,快速回滚问题版本,大幅提升运维效率。配合持续集成(CI)可以实现代码提交后自动构建、测试、部署的完整流程。
项目结构规划
| 目录/文件 | 说明 |
|---|---|
| /src | 源代码目录 |
| /config | 配置文件(不同环境不同配置) |
| /docker | Docker 相关文件 |
| /scripts | 部署脚本 |
| docker-compose.yml | 服务编排文件 |
Docker 容器化
使用 Docker 实现应用的容器化部署:
# Dockerfile FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run build FROM node:18-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package*.json ./ # 复制配置文件(根据环境变量选择) COPY config/production/* ./config/ EXPOSE 3000 USER node CMD ["node", "dist/index.js"]
Docker Compose 编排
# docker-compose.yml
version: '3.8'
services:
psi-app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DB_HOST=psi-mysql
- DB_PORT=3306
- REDIS_HOST=psi-redis
depends_on:
- psi-mysql
- psi-redis
restart: unless-stopped
psi-mysql:
image: mysql:8.0
volumes:
- mysql-data:/var/lib/mysql
- ./config/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: psi_db
restart: unless-stopped
psi-redis:
image: redis:7-alpine
volumes:
- redis-data:/data
restart: unless-stopped
volumes:
mysql-data:
redis-data:
持续集成配置
使用 GitHub Actions 配置 CI/CD 流水线:
- 代码提交:开发者 push 代码到仓库
- 自动构建:触发 CI pipeline,运行 npm install 和 build
- 单元测试:执行自动化测试,确保代码质量
- 构建镜像:构建 Docker 镜像并推送到镜像仓库
- 部署测试:自动部署到测试环境
- 部署生产:审批后部署到生产环境
环境配置管理
不同环境使用不同配置:
- 开发环境:本地数据库,热重载
- 测试环境:独立数据库,完整功能测试
- 预发布环境:生产级数据,模拟真实场景
- 生产环境:高可用配置,性能优化
部署脚本示例
#!/bin/bash
# deploy.sh
set -e
# 读取环境参数
ENV=${1:-production}
IMAGE_TAG=${2:-latest}
echo "Deploying PSI to $ENV with tag $IMAGE_TAG"
# 拉取最新镜像
docker pull psi-registry.example.com/psi-app:$IMAGE_TAG
# 停止旧容器
docker-compose -f docker-compose.$ENV.yml down
# 启动新容器
docker-compose -f docker-compose.$ENV.yml up -d
# 健康检查
sleep 10
if curl -f http://localhost:3000/health; then
echo "Deployment successful!"
else
echo "Health check failed, rolling back..."
docker-compose -f docker-compose.$ENV.yml down
exit 1
fi
回滚策略
- 版本标记:每次部署标记版本号,便于回滚
- 蓝绿部署:两套环境交替更新,秒级回滚
- 灰度发布:逐步切换流量,观察异常立即停止
- 数据库回滚:保留备份,必要时恢复