You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Apache服务器部署Node.js Express生产应用?附构建与上传疑问

嘿,刚从Angular的构建流程转过来问Node.js部署,太懂这种懵圈的感觉了!我来给你捋清楚Node.js生产环境部署的正确姿势,一步步来:

Node.js 生产环境部署全指南

先搞懂核心区别:Node.js vs Angular

Angular是前端框架,npm run build:prod会把代码打包成纯静态文件(HTML/CSS/JS),直接扔给服务器就能跑;但Node.js是后端运行时,它本身是要运行代码的,不是打包成静态文件那么简单,所以部署逻辑完全不一样。

第一步:准备要上传的文件(绝对别传整个开发文件夹!)

你需要过滤掉开发无关的内容,只传生产必需的:

  • 编译后的代码:如果你的项目用了TypeScript、Babel这类需要编译的工具,先在本地/CI环境执行编译命令(比如tsc),生成的distbuild文件夹才是要部署的核心代码。
  • package.json:里面要包含生产环境的启动脚本(比如"start": "node dist/index.js"),以及所有生产依赖的声明。
  • 生产环境配置:比如.env.production(别传开发用的.env,里面可能有敏感信息)、静态资源(如果有的话,比如上传的图片、前端静态文件)。
  • 可选但不推荐直接传node_modules。更稳妥的做法是在服务器上执行npm install --production,只安装生产依赖,避免本地和服务器系统架构不同导致的依赖兼容问题。

第二步:部署到Apache服务器的具体操作

Apache本身没法直接运行Node.js,得靠反向代理把请求转发给Node进程:

  1. 服务器先装好Node.js:版本尽量和本地开发一致,避免版本兼容坑。
  2. 上传刚才准备好的文件到服务器的某个目录(比如/var/www/your-node-app)。
  3. 安装生产依赖:进入目录执行npm install --production
  4. 启动Node应用:别直接用node dist/index.js,生产环境一定要用进程管理器(比如PM2,后面讲),先让应用跑在某个端口(比如3000)。
  5. 配置Apache反向代理:
    编辑Apache的虚拟主机配置文件(比如/etc/apache2/sites-available/your-app.conf),添加以下内容:
    <VirtualHost *:80>
        ServerName your-domain.com
    
        # 把所有请求转发到Node应用的端口
        ProxyPass / http://localhost:3000/
        ProxyPassReverse / http://localhost:3000/
    
        # 启用代理模块后才能生效
        ProxyPreserveHost On
    </VirtualHost>
    
    然后启用代理模块:sudo a2enmod proxy proxy_http,重启Apache:sudo systemctl restart apache2

第三步:生产环境必用的进程管理器(PM2)

直接运行node命令的话,进程崩溃就会导致服务中断,PM2是Node.js生产环境的标配:

  • 服务器上安装PM2:sudo npm install pm2 -g
  • 启动应用:pm2 start dist/index.js --name "your-app-name"
  • 常用操作:
    • 看日志:pm2 logs your-app-name
    • 重启应用:pm2 restart your-app-name
    • 设置开机自启:pm2 startup(跟着提示执行命令就行)

额外注意事项

  • 敏感信息别硬编码:数据库密码、API密钥这些用环境变量或者.env.production管理,别写在代码里。
  • 端口安全:如果用反向代理,服务器只需要开放80/443端口;如果直接暴露Node端口,要在防火墙里放行对应的端口。
  • 版本控制部署:更高效的方式是用Git,服务器上拉取仓库的生产分支,然后执行npm install --productionpm2 restart,更新代码更方便。

内容的提问来源于stack exchange,提问作者Hữu Linh

火山引擎 最新活动