Sulo 门户站点部署
Sulo 是 Nuxt 4 的 Web 门户站点(规则之树官网),服务端渲染(SSR)+ 客户端水合。部署为 Node 服务(
node .output/server),或用 PM2 / systemd 保活。
1. 构建
cd Sulo
npm install # 首次
npm run build # 产出 .output/
构建产物结构:
Sulo/.output/
├── public/ # 静态资源(含 /style/ 前缀的构建资源)
├── server/ # Node 服务入口(node server/index.mjs)
└── …
nuxt.config.ts的app.buildAssetsDir: '/style/':构建资源路径为/style/_nuxt/...(兼容旧站)。部署时保持此路径即可,无需额外处理;若希望默认/_nuxt/,改配置后重新构建即可。
2. 部署为 Node 服务(PM2 或 systemd)
部署目录:
/opt/sulo/
├── .output/ # 构建产物
├── config/ #(可选)环境变量文件
└── logs/
2.1 PM2(推荐)
npm i -g pm2
cd /opt/sulo
pm2 start .output/server/index.mjs --name sulo --env production
pm2 save && pm2 startup # 开机自启
pm2 logs sulo # 日志
2.2 systemd
/etc/systemd/system/sulo.service:
[Unit]
Description=Sulo Web Portal
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/sulo
ExecStart=/usr/bin/node /opt/sulo/.output/server/index.mjs
Restart=on-failure
RestartSec=10
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
systemctl daemon-reload && systemctl enable sulo && systemctl start sulo
2.3 直跑(调试)
node /opt/sulo/.output/server/index.mjs
# 默认端口 3000,可用 PORT=3000 环境变量覆盖
3. nginx 反向代理
server {
listen 443 ssl http2;
server_name www.ruletree.club;
# 静态资源(/style/ 前缀)可直接由 nginx 提供,加速
location /style/ {
alias /opt/sulo/.output/public/style/;
expires 30d;
add_header Cache-Control "public, immutable";
}
# 其余交给 Node SSR
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; # WebSocket 支持
proxy_set_header Connection "upgrade";
proxy_read_timeout 120s;
}
}
若
location /style/与构建产物路径不一致,可去掉该块交给 Node 统一处理(更省心,稍慢)。
4. 与环境相关配置
nuxt.config.ts 的 runtimeConfig.public(构建时写入):
baseUrl/serverUrl:后端 API 地址(正式域名,默认https://api.ruletree.club/)。webKey/appKey:站点调用密钥(与后端配置一致)。isLogin:全局登录开关。
部署多环境可用 runtimeConfig 的 NITRO_ 环境变量覆盖(如 NUXT_PUBLIC_BASE_URL)——按项目注释为准,默认改 nuxt.config.ts 后重新 build。
5. 升级 Sulo
cd /opt/sulo
# 拉新代码 → npm install → npm run build
npm run build
pm2 restart sulo # 或 systemctl restart sulo
SSR 站点升级注意:
/style/等构建资源路径变化时,旧页面缓存可能指向旧资源;建议升级后清 CDN/浏览器缓存(或静态资源加版本号)。
6. 常见问题
| 现象 | 排查 |
|---|---|
| 502 | Node 未启动或端口不对(curl 127.0.0.1:3000) |
| 资源 404 | /style/ alias 路径与 .output/public/style 实际不一致;直接去掉该 location 交给 Node |
| 接口白屏 | baseUrl 指向不对;检查后端反代与跨域头 |
| 内存波动大 | SSR 正常;按规模调 NODE_OPTIONS=--max-old-space-size 或加 PM2 内存限制(max_memory_restart) |