1. 程式人生 > >ansible-playbook實戰之批量安裝lamp

ansible-playbook實戰之批量安裝lamp

簡介

通過ansible-playbook批量編譯安裝lamp(apache+php及擴充套件)並進行初始化(自動載入php模組,修改mpm、日誌輪儲等),後續我們只需修改站點檔案即可。

ansible-playbook配置思路:
1.通過vars中的main.yml配置變數,主要為原始碼存放目錄及安裝目錄
2.通過tasks中的copy.yml將原始碼檔案傳輸到異地伺服器上原始碼存放目錄
3.通過tasks中的install.yml呼叫模板lamp_install.sh,將lamp安裝到變數中定義的安裝目錄
4.通過tasks中的main.yml呼叫copy模組和install模組
5.通過lamp.yml呼叫劇本(playbook):lamp_install

playbook的目錄結構

[[email protected] ansible]# cd /etc/ansible/
[[email protected] ansible]# mkdir -p roles/lamp_install/{files,handlers,meta,tasks,templates,vars}
[[email protected] ansible]# tree /etc/ansible
├── ansible.cfg
├── hosts
├── lamp.yml
├── log
│   └── ansible.log
├── roles
│   ├── lamp_install
│   │   ├── files
│   │   │   ├── apache
│   │   │   │   ├── apr-1.5
.0.tar.gz │ │ │ │ ├── apr-util-1.5.3.tar.gz │ │ │ │ ├── cHost.conf │ │ │ │ ├── httpd-2.4.7.tar.gz │ │ │ │ ├── httpd-mpm.conf │ │ │ │ ├── pcre-8.36.tar.gz │ │ │ │ ├── rewrite.conf │ │ │ │ └── symfony.zip │ │ │ ├── memcached │ │ │ │ ├── libevent-2.0
.22-stable.tar.gz │ │ │ │ ├── magent-0.5.tar.gz │ │ │ │ └── memcached-1.4.22.tar.gz │ │ │ └── php │ │ │ ├── eaccelerator-eaccelerator-42067ac.tar.gz │ │ │ ├── libmcrypt-2.5.7-1.2.el6.rf.x86_64.rpm │ │ │ ├── libmcrypt-devel-2.5.7-1.2.el6.rf.x86_64.rpm │ │ │ ├── memcached_extension │ │ │ │ ├── libmemcached-1.0.18.tar.tar │ │ │ │ └── memcached-2.2.0.tgz │ │ │ ├── memcache_extension │ │ │ │ └── memcache-2.2.7.tgz │ │ │ ├── mongo-1.2.10.tgz │ │ │ └── php-5.4.22.tar.gz │ │ ├── handlers │ │ ├── meta │ │ ├── tasks │ │ │ ├── copy.yml │ │ │ ├── install.yml │ │ │ └── main.yml │ │ ├── templates │ │ │ └── lamp_install.sh │ │ └── vars │ │ └── main.yml

說明:
files:存放需要同步到異地伺服器的原始碼檔案及配置檔案;
handlers:當資源發生變化時需要進行的操作,若沒有此目錄可以不建或為空;
meta:角色定義可留空;
tasks:lamp安裝過程成需要進行的執行的任務;
templates:用於執行lamp安裝的模板檔案,一般為指令碼;
vars:本次安裝定義的變數

具體操作

1.建立lamp角色檔案,用於呼叫lamp_install

[[email protected]  ansible]# vim lamp.yml
- hosts: test
  remote_user: root
  gather_facts: False
  roles:
    - lamp_install

2.建立變數檔案

[root@test ansible]# cd /etc/ansible/roles/lamp_install/vars
[root@test ansible]#vim main.yml
#原始碼存放目錄
source_dir: /home/ap/src/lamp/
#原始碼安裝目錄
install_dir: /home/ap/

3.建立任務檔案

[[email protected] ansible]# cd /etc/ansible/roles/mysql_install/tasks
[[email protected] ansible]# vim copy.yml
#複製php元件至目標伺服器
- name: copy php dir to client
  copy: src=php dest={{source_dir}} owner=root group=root
#複製apache元件至目標伺服器
- name: copy apache dir to client
  copy: src=apache dest={{source_dir}} owner=root group=root
#複製memcached元件至目標伺服器
- name: copy memcached dir to client
  copy: src=memcached dest={{source_dir}} owner=root group=root
#複製模板檔案至目標伺服器
- name: copy lamp script to client
  template: src=lamp_install.sh dest={{source_dir}} owner=root group=root mode=0775
[[email protected] ansible]# vim install.yml
#執行模板檔案進行安裝
- name: install lamp
  shell: bash {{source_dir}}/lamp_install.sh
[[email protected] ansible]# vim main.yml
#引用copy、install模組
- include: copy.yml
- include: install.yml

注意:
a.copy如果複製目錄,需要加上遞迴引數,recurse;
b.copy如果複製目錄,沒有目錄將會在目標伺服器上建立;
c.copy如果複製檔案到目標伺服器的某一個目錄下,需要在dest引數上加上/home/ap/src/lamp/,而不是/home/ap/lamp,否則ansible將會把檔案複製為lamp,而不是放在lamp目錄下。
4.編寫模板指令碼

[[email protected] ansible]#cd /etc/ansible/roles/lamp_install/templates
#!/bin/bash
#author:yanggd
#comment:lamp環境部署
source_dir={{source_dir}}
apache=$source_dir/apache
php=$source_dir/php
memcached=$source_dir/memcached
install_dir={{install_dir}}
#Source function library.
. /etc/init.d/functions
#安裝apache
cd $apache
tar -zxvf apr-1.5.0.tar.gz
cd apr-1.5.0
./configure --prefix=$install_dir/apr
make && make install
if [ $? -ne 0 ];then
    action "install apr is failed!"  /bin/false
    exit $?
fi
cd ..
#
tar -zxvf apr-util-1.5.3.tar.gz
cd apr-util-1.5.3
./configure --prefix=$install_dir/apr-util --with-apr=$install_dir/apr
make && make install
if [ $? -ne 0 ];then
    action "install apr-util is failed!"  /bin/false
    exit $?
fi
cd ..
#
tar -zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure --prefix=$install_dir/pcre
make && make install
if [ $? -ne 0 ];then
    action "install pcre is failed!"  /bin/false
    exit $?
fi
#
cd ..
tar -zxvf httpd-2.4.7.tar.gz 
cd httpd-2.4.7
./configure --prefix=$install_dir/apache --with-apr=$install_dir/apr --with-apr-util=$install_dir/apr-util --with-pcre=$install_dir/pcre --enable-modules=mall --enable-rewrite --enable-mpms-shared=all --with-mpm=event --enable-v4-mapped --enable-so
make && make install
if [ $? -ne 0 ];then
    action "install httpd is failed!"  /bin/false
    exit $?
fi
cd ..
#
unzip symfony.zip -d $install_dir
cd ..

#安裝memcached
cd $memcached
tar -zxvf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
./configure --prefix=$install_dir/libevent
make && make install
if [ $? -ne 0 ];then
    action "install libevent is failed!"  /bin/false
    exit $?
fi
cd ..
tar -zxvf memcached-1.4.22.tar.gz
cd memcached-1.4.22
./configure --prefix=$install_dir/memcached --with-libevent=$install_dir/libevent
make && make install
if [ $? -ne 0 ];then
    action "install memcached is failed!"  /bin/false
    exit $?
fi
#安裝magent
cd ..
ln -s $install_dir/libevent/lib/libevent-2.0.so.5 /lib64/libevent-2.0.so.5
tar -zxf magent-0.5.tar.gz
sed -i "s#LIBS = -levent#LIBS = -levent -lm -L$install_dir/libevent/lib#g" Makefile
sed -i "/LIBS/a INCLUDE=-I$install_dir/libevent/include" Makefile
sed -i "1i\#ifndef SSIZE_MAX" ketama.h
sed -i "4i\#define SSIZE_MAX 32676" ketama.h
sed -i '$i\#endif' ketama.h
#編譯
make
mkdir -p $install_dir/magent/bin
mv magent $install_dir/magent/bin/

cd ..
#安裝php
yum install -y libxml2-devel libjpeg-devel libpng-devel freetype-devel openssl-devel libcurl-devel unzip
cd $php
rpm -ivh libmcrypt-2.5.7-1.2.el6.rf.x86_64.rpm
rpm -ivh libmcrypt-devel-2.5.7-1.2.el6.rf.x86_64.rpm
tar -zxvf php-5.4.22.tar.gz
cd php-5.4.22
./configure --prefix=$install_dir/php --with-apxs2=$install_dir/apache/bin/apxs --with-openssl --with-mcrypt --with-zlib --with-libxml-dir --enable-xml --with-freetype-dir --with-curl --enable-sockets --with-config-file-path=$install_dir/php/etc --with-mysql --with-mysqli --with-pdo-mysql
make && make install
if [ $? -ne 0 ];then
    action "install php is failed!"  /bin/false
    exit $?
fi
cp php.ini-production $install_dir/php/etc/php.ini
sed -i '/mime.types/a\    AddType application/x-httpd-php .php' $install_dir/apache/conf/httpd.conf
sed -i '/mime.types/a\    AddType application/x-httpd-php-source .phps' $install_dir/apache/conf/httpd.conf
sed -i '/;date.timezone/a date.timezone = "Asia/Shanghai"' $install_dir/php/etc/php.ini
sed -i '/;date.timezone/a date.timezone = PRC' $install_dir/php/etc/php.ini

cd ../
#安裝php擴充套件
#安裝mono擴充套件
tar -zxvf mongo-1.2.10.tgz
cd mongo-1.2.10
$install_dir/php/bin/phpize
./configure --with-php-config=$install_dir/php/bin/php-config 
make && make install
sed -i '/php_bz2.dll/a extension=mongo.so' $install_dir/php/etc/php.ini
cd ..
#安裝memcached擴充套件
cd memcached_extension
tar -zxvf libmemcached-1.0.18.tar.tar
cd libmemcached-1.0.18
./configure --prefix=$install_dir/libmemcached --with-memcached
make && make install
cd ..
tar -zxvf memcached-2.2.0.tgz
cd memcached-2.2.0
$install_dir/php/bin/phpize
./configure --enable-memcached --with-php-config=$install_dir/php/bin/php-config --with-libmemcached-dir=$install_dir/libmemcached --disable-memcached-sasl
make && make install
sed -i '/php_bz2.dll/a extension=memcached.so' $install_dir/php/etc/php.ini
cd ../../
#安裝memcache擴充套件
cd memcache_extension
tar -zxvf memcache-2.2.7.tgz
cd memcache-2.2.7
$install_dir/php/bin/phpize
./configure --with-php-config=$install_dir/php/bin/php-config --enable-memcache
make && make install
sed -i '/php_bz2.dll/a extension=memcache.so' $install_dir/php/etc/php.ini
cd ../../
#安裝soap
cd php-5.4.22/ext/soap/
$install_dir/php/bin/phpize
./configure --enable-soap  --with-php-config=$install_dir/php/bin/php-config
make && make install
sed -i '/php_bz2.dll/a extension=soap.so' $install_dir/php/etc/php.ini
cd ../
#安裝gd擴充套件
cd gd
$install_dir/php/bin/phpize
./configure --with-png-dir --with-freetype-dir --with-jpeg-dir --with-gd --with-php-config=$install_dir/php/bin/php-config
make && make install
sed -i '/php_bz2.dll/a extension=gd.so' $install_dir/php/etc/php.ini
cd ..
#安裝mbstring擴充套件
cd mbstring
$install_dir/php/bin/phpize
./configure --with-php-config=$install_dir/php/bin/php-config
make && make install
sed -i '/php_bz2.dll/a extension=mbstring.so' $install_dir/php/etc/php.ini
cd ..
#安裝exif擴充套件
cd exif
$install_dir/php/bin/phpize
./configure --with-php-config=$install_dir/php/bin/php-config
make && make install
sed -i '/php_bz2.dll/a extension=exif.so' $install_dir/php/etc/php.ini
cd ../../../
#安裝eaccelerator擴充套件
tar -zxvf eaccelerator-eaccelerator-42067ac.tar.gz
cd eaccelerator-eaccelerator-42067ac
$install_dir/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$install_dir/php/bin/php-config
make && make install
sed -i '/php_bz2.dll/a extension=eaccelerator.so' $install_dir/php/etc/php.ini
mkdir -p $install_dir/eaccelerator_cache
chmod -R 777 $install_dir/eaccelerator_cache
cat >> $install_dir/php/etc/php.ini <<EOF
eaccelerator.shm_size="64"
eaccelerator.cache_dir="$install_dir/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter="!*.yml.php"
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.allowed_admin_path = "/web/smallcity.cityhouse.cn"
EOF

##prepare apache
#修改 http.conf
sed -i "s/#LoadModule rewrite_module/LoadModule rewrite_module/g" $install_dir/apache/conf/httpd.conf
sed -i "s/#ServerName www.example.com:80/ServerName localhost:80/g" $install_dir/apache/conf/httpd.conf
sed -i "s/AllowOverride None/AllowOverride All/g" $install_dir/apache/conf/httpd.conf
sed -i "s/AllowOverride none/AllowOverride All/g" $install_dir/apache/conf/httpd.confz
sed -i "s/Require all denied/Require all granted/g" $install_dir/apache/conf/httpd.conf
sed -i "s#logs/access_log#| $install_dir/apache/bin/rotatelogs $install_dir/apache/logs/access_log.%Y-%m-%d 86400 480#g" $install_dir/apache/conf/httpd.conf
#prepare *.conf
\cp $apache/http-mpm.conf $install_dir/apache/conf/extra/
\cp $apache/rewrite.conf $install_dir/apache/conf/
\cp $apache/cHost.conf $install_dir/apache/conf/

#開機啟動
echo "$install_dir/apache/bin/apachectl -k start" >> /etc/rc.local

安裝指令碼功能:
1)安裝apache及相關元件
2)安裝memcached、magent
3)安裝php及相關擴充套件mogo、memcached、memcache、soap、gd、mbstring、exif、eaccelerator,並新增至php.ini;在apache中引用php
4)修改http.conf,包括新增rewrite模組,修改AllowOverride等
5)修改http-mpm.conf
6)新增rewrite.conf
7)新增站點配置檔案

執行playbook

#檢查檔案
[root@test ansible]# ansible-playbook -C lamp.yml
#執行playbook
[root@test ansible]# ansible-playbook lamp.yml

相關推薦

ansible-playbook實戰批量安裝lamp

簡介 通過ansible-playbook批量編譯安裝lamp(apache+php及擴充套件)並進行初始化(自動載入php模組,修改mpm、日誌輪儲等),後續我們只需修改站點檔案即可。 ansible-playbook配置思路: 1.通過vars中的m

實踐作業編譯安裝LAMP

編譯安裝lamp wordpress題目1:httpd所支持的處理模型有哪些,他們的分別使用於哪些環境。(1)prefork模型:功能:多進程模型,每個進程響應一個請求工作方式:①一個主進程:負責生成子進程及回收子進程(工作進程),負責創建套接字,負責接收請求,並將其派發給某子進程進行處理②n個子進程:每個

jenkins實戰jenkins安裝部署(二)

自動化運維 上一小節介紹了Jenkins安裝(Linux/uninx平臺),這節我們講講Jenkins界面操作(包括系統設置,工具安裝,插件管理,系統升級,安全設置等等操作); 登錄jenkins首頁,分別有以下選項欄,從左側看起,點擊Jenkins系統管理我們會看到右側list欄,內

Shell編程批量安裝服務腳本實例剖析

exit mysq 導入數據 div zabbix sql數據庫 groupadd .net tag 今天分享一下昨天寫過的一個小腳本運行的整個過程運行結果如下: 剖析如下: #!/bin/bash # Dat

nginx實戰nginx安裝教程

1、nginx下載    1.1 聯網下載如    wget http://nginx.org/download/nginx-1.9.4.tar.gz    1.2 本地上傳伺服器 2、依賴準備    yum install -y pcre pcre-devel    yum

爬蟲框架Scrapy實戰批量抓取招聘資訊--附原始碼

瞭解更多Python爬蟲內容請微信公眾號關注:Python技術博文 所謂網路爬蟲,就是一個在網上到處或定向抓取資料的程式,當然,這種說法不夠專業,更專業的描述就是,抓取特定網站網頁的HTML資料。不過由於一個網站的網頁很多,而我們又不可能事先知道所有網頁的URL地址

Ansible playbook編寫坑-----with_items

注:本文基於CentOS 7.2系統編寫,Ansible版本為ansible-2.4.2.0-2.el7.noarch 這篇文章應該是一篇格式糾正的文章,因為今天因為playbook的格式搞了大半天。 今天在使用copy模組時,需要拷貝多個檔案,於是就理所當

華為雲伺服器實戰 Gitlab安裝與配置使用

簡介     GitLab是一個利用Ruby on Rails開發的開源應用程式,

Ansible系列(五):playbook應用和roles自動化批量安裝示例

獲取 agg 真的 deb vhd under ice ddl ssh連接 html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,

ansible-playbook 批量安裝zabbix_agent

本機 批量安裝 本地測試 ada AC span scrip cal copy zabbix_agent_install.yml --- - hosts: 本地測試服務器 remote_user: root tasks: - name: Install p

Ansible playbook批量安裝zabbix agent

str ESS active 環境 name .rpm 自己 state over 自動化工具大家都有自己的選擇,有人喜歡slatstack,有人喜歡puppet,我選擇ansible,原因有兩條,簡單的同時適合我的環境。沒有最好的工具只有最適合你自己的工具。使用ansib

Oracle數據庫12cR2(項目實戰二):Linux系統安裝Oracle12.2

oracle12cr2 oracle視頻教程 oracle12cr2安裝 linux上安裝12c linux上安裝12cr2 oracle數據庫12cR2(項目實戰之二):linux系統安裝Oracle12.2一、課程主題:風哥Oracle數據庫教程12cR2(項目實戰之二):在linux

【java】itoo項目實戰hibernate 批量保存優化

新的 hibernate 缺點 try 實戰 lis 插入 entity man 在itoo中。基本上每一個系統都有一個導入功能,大量的數據填寫進入excel模板中。然後使用導入功能導入的數據庫中,這樣能夠大大的提高工作效率。那麽導入就涉及到了批量保存數據庫的

CentOS 7 yum安裝lamp,三者位於不同服務器,並為安裝WordPress及phpmyadmin

localhost 下載地址 wordpress 服務器 最新版 系統平臺:CentOS 7 1611WordPress下載地址phpMyAdmin下載地址(CentOS 7 建議不要安裝最新版,否則需要編譯最新的php-fpm)分別在三臺主機上安裝httpd(192.168.1.200)

數學路-python計算實戰(1)-ubuntu安裝pypy

sudo 安裝過程 zip ima cut popu -o ack sin Get the source code. The following packages contain the source at the same revision as the above b

Centos 7.0 編譯安裝LAMP(Linxu+apache+mysql+php)源碼安裝Apache (一)

mysql apache mysql編譯安裝 apache編譯安裝 lamp編譯安裝 Apache 簡介: Apache是世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上,由於其跨平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠

Centos 7.0 編譯安裝LAMP(Linxu+apache+mysql+php)源碼安裝Mysql (二)

php mysql apache mysql 簡介: MySQL是一個關系型數據庫管理系統,關系數據庫將數據保存在不同的表中,這樣就增加了速度並提高了靈活性。目前其屬於 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RD

Centos 7.0 編譯安裝LAMP(Linxu+apache+mysql+php)源碼安裝php (三)

lamp apache 源碼編譯lamp php mysql centos 7 編譯安裝lamp PHP簡介: PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特

(轉)Jetty實戰 安裝 運行 部署

web應用 -h value ctype ref board copyto 內容 highlight http://blog.csdn.net/kongxx/article/details/7218767 本文地址:http://blog.csdn.NET/kongxx/

LAMP、LNMP實戰四搭建mysql(持續更新)

export 加密 base yum exe root with pat debug LAMP、LNMP實戰之四搭建mysql說明:服務器192.168.2.32 數據庫版本mysql5.5.32 cmake版本2.8.8yum install -y g