ansible實現(xiàn)自動化編譯安裝httpd的角色

各個節(jié)點如下

ansible 被管理端
10.0.0.7 centos7 10.0.0.7 centos7
10.0.0.18 centos8
10.0.0.28 centos8

思路:首先在ansible編譯好httpd后 利用角色傳送好編譯的文件到各個主機(jī) 然后啟動

1.ansible主機(jī)編譯httpd

說明:安裝httpd-2.4亭敢,依賴于apr-1.4+, apr-util-1.4+
編譯安裝的背景:centos8編譯安裝httpd很簡單知牌,因為centos8提供的apr的包版本比較新亮垫,但是在centos7中yum源的apr版本低于httpd2.4的要求了始鱼。所以需要單獨下載apr包和apr-util包進(jìn)行編譯
準(zhǔn)備httpd軟件和apr apr-util

# 準(zhǔn)備編譯工具
yum -y install gcc make pcre-devel openssl-devel expat-devel
cd /usr/local/src
wget https://downloads.apache.org//apr/apr-1.7.0.tar.bz2
wget https://downloads.apache.org//apr/apr-util-1.6.1.tar.bz2
wget https://downloads.apache.org//httpd/httpd-2.4.43.tar.bz2
tar xvf apr-1.7.0.tar.bz2
tar xvf apr-util-1.6.1.tar.bz2
tar xvf httpd-2.4.43.tar.bz2

將apr和apr-util源碼和httpd源碼合并

mv apr-1.7.0 httpd-2.4.43/srclib/apr
mv apr-util-1.6.1 httpd-2.4.43/srclib/apr-util
ls httpd-2.4.43/srclib/
apr apr-util Makefile.in

將三者一并編譯并安裝

cd httpd-2.4.43/
./configure \
--prefix=/app/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-included-apr \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
# 我這里配置--with-mpm=prefork httpd 支持三種MPM工作模式:prefork, worker, event
# prefork即多進(jìn)程I/O模型:并行啟動多個進(jìn)程,每個進(jìn)程響應(yīng)一個連接請求半火。centos7默認(rèn)模型
#一個主進(jìn)程:生成和回收n個子進(jìn)程,創(chuàng)建套接字,不響應(yīng)請求
#多個子進(jìn)程:工作 work進(jìn)程方库,每個子進(jìn)程處理一個請求;系統(tǒng)初始時障斋,預(yù)先生成多個空閑進(jìn)程纵潦,等待請求
# 開始編譯 以兩核心交叉編譯
make -j 2 && make install 
# 編譯完成
root@7  ~]# ll /app/httpd24/
total 44
drwxr-xr-x  2 root root  302 Feb  1 18:36 bin
drwxr-xr-x  2 root root  253 Feb  1 18:36 build
drwxr-xr-x  2 root root   78 Feb  1 18:36 cgi-bin
drwxr-xr-x  4 root root   84 Feb  1 18:36 conf
drwxr-xr-x  3 root root 4096 Feb  1 18:36 error
drwxr-sr-x  2 root root   24 Mar 26  2020 htdocs
drwxr-xr-x  3 root root 8192 Feb  1 18:36 icons
drwxr-xr-x  2 root root 8192 Feb  1 18:36 include
drwxr-xr-x  3 root root  281 Feb  1 18:35 lib
drwxr-xr-x  2 root root    6 Feb  1 18:36 logs
drwxr-xr-x  4 root root   30 Feb  1 18:36 man
drwxr-sr-x 14 root root 8192 Mar 26  2020 manual
drwxr-xr-x  2 root root 4096 Feb  1 18:36 modules

2.準(zhǔn)備角色目錄

cd /etc/ansible/roles
mkdir httpd/{tasks,templates,files,vars,handlers,meta} -p

root@7  roles]# tree
.
└── httpd
    ├── files
    ├── handlers
    ├── meta
    ├── tasks
    ├── templates
    └── vars

7 directories, 0 files

3.roles/httpd/files目錄準(zhǔn)備內(nèi)容

#之前編譯好的httpd文件在`/app/httpd24/`路徑,將該目錄打包壓縮到`/etc/ansible/roles/httpd/files`
cd /etc/ansible/roles/httpd/files
tar -cjf httpd.tar.bz2 /app/httpd24/

#準(zhǔn)備service unit文件到roles/httpd/files目錄下(centos7)
cat > /etc/ansible/roles/httpd/files/httpd.service << EOF
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/app/httpd24/bin/apachectl start
#ExecStart=/app/httpd24/bin/httpd $OPTIONS -k start
ExecReload=/app/httpd24/bin/apachectl graceful
#ExecReload=/app/httpd24/bin/httpd $OPTIONS -k graceful
ExecStop=/app/httpd24/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF

#準(zhǔn)備httpd的環(huán)境變量文件到roles/httpd/files目錄下
cat > /etc/ansible/roles/httpd/files/httpd.sh <<EOF
PATH=$PATH:/app/httpd24/bin
EOF

#準(zhǔn)備template模版文件到roles/httpd/templates模版目錄下
cd /app/httpd24/conf
cp /app/httpd24/conf/httpd.conf /etc/ansible/roles/httpd/templates/httpd.conf.j2
#修改模版文件的原有配置為變量
sed -ri.bak -e '/^User/s/(User).*/\1 {{ APACHE_USER }}/' -e '/^Group/s/(Group).*/\1 {{ APACHE_GROUP }}/' httpd.conf.j2
sed -ri '/^Listen/s/(Listen).*/Listen {{ LISTEN_PORT }}/' httpd.conf.j2
sed -ri 's/^#(ServerName).*/\1 {{ SERVER_NAME }}/' httpd.conf.j2
#sed -ri '/^DocumentRoot/s/(DocumentRoot).*/\1 "{{ ROOT }}"/' httpd.conf.j2
# 驗證
# sed -rn '/^(User|Group)/p' httpd.conf.j2
# sed -rn '/^Listen/p' httpd.conf.j2
# sed -rn '/^ServerName/p' httpd.conf.j2

4.roles/httpd/tasks目錄準(zhǔn)備內(nèi)容

#創(chuàng)建用戶和組 group.yaml user.yaml
cat > /etc/ansible/roles/httpd/tasks/group.yaml <<EOF
- name: create apache group
  group: name=apache state=present system=yes gid=80
EOF

cat > /etc/ansible/roles/httpd/tasks/user.yaml <<EOF
- name: create apache user
  user: name=apache state=present system=yes create_home=no home=/var/www shell=/sbin/nologin uid=80 group=apache
EOF

#準(zhǔn)備httpd軟件software.yaml
#之前已經(jīng)將軟件目錄打包并采用bzip2壓縮 放在了files目錄下
cat > /etc/ansible/roles/httpd/tasks/software.yaml <<EOF
- name: unarchive tar.bz2 to remote host
  unarchive: src=httpd.tar.bz2 dest=/
EOF

#準(zhǔn)備unit和環(huán)境變量文件unit.yaml
cat >/etc/ansible/roles/httpd/tasks/unit.yaml <<EOF
- name: copy var_config_file to remote host
  copy: src=httpd.sh dest=/etc/profile.d/ mode=644 owner=root
- name: copy unit_file to remote host
  copy: src=httpd.service dest=/usr/lib/systemd/system/
  notify: reload httpd
EOF

#準(zhǔn)備調(diào)用模版文件template.yaml
cat > /etc/ansible/roles/httpd/tasks/template.yaml <<EOF
- name: copy template file to remote host
  template: src=httpd.conf.j2 dest=/app/httpd24/conf/httpd.conf
EOF

#準(zhǔn)備服務(wù)文件service.yaml
cat >/etc/ansible/roles/httpd/tasks/service.yaml <<EOF
- name: start httpd.service
  service: name=httpd state=started enabled=yes
EOF

#創(chuàng)建handlers文件
cat > /etc/ansible/roles/httpd/handlers/main.yaml <<EOF
- name: reload httpd
  service: name=httpd state=reloaded
EOF

5.roles/httpd/vars目錄準(zhǔn)備變量文件

cat > /etc/ansible/roles/httpd/vars/main.yaml <<EOF
APACHE_USER: apache
APACHE_GROUP: apache
LISTEN_PORT: 8080
SERVER_NAME: wangcloud.top
EOF

6.準(zhǔn)備tasks的入口main文件 調(diào)整執(zhí)行順序

cat > /etc/ansible/roles/httpd/tasks/main.yaml <<EOF
- include: group.yaml
- include: user.yaml
- include: software.yaml
- include: unit.yaml
- include: template.yaml
- include: service.yaml 
EOF

7.準(zhǔn)備playbook

cat > /etc/ansible/role_httpd.yaml <<EOF
---
- hosts: all
  remote_user: root
  gather_facts: no
  roles:
  - role: httpd
EOF

最后:查看目錄 檢測語法 執(zhí)行playbook

root@7  roles]# tree
.
└── httpd
    ├── files
    │   ├── httpd.service
    │   ├── httpd.sh
    │   └── httpd.tar.bz2
    ├── handlers
    │   └── main.yaml
    ├── meta
    ├── tasks
    │   ├── conf.yaml
    │   ├── group.yaml
    │   ├── main.yaml
    │   ├── service.yaml
    │   ├── software.yaml
    │   ├── template.yaml
    │   ├── unit.yaml
    │   └── user.yaml
    ├── templates
    │   ├── httpd.conf.bak
    │   └── httpd.conf.j2
    └── vars
        └── main.yaml

#Inventory
[websrvs]
10.0.0.7
[dbsrvs]
10.0.0.7
10.0.0.[1:2]8

#檢查語法
ansible-playbook --syntax-check /etc/ansible/role_httpd.yaml
#測試執(zhí)行
ansible-playbook -C /etc/ansible/role_httpd.yaml
#執(zhí)行
ansible-playbook /etc/ansible/role_httpd.yaml

驗證結(jié)果

ansible all -m shell -a 'systemctl is-active httpd'
10.0.0.7 | CHANGED | rc=0 >>
active
10.0.0.28 | CHANGED | rc=0 >>
active
10.0.0.18 | CHANGED | rc=0 >>
active
image.png

當(dāng)然我這里沒有準(zhǔn)備測試頁文件到files目錄 也沒有寫測試頁的tasks垃环。如果有需要 則再寫邀层。用ansible copy模塊把文件復(fù)制過去就行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遂庄,一起剝皮案震驚了整個濱河市寥院,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涧团,老刑警劉巖只磷,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泌绣,居然都是意外死亡钮追,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門阿迈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來元媚,“玉大人,你說我怎么就攤上這事苗沧】兀” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵待逞,是天一觀的道長甥角。 經(jīng)常有香客問我,道長识樱,這世上最難降的妖魔是什么嗤无? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任震束,我火速辦了婚禮,結(jié)果婚禮上当犯,老公的妹妹穿的比我還像新娘垢村。我一直安慰自己,他們只是感情好嚎卫,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布嘉栓。 她就那樣靜靜地躺著,像睡著了一般拓诸。 火紅的嫁衣襯著肌膚如雪侵佃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天恰响,我揣著相機(jī)與錄音趣钱,去河邊找鬼涌献。 笑死胚宦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的燕垃。 我是一名探鬼主播枢劝,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼卜壕!你這毒婦竟也來了您旁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤轴捎,失蹤者是張志新(化名)和其女友劉穎鹤盒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侦副,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡侦锯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了秦驯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尺碰。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖译隘,靈堂內(nèi)的尸體忽然破棺而出亲桥,到底是詐尸還是另有隱情,我是刑警寧澤固耘,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布题篷,位于F島的核電站,受9級特大地震影響厅目,放射性物質(zhì)發(fā)生泄漏番枚。R本人自食惡果不足惜偿枕,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望户辫。 院中可真熱鬧渐夸,春花似錦、人聲如沸渔欢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奥额。三九已至苫幢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垫挨,已是汗流浹背韩肝。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留九榔,地道東北人哀峻。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像哲泊,于是被迫代替她去往敵國和親剩蟀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容