Files
niumalll/docs/部署运维指南.md

9.3 KiB

活牛采购智能数字化系统 - 部署运维指南

版本历史

版本 日期 作者 变更说明
v1.0 2024-12-20 运维团队 初版部署运维指南

1. 环境要求

1.1 硬件要求

生产环境最低配置

组件 CPU 内存 存储 网络
Web服务器 4核 8GB 100GB SSD 1Gbps
应用服务器 8核 16GB 200GB SSD 1Gbps
数据库服务器 8核 32GB 500GB SSD 1Gbps
Redis缓存 4核 8GB 50GB SSD 1Gbps
文件存储 4核 8GB 2TB HDD 1Gbps

推荐配置

组件 CPU 内存 存储 网络
Web服务器 8核 16GB 200GB SSD 10Gbps
应用服务器 16核 32GB 500GB SSD 10Gbps
数据库服务器 16核 64GB 1TB SSD 10Gbps
Redis缓存 8核 16GB 100GB SSD 10Gbps
文件存储 8核 16GB 5TB SSD 10Gbps

1.2 软件要求

操作系统

  • 推荐: Ubuntu 20.04 LTS / CentOS 8 / RHEL 8
  • 最低: Ubuntu 18.04 LTS / CentOS 7

基础软件

# 必需软件版本
Node.js >= 18.0.0
npm >= 8.0.0
MySQL >= 8.0
Redis >= 6.0
Nginx >= 1.18
Docker >= 20.10
Docker Compose >= 2.0

2. 快速部署

2.1 一键部署脚本

#!/bin/bash
# quick_deploy.sh - 活牛采购系统一键部署脚本

set -e

echo "开始部署活牛采购智能数字化系统..."

# 检查系统
if [[ "$OSTYPE" != "linux-gnu"* ]]; then
    echo "错误: 仅支持Linux系统"
    exit 1
fi

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装基础依赖
sudo apt install -y curl wget git vim htop tree unzip

# 安装Node.js 18
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

# 安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 创建应用目录
sudo mkdir -p /opt/niumall
sudo chown -R $USER:$USER /opt/niumall

# 克隆代码
cd /opt/niumall
git clone https://github.com/your-org/niumall.git .

# 启动服务
docker-compose up -d

echo "部署完成!"
echo "API服务: http://localhost:3000"
echo "管理后台: http://localhost"

2.2 Docker Compose配置

# docker-compose.yml
version: '3.8'

services:
  # MySQL数据库
  mysql:
    image: mysql:8.0
    container_name: niumall-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: niumall
      MYSQL_USER: niumall_user
      MYSQL_PASSWORD: user_password
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - niumall-network

  # Redis缓存
  redis:
    image: redis:7-alpine
    container_name: niumall-redis
    restart: unless-stopped
    command: redis-server --requirepass redis_password
    volumes:
      - redis_data:/data
    ports:
      - "6379:6379"
    networks:
      - niumall-network

  # 后端API服务
  api:
    build:
      context: ./backend
      dockerfile: Dockerfile
    container_name: niumall-api
    restart: unless-stopped
    environment:
      NODE_ENV: production
      DB_HOST: mysql
      REDIS_HOST: redis
    ports:
      - "3000:3000"
    networks:
      - niumall-network
    depends_on:
      - mysql
      - redis

  # 管理后台
  admin:
    build:
      context: ./admin-system
      dockerfile: Dockerfile
    container_name: niumall-admin
    restart: unless-stopped
    ports:
      - "80:80"
    networks:
      - niumall-network
    depends_on:
      - api

volumes:
  mysql_data:
  redis_data:

networks:
  niumall-network:
    driver: bridge

3. 域名配置

3.1 域名配置总览

域名类型 域名地址 用途 环境
后端API wapi.nanniwan.com 提供RESTful API服务 生产环境
管理后台 ad.nanniwan.com 管理员后台管理系统 生产环境
官方网站 www.nanniwan.com 产品官网和文档 生产环境
开发环境 localhost:3000 本地开发测试 开发环境
开发环境 localhost:5173 Vite开发服务器 开发环境

3.2 配置文件更新

后端配置更新

文件: backend/src/config/config.js

const domainConfig = {
  backend: 'wapi.nanniwan.com',
  admin: 'ad.nanniwan.com',
  website: 'www.nanniwan.com'
};

CORS配置更新

文件: backend/src/main.js

app.use(cors({
  origin: [
    'http://localhost:3000',
    'http://localhost:5173',
    'https://wapi.nanniwan.com',
    'https://ad.nanniwan.com',
    'https://www.nanniwan.com'
  ],
  credentials: true
}));

4. 监控与维护

4.1 健康检查脚本

#!/bin/bash
# health_check.sh

echo "=== 系统健康检查 $(date) ==="

# 检查服务状态
services=("mysql" "redis" "api" "admin")
for service in "${services[@]}"; do
    if docker ps | grep -q "niumall-$service"; then
        echo "$service: ✓ 运行中"
    else
        echo "$service: ✗ 已停止"
    fi
done

# 检查API健康状态
if curl -f -s http://localhost:3000/health > /dev/null; then
    echo "API服务: ✓ 健康"
else
    echo "API服务: ✗ 异常"
fi

# 检查系统资源
echo "CPU使用率: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)"
echo "内存使用率: $(free -m | awk 'NR==2{printf "%.2f%%\n", $3*100/$2}')"
echo "磁盘使用率: $(df -h | awk '$NF=="/"{printf "%s\n", $5}')"

echo "=== 检查完成 ==="

3.2 备份脚本

#!/bin/bash
# backup.sh

DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup"

mkdir -p $BACKUP_DIR

# 数据库备份
echo "开始数据库备份..."
docker exec niumall-mysql mysqldump -u root -proot_password niumall > $BACKUP_DIR/niumall_$DATE.sql
gzip $BACKUP_DIR/niumall_$DATE.sql

# 删除7天前的备份
find $BACKUP_DIR -name "niumall_*.sql.gz" -mtime +7 -delete

echo "备份完成: niumall_$DATE.sql.gz"

3.3 日志查看

# 查看所有服务日志
docker-compose logs

# 查看特定服务日志
docker-compose logs api
docker-compose logs mysql

# 实时查看日志
docker-compose logs -f api

4. 故障排除

4.1 常见问题

服务无法启动

# 检查容器状态
docker-compose ps

# 查看错误日志
docker-compose logs [service_name]

# 重启服务
docker-compose restart [service_name]

数据库连接失败

# 检查MySQL容器
docker exec -it niumall-mysql mysql -u root -p

# 检查网络连接
docker network ls
docker network inspect niumall_niumall-network

端口冲突

# 检查端口占用
sudo netstat -tulpn | grep :3000
sudo netstat -tulpn | grep :3306

# 修改docker-compose.yml中的端口映射

4.2 紧急恢复

#!/bin/bash
# emergency_recovery.sh

echo "开始紧急恢复..."

# 停止所有服务
docker-compose down

# 清理容器和网络
docker system prune -f

# 重新启动服务
docker-compose up -d

# 等待服务启动
sleep 30

# 健康检查
./health_check.sh

echo "紧急恢复完成"

5. 性能优化

5.1 数据库优化

-- 查看慢查询
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';

-- 分析表
ANALYZE TABLE orders, users, transport_tasks;

-- 优化表
OPTIMIZE TABLE orders, users, transport_tasks;

5.2 缓存优化

# Redis内存使用情况
docker exec niumall-redis redis-cli info memory

# 清理过期键
docker exec niumall-redis redis-cli --scan --pattern "*" | xargs docker exec niumall-redis redis-cli del

6. 安全配置

6.1 防火墙设置

# 安装ufw
sudo apt install ufw

# 基本规则
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 允许必要端口
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443

# 启用防火墙
sudo ufw enable

6.2 SSL证书

# 安装Certbot
sudo apt install certbot

# 获取证书
sudo certbot certonly --standalone -d api.niumall.com -d admin.niumall.com

# 自动续期
echo "0 12 * * * /usr/bin/certbot renew --quiet" | sudo crontab -

7. 维护计划

7.1 定时任务

# 编辑crontab
crontab -e

# 添加定时任务
# 每天凌晨2点备份数据库
0 2 * * * /opt/niumall/scripts/backup.sh

# 每小时检查系统健康状态
0 * * * * /opt/niumall/scripts/health_check.sh >> /var/log/niumall/health.log

# 每周日凌晨清理日志
0 0 * * 0 docker system prune -f

7.2 更新流程

#!/bin/bash
# update.sh

echo "开始更新系统..."

# 拉取最新代码
git pull origin main

# 重新构建镜像
docker-compose build

# 滚动更新
docker-compose up -d --no-deps api
docker-compose up -d --no-deps admin

# 健康检查
sleep 30
./health_check.sh

echo "更新完成"

8. 联系信息

8.1 技术支持

8.2 相关文档


注意: 请根据实际环境调整配置参数,确保系统安全稳定运行。