Appearance
部署 jy-admin 管理端
部署模式
Next.js Standalone 预构建包 + systemd + Nginx 反代
text
本机 pnpm build → .next/standalone → tar(排除 .env)→ scp
→ 服务器 /opt/web/jy-admin → systemctl restart jy-admin
→ Nginx https://admin.jianyi.my → 127.0.0.1:5174本机构建
jy-admin/next.config.ts 已设 output: 'standalone'。
bash
cd jy-admin
NODE_ENV=production pnpm build
rm -f .next/standalone/.env # 确保不把本地密钥打进包
cp -R .next/static .next/standalone/.next/static
cp -R public .next/standalone/public
COPYFILE_DISABLE=1 tar -C .next/standalone \
--exclude '.env' --exclude '.env.*' \
-czf /tmp/jy-admin-standalone.tgz .服务器部署
bash
scp /tmp/jy-admin-standalone.tgz jy-test:/tmp/
ssh jy-test 'set -e
systemctl stop jy-admin
cp -a /opt/web/jy-admin /opt/web/jy-admin.bak.$(date +%Y%m%d-%H%M%S)
cp -a /opt/web/jy-admin/.env /tmp/jy-admin.env.keep
rm -rf /opt/web/jy-admin && mkdir -p /opt/web/jy-admin
tar -xzf /tmp/jy-admin-standalone.tgz -C /opt/web/jy-admin
cp -a /tmp/jy-admin.env.keep /opt/web/jy-admin/.env
chmod 600 /opt/web/jy-admin/.env
systemctl start jy-admin
'必须保留服务器原有 .env(数据库、SESSION_SECRET、GITHUB_*)。
systemd
Unit:/etc/systemd/system/jy-admin.service
ini
WorkingDirectory=/opt/web/jy-admin
EnvironmentFile=/opt/web/jy-admin/.env
ExecStart=/usr/local/bin/node server.js常用:
bash
systemctl status jy-admin
systemctl restart jy-admin # 改 .env 后
journalctl -u jy-admin -n 80 --no-pager服务器 .env 要点
| 变量 | 说明 |
|---|---|
DATABASE_* | 生产用 127.0.0.1,用户 blog |
SESSION_SECRET | ≥32 字符 |
GITHUB_REPOSITORY | jianyi241/jy-site |
GITHUB_TOKEN | 能发 repository_dispatch 的 PAT |
只改 .env:不必重新 build 管理端,只需 restart。
与静态站部署的区别
| jy-site | jy-admin | |
|---|---|---|
| 产物 | build/ HTML | server.js + 精简 node_modules |
| 服务器进程 | 无 | systemd 常驻 Node |
| Nginx | root 静态 | proxy_pass 反代 |
| 自动 CI | 有(Actions) | 无(目前手动 scp) |
验证
bash
curl -sI https://admin.jianyi.my/login | head -1
# HTTP/2 200设置页「GitHub Token」显示已配置 → 可点「构建并部署」。
延伸阅读
- 部署管理端完整文档(含方案对比、systemd 详解)