4.2 KiB
4.2 KiB
运维与部署模块
服务器与基础设施
环境信息
- 域名: 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证书自动续期
部署流程
本地开发
# 1. 安装依赖
npm install
# 2. 配置环境变量
# 编辑 .env 文件
# 3. 数据库迁移
npx prisma migrate dev
# 4. 启动开发服务器
npm run dev
# 或重启
pwsh -ExecutionPolicy Bypass -File restart.ps1
服务器部署
# 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
任务执行原理
- Crontab定时触发脚本执行
- 脚本调用外部API(GitHub/DeepSeek/网站)
- 数据写入数据库(Tool/Skill/PendingTool/PendingSkill/DailyReport)
- TaskLog表记录执行结果(status/duration/result/error)
- 后台管理页面可视化管理(/admin/tasks)
- 支持手动触发(POST /api/admin/tasks/run)
环境变量
.env配置
# 数据库
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"