Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Node.js设置,方便部署和更新大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在为一个由node.js / socket.io应用程序支持的客户开发一个网站(在Apache下面是TYPO3),该应用程序为从CMS提供的内容提供实时更新。

因为这是我们的第一个node.js项目,我没有任何最佳做法,当谈到“完美的设置”,所以我花了一些时间研究部署技术。

我还有几个问题要实现一个好的设置:

>容易为客户部署。这是非常重要的,因为我们的网站将被集成到他们的“活”TYPO3安装,服务大量的网站,并运行在不由客户管理的服务器,但另一个(集中式)组织,支持呼叫和服务器更改慢过程。
>应该容易更新。如上所述,请求重新启动和进行服务器更改是一个缓慢的过程,所以idealy节点安装应该重新启动/更新时,它收到使用git推送到实时安装的更改。

部署

general consensus似乎是永远使用,当涉及到部署节点应用程序,以保持它们运行。我测试永远,它似乎工作正常,当安装通过npm install forever -g(global)。这需要外部协助全局安装在活动环境上,所以我宁愿让它运行从应用程序的node_modules目录,但我还没有能够创建一个坚实的包装器这样做。

此外,永远工作正常,但它必须手动启动。什么是最好的方法,以确保它开始服务器启动并继续运行?

>一个简单的init.d脚本?
>编写看门狗包装器?
>一个TYPO3调度程序任务,永远检查状态?

快速开发/重新启动更新

我们目前仍然处于项目的开发阶段,每次我对node.js应用程序进行更改时,我手动重新启动节点或永久。这工作,但是远离理想。
有几个较小的npm模块,检查文件修改和重新启动节点检测到的更改,如:

> Nodemon
> Node.js Supervisor
> Bounce
> Nodules(不需要重新启动节点,因此可能更容易与永远结合)
> Up

有谁有任何这些经验?

更新:为什么你不使用集群?

Cluster module通过reload机制提供类似的功能,但是doesn’t work with Node 0.5+.替换它的core Cluster module (Node 0.6+)没有所有这功能,但只提供集群。至少not without using Redis(这是我们的一个问题,因为我们不能强制另一个prereq服务给客户)。

– –

显然,我试图找到最稳定的解决方案,结合了一个更新恢复与永远之前交给客户的项目,我真的希望任何人已经产生了经过证明的技术组合。

解决方法

结合所有收集的知识(大感谢 Julian Knight的想法)和方法在过去一周测试,我决定解决下面描述的部署解决方案(我想我会很乐意分享帮助别人有类似的问题) :

自动重新启动脚本错误自动重新加载脚本更改由forever处理,因为它也包括脚本监视,只要Forever从node.js脚本中生成

为此,我添加一个server.js来启动我们实际想要运行的app.js脚本:

server.js

var forever = require('forever'),child = new(forever.Monitor)('app.js',{
        'silent': false,'pidFile': 'pids/app.pid','watch': true,'watchDirectory': '.',// Top-level directory to watch from.
        'watchIgnoreDotFiles': true,// whether to ignore dot files
        'watchIgnorePatterns': [],// array of glob patterns to ignore,merged with contents of watchDirectory + '/.foreverignore' file
        'logFile': 'logs/forever.log',// Path to log output from forever process (when daemonized)
        'outFile': 'logs/forever.out',// Path to log output from child stdout
        'errFile': 'logs/forever.err'
    });
child.start();
forever.startServer(child);

这会监视应用程序目录中的所有文件以进行更改,并在更改时立即重新启动运行在foreveras中的脚本。因为日志和pidfile在应用程序的子目录中,所以必须从文件监视中忽略它们,否则脚本将循环重新启动:

.foreverignore

pids/**
logs/**

为了使这一切开始系统启动,并使我们能够轻松地控制服务使用start node-appand stop node-app我们使用Ubuntu’s Upstart
我把两个例子(thisthis一个)组合成一个很好的工作:

/etc/init/node-app.conf

# This is an upstart (http://upstart.ubuntu.com/) script
# to run the node.js server on system boot and make it
# manageable with commands such as
# 'start node-app' and 'stop node-app'
#
# This script is to be placed in /etc/init to work with upstart.
#
# Internally the 'initctl' command is used to manage:
# initctl Help
# initctl status node-app
# initctl reload node-app
# initctl start node-app

description "node.js forever server for node-app"
author      "Remco Overdijk <remco@maxserv.nl>"
version "1.0"

expect fork

# used to be: start on startup
# until we found some mounts weren't ready yet while booTing:

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

env HOME=/home/user/node-app-dir

script
    # Not sure why $HOME is needed,but we found that it is:
    export HOME=$HOME
    chdir $HOME
    exec /usr/local/bin/node server.js > logs/node.log &
end script

#post-start script
#   # Optionally put a script here that will notifiy you node has (rE)started
#   # /root/bin/hoptoad.sh "node.js has started!"
#end script

作为Kevin wisely mentions in his article,以root身份运行节点是不明智的,因此,当我们下周迁移到新服务器时,我们将更改为exec sudo -u www-data /usr/local/bin / node。

所以,永远由节点server.js自动启动,由upstart启动,并监视崩溃和文件更改,保持整个设置运行,只要我们想要的。

我希望这有助于任何人。

大佬总结

以上是大佬教程为你收集整理的Node.js设置,方便部署和更新全部内容,希望文章能够帮你解决Node.js设置,方便部署和更新所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。