互联网教程

用宝塔部署 Java 或 Node 项目

宝塔的 Java 与 Node 项目管理器能把 jar 或 node 服务跑起来,但真正让人卡住的是端口、反向代理、守护进程和日志这四件事。

发布者:黔序科技依据官方文档核验:2026 年 11 月

核心结论

  • 应用监听本地端口,nginx 反代对外暴露
  • 用进程管理器守护,别用 nohup 跑
  • 日志要落到文件并按大小切分

一句话:标准结构:应用只监听 127.0.0.1:端口 → nginx 80/443 反代到该端口 → 进程管理器负责启动与自愈 → 日志释按天切分。

Java(jar)部署

  1. 装 JDK版本与项目一致,配好 JAVA_HOME。
  2. 上传 jar放到固定目录,如 /www/app/,配置文件外置,别打进 jar。
  3. 启动在宝塔「Java 项目」里添加,指定 jar 路径、端口、启动参数(如 -Xms512m -Xmx1g)。
  4. 反代建站点,配 proxy_pass http://127.0.0.1:端口,带上 Host 与真实 IP 头。
  5. 验证先 curl 本地端口,再访问域名;看启动日志有没有端口占用或数据库连不上。

Node 部署

  1. 装 Node用 nvm 或宝塔的 Node 版本管理,锁定 LTS 版本。
  2. 装依赖用 npm ci 保证与 lock 文件一致,别在生产装 devDependencies。
  3. 守护进程用 pm2 启动并设置开机自启,日志路径指向固定目录。
  4. 反代同 Java,proxy_pass 到 Node 端口,注意 WebSocket 要加 Upgrade 头。

注意:不要用 nohup 或面板的「后台运行」来跑生产服务。SSH 断开、面板重启都会让它挂掉,而且没有自动拉起。用 pm2 或 systemd,出问题能自愈、能看状态。

nginx 反代要点

  • 带真实 IP:proxy_set_header X-Real-IP $remote_addr; 与 X-Forwarded-For。
  • 带协议:X-Forwarded-Proto $scheme;,否则应用生成的链接会是 http。
  • 大文件上传要调 client_max_body_size。
  • 超时要设,默认 60 秒对长任务不够,表现为 504。

排查顺序

本地 curl 端口 → 服务器 curl 域名释 → 外部访问。本地通、外部不通查 nginx 与防火墙;都不通查进程与日志。日志在应用目录或 journalctl,先看报错再猜。

资料来源

  • nginx 文档:proxy_pass 与 proxy_set_header 指令。
  • pm2 官方文档:进程守护、日志与开机自启。
  • systemd 文档:service 单元与自动重启策略。

常见问题

jar 启动后马上退出是什么原因?

看启动日志。常见是端口被占用、数据库连不上、配置文件路径不对、JDK 版本不兼容。日志第一段通常就写了原因。

应用要不要直接监听 80 端口?

不要。让 nginx 占 80/443,应用监听本地端口再反代。这样证书、缓存、限流都在 nginx 统一处理,换应用不用改网络配置。

Node 内存越跑越高怎么办?

先看是不是有内存泄漏(长连接、缓存无上限),用 pm2 的 max-memory-restart 做保底,但不能替代修复。

相关阅读