如何在生产服务器上部署 Node.js 应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在生产服务器上部署 Node.js 应用相关的知识,希望对你有一定的参考价值。

  服务器推荐用nginx,配置简单,性能强悍。
nginx可以使用代理访问后端的Node.js应用服务器。

配置方法:
1)在配置文件http段内容添加后端服务器:
http
#添加后端服务器,和nginx负载均衡配置一样
upstream nodejs
server 127.0.0.1:8080;

...


2)给应用添加虚拟主机:
server
listen 80;
server_nameIP
location /
proxy_pass nodejs;#名字和前面的对应,将所有的请求转发给后端的node

access_log logs/nodejs.access.log main;#如果需要日志的话


推荐将静态文件如css、js和图片和应用服务器分开。
参考技术A tomcat你知道吗?假设用java开发,生产环境的发布过程,先编译java的代码,然后打包放到tomcat容器中,最后启动tomcat这就是发布了。

nodejs需要通过npm install安装需要的module依赖,假设你的应用入口是app.js,那么运行node app.js就是启动了nodejs。

一般在生产环境上还要监控nodejs的状态,如果挂了自动重启,nodejs的特点就是容易挂,重启非常快。本回答被提问者采纳

在 Linux 服务器上的何处部署 node.js 应用程序?

【中文标题】在 Linux 服务器上的何处部署 node.js 应用程序?【英文标题】:Where to deploy node.js apps on a Linux server? 【发布时间】:2012-06-03 17:11:50 【问题描述】:

我在 Linux 服务器上运行 4 个独立的 Node.js 应用程序,具有不同的端口和前面的代理。

由于我(现在)是服务器中的唯一用户,因此我将应用程序放置在何处以及如何运行它们并不重要。目前我的应用程序位于我的主目录下(~/app1/~/app2/ 等)。

所以我的问题是:我应该将应用放置在哪里以便可以在多个用户之间共享?有没有类似/var/www的标准地方?

【问题讨论】:

How to deploy node.js? 的可能重复项 没错,这个问题部分解决了我的问题。我会改写这个问题。 “多用户共享”是什么意思?您是否打算同时多次运行每个应用程序? 好问题。与 Apache 一样,您有 www-data/var/www。 node.js 有一些常见的类似做法吗? 【参考方案1】:

遵循此处的答案指南 - https://serverfault.com/a/96420 表示 /opt/node 可能是一个更好的地方,因为它是一个为用户添加的程序文件保留的包罗万象的目录

【讨论】:

你不是说/opt吗? 我认为正确的答案其实是 /srv - unix.stackexchange.com/questions/35807/… 我觉得应用程序应该在 /opt 中,文件在 /srv 中提供,在 Node.js 的情况下,它是一个应用程序,而不是共享文件。 pathname.com/fhs/pub/…【参考方案2】:

如果您在 Linux 服务器上为 Node JS 应用程序使用 AWS Elastic bean 堆栈,那么它应该在 /var/app/current/ 目录中

【讨论】:

【参考方案3】:

我使用https://github.com/visionmedia/deploy 来部署我的应用程序。它将创建一个/var/www/productname 目录。在该目录中,您有源、当前和共享。共享目录有logpid 文件。

我发现了一个很好的目录结构,所以我在所有项目中都使用了这个结构。

【讨论】:

Deploy 看起来很不错,谢谢!我很快就会尝试亲自查看它,并会尽快回复您。 我认为/var/nodejs 更好/更安全,因为过去/var/www 被Apache 等Web 服务器使用(而不是新标准/var/www/html)。对 Node.js 应用程序使用 /var/www 可能会增加所有服务器端源代码对未经授权的用户可见的风险。【参考方案4】:

我在同一台服务器上运行除了 Node.js 之外的 Apache,所以我真的不喜欢在同一个目录中拥有 Apache 和 Node.js 的应用程序。我的 Apache 托管应用程序位于传统的 /var/www/ 路径中,我将 Node.JS 应用程序放在 /var/node/ 下。这是由于我在 Apache(动态虚拟主机)和 Node.JS 中都设置了一些自动化。

关于我的设置和自动化代理和 Apache 部署的更多信息可以在这里找到:How to use vhosts alongside node-http-proxy?

【讨论】:

非常好的建议,谢谢!在进行一些自我实验后,我会稍后再讨论这个问题。

以上是关于如何在生产服务器上部署 Node.js 应用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Node.js 服务器上部署 Vue.js 应用程序

Node JS 服务器端应用部署注意事项

在 Linux 服务器上的何处部署 node.js 应用程序?

如何在 Ubuntu/Linux 中部署 Node.js 应用程序?

在Ubuntu 14.04上设置生产环境可用的Node.js

如何在 Ubuntu 上使用 pm2 和 Nginx 部署 Node.js 应用