使用chef在aws上安装node.js的正确方法

时间:2017-07-11 18:59:06

标签: node.js amazon-web-services ubuntu chef

我做过一些研究,但却找不到令人满意的东西。我们正在使用厨师11。

这就是我现在所拥有的。仅供参考:我对厨师非常不熟悉。所以我有一种直觉,认为我做错了。

execute "Update apt-get" do
  command 'curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -'
end

package 'nodejs' do
  action :upgrade
end

大部分时间都有效。但它有时会失败。

Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'

This issue on ubuntu似乎是罪魁祸首。

问题是,有没有比运行此curl命令更新apt-get更好的方法,以便我可以安装更高版本的node.js?

1 个答案:

答案 0 :(得分:1)

我使用以下食谱使用厨师管理一些Node.js应用程序:applicationapplication_gitapplication_javascript

配方如下:

include_recipe 'chef-vault'

# provisions system user to run application
user node['project']['application']['user'] do
  system true
  shell '/bin/false'
  manage_home true
end

application node['project']['application']['deploy_path'] do
  # Provision specific Node.js version
  javascript '4.2.4'

  owner node['project']['application']['user']
  group node['project']['application']['user']

  # Download application source from git private repository
  git node['project']['application']['repository'] do
    deploy_key chef_vault_item('project', 'deploy_key')['file-content']
  end

  # install dependencies
  npm_install do
    production false
    user node['project']['application']['user']
    group node['project']['application']['user']
  end

  # Provision service
  javascript_service 'server.js'
end
我的食谱中的

project是已部署的特定项目的名称。

这个食谱有一些优点:

  • 它在特定用户帐户下运行您的项目
  • 允许指定特定的Node.js版本(在该示例中为4.2.4 Node.js版本)。
  • cookbook允许多种安装方法(本机包,二进制,源)。从而使其可以跨不同的操作系统移植。
  • 处理项目依赖项的安装
  • 以特定于操作系统的方式提供服务注册(某些操作系统上的经典init,其他操作系统上的Systemd等)