草庐IT

javascript - 部署生产 Node.js 服务器

coder 2023-05-28 原文

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.


4年前关闭。







Improve this question




我已经编写了一个 Node.js 应用程序,我希望让它在我们的一台生产机器上运行。这似乎是一个很常见的请求,但我找不到合适的解决方案。是否没有用于部署生产 Node.js 应用程序的既定解决方案?

该应用程序很简单(<100 loc),但需要非常高效、可靠并且可以连续运行多年而无需重新启动。它将在一个大型站点上运行,每秒有几十个连接。="" (该应用程序不用作网络服务器,它只有一个="" json="">

以下是我考虑过的方法,但我仍然不确定:

使用框架(例如 Express)

因为应用程序需要高性能并且非常简单,所以我想避免以框架的形式添加臃肿。

使用 nohup 启动服务器

这里的主要问题是异常处理,我们(显然)不希望整个服务器因为异常而崩溃。据我了解,将整个应用程序包装在 try {} catch {} 中循环无济于事,因为 Javascript 解释器在异常发生后处于不可预测的状态。那是对的吗?

使用 Forever 之类的东西

我已经在我们的 FreeBSD 机器上安装了 Forever,它非常有问题。它最终产生了无法从 Forever 中杀死的无尽进程。我不得不跑kill -9拿回我的机器,我对在 Forever 上运行生产应用程序不太有信心。 Upstart(类似的工具,但更通用)似乎也不会在 FreeBSD 上运行。

托管解决方案(例如 Heroku、Rackspace、Amazon EC2 等)

这可能是最简单的解决方案,但我们已经为我们的其他网络服务器配备了重要的硬件。出于财务考虑,这是没有意义的。

当然必须有一些既定的解决方案?我错过了什么吗?

最佳答案

  • 除非您想自己处理 session 、cookie、中间件等,否则您真的应该真正使用框架(我推荐像 Express 这样的框架,因为它经过了实战测试)。 express 真的很轻。
  • 使用 nohup 启动服务器:您不应该这样做,只需使用常规的“node”命令启动它。 Express 还将路由包装在 try-catch 中,因此您的服务器不会在路由中崩溃。但是,如果您的服务器确实存在严重问题,则不必担心重新启动它(此外,如果您至少有 2-3 个进程,则只有一个会死掉,因此至少会剩下 1-2 个,而用户不会'感觉不到东西)。
  • 对于监控,我个人更喜欢操作系统级别的东西,例如 UpstartMonit .
  • 托管解决方案:由于您已经拥有自己的硬件,因此无需在其他方面投资。只需使用负载平衡器(可能是 nginx 或 node-http-proxy)来代理内容。
  • 关于javascript - 部署生产 Node.js 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8386455/

    有关javascript - 部署生产 Node.js 服务器的更多相关文章

    1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

      我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

    2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

      我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

    3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

      最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

    4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

      在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

    5. Ruby Sinatra 配置用于生产和开发 - 2

      我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

    6. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

      我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

    7. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

      我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

    8. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

      您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

    9. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

      我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

    10. jenkins部署1--jenkins+gitee持续集成 - 2

      前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

    随机推荐