deployment-guide.md 12.7 KB

SMF Core 部署指南

概述

本文档详细说明SMF Core系统的部署方式、环境要求、安装步骤以及部署后配置,帮助系统管理员正确部署系统。

环境要求

硬件要求

组件 最低配置 推荐配置 说明
CPU 4核 8核 根据并发用户数调整
内存 8GB 16GB 包含JVM内存和系统内存
磁盘 100GB SSD 500GB SSD 包含数据库和日志存储
网络 100Mbps 1Gbps 支持高并发访问

软件要求

软件 版本 用途
JDK 1.8 或更高 Java运行环境
MySQL 5.7+ 关系型数据库
MongoDB 4.0+ 文档型数据库
Redis 5.0+ 缓存服务
Nginx 1.16+ 反向代理(可选)
Docker 19.03+ 容器化部署(可选)
Docker Compose 1.25+ 容器编排(可选)

部署方式

SMF Core支持以下部署方式:

  1. 独立部署: 直接运行jar包
  2. Docker容器部署: 使用Docker容器运行
  3. Docker Compose部署: 使用Docker Compose编排多容器
  4. Kubernetes部署: 在K8s集群中部署(企业版支持)

独立部署

1. 准备环境

  1. 安装JDK 1.8+
  2. 安装并配置MySQL
  3. 安装并配置MongoDB
  4. 安装并配置Redis(可选)

2. 创建数据库

-- MySQL数据库创建
CREATE DATABASE smf_core DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'smf_user'@'%' IDENTIFIED BY 'smf_password';
GRANT ALL PRIVILEGES ON smf_core.* TO 'smf_user'@'%';
FLUSH PRIVILEGES;

3. 配置文件准备

创建外部配置目录:

Linux系统:

mkdir -p /opt/smf/config
chmod 755 /opt/smf/config

Windows系统:

mkdir C:\Program Files\smf\config

将以下配置文件复制到外部配置目录:

  • smfcore.json
  • smfclient.json

4. 运行应用

下载或构建smf-core.jar文件,执行以下命令启动应用:

# Linux/macOS
nohup java -jar -Dspring.profiles.active=prod smf-core.jar > smf-core.log 2>&1 &

# Windows
java -jar -Dspring.profiles.active=prod smf-core.jar

5. 环境变量配置

可以通过环境变量覆盖配置文件中的设置:

# Linux/macOS 启动命令示例
nohup java \
  -Dspring.profiles.active=prod \
  -DSMf_DB_URL=jdbc:mysql://localhost:3306/smf_core \
  -DSMf_DB_USERNAME=smf_user \
  -DSMf_DB_PASSWORD=smf_password \
  -DSMf_MONGODB_URI=mongodb://localhost:27017/smf_core \
  -jar smf-core.jar > smf-core.log 2>&1 &

Docker容器部署

1. 准备Docker环境

安装Docker:

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker.io

# CentOS/RHEL
sudo yum install docker

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

2. 构建Docker镜像

在项目根目录下执行以下命令构建Docker镜像:

# 构建应用
docker build -t smf-core:latest .

或使用以下Dockerfile:

FROM openjdk:8-jre-alpine

WORKDIR /app

COPY target/smf-core.jar /app/
COPY src/main/resources/smfcore.json /opt/smf/config/
COPY src/main/resources/smfclient.json /opt/smf/config/

EXPOSE 8080

CMD ["java", "-jar", "-Dspring.profiles.active=prod", "smf-core.jar"]

3. 运行Docker容器

# 运行SMF Core容器
docker run -d \
  --name smf-core \
  -p 8080:8080 \
  -e SMF_DB_URL=jdbc:mysql://host.docker.internal:3306/smf_core \
  -e SMF_DB_USERNAME=smf_user \
  -e SMF_DB_PASSWORD=smf_password \
  -e SMF_MONGODB_URI=mongodb://host.docker.internal:27017/smf_core \
  smf-core:latest

Docker Compose部署

1. 准备docker-compose.yml文件

创建docker-compose.yml文件:

version: '3.8'

services:
  mysql:
    image: mysql:5.7
    container_name: smf-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: smf_core
      MYSQL_USER: smf_user
      MYSQL_PASSWORD: smf_password
    volumes:
      - mysql-data:/var/lib/mysql
    ports:
      - "3306:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  mongodb:
    image: mongo:4.2
    container_name: smf-mongodb
    restart: always
    volumes:
      - mongo-data:/data/db
    ports:
      - "27017:27017"

  redis:
    image: redis:5.0
    container_name: smf-redis
    restart: always
    volumes:
      - redis-data:/data
    ports:
      - "6379:6379"

  smf-core:
    image: smf-core:latest
    container_name: smf-core
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      SMF_DB_URL: jdbc:mysql://mysql:3306/smf_core
      SMF_DB_USERNAME: smf_user
      SMF_DB_PASSWORD: smf_password
      SMF_MONGODB_URI: mongodb://mongodb:27017/smf_core
      SMF_REDIS_HOST: redis
    ports:
      - "8080:8080"
    volumes:
      - ./config:/opt/smf/config
      - ./logs:/app/logs

volumes:
  mysql-data:
  mongo-data:
  redis-data:

2. 启动服务

docker-compose up -d

3. 停止服务

docker-compose down

Nginx反向代理配置

1. 安装Nginx

# Ubuntu/Debian
sudo apt-get install nginx

# CentOS/RHEL
sudo yum install nginx

2. 配置Nginx

创建或编辑Nginx配置文件:

sudo vi /etc/nginx/conf.d/smf-core.conf

添加以下配置:

server {
    listen 80;
    server_name smf-core.example.com;

    location / {
        proxy_pass http://localhost:8080/smf-core;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 配置WebSocket支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # 静态资源缓存配置
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        proxy_pass http://localhost:8080;
        proxy_cache_valid 200 30d;
        proxy_cache_key $uri$is_args$args;
        add_header Cache-Control "public, max-age=2592000";
    }
}

3. 验证并重启Nginx

sudo nginx -t
sudo systemctl restart nginx

配置HTTPS

1. 获取SSL证书

可以使用Let's Encrypt免费证书或购买商业SSL证书。

2. 配置Nginx HTTPS

server {
    listen 80;
    server_name smf-core.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name smf-core.example.com;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://localhost:8080/smf-core;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

部署后配置

1. 初始化管理员账户

系统首次启动时会自动创建默认管理员账户:

  • 用户名:admin
  • 密码:admin123

首次登录后,请立即修改管理员密码。

2. 创建外部配置目录

# Linux
mkdir -p /opt/smf/config
chmod 755 /opt/smf/config

# Windows
mkdir C:\Program Files\smf\config

3. 日志配置

配置日志存储路径和级别,编辑/opt/smf/config/log4j2-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>

        <RollingFile name="RollingFile" fileName="/opt/smf/logs/smf-core.log"
                     filePattern="/opt/smf/logs/smf-core-%d{yyyy-MM-dd}.log.gz">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Logger name="com.neotel.smfcore" level="INFO" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Logger>

        <Root level="INFO">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

系统监控

1. Spring Boot Actuator

SMF Core集成了Spring Boot Actuator用于系统监控,可以通过以下端点访问:

2. JVM监控

可以使用JConsole或VisualVM监控JVM状态:

# 使用JConsole连接
jconsole [pid]

3. 自定义监控接口

SMF Core提供了自定义监控接口:

GET /smf-core/api/v1/system/monitor

备份与恢复

1. 数据库备份

MySQL备份:

# 全量备份
mysqldump -u smf_user -p smf_core > smf_core_backup_$(date +%Y%m%d).sql

# 定时备份脚本
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
mysqldump -u smf_user -p smf_core | gzip > /backup/smf_core_$DATE.sql.gz
find /backup -name "smf_core_*.sql.gz" -type f -mtime +7 -delete

MongoDB备份:

# 全量备份
mongodump --db smf_core --out /backup/mongo_$(date +%Y%m%d)

2. 配置文件备份

# Linux
tar -czf /backup/config_backup_$(date +%Y%m%d).tar.gz /opt/smf/config/

# Windows
compress-archive -Path "C:\Program Files\smf\config\" -DestinationPath "C:\backup\config_backup_$(Get-Date -Format 'yyyyMMdd').zip"

3. 数据恢复

MySQL恢复:

mysql -u smf_user -p smf_core < smf_core_backup_20240101.sql

MongoDB恢复:

mongorestore --db smf_core /backup/mongo_20240101/smf_core

性能优化

1. JVM优化

调整JVM参数以提高性能:

java \
  -Xms4g \
  -Xmx4g \
  -XX:+UseG1GC \
  -XX:MaxGCPauseMillis=200 \
  -XX:+HeapDumpOnOutOfMemoryError \
  -XX:HeapDumpPath=/opt/smf/logs/heap-dump.hprof \
  -jar smf-core.jar

2. 数据库优化

  • 为频繁查询的字段创建索引
  • 定期清理无用数据
  • 使用连接池优化数据库连接

3. 缓存优化

  • 合理配置Redis缓存策略
  • 对热点数据进行缓存
  • 设置适当的缓存过期时间

故障排除

1. 常见问题及解决方案

问题 可能原因 解决方案
服务无法启动 端口被占用 修改端口配置或关闭占用端口的进程
数据库连接失败 数据库服务未启动或配置错误 检查数据库服务状态和连接参数
内存溢出 JVM内存不足 增加JVM内存配置
权限不足 运行用户权限不足 调整文件权限或使用有权限的用户运行
日志文件过大 未配置日志滚动 配置log4j2的滚动策略

2. 查看日志

# Linux/macOS
tail -f /opt/smf/logs/smf-core.log

# Docker容器
docker logs -f smf-core

3. 健康检查

curl http://localhost:8080/smf-core/actuator/health

升级指南

1. 备份数据

在升级前,请务必备份数据库和配置文件。

2. 停止旧版本

# 独立部署
kill $(pgrep -f smf-core)

# Docker部署
docker stop smf-core

3. 更新配置

根据新版本要求,更新配置文件。

4. 启动新版本

# 独立部署
java -jar smf-core-new.jar

# Docker部署
docker-compose up -d

5. 验证升级

访问系统,验证各项功能是否正常。

安全加固

1. 关闭不必要的端口

# Linux防火墙配置
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 3306/tcp
sudo ufw allow 27017/tcp

2. 配置HTTPS

参考前面的HTTPS配置部分。

3. 定期更新密码

定期更新数据库密码和管理员密码。

4. 限制访问IP

配置Nginx限制访问IP:

location /smf-core/api/v1/ {
    allow 192.168.1.0/24;
    deny all;
    proxy_pass http://localhost:8080/smf-core/api/v1/;
}

最佳实践

  1. 使用Docker容器部署,便于环境一致性和升级
  2. 配置自动备份策略,定期备份数据库和配置文件
  3. 监控系统资源使用情况,及时扩容
  4. 实施安全措施,保护系统和数据安全
  5. 定期检查日志,及时发现和解决问题
  6. 定期更新系统,获取最新功能和安全补丁