Начало работы с шеф-поваром и запуск установки композитора при развертывании

Мы собираемся развернуть несколько PHP-приложений на основе Laravel4 на Amazon с помощью OpsWorks. Для этого потребуется несколько вещей:

  • Взять код из git
  • Загрузите composer.phar с сайта getcomposer.com.
  • Выполнить php composer.phar install
  • Изменить разрешения на несколько конкретных папок

Я совершенно новичок в том, что касается шеф-повара, поэтому сначала ищу место, где можно освоить основы шеф-повара, а затем, как выполнить указанные выше задачи, буду признателен за любые подсказки.


person duellsy    schedule 18.04.2013    source источник


Ответы (6)


Я не гуру Chef (я обычно использую 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

Загрузите composer.phar с сайта getcomposer.com.

Я бы выполнил 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

person Drew Khoury    schedule 01.05.2013
comment
Пошел с аналогичной настройкой, однако я больше не загружаю composer.phar при развертывании, так как у меня уже был случай, когда сайт композитора не работает, что убивает весь сайт развертывания. Вместо этого теперь у меня есть composer.phar в репозитории git. - person duellsy; 02.05.2013

Я бы в значительной степени согласился с ответом Дрю Хури с одним изменением. Чтобы загрузить compose.phar, вы можете использовать remote_file вместо того, чтобы выполнять wget в скрипте bash. .

person aagdbl    schedule 01.05.2013
comment
Добавлен комментарий к ответу Дрю, в котором говорится, почему я больше не загружаю composer.phar. - person duellsy; 02.05.2013

Поскольку composer.phar уже является исполняемым файлом, вы можете просто поместить его в каталог в вашем $PATH:

remote_file '/usr/bin/composer' do
    source 'http://getcomposer.org/composer.phar'
    mode '0755'
    action :create_if_missing
end
person georgexsh    schedule 01.03.2018

Вы можете настроить пост-получение git hook примерно так:

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 

И обязательно дайте исполняемые права на файл после получения.

person Luis Dalmolin    schedule 18.04.2013

Или вы можете просто зафиксировать каталог вашего поставщика. У нас есть пара проектов, работающих на Laravel 4 и OpsWorks.

person Maciej Swic    schedule 12.03.2014
comment
@duellsy Каковы недостатки, кроме увеличения размера вашего репозитория? Если у вас есть платный клиент, который ожидает, что его решение продлится долго, я не хочу отдавать его в руки случайным незнакомцам, чтобы держать свои репозитории в сети. Не поймите меня неправильно, я благодарен за работу, которую люди вложили в Composer и их библиотеки, но люди теряют интерес, болеют и т. д. - person Maciej Swic; 13.03.2014
comment
увеличение размера репо является одной из проблем, но есть также проблема чрезвычайно раздутой истории коммитов, заполненной обновлениями других людей, которые совершенно не связаны с моим проектом. - person duellsy; 13.03.2014
comment
@duellsy Правда, это нужно учитывать, но технических последствий нет, верно? - person Maciej Swic; 13.03.2014

Я в таком же положении с Laravel и OpsWorks. Я искал решение, но потом...

Что произойдет, если кто-то добавит уязвимость в один из подмодулей? Означает ли это, что мы всегда верим, что X внешних кодовых баз на 100% безопасны?

Либо в моем понимании есть какой-то фундаментальный недостаток, либо запуск композитора на рабочем сервере — это самая серьезная WTF.

Теперь я убедился, что код в репозитории моего проекта будет развернут на 100% как есть. Никогда не загружайте внешние модули на производственный сервер.

person Daniel    schedule 12.05.2013
comment
Это именно то, для чего нужен файл composer.lock, он гарантирует, что вы загружаете именно ту версию пакета, с которой вы работали локально. См. getcomposer.org/doc/ - person duellsy; 13.05.2013
comment
Точная версия или точный код (например, проверенный по контрольной сумме)? Откуда мы знаем, что код идентичен тому, что находится в среде разработки? - person Daniel; 13.05.2013
comment
Точная версия, которая действительно является точным кодом. Когда вы делаете composer update, он обновляет файл composer.lock версиями каждого пакета. Если вы затем запустите composer install на другом компьютере, он загрузит пакеты на основе номеров версий в файле composer.lock, а НЕ просто слепо загрузит последние версии пакетов. - person duellsy; 14.05.2013