React+Node.js部署站点:如何用npm serve、forever保活前后端
前端运行与保活解决方案
针对你遇到的退出PuTTy后前端serve进程终止的问题,以下是几种实用的解决方法,按可靠性和推荐程度排序:
方法一:用Apache直接托管React静态文件(最推荐)
既然已经安装了Apache,完全可以直接用它来托管React的静态构建文件,不需要额外的serve进程,既高效又稳定:
- 将React项目
build目录下的所有文件复制到Apache的网站根目录(比如/var/www/html),或者单独指定一个目录(如/var/www/your-frontend) - 创建或修改Apache虚拟主机配置文件(比如
/etc/apache2/sites-available/your-site.conf),添加以下内容:<VirtualHost *:80> ServerName your-domain.com # 替换成你的域名 DocumentRoot /var/www/html/build # 替换成你的build目录路径 <Directory /var/www/html/build> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted # 处理React路由的重写规则,避免刷新页面404 RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </Directory> ErrorLog ${APACHE_LOG_DIR}/your-site-error.log CustomLog ${APACHE_LOG_DIR}/your-site-access.log combined </VirtualHost> - 启用必要模块和站点:
a2enmod rewrite # 启用重写模块 a2ensite your-site.conf # 启用你的站点配置 systemctl restart apache2 # 重启Apache生效
这样前端静态文件由Apache直接托管,自带进程保活和开机自启,无需额外维护。
方法二:用systemd服务管理serve进程(系统级保活)
如果坚持要用serve,用systemd创建系统服务是最可靠的保活方式:
- 创建systemd服务文件:
nano /etc/systemd/system/frontend-serve.service - 写入以下内容(注意替换路径和用户):
[Unit] Description=React Frontend Serve Process After=network.target [Service] User=www-data # 运行进程的用户,建议用Apache的用户 WorkingDirectory=/var/www/html # 你的项目根目录 ExecStart=/usr/bin/npx serve build # 如果serve是全局安装,也可以写`/usr/bin/serve build`,用`which serve`可查路径 Restart=always # 进程意外退出时自动重启 RestartSec=5 # 重启间隔5秒 StandardOutput=journal+console StandardError=journal+console [Install] WantedBy=multi-user.target - 加载配置并启动服务:
systemctl daemon-reload systemctl start frontend-serve systemctl enable frontend-serve # 设置开机自启 - 常用管理命令:
- 查看状态:
systemctl status frontend-serve - 查看实时日志:
journalctl -u frontend-serve -f - 停止服务:
systemctl stop frontend-serve
- 查看状态:
方法三:用forever管理serve进程(和后端统一工具)
既然你已经在用forever管理后端,也可以用它来管理前端进程:
- 进入项目目录:
cd /var/www/html - 用forever启动
serve进程:
可选:指定日志路径方便排查问题:forever start -c serve buildforever start -l /var/log/frontend.log -o /var/log/frontend-out.log -e /var/log/frontend-err.log -c serve build - 常用管理命令:
- 查看运行的进程:
forever list - 停止前端进程:
forever stop <进程ID>(从list里获取ID) - 重启进程:
forever restart <进程ID>
- 查看运行的进程:
方法四:用nohup临时后台运行(仅临时测试)
如果只是临时测试,不想配置服务,可以用nohup让进程脱离终端后台运行:
cd /var/www/html && nohup serve build > /var/log/frontend-nohup.log 2>&1 &
这种方法的缺点是进程意外退出后不会自动重启,不适合生产环境。
内容的提问来源于stack exchange,提问作者Dary
相关产品推荐
相关产品推荐

