java - 编写自定义 Chef Recipe 来安装和运行自制应用程序

标签 java chef-infra cookbook

我是 Chef 的新手我正在尝试创建一个简单的自定义 Recipe 。我有一个托管在私有(private)二进制存储库上的可执行 JAR,我希望我的 Recipe 安装此 JAR,将服务器配置为能够运行该 JAR,然后 实际运行它。

具体来说,我希望这本 Recipe 能够:

  • 下载http://myrepo.example.com/myapp.jar到节点上的/opt/myapp/bin;那么
  • MYAPP_HOME环境变量设置为/opt/myapp/bin;那么
  • 运行java -jar/opt/myapp/bin/myapp.jar --setup

显然,这本书依赖于提前在服务器上安装 Java(最好是 8+)。

使用这个excellent guide作为我的起点,这是迄今为止我最好的尝试:

创建 Recipe :

knife create cookbook cookbook-myapp -o cookbooks/ -r md

/cookbooks/cookbook-myapp/recipes/default.rb:

package http://myrepo.example.com/myapp.jar

service "myapp" do
    action :install
end

env 'MYAPP_HOME' do
    value '/opt/myapp/bin'
end

bash 'run_jar' do
    code <<-EOH
    java -jar ${MYAPP_HOME}/myapp.jar --setup
    EOH
end

但这显然是错误的。任何人都可以给我任何正确方向的想法或插入吗?

最佳答案

remote_file '/path/to/myapp' do
  source 'http://myapp.repo.com/myapp.jar'
end

template '/etc/init.d/myapp.conf' do
  source 'myapp.init.config.erb'
  variables :home => '/opt/myapp/bin'
end

service 'myapp' do
  action [:enable, :start]
end

当然,您需要在 cookbook/templates/default 中编写 myapp.init.conf.erb。这是用于将应用程序作为服务运行的初始化脚本,包括 bash 命令和设置环境变量。

关于java - 编写自定义 Chef Recipe 来安装和运行自制应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31437392/

相关文章:

java - 使数组中的某物移动

ruby - 如何查看上传失败的具体 Recipe ?

deployment - Nginx Recipe v 2.0.0 : Cookbook http_gzip_static_module not found

java - 如何在 Chef 中运行具有依赖关系的 Recipe ?

java - 使用 Consul Service Discovery 的自动代理服务

java - 将 Vaadin CheckBox 保存到 JPA 的正确方法是什么?

java - Java 8 中的 interned 字符串是否适合垃圾回收?

chef-infra - 如何在 Recipe Recipe 中使用库模块

npm install with Chef,导致我的 Vagrant 用户出现 EACCES 问题

chef-infra - 如何在 Vagrant 中使用新的 opscode 存储库?