Наша задача в этой части – установить пакет Apache HTTP Server и его службу.
Как и файлы – пакеты и службы так же являются ресурсами Chef.
Содержание
Установка пакета
В каталоге ~/chef-repo
создайте файл с именем webserver.rb
с таким содержимым:
package 'apache2'
Мы не указываем тут никакого действия, так как :install
является действием по умолчанию.
Теперь – запускаем выполнение:
$ sudo chef-apply chef-repo/webserver.rb Recipe: (chef-apply cookbook)::(chef-apply recipe) * apt_package[apache2] action install - install version 2.2.22-13+deb7u4 of package apache2
Если запустить его ещё раз – ничего не произойдёт, так как Apache уже установлен:
$ sudo chef-apply chef-repo/webserver.rb Recipe: (chef-apply cookbook)::(chef-apply recipe) * apt_package[apache2] action install (up to date)
Управление службой
Теперь – давайте добавим автозапуск нового сервиса после установки.
Примечание: в Debian Apache уже добавлен в автозапуск, поэтому – удалим его:
# update-rc.d -f apache2 remove
И остановим службу:
# service apache2 stop
Возвращаемся к файлу Chef.
Отредактируйте файл webserver.rb
:
package 'apache2' service 'apache2' do action [:enable, :start] end
И примените изменения:
$ sudo chef-apply chef-repo/webserver.rb Recipe: (chef-apply cookbook)::(chef-apply recipe) * apt_package[apache2] action install (up to date) * service[apache2] action enable - enable service service[apache2] * service[apache2] action start - start service service[apache2]
Так как пакет уже установлен – то этот шаг остаётся без изменений. Вторым шагом – он добавляет в автозапуск, и третьим – запускается:
# service apache2 status Apache2 is running (pid 4873).
Связанные файлы
Теперь – давайте добавим создание файла index.html
.
Мы уже рассматривали работу с файлами в предыдущей части, применим эти знания тут.
В файле webserver.rb
добавим создание странички /var/www/index.html
:
package 'apache2' service 'apache2' do action [:enable, :start] end file '/var/www/index.html' do content '<html> <body> <h1>hello world</h1> </body> </html>' end
Применяем изменения:
$ sudo chef-apply chef-repo/webserver.rb Recipe: (chef-apply cookbook)::(chef-apply recipe) * apt_package[apache2] action install (up to date) * service[apache2] action enable (up to date) * service[apache2] action start (up to date) * file[/var/www/index.html] action create - create new file /var/www/index.html - update content in file /var/www/index.html from none to 2914aa --- /var/www/index.html 2015-05-24 05:04:02.896350297 -0400 +++ /var/www/.index.html20150524-5117-myw7rd 2015-05-24 05:04:02.896350297 -0400 @@ -1 +1,6 @@ +<html> + <body> + <h1>hello world</h1> + </body> +</html>
Файл создан:
$ file /var/www/index.html /var/www/index.html: HTML document, ASCII text
Открываем доступ к серверу
В CentOS по умолчанию IPTABLES позволяет получить доступ к серверу только по SSH. Хотя в данном примере у нас Debian – давайте продемонистрируем как можно его отключить.
Примечание: в Debian нет скриптов управления IPTABLES, поэтому – установим утилиту ufw
:
# aptitude install ufw
# ufw status Status: inactive
Мы не будем сейчас добавлять или изменять правила – а просто выключим фаервол:
package 'apache2' service 'apache2' do action [:enable, :start] end file '/var/www/index.html' do content '<html> <body> <h1>hello world</h1> </body> </html>' end service 'ufw' do action :disable end
Запускаем:
$ sudo chef-apply chef-repo/webserver.rb Recipe: (chef-apply cookbook)::(chef-apply recipe) * apt_package[apache2] action install (up to date) * service[apache2] action enable (up to date) * service[apache2] action start (up to date) * file[/var/www/index.html] action create (up to date) * service[ufw] action disable - disable service service[ufw]
Проверяем работу сайта:
$ curl localhost <html> <body> <h1>hello world</h1> </body> </html>
Заключение
Тут мы рассмотрели работу с пакетами и службами. Теперь у вас есть практические знания о работе с такими типами рерсов как file
, package
и service
.
Вы так же узнали как выполнять несколько действий. Однако – как именно Chef обрабатывает список действий?
Давайте ещё раз посомтрим на наш файл рецепта:
package 'apache2' service 'apache2' do action [:enable, :start] end file '/var/www/index.html' do content '<html> <body> <h1>hello world</h1> </body> </html>' end service 'ufw' do action :disable end
Ресурсы применяются в том порядке, в котором они перечислены в рецепте. Сначала устанавливается пакет, затем настраивается служба, после чего создаётся домашняя страница и в конце-концов – выключается IPTABLES. Если какой-то ресурс уже находится в нужном состоянии – Chef просто переходит к следующему.
То же касается и действий в списках – [:enable, :start]
. Сначала служба добавляет в автозапуск, после чего запускается. Поэтому важно продумывать порядок размещения ресурсов в вашем порядке – например, будет ошибкой указать запуск сервиса до того, как он будет установлен.
Продолжение – Chef: часть 3 — cookbooks.