我们希望使用OpsWorks在亚马逊上部署一些基于Laravel4的PHP应用程序,这需要一些东西:
php composer.phar install
我对厨师来说非常新鲜,所以最初寻找一个可以掌握厨师基本知识的地方,然后如何完成上述任务,我们将非常感激。
答案 0 :(得分:2)
我不是厨师大师(我通常使用Puppet)但请尝试以下方法:
您可能想要执行wget命令(请参阅下面的示例)。
如果您想要更复杂的内容,请参阅http://docs.opscode.com/resource_deploy.html
deploy_revision "/path/to/application" do
repo 'ssh://name-of-git-repo/repos/repo.git'
migrate false
purge_before_symlink %w{one two folder/three}
create_dirs_before_symlink []
symlinks(
"one" => "one",
"two" => "two",
"three" => "folder/three"
)
before_restart do
# some Ruby code
end
notifies :restart, "service[foo]"
notifies :restart, "service[bar]"
end
我会执行一个wget。
我从这里解除了一些代码:http://cookingclouds.com/2012/06/23/chef-simple-cookbook-example/
它基本上只是在特定文件夹中执行wget,提取tar&的内容。更新新文件的一些权限。只有当文件夹不存在时才会这样做。
# Run a bash shell - download and extract composer
bash "install_composer" do
user "root"
cwd "/folder/to/extact/to"
code <<-EOH
wget http://getcomposer.com/composer.tar.gz
tar -xzf composer.tar.gz
chown -R user:group /folder/to/extact/to
EOH
not_if "test -d /folder/to/extact/to"
end
http://docs.opscode.com/resource_execute.html
execute "composer install" do
command "php composer.phar install && touch /var/log/.php_composer_installed"
creates "/var/log/.php_composer_installed"
action :run
end
这只会运行一次,否则您可以删除“创建”,并且每次都会运行它。
http://docs.opscode.com/resource.html
directory "/tmp/folder" do
owner "root"
group "root"
mode 0755
action :create
end
如果目录已存在,则不会发生任何事情。如果以任何方式更改了目录,则资源将标记为已更新。
我发现搜索方便,在Chef网站上浏览的东西似乎没有希望(太多东西可以挖掘)。 http://docs.opscode.com/search.html
答案 1 :(得分:2)
我会和Drew Khoury的回答一样,只做一个改变。要下载compose.phar,您可以使用remote_file resource而不是在bash脚本中执行wget。
答案 2 :(得分:1)
由于composer.phar
已经是可执行文件,您只需将其放入$PATH
中的目录:
remote_file '/usr/bin/composer' do
source 'http://getcomposer.org/composer.phar'
mode '0755'
action :create_if_missing
end
答案 3 :(得分:0)
你可以将你的git hook post-receive配置为类似的东西:
GIT_WORK_TREE=/path/to/your/site
cd /path/to/your/site
curl -sS https://getcomposer.org/installer | php
php composer.phar install
# do your stuff here
并确保为收件后文件提供可执行权限。
答案 4 :(得分:0)
或者您可以提交您的供应商目录。我们在Laravel 4和OpsWorks上运行了几个项目。
答案 5 :(得分:-1)
我与Laravel和OpsWorks处于相同的位置。我正在寻找解决方案,但随后......
如果有人在其中一个子模块中注入安全漏洞,会发生什么?这是否意味着我们始终相信X个外部代码库是100%安全的?
在我的理解中存在一些根本性缺陷,或者在生产服务器上运行作曲家是关于最严重的WTF。
我现在确保我的项目仓库中的代码将按原样100%部署。无需在生产服务器上下载外部模块。