繁体   English   中英

如何在CentOS 6.6 vps上部署使用Visual Studio开发的Node JS应用

[英]How to deploy on CentOS 6.6 vps a Node JS app developed with Visual Studio

这是我对Node JS第一次Node.JS Tools ,由于我的背景是.NET技术,因此我将Visual StudioNode.JS Tools来为项目开发此Web服务。

我使用expressnode-rest-clientmysql模块构建了Web Service。 在我的环境中进行测试时,WS可以很好地工作,现在可以将其部署到我拥有的CentOS 6.6 VPS上的生产环境中,可能是利用systemd优势。

我习惯于在IIS上部署WCFWeb API Web Service,在这种情况下,过程似乎完全不同。 我尝试使用谷歌搜索,但是答案和教程似乎并不简单,有时甚至是矛盾的。

要将Visual Studio中创建的项目部署到基于* nix的系统上,还需要执行其他一些步骤吗? 我应该如何进行部署,并且(可能)与systemd运行?

在较高的层次上,下面是部署的基本步骤。 您可以开始手动执行这些操作并了解它们的工作原理。 最终,您希望这些脚本大多通过脚本或诸如ansible或类似的配置管理系统来自动化。

  1. 获取代码快照到已知状态
    • 这可以通过git archive或通过签出要构建的标签来完成
    • 首先,您可以使用工作副本,但是最终您需要从原始位置进行构建,以避免开发目录中的任何工件意外泄漏到构建中
  2. 安装生产npm依赖项
    • npm install --production
  3. 将具有依赖项的代码打包到带有tarnpm packzip的构建中
  4. 通过scp将其传输到您的服务器,并将其提取到位。
    • /opt/myapp是建议安装的位置
  5. 设置系统服务文件(以下示例)
  6. 安装和配置反向代理,例如nginx

通过阅读用于网站的构建脚本,可以找到更多详细信息。 研究现有技术的另一件好事是heroko node.js构建包 ,当您将其推送到heroku git遥控器时,heroku会以此构建您的应用程序。

这些是高级步骤。 当然,细节上有很多微妙之处,您可以在获得一些经验后加以处理。


示例系统服务文件。 安装到/etc/systemd/system/mynodeapp.service并运行systemctl daemon-reload然后systemctl start mynodeapp

[Unit]
Description=My node.js App

[Service]
User=mynodejsapp
Group=mynodejsapp
WorkingDirectory=/opt/mynodejsapp
EnvironmentFile=/etc/mynodejsapp/config
Environment=NODE_ENV=production
ExecStart=/usr/bin/node cluster.js
Restart=always

[Install]
WantedBy=multi-user.target

PM2是在生产环境中部署Node.js应用程序的绝佳工具。
PM2是一个流程管理器,负责以下工作:

  1. 启动Node.js应用程序
  2. 如果它们崩溃,则重新启动它们
  3. 提供监控和记录
  4. 启动时自动启动Node.js应用程序。

PM2本身是用Node.js编写的,可以为您设置systemd / init.d / upstart。 此外,它还可以确保您的应用以受限的权限运行(不是以root身份运行,因为system.d在默认情况下可能会这样做)。

使用PM2时,可能的工作流程为:

  1. 将应用程序的源代码部署到服务器。 这里有无数的选择。 他们中的许多人都使用GIT(通过向服务器添加部署密钥并在其中签出源代码)。
  2. 安装PM2: $ (sudo) npm install -g pm2
  3. 让PM2在启动时自动启动: $ (sudo) pm2 startup
  4. 使用PM2启动您的应用程序: $ pm2 start /home/centos/app.js
  5. 转储PM2配置,以便在启动时将重新加载您的应用程序: $ pm2 save

PM2有很多选择,还可以为您创建集群

有些人喜欢在Node.js应用程序之前安装反向代理(nginx)。 我认为,在以下三种情况下,这可能是一个好主意:

  1. 当您的网站上包含静态内容时,您可以使用nginx来提供这些静态文件(速度非常快!),而不是使用Node应用程序,然后将其卸载(请记住Node应用程序是单线程的)
  2. 如果您的网站使用SSL / TLS,则可以在反向代理上终止SSL / TLS,并通过简单的HTTP(无SSL / TLS)请求连接到Node应用程序。 这将提高性能,因为您的工作人员(Node应用程序)不必因为HTTPS而浪费宝贵的事件循环周期
  3. 如果要手动负载平衡,而不使用Node.js集群模块。 在这种情况下,您将启动Node.js应用程序的多个实例,这些实例在单独的端口上侦听,nginx将执行负载平衡。

在其他情况下,您不需要使用反向代理。

进一步阅读:-PM2基本自述文件: https : //github.com/Unitech/PM2/blob/master/README.md-PM2高级自述文件: https : //github.com/Unitech/PM2/blob/master/ADVANCED_README。 MD

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM