更新:2026-09-05 16:11

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.tsapp.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.tsruntimeConfig.public(构建时写入):

  • baseUrl / serverUrl:后端 API 地址(正式域名,默认 https://api.ruletree.club/)。
  • webKey / appKey:站点调用密钥(与后端配置一致)。
  • isLogin:全局登录开关。

部署多环境可用 runtimeConfigNITRO_ 环境变量覆盖(如 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