Olá. Aqui é a Komiya da plataforma.
Continuando da última vez, continuaremos fazendo receitas para procedimentos existentes. Acho que haverá mais umas 3 vezes, então, por favor, tenham paciência.
Desta vez será uma receita para um servidor web.
Não acho que seja um servidor web normal sem fazer nada especial, mas se eu anotar o que estou fazendo,
Eu uso APC para o cache de código intermediário no sistema apache 2.2 + php5.3, uso WordPress e seu plugin ssh, e estou montado no AWS S3.
O fusível usado para s3mount precisa ser inserido como código-fonte da versão mais recente, e existem cerca de 18 pacotes PHP com versões fixas.
Foi complicado escrever os recursos dos pacotes um por um, então usei script.
Ao usar script, tenha cuidado porque se você esquecer de não_if será difícil executar muitas vezes.
Além disso, se eu esquecia de gravar o CD, o local de implantação era reconhecido e não aparecia, então recebi um erro de que o arquivo não existia nas etapas seguintes.
・Escreva receitas httpd
Prepare o arquivo de configuração
[shell]# mkdir -p /root/chef-repo/site-cookbooks/httpd/files/default/rpms # tar cf /root/chef-repo/site-cookbooks/httpd/files/default/rpms/web-rpm.tar ./web-rpm/ # tar tf /root/chef-repo/site-cookbooks/httpd/files/default/rpms/web-rpm.tar ./web-rpm/ # cd /chef-repo/site-cookbooks/httpd/recipes # mkdir -p /root/chef-repo/site-cookbooks/httpd/files/default/etc/httpd/{conf,conf.d} # cp -p /opt/src/config/web/httpd.conf /root/chef-repo/site-cookbooks/httpd/files/default/etc/httpd/conf/ # vi /root/chef-repo/site-cookbooks/httpd/files/default/etc/httpd/conf/httpd.conf # mkdir -p /root/chef-repo/site-cookbooks/httpd/files/default/etc/php.d # cp -p /opt/src/config/php/php.ini /root/chef-repo/site-cookbooks/httpd/files/default/etc/ # cd /root/chef-repo/site-cookbooks/httpd/files/default/rpms # wget http://rpms.famillecollet.com/enterprise/5/olds/x86\_64/php-pecl-apc-3.1.13-3.el5..# cd /root/chef-repo/site-cookbooks/httpd/64/php-pecl-apc-3.1.13-3.el5.remi.x86_64.rpm # cp -p /etc/php.d/apc.ini /root/chef-repo/site-cookbooks/httpd/files/default/etc/php.d/ # wget http://rpms.famillecollet.com/enterprise/5/remi/x86\_64/php-pecl-ssh2-0.11.3-2.el5.remi.x86\_64.rpm\[/shell\]
Instalação do Apache e Configuração Básica
[shell]# vi httpd-server.rb cookbook_file "/tmp/web-rpm.tar" do source "rpms/web-rpm.tar" modo 0644 fim
livro de _file receitas\ "/tmp/db-rpm.tar.gz" do source "rpms/db-rpm.tar.gz" modo 0644 fim
Nome do arquivo = "web-rpm.tar" script "install_httpd" não_if 'rpm -qa|grep httpd' interpretador "bash" user "root" código <-EOL cd /tmp tar xzf /tmp/db-rpm.tar.gz rpm -U db-rpm/5.5.27/{mysql-lib*,mysql-5*} rpm -U db-rpm/mysqlclient* tar xf /tmp/#{filename} rpm -U web-rpm/httpd-2.2.3-65/httpd* EOL end
script "install_php" do not_if 'rpm -qa|grep php' ignore_failure true interpreter "bash" user "root" code <-EOL cd /tmp rpm -i --quiet --force web-rpm/php5.3.17/{php-5.3*,php-cli*,php-common*,php-devel*,php-mbstring*,php-mbstring*,php-mysql*,php-pdo*,php-pear*} rpm -i web-rpm/php5.3.17/lib* EOL end
cookbook_file "/tmp/php-pecl-apc-3.1.13-3.el5.remi.x86_64.rpm" do source "rpms/php-pecl-apc-3.1.13-3.el5.remi.x86_64.rpm" mode 0644 end
cookbook_file "/tmp/php-pecl-ssh2-0.11.0-1.el5.rf.x86_64.rpm" do source "rpms/php-pecl-ssh2-0.11.0-1.el5.rf.x86_64.rpm" mode 0644 end
package "php-pecl-apc" do only_if "rpm -qa|grep php" action :install source "/tmp/php-pecl-apc-3.1.13-3.el5.remi.x86_64.rpm" provider Chef::Provider::Package::Rpm end
%W{libssh2 libssh2-devel}.each do |pkg| package pkg do action :install end end
package "php-pecl-ssh2" do only_if "rpm -qa|grep php" action :install source "/tmp/php-pecl-ssh2-0.11.0-1.el5.rf.x86_64.rpm" provider Chef::Provider::Package::Rpm end
script "backup_apache_config" do not_if 'ls /etc/httpd/conf/httpd.conf.org' interpreter "bash" user "root" code <-EOL cp="" -p="" tc/httpd/conf/httpd.conf{,.org}="" cp="" -p="" tc/php.ini{,.org}="" mv="" tc/httpd/conf.d/proxy_ajp.conf{,.org}="" mv="" tc/httpd/conf.d/welcome.conf{,.org}="" eol="" end="" service="" "httpd"="" do="" supports="" :status=""> true, :restart => true, :reload => :true action [ :enable, :start ] fim
cookbook_file "/etc/httpd/conf/httpd.conf" do source "etc/httpd/conf/httpd.conf" proprietário "root" group modo "root" 0644 notifies :reload, 'service[httpd]' fim
cookbook_file "/etc/php.ini" do source "etc/php.ini" proprietário do grupo "root" modo "root" modo 0644 notifica :reload, 'service[httpd]' fim
cookbook_file "/etc/php.d/apc.ini" do source "etc/php.d/apc.ini" proprietário do grupo "root" modo "root" 0644 notifica :reload, 'service[httpd]' terminar[/shell]
Acho que os recursos que uso são livros de receitas_file, pacote, script e serviço.
O significado detalhado de cada recurso foi muito fácil de entender em "Introduction Chef-Solo".
Para instruções detalhadas, recomenda-se consultar atentamente o manual de recursos.
Para explicar um pouco do que parece difícil de ver à primeira vista,
A linha seguinte no recurso do livro de receitas_file notifica você para recarregar o serviço httpd quando o arquivo for atualizado.
notifica: reload, 'service[httpd]'
Na linha seguinte do recurso de serviço, enable significa ckconfig ativado. Start é, claro, o início do serviço.
Ação [ :Habilitar, :Começar ]
O not_if no recurso script é uma restrição baseada em if que executa o script se o resultado do comando seguinte for não-0.
Por exemplo, se rpm -qa|httpd não estiver incluído, use-o quando quiser empacotá-lo. Se o valor de retorno for 0, use apenas_if.
Adicionei ignorar_failure true usado no script "install_php" porque não estava instalado, provavelmente por causa do aviso que aparece ao instalar o php. É um mistério se isso é aceitável.
É assim?
Configuração básica da autenticação
[shell]# cp -p /etc/httpd/conf.d/basic_auth.conf .. /files/default/etc/httpd/conf.d/ # cp -p /etc/httpd/conf/.htpasswd .. /files/default/etc/httpd/conf/
# vi basic_auth.rb cookbook_file "/etc/httpd/conf/.htpasswd" do source "etc/httpd/conf/.htpasswd" modo 0644 fim
cookbook_file "/etc/httpd/conf.d/basic_auth.conf" do source "etc/httpd/conf.d/basic_auth.conf" proprietário "root" group modo "root" 0644 notifica :reload, 'service[httpd]' terminar[/shell]
Posicionamento do Módulo e S3Mount (*)
[shell]# mkdir -p .. /files/default/usr/local/src/ec2 # cp -p /opt/src/module.tar.gz .. /files/default/usr/local/src/ # cp -p /usr/local/src/ec2/fuse-2.8.4.tar.gz .. /files/default/usr/local/src/ec2/ # cp -p /usr/local/src/ec2/s3fs-1.68.tar.gz .. /files/default/usr/local/src/ec2/ # cp -p /etc/passwd-s3fs .. /files/default/etc/ # mkdir -p .. /files/default/etc/init.d # cp -p /etc/init.d/fuse .. /files/default/etc/init.d/ # scp omb-web01:/etc/rc.local .. /files/default/etc/
# pwd /root/chef-repo/site-cookbooks/httpd/recipes # vi wordpress.rb cookbook_file "/tmp/module.tar.gz" fonte "usr/local/src/module.tar.gz" modo 0644 fim
nome do arquivo = "module.tar.gz" script "install_module" não _if 'ls /var/www/html/wp-settings.php' interpretador "bash" usuário <-EOL cd /var/www mv html html.org tar zxf /tmp/#{filename} EOL end
# vi s3mount.rb cookbook_file "/tmp/fuse-2.8.4.tar.gz" do source "usr/local/src/ec2/fuse-2.8.4.tar.gz" mode 0644 end
filename = "fuse-2.8.4" script "install_fuse" do not_if 'export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/lib64/pkgconfig/ && ldconfig && modprobe fuse && pkg-config --modversion fuse' interpreter "bash" user "root" code <-EOL cd /usr/local/src tar zxf /tmp/#{filename}.tar.gz cd #{filename} && ./configure --prefix=/usr && make && make install export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/lib64/pkgconfig/ && ldconfig && modprobe fuse pkg-config --modversion fuse EOL end
cookbook_file "/tmp/s3fs-1.68.tar.gz" do source "usr/local/src/ec2/s3fs-1.68.tar.gz" mode 0644 end
filename = "s3fs-1.68" script "install_s3fs" do not_if 'ls /usr/local/src/s3fs-1.68/config.log' interpreter "bash" user "root" code "<-EOL export="" pkg_config_path="/usr/lib/pkgconfig:/usr/lib64/pkgconfig/" &&="" ldconfig="" &&="" modprobe="" fuse="" cd="" sr/local/src="" tar="" zxf="" mp/#{filename}.tar.gz="" cd="" #{filename}="" &&="" ./configure="" --prefix="/opt/s3fs" &&="" make="" &&="" make="" install="" eol="" end="" cookbook_file="" "/etc/passwd-s3fs"="" do="" source="" "etc/passwd-s3fs"="" mode="" 0400="" end="" cookbook_file="" "/etc/init.d/fuse"="" do="" source="" "etc/init.d/fuse"="" mode="" 0755="" end="" service="" "fuse"="" do="" supports="" :status="">root" código true, :restart => true action [ :enable, :start ] fim
diretório '/var/www/html/assets' Proprietário do grupo 'Apache' Modo 'Apache' Ação :Criar Fim
Nome do Arquivo = "/var/www/html/assets" script "mount_s3fs" não_if 'grep asset /etc/rc.local' interpretador "bash" usuário código "root" <-EOL cp="" -rp="" ar/www/html/assets{,.bk}="" &&="" rm="" -rf="" ar/www/html/uploads/*="" pt/s3fs/bin/s3fs="" busaid="" ar/www/html/assets="" -o="" allow_other="" cp="" -rp="" ar/www/html/assets.bk/*="" ar/www/html/uploads/.="" ln="" -sf="" sr/share/pear/apc.php="" ar/www/html/apc.php="" echo="" "/opt/s3fs/bin/s3fs="" busaid="" ar/www/html/assets="" -o="" allow_other"="">> /etc/rc.local EOL end[/shell] *A receita s3mount não foi testada devido às circunstâncias.
Teste de Sintaxe para Livros de Receitas
[shell]# base de teste de livros de receitas _setting com faca\ #login de teste de livro de receitas com faca_users # teste de livro de receitas com faca httpd[/shell] FATAL: Se não houver erro, parece estar ok (quando sair, aparecerá especificamente como a linha deste livro)
É isso por agora. Obrigado por ler.
Na próxima vez vamos falar sobre a receita do servidor de banco de dados.</-EOL></-EOL></-EOL>