基于 Next.js + Tailwind CSS + Framer Motion(前端)、Node.js + Express(后端, 负责公告、管理员鉴权、MC 服务器状态、以及评论)的服务器官网 / 门户。 整站技术栈均为 Node.js。
- 首页:服务器状态(在线人数 / 版本 / 延迟)、最新公告、加入指引
- 公告板:列表 + 详情页(详情页内嵌评论区)
- 管理后台:管理员登录 + 公告增删改查(JWT 鉴权,bcrypt 密码哈希)
- 评论区:后端内置 LokiJS 本地文件存储,无需任何外部数据库
- 前端:Next.js(App Router)、Tailwind CSS、Framer Motion
- 后端:Node.js + Express(
backend/单进程,同时提供/api与/comments) - 公告数据:SQLite(使用 Node.js 内置
node:sqlite,本地文件data/portal.db,无需原生编译) - 评论数据:LokiJS(本地文件
data/comments.db) - 鉴权:bcryptjs 密码哈希 + jsonwebtoken(HS256)签发 JWT
backend/ Node 后端(Express):公告 + 鉴权 + MC状态 + 评论
server.js 入口 HTTP 服务
create-admin.js 创建/列出管理员的 CLI
src/db.js SQLite 初始化与公告/管理员 CRUD
src/auth.js bcrypt + jwt 鉴权中间件
src/mcstatus.js MC Server List Ping 状态探测
src/comments.js LokiJS 评论路由
frontend/ Next.js 应用
scripts/ nginx.conf、systemd unit、start.sh
cd backend
npm install
export JWT_SECRET=dev-secret DB_PATH=data/portal.db MC_SERVER_HOST=127.0.0.1 MC_SERVER_PORT=25565
node create-admin.js create --user admin --password '你的密码'
npm start # 监听 127.0.0.1:6666cd frontend
cp .env.local.example .env.local # 一般无需修改
npm install
npm run dev # http://localhost:4444,/api 与 /comments 已反代CI 会产出单一自包含包 tudoubbs-deploy.zip,内含装好依赖的 Node 后端、可直接
next start 的前端,以及 start.sh。你只需:
# 1. 在 GitHub 仓库 Actions → 最新 Build & Package → 下载 tudoubbs-deploy.zip
# 2. 解压并启动
unzip tudoubbs-deploy.zip -d tudoubbs
cd tudoubbs
bash start.sh- 首次运行会自动创建管理员(控制台会打印 用户名/密码),访问
http://<服务器IP>:4444 - 前端在
:4444直接可用;/api与/comments由前端反代到本地后端:6666 - 数据落在
data/(portal.db + comments.db),日志在data/*.log
nginx.conf:反代/→ Next(4444)、/api→ 后端(6666)、/comments→ 后端(6666)systemd/tudoubbs-backend.service:单 Node 后端服务;systemd/tudoubbs-next.service:Next 服务 需自行把目录放到/opt/tudoubbs,并把JWT_SECRET改为强随机值- 反向代理由你自行配置(见 nginx.conf 模板 + certbot 签发证书)
| 变量 | 默认 | 说明 |
|---|---|---|
PORT |
6666 |
后端 HTTP 监听端口 |
DB_PATH |
data/portal.db |
SQLite 文件路径 |
DATA_DIR |
data/ |
数据目录(SQLite + comments.db 落盘处) |
JWT_SECRET |
dev-insecure-... |
管理员 JWT 签名密钥(生产必填) |
JWT_TTL |
86400 |
JWT 有效期(秒) |
MC_SERVER_HOST / MC_SERVER_PORT |
127.0.0.1 / 25565 |
MC 服务器地址 |
MC_TIMEOUT |
5000 |
MC 状态探测超时(毫秒) |
| 变量 | 说明 |
|---|---|
NEXT_PUBLIC_API_BASE |
留空=同源(由 Nginx 反代 /api 与 /comments) |
GO_API_TARGET |
开发时 Next 反代 /api 的目标(默认 6666) |
COMMENTS_TARGET |
开发时 Next 反代 /comments 的目标(默认 6666) |
- 评论系统用 LokiJS 将评论直接落盘到本地
data/comments.db,无需外部数据库; 它与公告/鉴权/MC状态运行在同一个 Node 进程内(统一/comments路由)。 - MC 状态使用 TCP "Server List Ping" 协议(默认开启,无需 enable-query)。
- 评论的删除操作复用后端颁发的 JWT(共享
JWT_SECRET),管理员登录一次即可。 - 公告库使用 Node.js 内置的
node:sqlite(Node 22.5+ 可用,部署服务器 Node 24 满足), 属于 Node 自带模块,无任何原生编译 / 平台二进制依赖,下载即跑,彻底避免原生模块 在目标机上因 glibc / Node 版本不匹配而加载失败的问题。