MSTBL/MAXNODE
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
Tree Forum - Ant Design 重构版 环境变量: 复制 `.env.example` 为 `.env` 并设置 `DATABASE_URL` 与 `COOKIE_SECRET`。⚠️ 当前版本所有写接口(`POST /nodes`、`POST /upload`、`PATCH /nodes/:id`)需要登录。任何人都可以注册账号;登录态用 HttpOnly + SameSite=Lax 的签名 cookie 维持。 匿名展示设计:发帖时填的「用户名」是公开展示的,可以随便填,与你的账号用户名(私密、不公开)无关。但你只能编辑自己账号发布的节点。每次编辑会在节点详情页留下一条"修改时间"的痕迹(不显示是谁改的)。 接口契约要点: - 上传接口 `POST /upload` 使用 `multipart/form-data`,单文件字段名为 `file`,最大 8 MiB; 服务端会按 magic byte 校验真实文件类型,扩展名不再被信任。允许的类型: png / jpeg / gif / webp / heic / heif。 开发模式(推荐): ```powershell Set-Location "D:\Coding\MAXNODE" npm run dev ``` 说明:`npm run dev` 会同时启动后端和 Vite 前端,并自动清理 `3000` / `5173` 端口占用。 访问地址: - 前端页面:http://127.0.0.1:5173/ - 后端接口:http://127.0.0.1:3000/ 生产构建: ```powershell Set-Location "D:\Coding\MAXNODE" npm run build npm start ``` 说明:`npm run build` 会把 Ant Design 前端构建到 `dist`,`npm start` 会让后端直接托管这个构建结果。 生产部署清单(重要): 1. 设置 `COOKIE_SECRET` 为 64 字节随机十六进制字符串。生成命令: `node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"` 未设置时,`NODE_ENV=production` 会拒绝启动;非生产环境会回落到一个明显的占位 值(不要在生产环境使用)。 2. 如果应用部署在反向代理(nginx / Cloudflare / ALB / ...)后面,必须设置 `TRUST_PROXY=1`。否则 `request.ip` 始终是代理 IP,每客户端限流会退化成 每代理限流。 3. 健康检查 / 探针: - `/health`:进程存活探针(liveness),不查数据库。 - `/ready`:就绪探针(readiness),1 秒内能 `SELECT 1` 才返回 200, 否则返回 503。Kubernetes / PM2 的 readiness probe 应改用此端点。 4. PostgreSQL 连接池调优(可选,全部为整数环境变量,非法值会回落默认值): - `PG_POOL_MAX`(默认 20) - `PG_IDLE_TIMEOUT_MS`(默认 30000) - `PG_CONNECTION_TIMEOUT_MS`(默认 5000) - `PG_STATEMENT_TIMEOUT_MS`(默认 10000,应用于每个连接的 PG `statement_timeout`) - `PG_APPLICATION_NAME`(默认 `tree-forum`,在 `pg_stat_activity` 里可见) 5. CSRF / 写接口约束: - 所有写接口(POST/PATCH/PUT/DELETE)需要 `Content-Type: application/json`, `POST /upload` 需要 `multipart/form-data`,`POST /auth/logout` 与无 body 的 DELETE 不强制 Content-Type。 - 所有写接口要么是同源调用(`Sec-Fetch-Site: same-origin`),要么不带 Origin 头(服务器到服务器调用,例如 CI 脚本)。跨站调用一律 403 `cross_site_blocked`。 6. CORS:当前为 `origin: false`(同源严格)。需要跨源客户端时改 `src/app.js` 的 `@fastify/cors` 注册参数,并把白名单做成显式的 env 配置。 如果你只想快速手动重开前端,也可以继续使用下面这段老指令,但一般不需要了: ```powershell Set-Location "D:\Coding\MAXNODE" # 清理占用 3000 端口的旧进程 $conn = Get-NetTCPConnection -LocalPort 3000 -State Listen -ErrorAction SilentlyContinue if ($conn) { $procIds = $conn | Select-Object -ExpandProperty OwningProcess -Unique foreach ($procId in $procIds) { Stop-Process -Id $procId -Force } Write-Host "Killed process IDs: $($procIds -join ', ')" } else { Write-Host "No process using port 3000" } # 启动开发服务(保持这个终端不要关闭) npm run dev ```