詳細検索

Chef 3(웹 서버)에서 기존 절차에 대한 레시피를 작성하세요

아바타
글쓴이 komi

Chef 3(웹 서버)에서 기존 절차에 대한 레시피를 작성하세요
日本語에서 번역 • 원문 보기

안녕하세요. 플랫폼의 코미야입니다.
지난번과 이어서 기존 시술 레시피를 계속 만들 예정입니다. 앞으로 3번 정도 더 있을 것 같으니 조금만 기다려 주세요.

이번에는 웹 서버 레시피가 될 것입니다.
특별한 작업 없이 일반 웹 서버라고 생각하지 않지만, 제가 하는 일을 적어보면,
저는 apache 2.2 + php5.3 시스템에서 중간 코드 캐시로 APC를 사용하고, 워드프레스와 그 ssh 플러그인을 사용하며, AWS S3에 마운트되어 있습니다.
s3mount에 사용되는 퓨즈는 최신 버전의 소스 코드로 입력해야 하며, 약 18개의 고정 버전이 있는 PHP 패키지가 있습니다.
패키지 리소스를 하나씩 작성하는 것이 번거로워서 스크립트를 사용했습니다.
스크립트를 사용할 때는 조심하세요. 잊어버리면 여러 번 실행하는 _if 어려워집니다.
또한 CD를 쓰는 것을 잊으면 배포 위치가 인식되었는데 나타나지 않아서 이후 단계에서 파일이 존재하지 않는다는 오류가 떴습니다.

·httpd 레시피 작성하기
구성 파일 준비하세요
[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 /root/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.5. 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\]
Apache 설치 및 기본 구성
[shell]# vi httpd-server.rb 쿡북_file "/tmp/web-rpm.tar" 출처 "rpms/web-rpm.tar" 모드 0644 끝

cookbook_file "/tmp/db-rpm.tar.gz" 출처 "rpms/db-rpm.tar.gz" 모드 0644 끝

filename = "web-rpm.tar" 스크립트 "install_httpd" do not_if 'rpm -qa|grep httpd' 인터프리터 "bash" 사용자 "root" 코드 <-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 ] 끝

cookbook_file "/etc/httpd/conf/httpd.conf" do source "etc/httpd/conf/httpd.conf" 소유자 "root" 그룹 "root" 모드 0644 알림 :reload, 'service[httpd]' 종료

cookbook_file "/etc/php.ini" 출처 "etc/php.ini" 소유자 "root" 그룹 "root" 모드 0644 알림 :reload, 'service[httpd]' 종료

cookbook_file "/etc/php.d/apc.ini" 소스 "etc/php.d/apc.ini" 소유자 "root" 그룹 "root" 모드 0644 알림 :reload, 'service[httpd]' end[/shell]
제가 사용하는 자료는 요리책/_file, 패키지, 스크립트, 그리고 서비스입니다.
"입문 셰프-솔로"에서는 각 자료의 상세한 의미를 매우 쉽게 이해할 수 있었습니다.
자세한 설명은 자료 매뉴얼을 꼼꼼히 살펴보는 것이 좋습니다.
처음 보기에는 보기 어려워 보이는 부분을 조금 설명하자면,

요리책_file 리소스의 다음 문장은 파일이 업데이트될 때 httpd 서비스를 다시 불러오라는 알림을 줍니다.
 알림 :reload, 'service[httpd]'

서비스 리소스의 다음 줄에서 enable 는 ckconfig on을 의미합니다. Start는 물론 서비스의 시작 지점입니다.
 행동 [ :가능, :시작 ]

스크립트 자원의 not_if는 if 기반 제한으로, 다음 명령어의 결과가 0이 아니면 스크립트를 실행합니다.
예를 들어, rpm -qa|httpd가 포함되어 있지 않다면 패키징할 때 사용하세요. 반환 값이 0이라면 _if만 사용하세요.

install_php" 스크립트에 install\ script에 ignore_failure true used를 추가했는데, 설치되지 않았기 때문일 겁니다. 아마도 php 설치 시 경고가 뜨기 때문일 겁니다. 이게 괜찮은지는 미스터리입니다.

이런 거야?

기본 인증 설정
[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 요리책_file "/etc/httpd/conf/.htpasswd" 출처 "etc/httpd/conf/.htpasswd" 모드 0644 끝

cookbook_file "/etc/httpd/conf.d/basic_auth.conf" do source "etc/httpd/conf.d/basic_auth.conf" 소유자 "root" 그룹 "root" 모드 0644가 알림 :reload, 'service[httpd]' end[/shell]
모듈 배치 및 S3마운트 (*)
[쉘]# 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" 소스 "usr/local/src/module.tar.gz" 모드 0644 끝

filename = "module.tar.gz" 스크립트 "install_module" do not_if 'Is /var/www/html/wp-settings.php' 인터프리터 "bash" 사용자 "root" 코드 <-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=""> true, :restart => true action [ :enable, :start ] 종료

디렉터리 '/var/www/html/assets' do owner 'apache' 그룹 'Apache' 모드 0777 동작 :create 끝

filename = "/var/www/html/assets" 스크립트 "mount_s3fs" 하지 않아요_if 'grep asset /etc/rc.local' 인터프리터 "bash" 사용자 "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] *s3mount 레시피는 사정으로 인해 테스트되지 않았습니다.

요리책을 위한 구문 검사
[shell]# 칼 요리책 테스트 베이스_setting # 칼 요리책 테스트 로그인_users # 칼 요리책 테스트 httpd[/shell] FATAL: 오류가 없으면 괜찮아 보입니다 (출시되면 이 요리책의 문장으로 명확히 표시됩니다)

이번에는 여기까지입니다. 읽어주셔서 감사합니다.
다음에는 DB 서버 레시피에 대해 이야기하겠습니다.</-EOL></-EOL></-EOL>

Related Articles