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支持以下部署方式:
- 独立部署: 直接运行jar包
- Docker容器部署: 使用Docker容器运行
- Docker Compose部署: 使用Docker Compose编排多容器
- Kubernetes部署: 在K8s集群中部署(企业版支持)
独立部署
1. 准备环境
- 安装JDK 1.8+
- 安装并配置MySQL
- 安装并配置MongoDB
- 安装并配置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.jsonsmfclient.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用于系统监控,可以通过以下端点访问:
- 健康检查: http://host:port/smf-core/actuator/health
- 应用信息: http://host:port/smf-core/actuator/info
- 指标数据: http://host:port/smf-core/actuator/metrics
- 日志配置: http://host:port/smf-core/actuator/loggers
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/;
}
最佳实践
- 使用Docker容器部署,便于环境一致性和升级
- 配置自动备份策略,定期备份数据库和配置文件
- 监控系统资源使用情况,及时扩容
- 实施安全措施,保护系统和数据安全
- 定期检查日志,及时发现和解决问题
- 定期更新系统,获取最新功能和安全补丁