第10天
昨天的成就: 完成了系统性能优化,添加了连接池配置和响应缓存策略,撰写了DEPLOYMENT-CHECKLIST.md部署清单
遇到的困难: HttpClient连接复用需要正确关闭response避免资源泄漏
今天的任务: 准备生产环境部署脚本
markdown
DEPLOYMENT-CHECKLIST.md
生产环境部署检查清单
部署前检查
配置检查
构建检查
Tomcat 配置
server.xml 示例配置
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"compression="on"compressionMinSize="2048"compressableMimeType="text/html,text/xml,text/plain,application/json"/>
JVM 参数建议
bash
export CATALINA_OPTS="-Xms1g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
安全加固修改 Tomcat 默认管理员密码禁用 Tomcat 管理界面(生产环境)配置 HTTPS(使用 Let's Encrypt 或其他证书)限制 API 访问频率(防止滥用)配置防火墙规则(只开放必要端口)
监控与日志配置日志轮转(防止日志文件过大)设置日志保留期限(建议30天)配置应用监控(Prometheus + Grafana 或类似工具)设置告警阈值(CPU、内存、响应时间)
日志配置示例(logging.properties)
properties
handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandlerorg.apache.juli.FileHandler.level = INFO
org.apache.juli.FileHandler.directory = ${catalina.base}/logs
org.apache.juli.FileHandler.prefix = sunwukong-generator.
org.apache.juli.FileHandler.maxDays = 30
备份策略定期备份配置文件定期备份生成的图片/视频(如有存储)记录部署版本和变更日志
回滚计划保留上一个版本的 WAR 包记录回滚步骤测试回滚流程
回滚步骤
停止 Tomcat:./bin/shutdown.sh
删除当前 WAR:rm webapps/sunwukong-generator.war
删除解压目录:rm -rf webapps/sunwukong-generator
复制旧版本 WAR:cp backup/sunwukong-generator-v1.0.war webapps/
启动 Tomcat:./bin/startup.sh
性能测试使用 JMeter 或 ab 进行压力测试验证并发用户数下的响应时间检查内存泄漏(使用 jmap/jstat)
压力测试命令
bash
# 使用 Apache Bench
ab -n 100 -c 10 http://localhost:8080/sunwukong-generator/# 预期结果
# Requests per second: > 50
# Time per request: < 100ms(不含AI生成时间)
上线检查域名已解析到服务器IPHTTPS 证书已配置并验证CDN 已配置(如需要)监控系统已上线告警通知已配置(邮件/短信)
文档交付README.md 已更新ARCHITECTURE.md 已完成API 文档已提供运维手册已编写
部署负责人:
部署日期:
版本号: v1.0.0
plaintext```bash
#!/bin/bash
# deploy.sh - 自动化部署脚本set -eecho "======================================"
echo "Sun Wukong Generator 部署脚本"
echo "======================================"# 配置变量
TOMCAT_HOME="/opt/tomcat9"
WAR_FILE="target/sunwukong-generator.war"
BACKUP_DIR="$TOMCAT_HOME/backup"# 检查 WAR 文件是否存在
if [ ! -f "$WAR_FILE" ]; thenecho "错误: WAR 文件不存在,请先执行 mvn package"exit 1
fi# 创建备份目录
mkdir -p "$BACKUP_DIR"# 备份当前版本
if [ -f "$TOMCAT_HOME/webapps/sunwukong-generator.war" ]; thenTIMESTAMP=$(date +%Y%m%d_%H%M%S)cp "$TOMCAT_HOME/webapps/sunwukong-generator.war" \"$BACKUP_DIR/sunwukong-generator_$TIMESTAMP.war"echo "✓ 已备份当前版本到 $BACKUP_DIR"
fi# 停止 Tomcat
echo "正在停止 Tomcat..."
$TOMCAT_HOME/bin/shutdown.sh
sleep 5# 删除旧文件
rm -f "$TOMCAT_HOME/webapps/sunwukong-generator.war"
rm -rf "$TOMCAT_HOME/webapps/sunwukong-generator"# 部署新版本
cp "$WAR_FILE" "$TOMCAT_HOME/webapps/"
echo "✓ 已部署新版本"# 启动 Tomcat
echo "正在启动 Tomcat..."
$TOMCAT_HOME/bin/startup.sh# 等待启动
echo "等待应用启动..."
sleep 10# 健康检查
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \http://localhost:8080/sunwukong-generator/)if [ "$HTTP_CODE" -eq 200 ]; thenecho "======================================"echo "✓ 部署成功!"echo "访问地址: http://localhost:8080/sunwukong-generator"echo "======================================"
elseecho "======================================"echo "✗ 部署失败!HTTP 状态码: $HTTP_CODE"echo "请查看日志: $TOMCAT_HOME/logs/catalina.out"echo "======================================"exit 1
fi