【问题标题】:How to deploy on CentOS 6.6 vps a Node JS app developed with Visual Studio如何在 CentOS 6.6 vps 上部署使用 Visual Studio 开发的 Node JS 应用
【发布时间】:2015-08-06 21:14:43
【问题描述】:

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

我使用expressnode-rest-clientmysql 模块构建了Web 服务。 WS 在我的环境中测试时运行良好,现在是时候在我拥有的 CentOS 6.6 VPS 上将其部署到生产环境中,可能会利用 systemd

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

是否需要执行一些额外的步骤才能将在 Visual Studio 中创建的项目部署到基于 *nix 的系统? 我应该如何进行部署并(可能)让它与systemd 一起运行?

【问题讨论】:

  • 我假设 WS = Web 服务器?在 Node.js 线程中,“WS”是一个危险的首字母缩写词,因为它也代表“websockets”。此外,在 Node.js 中,您通常会谈论应用程序 :)
  • 我的意思是,Web 服务,因为它主要是一个接口,用于在 Json 中针对 Magento DB 获取一些查询结果。

标签: node.js visual-studio deployment centos systemd


【解决方案1】:

在生产中部署 Node.js 应用程序的好工具是 PM2
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有很多选择,也可以为你创建clusters

有些人喜欢在 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

【讨论】:

    【解决方案2】:

    概括地说,部署的基本步骤如下。您可以开始手动执行这些操作并了解它们的工作原理。最终,您会希望通过脚本或配置管理系统(如 ansible 或类似系统)实现这些大部分自动化。

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

    更多详情请阅读the build script I use for my web site。另一个学习现有技术的好东西是heroko node.js build pack,当您推送到 heroku git 远程时,heroku 会这样做来构建您的应用程序。

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


    systemd 服务文件示例。安装到/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
    

    【讨论】:

      猜你喜欢
      • 2019-01-14
      • 2016-08-19
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2020-07-28
      • 2019-06-10
      相关资源
      最近更新 更多