# 运维与部署模块 ## 服务器与基础设施 ### 环境信息 - **域名**: www.zhuig.com (HTTPS,SSL证书自动续期) - **云服务器**: 119.45.242.239 (登录名: ubuntu, 密钥: E:\ZG_Dev\pem\zg.pem) - **数据库**: 阿里云RDS MySQL — rm-0jlbgr2rv6dj3t6jngo.mysql.rds.aliyuncs.com:3306 - **Redis**: Docker容器redis-cache:6379,有密码认证 - **开发机**: E:\ZG_Dev\ZhuiGuangAI\zhuiguang-ai - **部署目录**: /home/ubuntu/zhuiguang-ai - **访问地址**: https://www.zhuig.com (HTTP自动跳转HTTPS) - **本地Git同步目录**: K:\git-repos ### 端口规范 - **应用端口范围**: 8301-8310(预留扩展) - **默认端口**: 8301 - **重启脚本**: 仅扫描8301-8310范围 - **强制要求**: 本项目端口必须锁定在8301-8310区间内,禁止使用其他端口 ## Nginx配置 - 文件: `nginx.conf` - HTTPS反向代理到本地8301端口 - HTTP自动跳转HTTPS - SSL证书自动续期 ## 部署流程 ### 本地开发 ```bash # 1. 安装依赖 npm install # 2. 配置环境变量 # 编辑 .env 文件 # 3. 数据库迁移 npx prisma migrate dev # 4. 启动开发服务器 npm run dev # 或重启 pwsh -ExecutionPolicy Bypass -File restart.ps1 ``` ### 服务器部署 ```bash # 1. SSH到服务器 ssh -i E:\ZG_Dev\pem\zg.pem ubuntu@119.45.242.239 # 2. 进入部署目录 cd /home/ubuntu/zhuiguang-ai # 3. 拉取最新代码 git pull # 4. 安装依赖 npm install # 5. 数据库迁移 npx prisma migrate deploy # 6. 构建生产版本 npm run build # 7. 重启服务 pm2 restart zhuiguang-ai ``` ## 定时任务 (Crontab) ### Crontab配置 - 用户: ubuntu - 查看: `crontab -l` - 编辑: `crontab -e` ### 任务列表 | 时间 | 任务 | 脚本 | TaskKey | 说明 | |------|------|------|---------|------| | 01:00 | Task5 更新星值 | `scripts/task5-update-stars.mjs` | task5-update-stars | 更新所有GitHub技能Stars数+日/周/月变化 | | 03:00 | Task3 工具巡检 | `scripts/task3-check-tools.mjs` | task3-check-tools | 检查网站/Logo可访问性+自动发布合格待审核工具 | | 04:00 | Task6 评测热门 | `scripts/task6-review-hot.mjs` | task6-review-hot | 评测2个最热未评测GitHub技能(五维评测) | | 05:00 | Task4 发现技能 | `scripts/daily-discover.mjs` | task4-discover-skills | GitHub搜索≥1000 stars项目→DeepSeek预评测→入库PendingSkill | | 06:00 | Task1 发现工具 | `scripts/task1-discover-tools.mjs` | task1-discover-tools | 36kr/IT之家/开源中国RSS→DeepSeek提取工具→入库PendingTool | | 07:30 | AI日报 | `scripts/daily-news.mjs` | daily-news | 多源搜索真实新闻+DeepSeek整理格式→发布日报 | ### 日志目录 - 路径: `/home/ubuntu/zhuiguang-ai/logs/` - 文件: task1.log ~ task6.log ### 任务执行原理 1. Crontab定时触发脚本执行 2. 脚本调用外部API(GitHub/DeepSeek/网站) 3. 数据写入数据库(Tool/Skill/PendingTool/PendingSkill/DailyReport) 4. TaskLog表记录执行结果(status/duration/result/error) 5. 后台管理页面可视化管理(/admin/tasks) 6. 支持手动触发(POST /api/admin/tasks/run) ## 环境变量 ### .env配置 ```bash # 数据库 DATABASE_URL="mysql://mohe001:***@rm-0jlbgr2rv6dj3t6jngo.mysql.rds.aliyuncs.com:3306/zhuiguang_ai?charset=utf8mb4" # NextAuth NEXTAUTH_URL="http://localhost:8301" NEXTAUTH_SECRET="zhuiguang-ai-dev-secret" # GitHub API(可选,提升限流) GITHUB_TOKEN="" # DeepSeek API(用于技能评测生成脚本、AI日报整理) DEEPSEEK_API_KEY="sk-..." ``` ## PM2配置 - 进程名: zhuiguang-ai - 启动命令: `npm run start` - 端口: 8301 - 重启: `pm2 restart zhuiguang-ai` ## 踩坑记录 - Next.js 14不支持useActionState,登录页用原生表单POST - Prisma MariaDB adapter需要连接字符串方式初始化 - 图片域名需在next.config.mjs中配置remotePatterns - 热重载后需清除.next缓存: 删除.next目录后重启 - Chart.js组件需用dynamic import + ssr: false,不支持服务端渲染 - Prisma 7.8需通过PrismaMariaDb适配器初始化,不能直接new PrismaClient() - 服务器环境SSL证书问题: 运行脚本需设置$env:NODE_TLS_REJECT_UNAUTHORIZED="0" - Chart.js font.weight只接受bold/normal/bolder/lighter,不接受数字字符串如"500"