主要更新: 1. FRP服务器诊断与修复 - 发现并修复文件描述符耗尽问题(65,536 → 1,048,576) - 分析并解决用户上传失败问题 - 确认SSH服务器安全未被攻破 2. 安全防护系统部署 - 部署IP黑名单防火墙(封禁20+攻击者) - 设置SSH端口速率限制 - 配置自动化定时任务(每小时更新) - 安装Fail2ban实时防护系统 - 添加白名单保护机制 3. 内网访问优化 - 改进内网检测逻辑 - 添加网络状态API - 优化钉钉登录流程 - 完善信息补充功能 4. 文档完善 - FRP服务器诊断修复报告 - SSH安全评估报告 - Fail2ban使用指南 - 文件描述符详解 - 用户上传失败原因分析 - 防火墙配置说明 - 内网检测改进报告 修复的问题: - ✅ 文件描述符耗尽导致的服务异常 - ✅ 用户上传失败(影响9.5小时) - ✅ SSH暴力破解攻击(91,299+次) - ✅ 第三方项目攻击影响 - ✅ 127.0.0.1误封禁问题 部署的安全措施: - 三重防护体系(Fail2ban + 防火墙 + 强密码) - 自动化监控和封禁 - 实时攻击拦截(秒级响应) - 完整的管理和监控工具 测试环境:开发环境 影响范围:服务器安全、用户上传、系统稳定性 当前状态:✅ 所有问题已修复,系统运行正常
6.1 KiB
6.1 KiB
🚀 NAS服务器部署成功报告
部署日期: 2025年10月28日
操作人员: AI助手
部署版本: v2.5(包含部门管理和AI聊天功能)
✅ 部署概览
问题诊断
- ❌ 旧部署位置:
/mnt/PoolOne/data1/gongxiangpan(10月16日旧代码,运行中) - ✅ 新部署位置:
/mnt/PoolOne/apps/youyidian-3d(10月28日最新代码,已部署) - ⚠️ 问题: 更新脚本将代码上传到新目录但未启动容器
解决方案
- 停止旧容器 - 安全停止旧的web服务
- 启动新容器 - 在新目录构建并启动最新代码
- 数据库迁移 - 平滑迁移,保留所有现有数据
- 修复AI配置 - 更换可用的AI模型
📊 部署详情
1. 服务器信息
NAS服务器IP: 192.168.58.20
项目路径: /mnt/PoolOne/apps/youyidian-3d
容器名称: youyidian-3d-material
2. 服务状态
| 服务 | 状态 | 端口映射 | 运行时间 |
|---|---|---|---|
| youyidian-3d-material | ✅ Running | 4320→3000 | 刚启动 |
| gongxiangpan-postgres-1 | ✅ Healthy | 5432→5432 | 12天 |
| frpc-youyidian | ✅ Running | - | 10天 |
3. 数据完整性验证
✅ 所有数据完好无损
| 数据表 | 记录数 | 状态 |
|---|---|---|
| 用户 (users) | 11 | ✅ 完整 |
| 素材 (materials) | 15 | ✅ 完整 |
| 部门 (departments) | 13 | ✅ 完整 |
| 分类 (categories) | 7 | ✅ 完整 |
🆕 新功能验证
✅ 部门管理功能
- API地址:
/api/departments - 功能: 获取、创建、编辑、删除部门
- 数据: 13个部门(视觉一到六部,策划一到七部)
- 状态: ✅ 正常工作
✅ AI聊天功能
- API地址:
/api/ai-chat - 配置:
- API Base:
https://api.huandutech.com/v1 - 模型:
gemini-1.5-flash(已从gemini-2.0-flash-exp更换)
- API Base:
- 问题修复: ✅ 模型不可用问题已解决
- 状态: ✅ 正常工作
🔧 配置更新
Docker Compose 配置
服务端口: 4320:3000
数据库: postgresql://192.168.58.20:5432/lobechat
AI模型: gemini-1.5-flash (更换后可用)
存储: S3 (s3.1080p.hk/jsxiangche)
环境变量更新
- ✅
GEMINI_MODEL: gemini-2.0-flash-exp → gemini-1.5-flash - ✅
DATABASE_URL: 连接到本地PostgreSQL - ✅
NEXTAUTH_URL: http://192.168.58.20:4320
🌐 访问地址
内网访问(推荐)
http://192.168.58.20:4320
- ✅ 健康检查: http://192.168.58.20:4320/api/health
- ✅ 部门API: http://192.168.58.20:4320/api/departments
- ✅ AI聊天: http://192.168.58.20:4320/api/ai-chat
公网访问(FRP穿透)
http://180.97.221.140:2320
- FRP状态: ✅ 运行10天
- 穿透端口: 本地4320 → 公网2320
📝 部署日志
构建过程
✅ 排除源码目录避免构建错误
✅ Next.js 14.2.33 构建成功
✅ Prisma Client 生成成功
✅ Docker镜像构建成功
✅ 容器启动成功
数据库迁移
✅ 运行 prisma db push
✅ 数据库模式同步
✅ 现有数据完整保留
AI配置修复
❌ 原问题: gemini-2.0-flash-exp 模型不可用
✅ 解决方案: 更换为 gemini-1.5-flash
✅ 容器重启应用新配置
✅ AI功能正常工作
🎯 测试结果
系统健康检查
curl http://192.168.58.20:4320/api/health
{"status":"ok","timestamp":"2025-10-28T03:13:31.156Z"}
部门管理API测试
curl http://192.168.58.20:4320/api/departments
✅ 返回13个部门数据
容器日志检查
✅ 无错误日志
✅ 数据库查询正常
✅ API响应正常
📂 目录结构
生产环境
/mnt/PoolOne/apps/youyidian-3d/
├── docker-compose.yml (最新)
├── Dockerfile
├── app/ (应用代码)
├── components/
├── lib/
├── prisma/
├── uploads/ (上传文件)
└── .dockerignore (已更新)
数据库
容器: gongxiangpan-postgres-1
数据库: lobechat
位置: /mnt/PoolOne/data1/gongxiangpan (PostgreSQL数据卷)
⚠️ 重要提醒
1. 旧容器清理
# 旧的web容器已停止并删除
# 位置: /mnt/PoolOne/data1/gongxiangpan
# 状态: 仅保留PostgreSQL数据库容器运行
2. 部署路径变更
旧路径: /mnt/PoolOne/data1/gongxiangpan (废弃)
新路径: /mnt/PoolOne/apps/youyidian-3d (当前)
3. 端口变更
旧端口: 3000 (已释放)
新端口: 4320 (当前使用)
🔄 未来部署流程
更新代码
# 1. 本地打包
cd /Users/lanmu/Desktop/gongxiangp2
tar -czf project-update.tar.gz \
--exclude='node_modules' \
--exclude='.next' \
--exclude='源码' \
--exclude='uploads' \
.
# 2. 上传到服务器
scp project-update.tar.gz root@192.168.58.20:/mnt/PoolOne/apps/youyidian-3d/
# 3. SSH连接并部署
ssh root@192.168.58.20
cd /mnt/PoolOne/apps/youyidian-3d
tar -xzf project-update.tar.gz
docker compose down
docker compose up -d --build
# 4. 验证
docker compose logs -f app
curl http://192.168.58.20:4320/api/health
或使用部署脚本
bash update-deploy.sh
📞 技术支持
常用命令
# 查看容器状态
ssh root@192.168.58.20 "docker ps"
# 查看应用日志
ssh root@192.168.58.20 "cd /mnt/PoolOne/apps/youyidian-3d && docker compose logs -f app"
# 重启服务
ssh root@192.168.58.20 "cd /mnt/PoolOne/apps/youyidian-3d && docker compose restart"
# 查看数据库数据
ssh root@192.168.58.20 "docker exec gongxiangpan-postgres-1 psql -U gongxiangpan -d lobechat -c 'SELECT COUNT(*) FROM users;'"
监控URL
✨ 总结
✅ 部署成功 - 所有服务正常运行
✅ 数据完整 - 11用户、15素材、13部门、7分类
✅ 新功能可用 - 部门管理、AI聊天正常工作
✅ 配置优化 - AI模型已更换为稳定版本
✅ 访问正常 - 内网4320端口和公网2320端口均可访问
部署状态: 🟢 生产环境稳定运行
生成时间: 2025-10-28 11:25:00
文档版本: 1.0