PSI进销存软件

进销存软件编程技术展示与积累

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 流水线:

  1. 代码提交:开发者 push 代码到仓库
  2. 自动构建:触发 CI pipeline,运行 npm install 和 build
  3. 单元测试:执行自动化测试,确保代码质量
  4. 构建镜像:构建 Docker 镜像并推送到镜像仓库
  5. 部署测试:自动部署到测试环境
  6. 部署生产:审批后部署到生产环境

环境配置管理

不同环境使用不同配置:

部署脚本示例

#!/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

回滚策略

← 下一篇:PSI进销存系统消息通知中心设计 上篇:PSI进销存软件工作流引擎设计 →