6

我们希望使用 OpsWorks 在亚马逊上部署一些基于Laravel4的 PHP 应用程序,这需要一些东西:

  • 从 git 获取代码
  • 从 getcomposer.com 下载 composer.phar
  • php composer.phar install
  • 更改一些特定文件夹的权限

我对厨师完全陌生,所以最初寻找一个地方来掌握厨师的基础知识,然后如何完成上述任务,将不胜感激。

4

6 回答 6

2

我不是厨师大师(我通常使用 Puppet),但请尝试以下操作:

从 git 获取代码

您可能想要执行 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

从 getcomposer.com 下载 composer.phar

我会执行一个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

运行 php composer.phar 安装

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

于 2013-05-01T06:51:04.193 回答
2

我会非常同意 Drew Khoury 的回答,但会有所改变。要下载 compose.phar,您可以使用remote_file 资源,而不是在 bash 脚本中执行 wget。

于 2013-05-01T07:32:13.853 回答
2

由于composer.phar已经是一个可执行文件,您可以简单地将其放在您的目录中$PATH

remote_file '/usr/bin/composer' do
    source 'http://getcomposer.org/composer.phar'
    mode '0755'
    action :create_if_missing
end
于 2018-03-01T11:38:23.007 回答
0

或者您可以只提交您的供应商目录。我们有几个项目在 Laravel 4 和 OpsWorks 上运行。

于 2014-03-12T13:10:51.537 回答
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 

并确保为 post-receive 文件授予可执行权限。

于 2013-04-18T00:46:24.767 回答
-1

我与 Laravel 和 OpsWorks 处于相同的位置。我一直在寻找解决方案,但后来...

如果有人将安全漏洞注入其中一个子模块会发生什么?这是否意味着我们相信 X 数量的外部代码库始终是 100% 安全的?

在我的理解中存在一些基本缺陷,或者在生产服务器上运行 composer 是最严重的 WTF。

我现在确保我的项目 repo 中的代码将 100% 按原样部署。无需在生产服务器上下载外部模块。

于 2013-05-12T11:41:27.573 回答