Skip to content

MSTBL/MAXNODE

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
```

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors