Articles of 厨师

从node.js提供VM实例的推荐方法和工具?

我试图在云中实施一个“ 实验室 ”,让人们有一个沙盒去实验和学习; 即为devops(厨师/傀儡),安装或configuration软件等。我有一个node.js服务器实现来pipe理这个,寻找合理的方式来解决这个问题。 各种select令人眼花缭乱:直接傀儡或厨师,或stream浪似乎是适当的。 但是Openstack,cloudfoundry,Amazon EC2也提供了自己的function集。 理想情况下,微云解决scheme(每个实例多个虚拟机)将是理想的,因为不会有任何大的计算负载。 build议最赞赏。 干杯

如何处理在单个服务器上运行的多个应用程序?

我是厨师新手。 我刚刚完成了一个部署node.js应用程序,configurationNginx的烹饪书,然后以1个或更多由Nginx“负载均衡”的工作器启动应用程序。 它工作很好。 我一定要保持它的通用性,所有的应用程序级别的configuration是通过属性来完成的。 现在我正在考虑在同一台服务器上运行多个node.js应用程序的实例。 例如,主API应用程序和另一个自己注册为Gearman工作的应用程序。 我怎么去做这个? 我是否会简单地创build另一个特定于该应用的食谱,确保它包含通用食谱的配方,然后为该应用的食谱进行属性覆盖? 或者,如果我放弃使用应用configuration的属性,并使用data_bags,会更好吗? 任何帮助表示赞赏。

试图通过厨师启动statsD

我试图启动在Ubuntu的statsD,但我遇到了问题。 如果我开始它,它的工作,但阻止厨师继续,但它的工作,并显示在石墨。 但是,如果我像这样启动它(或使用其他方法在后台启动它): (/usr/bin/node /opt/statsd/stats.js /opt/statsd/localConfig.js) & 它不阻止厨师,但没有石墨显示,但我知道它仍然运行,因为 ps aux | grep stat 将该命令显示为正在运行(不包括grep命令)。 我试图用forever.js来做,但是npm只是报告failed to fetch from registry: forever 编辑: 好吧,我设法让它开始使用nohup /usr/bin/node /opt/statsd/stats.js /opt/statsd/localConfig.js 这开始statsD(好),它不会阻止厨师(也是好的),但现在拒绝停止运行,当我尝试sudo killall -r stat 事后看来,这是因为nohup阻止它接收到杀手信号。 所以问题变成了如何使用nohup(或类似的东西)在后台运行它,但仍然能够停止statsD,以便它可以重新启动(任何潜在的configuration变化)。 编辑: 好的,通过将启动命令更改为: nohup /usr/bin/node /opt/statsd/stats.js /opt/statsd/localConfig.js >> /var/log/statsd.log 2>&1& \n echo $! /opt/statsd/statds.pid nohup /usr/bin/node /opt/statsd/stats.js /opt/statsd/localConfig.js >> /var/log/statsd.log 2>&1& \n echo $! /opt/statsd/statds.pid我能够存储该pid,然后使用 […]

Win 8.1,Vagrant,Chef,Ubuntu,Ember-cli,ember new“npm ERR! tar.unpack untar error /home/vagrant/.npm/“

我在Windows 8.1上,与stream浪,Cheffile和一切正常。 现在我在做: npm install -g ember-cli ,没关系。 但是当我这样做: 在vagrant文​​件夹中join新的样本 (我可以在Windows中查看同一文件夹)我收到此错误: version: 1.13.8 Could not find watchman, falling back to NodeWatcher for file system events. Visit http://www.ember-cli.com/user-guide/#watchman for more info. installing app create .bowerrc create .editorconfig create .ember-cli create .jshintrc create .travis.yml create .watchmanconfig create README.md create app/app.js create app/components/.gitkeep create app/controllers/.gitkeep create app/helpers/.gitkeep create […]

使用OpsWorks在AWS Linux上安装hiredis

我正在使用OpsWorks来部署我的自定义node.js应用程序。 我不是一个厨师专家,并认为这将是一个简单的过程,但我不断碰壁。 这个最近的问题真的让我反感。 基本上我使用一个名为“Kue”的包,这个包依赖于一个名为Hiredis的Node包。 Hiredis是在C级实现的(据我所知),并使用一些Python级别的编译工具。 看起来,OpsWorks使用的默认Chef脚本在安装Kue和Hiredis的时候依然失败。 以下是实例尝试部署应用程序时的日志: http : //codepad.org/RXxKXqBq 在谷歌search一些人指出了它与AWS的Python版本正在使用的问题。 请注意,我使用默认的Node.js应用程序厨师食谱可以在这里find: https : //github.com/aws/opsworks-cookbooks/tree/release-chef-11.10/opsworks_nodejs

厨师设置:试图启动与PM2的节点应用程序

我正在使用nodejs食谱来安装node和PM2模块。 include_recipe "nodejs" nodejs_npm "pm2" 到现在为止还挺好。 但是,当我尝试通过PM2启动我的节点应用程序与process.json文件启动,但没有列出在PM2输出时,我ssh进入机器,运行pm2 list …非常恼人的。 我做错了是不是显示在那里是正确的? execute "start node app via PM2" do cwd "/share/app" command "pm2 startOrRestart process.json" end 和process.json看起来像这样: { "apps": [ { "name": "app", "script": "src/index.js", "watch": true, "ignore_watch": ["[\\/\\\\]\\./", "node_modules"], "merge_logs": true, "exec_interpreter": "node", "env": { "NODE_ENV": "local", "port": 8080 } } ] }

nodejs cookbook:node:/usr/lib64/libstdc++.so.6:未find版本'GLIBCXX_3.4.15'(节点需要)

我正在通过食谱https://github.com/redguide/nodejs安装nodejs 并具有以下属性: { "nodejs": { "version": "0.11.16", "engine": "node", "install_method": "binary", "binary": { "checksum": "a1bdc19c779d13b772ac22feead14f592c637ce866d86a59ef225a3273dd7c33" }, "npm_packages": [ { "name": "pm2" } ] } } 它安装“OK”,但在运行node或npm时发生错误。 $node node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by node) $ npm /usr/local/bin/node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/local/bin/node) 这是在nodejs的食谱错误或我应该通过其他措施处理? 对于两天前的厨师我是新手 – 只是试图正确地导航水域。

如何与Chef一起安装nodejs和npm,这样root以外的用户就可以使用它了

太棒了,所以我已经和主厨一起安装了node和npm。 但我不能使用它,除非我是根,因为厨师做的一切都是根,显然npm不知道如何处理。 文档没有提到如何处理这个问题,在我看过的其他地方build议改变〜/ .npm(这意味着改变根用户的〜/ .npm的权限)的权限,这感觉真的是错误的。 什么是正确的安装程序,允许一个盒子上的所有用户使用npm而不会得到大量的这些错误: npm ERR! Error: Attempt to unlock selenium-webdriver@^2.44.0, which hasn't been locked

Node.js部署,在使用Jenkins和Chef的企业环境中使用什么方法?

让我先解释一下上下文。 上下文 目前我们正在使用Jenkins服务器,并使用Chef Server来进行configurationpipe理。 我们正朝着更持续的部署环境迈进,这是我一直在努力的工作stream程: 代码被GIT检入 Gitlab触发Jenkins运行一个新的版本 jenkins拉最新的代码,并运行npm安装 Jenkins使用FPM创build一个RPM RPM被上传到RPM存储库 Jenkins将应用程序的git存储库中的厨师部署食谱上传到Chef Server。 Jenkins通过运行厨师客户端触发应用程序的新部署。 新的RPM由部署食谱安装。 在(手动触发)升级到舞台和生产环境中,我没有可用的互联网连接。 RPM克服了这个问题。 食谱是使用Berkshelf开发的。 以这种方式部署的Node.js应用程序有时使用编译的本地库(一个项目有3个以上的依赖项编译本机代码)。 我对这些types的部署过程知之甚less,但我听说的一个缺点是,只有在编译环境(当前是Jenkins本身)应该与部署环境具有相同的体系结构时,才使用RPM并编译它。 通过使用RPM的奖金是神器保持完全相同的所有环境,它不需要重新编译,并没有从各地拉动成百上千的依赖。 尽pipe如此,工作stream程似乎有点复杂,不得不坚持相同的架构,我觉得不太灵活。 对于我们的用例,我们需要以下内容: 快速部署在云上(可能是亚马逊) 快速部署在我们自己的基础设施上(目前没有互联网连接,但如果有充分的理由,可能允许某些访问) 应用程序更新尽pipe不太常见,但应该可以轻松自动部署; 应该可以连续部署 他们正在开发的软件体系结构是一个微服务体系结构,我希望在各种服务器上部署几十个Node.js应用程序(为简单起见,可能在同一服务器上进行多个部署)。 对于我自己的项目,我大部分时间都在使用Heroku,不需要花费任何精力来设置。 上述工作stream程需要两周的时间才能创build(第一次)。 问题 pipe理这一切的努力使我不得不质疑上面的一些步骤: 是rsyncing和使用npm安装坏听起来,牵引所有这些依赖关系,并重新编译在每个环境? 这真的和我想的一样不稳定吗? (我有一个Java和PHP的背景,在PHP中没有任何编译和FTP的是在当天的规范,而在Java中,一切都整齐地打包)。 为什么使用RPM来说Tarbal? (直到一个星期前,我从来没有手动build立一个RPM,我知道它的能力很less,什么也不用在这里)。 我一直在研究Chef中的“部署食谱”,主要安装部署目录,监控configuration,初始化脚本和(可选)nginx代理configuration。 这个部署指南的版本与部署本身相同,并在原始的git仓库代码中提供。 在厨师界我还没有find任何有关这方面的最佳做法,我曾预料它会非常普遍。 这是不是要走的路甚至是反模式? 在同一台服务器上部署多个微服务(不同的端口号说),这真的很糟糕? 是否有意义? (我简单地看了一下Docker,但是认为它会引入太多的复杂性,作为逻辑分离微服务的手段,我们仍然在努力设置这个东西)。 您可能能够分享的任何经验将不胜感激!

Vagrant,为Node.js设置机器 – 厨师失败

我的Vagrantfile : Vagrant::Config.run do |config| config.vm.box = "lucid32" config.ssh.forward_agent = true config.vm.forward_port 3000, 3000 # allow for symlinks in the app folder config.vm.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/app", "1"] config.vm.customize ["modifyvm", :id, "–memory", 512, "–cpus", 1] config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "cookbooks" chef.add_recipe "apt" chef.add_recipe "build-essential" chef.add_recipe "nodejs-cookbook" chef.add_recipe "chef-hosts" chef.add_recipe "git" chef.json = { "nodejs" […]