让云服务器上的 Vue 一直运行,关键不在于“守着 Vue 进程”,而在于分清静态站点和 Node 服务的差异:打包后的 Vue 交给 Nginx 常驻,需要跑 Node 的 SSR 项目交给 systemd 或 pm2 守护,再配合开机自启、进程重启和云监控,才算真正“一直在线”。
先分清:你让“一直运行”的到底是哪一层
很多人在云服务器上敲完 npm run dev,关掉 SSH 窗口页面就打不开,于是认为是“Vue 停了”,实际上停的是那条前台命令,不是服务器。
Vue 打包后其实不需要“运行”
Vue 单页应用构建出来是 dist 目录里的一堆 HTML、JS、CSS 文件,它们不需要进程来解释执行,只需要一台 Web 服务器把文件发出去,所以生产环境里的常驻任务,是让 Nginx 或 Apache 一直活着,而不是让 Vue 一直活着,行业共识认为,静态资源交给专业 Web 服务器处理,性能和稳定性都优于让 Node 承担。
真正需要常驻进程的两种情况
- SSR 项目:Nuxt、Vue SSR 这类方案要在服务端渲染,跑的是一个 Node 进程,进程没了页面就是 502。
- 开发或预览环境:Vite 的 dev server、
vite preview这类临时服务,端口一般是 5173 或 4173,只适合调试。
判断方法很简单:看你的启动命令是 npm run build 后交给 Nginx,还是 node server.js 长期占着某个端口,前者是文件,后者是进程,处置方式完全不同。
Vue 项目部署到云服务器后怎么保持后台运行
这是搜索量最集中的问题,答案分三条路线,按你的项目类型选。
静态站点,Nginx 常驻
流程是本地或服务器上 npm run build 生成 dist,上传到 /var/www/vue-app,然后写一份 Nginx 配置:
server {
listen 80;
server_name your-domain.com;
root /var/www/vue-app;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:3000;
}
}
改完后执行 nginx -t 检查语法,再 systemctl reload nginx 生效,Nginx 由系统服务管理,服务器重启后自动拉起,你根本不用管它。
try_files $uri $uri/ /index.html 这行不能省,否则刷新子路由会 404,这是新手最常踩的坑。
Node 服务用 pm2 守护
SSR 项目或自建 Node 接口,最省事的工具是 pm2:
npm install -g pm2 pm2 start npm --name vue-ssr -- run start pm2 save pm2 startup
pm2 save 保存当前进程列表,pm2 startup 生成开机自启脚本,命令执行后会打印一条 sudo env PATH=... 的提示,把它复制执行一遍才算真正配好,之后用 pm2 logs vue-ssr 看日志,pm2 restart vue-ssr 重启。
pm2 的好处是上手快、日志自动切割、支持集群模式;代价是多一层运行时,出问题时排查链条长一点。
systemd,系统级托管
不想装额外工具,直接写一个 unit 文件 /etc/systemd/system/vue-ssr.service:
[Unit] Description=vue-ssr After=network.target [Service] Type=simple User=www-data WorkingDirectory=/var/www/vue-ssr ExecStart=/usr/bin/node server.js Restart=always RestartSec=3 Environment=NODE_ENV=production [Install] WantedBy=multi-user.target
systemctl daemon-reload、systemctl enable --now vue-ssr。Restart=always 加 RestartSec=3 意味着进程挂掉三秒后自动重来,比人肉登录服务器重启靠谱得多。
如果只是临时验证,用 nohup npm run dev > app.log 2>&1 & 也能撑一会儿,但服务器重启就没了,不适合长期方案。
对比:pm2和systemd哪个更适合守护vue进程
两者都能做到进程掉线自动拉起,差别在定位。
| 维度 | pm2 | systemd |
|---|---|---|
| 安装成本 | 需全局 npm 安装 | 系统自带 |
| 开机自启 | 需额外执行 startup | enable 即可 |
| 日志管理 | 内置切割与查看 | 交给 journald |
| 多进程负载 | 支持 cluster 模式 | 需配模板单元 |
| 排查复杂度 | 多一层运行时要理解 | 贴近系统,报错直观 |
| 适合场景 | 频繁发布、多实例 | 单实例、追求稳定 |
结论比较清晰:单台服务器跑一两个 Node 服务,systemd 更“贴地”;需要蓝绿发布、多实例负载、频繁看日志,pm2 更顺手,两者不冲突,但别在同一个服务上重复守护。
简米云服务器部署vue项目常驻运行的几个坑
地域和厂商不影响原理,但影响细节,不管是简米云的华东节点还是华北节点,下面几件事都要检查。
- 安全组没放行端口:Nginx 的 80、443,或 Node 服务绑定的端口,都要在控制台安全组里加规则,服务器内部
ufw、firewalld也要同步放行。 - 进程只监听 127.0.0.1:Node 写死
0.0.1:3000,外网直连必然失败,这是正常的,应该由 Nginx 反向代理过去,不要为了图省事改成0.0.0裸奔。 - 内存太小被 OOM 杀掉:2G 内存跑构建加 Node,容易被系统内核终止,加一块 swap 能缓冲,
fallocate -l 2G /swapfile后mkswap、swapon即可。 - Node 版本不一致:服务器上是 Node 16,本地是 Node 20,构建产物或 SSR 运行都可能报错,用 nvm 固定版本,并在项目里写
.nvmrc。 - 时区不对:日志时间错八小时,排查问题会误判,用
timedatectl set-timezone Asia/Shanghai统一。
云服务器跑vue项目一个月多少钱
成本取决于架构,纯静态站点对 CPU 几乎没有要求,一台轻量应用服务器,2 核 2G 配置在近几年的常见价位是每月几十元到一两百元,学生机或新用户活动价更低,SSR 项目因为要跑 Node 进程,内存建议 2G 起步,流量大还要考虑带宽和 CDN 费用。
把钱花在哪更值:静态资源上 CDN,能明显降低回源带宽压力;数据库和对象存储按量计费;服务器本身选 2 核 2G 先跑起来,用云监控看 CPU 和内存曲线再决定是否升配,盲目上高配是浪费。
让服务真正“一直”在:监控与自愈
进程守护解决的是“挂了能起来”,还有几类故障它兜不住:磁盘写满、服务器整机宕机、域名或证书过期。
- 配云监控告警,CPU、内存、磁盘使用率设阈值,短信或邮件通知。
- 用
crontab加一条健康检查,curl -f http://127.0.0.1/health || systemctl restart nginx,作为最后一道保险。 - 日志配 logrotate,避免单个日志文件撑爆磁盘。
- 定期打快照,出问题能快速回滚。
- 证书用自动续期,别等到过期当天才发现。
据工信部相关数据,国内云服务器保有量持续增长,中小站点占比不小,绝大多数故障并非来自云平台,而是配置疏漏和资源耗尽,把上述几项做齐,稳定性会有质的提升。
关于云服务器常驻运行vue的常见问题
关掉SSH窗口后Vue页面打不开,是不是服务停了
大概率是你用 npm run dev 前台启动,命令随会话结束被回收,改用 nohup ... &、pm2 或 systemd 任意一种后台方式即可,生产环境更推荐打包成静态文件交给 Nginx,从根上避开这个问题。
pm2显示online但访问还是502
先看进程实际监听端口,用 ss -lntp 确认;再核对 Nginx 的 proxy_pass 地址和端口是否一致;最后查进程是否只监听了 0.0.1 而 Nginx 配置写成了公网 IP,三步基本能定位。
服务器重启后服务没自动起来怎么办
检查是否执行过 systemctl enable 或 pm2 startup 加 pm2 save,另外确认进程用的是普通用户而非 root,且工作目录权限正确,配置完成后用 reboot 实测一次,别只在当前会话里验证。
把静态托管、进程守护、开机自启、监控告警这四件事按顺序做完,云服务器上的 Vue 才算真正长期在线;其中任何一环留口子,都可能在某次重启或半夜里给你惊喜。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/774483.html


