Ansible使用playbook自動化編譯安裝Nginx(親測)
★安裝:
# yum install ansible -y (epel倉庫中)
★程式:
ansible
ansible-playbook //劇本
ansible-doc //獲取幫助文件
★配置檔案
/etc/ansible/ansible.cfg //核心配置檔案
★主機清單:
/etc/ansible/hosts
★外掛目錄:
/usr/share/ansible_plugins/
1、設定ansble到各個主機的免金鑰通訊:
[[email protected]~]# ssh-keygen
[[email protected]~]# ssh-copy-id 192.168.5.102
2、定義主機組:
[
[[email protected]]# vim hosts
[webserver]
192.168.5.102
192.168.5.104
3、檢視主機組內的主機:
[[email protected]]# ansible webserver --list-hosts
hosts (2):
192.168.5.102
192.168.5.104
4、定義角色路徑
[[email protected]~]# cat /etc/ansible/nginx.yaml
- hosts: 192.168.5.102
remote_user: root
roles:
-nginx_install ###roles目錄下的nginx_install目錄
-nginx_config ###roles目錄下的nginx_config目錄
5、檢視目錄結構:
[
.
├── nginx_config
│ ├── default
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ │ └── temp_server.conf
│ └── vars
│ └── main.yml
└── nginx_install
├──default
├──files
│ └── nginx-1.12.0.tar.gz
├──handlers
│ └── main.yml
├──meta
├──tasks
│ └── main.yml
├──templates
│ └── nginx.conf.j2
└── vars
└── main.yml
[[email protected]]# cd nginx_install/
[[email protected]_install]# ls
default files handlers meta tasks templates vars
6、task定義開始任務:
[[email protected]_install]# cd tasks/
[[email protected]]# cat main.yml
- name: copynginx package to remote host
copy: src=nginx-1.12.0.tar.gz dest=/tmp/nginx-1.12.0.tar.gz ##拉取nginx解壓吧
tags: cppkg
- name: tarnginx
shell: cd /tmp;tar -xf nginx-1.12.0.tar.gz ##解壓nginx包
- name: installpakger
yum: name={{ item }} state=latest ##安裝依賴包
with_items:
- openssl-devel
- pcre-devel
- gcc
- name: installnginx
shell: cd /usr/local/nginx-1.12.0;./configure--user=nginx --group=nginx --prefix=/usr/local/nginx--with-http_stub_status_module --with-http_ssl_module --with-pcre;make&& make install ####編譯安裝
- name: copyconf file nginx.conf
template: src=nginx.conf.j2 dest=/usr/local/nginx-1.12.0/conf/nginx.conf ###複製在template目錄下的配置檔案
tags: ngxconf
- name: copyshell
copy: src=/opt/create_users.sh dest=/tmp/create_users.sh ##拉取建立使用者的shell指令碼
- name: createuser nginx
shell: /bin/bash /tmp/create_users.sh
tags: addnginx
notify: start nginx service
為什麼要寫這個指令碼?因為加入有些主機建立的使用者已存在就會報錯
[[email protected]]# cat /opt/create_users.sh
#!/bin/bash
a=`cat/etc/passwd | grep nginx | wc -l`
if [ $a == 0];then
useradd nginx
fi
6、第二行copy對應file目錄:
[[email protected]_install]# cd files/
[[email protected]]# ls
nginx-1.12.0.tar.gz
7、template這一行對應的是template這個目錄和主服務端定義的變數:
[[email protected]_install]# cd templates/
[[email protected]]# ls
nginx.conf.j2
[[email protected]]# cat nginx.conf
user nginx;
worker_processes {{ ansible_processor_vcpus }};
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections {{ bingfa }};
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user[$time_local] "$request" '
# '$status $body_bytes_sent"$http_referer" '
# '"$http_user_agent""$http_x_forwarded_for"';
log_format xiaoluo '$remote_addr -$remote_user [$time_local] '
'"$request" $status$body_bytes_sent '
'"$http_referer" "$http_user_agent" ';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen {{ ngxport }};
server_name wwwNaNl.com
access_log logs/wwwNaNl.com xiaoluo;
#location / {
# proxy_pass http://192.168.5.101;
#}
#error_page 404 /404.html;
# redirect server error pages to thestatic page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apachelistening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGIserver listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /web;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, ifApache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
include vhosts/*.conf;
}##需要注意的就是模板變數(客戶端自動採集)、和在服務端定義的變數{{ngx_port}}
8、在vars定義變數:
[[email protected]_install]# cd vars/
[[email protected]]# cat main.yml
ngxport:"8080"
bingfa: 10000
9、定義觸發器:
[[email protected]_install]# cd handlers/
[[email protected]]# cat main.yml
- name: startnginx service
shell: /usr/loal/nginx/sbin/nginx
10、在nginx_config目錄加入我們經常要增加nginx站點,直接寫好模板推送到vhos目錄:(下面沒有測試,感興趣的可以測試一下)
[[email protected]]# cd nginx_config/
[[email protected]_config]# ls
default files handlers meta tasks templates vars
[[email protected]_config]# cd templates/
[[email protected]]# ls
temp_server.conf
[[email protected]]# cat temp_server.conf
server
{
listen 80;
server_name {{server_name }};
index index.phpindex.html;
root {{root_dir }};
}
###在var定義變數:
[[email protected]]# cd ../vars/
[[email protected]]# cat main.yml
server_name: "www.xiaoluo.com"
root_dir:"/web"
11、寫配置nginx的tasks步驟:
[[email protected]_config]# cd tasks/
[[email protected]]# ls
main.yml
[[email protected]]# cat main.yml
- name: createvhosts
shell: mkdir -p /usr/local/nginx/conf/vhosts/
tags: create_dir
- name: copyconf file nginx.conf # 呼叫templates模組
template: src=temp_server.confdest=/usr/local/nginx/conf/vhosts/{{ server_name }}.conf
tags: ngxconf
notify: reload nginx service
###定義重啟觸發器:
[[email protected]]# cd ../handlers/
You have newmail in /var/spool/mail/root
[[email protected]]# cat main.yml
- name: reloadnginx service
shell: /usr/local/nginx/sbin/nginx-t;/usr/local/nginx/sbin/nginx -s reload
測試:
[[email protected]]# ansible-playbook -C nginx.yaml
PLAY[192.168.5.104] **********************************************************
GATHERING FACTS***************************************************************
ok:[192.168.5.104]
TASK:[nginx_install | copy nginx package to remote host] *********************
changed:[192.168.5.104]
TASK:[nginx_install | tar nginx] *********************************************
skipping:[192.168.5.104]
ok:[192.168.5.104]
TASK:[nginx_install | install pakger] ****************************************
changed: [192.168.5.104]=> (item=openssl-devel,pcre-devel,gcc)
TASK:[nginx_install | install nginx] *****************************************
skipping:[192.168.5.104]
ok:[192.168.5.104]
TASK:[nginx_install | copy conf file nginx.conf] *****************************
changed:[192.168.5.104]
TASK:[nginx_install | copy shell] ********************************************
changed:[192.168.5.104]
TASK:[nginx_install | create user nginx] *************************************
skipping:[192.168.5.104]
ok: [192.168.5.104]
TASK:[nginx_config | create vhosts] ******************************************
skipping:[192.168.5.104]
ok:[192.168.5.104]
TASK:[nginx_config | copy conf file nginx.conf] ******************************
changed:[192.168.5.104]
NOTIFIED:[nginx_config | reload nginx service] *******************************
skipping:[192.168.5.104]
ok:[192.168.5.104]
PLAY RECAP********************************************************************
192.168.5.104 : ok=6 changed=5 unreachable=0 failed=0[[email protected] ansible]# ansible-playbook nginx.yaml
PLAY [192.168.5.104] **********************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.5.104]
TASK: [nginx_install | copy nginx package to remote host] *********************
ok: [192.168.5.104]
TASK: [nginx_install | tar nginx] *********************************************
changed: [192.168.5.104]
TASK: [nginx_install | install pakger] ****************************************
ok: [192.168.5.104] => (item=openssl-devel,pcre-devel,gcc)
TASK: [nginx_install | install nginx] *****************************************
changed: [192.168.5.104]
TASK: [nginx_install | copy conf file nginx.conf] *****************************
ok: [192.168.5.104]
TASK: [nginx_install | copy shell] ********************************************
ok: [192.168.5.104]
TASK: [nginx_install | create user nginx] *************************************
changed: [192.168.5.104]
TASK: [nginx_config | create vhosts] ******************************************
changed: [192.168.5.104]
TASK: [nginx_config | copy conf file nginx.conf] ******************************
ok: [192.168.5.104]
NOTIFIED: [nginx_install | start nginx service] *******************************
changed: [192.168.5.104]
PLAY RECAP ********************************************************************
192.168.5.104 : ok=11 changed=5 unreachable=0 failed=0[[email protected] ~]# ifconfig
ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.5.104 netmask 255.255.255.0 broadcast 192.168.5.255
[[email protected] ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 29264/nginx: master
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 29264/nginx: master
四、定義日誌檔案
下面是介紹如何定義日誌:(在ansible1.9.1版本之後有個bug所以定義不了日誌檔案只能降版本到1.9.1了)
1、ansible倒回去版本:1.9.1
需要安裝gcc、python-devel
[[email protected] ~]#yum install python-pip
[[email protected] ~]#pip install ansible==1.9.1
2、callback外掛:
[[email protected]]# vim /etc/ansible/ansible.cfg
callback_plugins = /usr/share/ansible/plugins/callback
bin_ansible_callbacks= True
3、在callback目錄下建立日誌處理檔案:
[[email protected]]# cd /usr/share/ansible/plugins/callback
[[email protected]]# ls
log.py log.pyc
[[email protected]]# cat log.py
import os
import time
import json
TIME_FORMAT="%b%d %Y %H:%M:%S"
MSG_FORMAT="%(now)s- %(category)s - %(data)s\n\n"
if notos.path.exists("/var/log/ansible/hosts"):
os.makedirs("/var/log/ansible/hosts")
def log(host,category, data):
if type(data) == dict:
if 'verbose_override' in data:
# avoid logging extraneous datafrom facts
data = 'omitted'
else:
data = data.copy()
invocation = data.pop('invocation',None)
data = json.dumps(data)
if invocation is not None:
data = json.dumps(invocation) +" => %s " % data
path =os.path.join("/var/log/ansible/hosts", host)
now = time.strftime(TIME_FORMAT,time.localtime())
fd =open(path, "a")
fd.write(MSG_FORMAT % dict(now=now,category=category, data=data))
fd.close()
classCallbackModule(object):
"""
logs playbook results, per host, in/var/log/ansible/hosts
"""
def on_any(self, *args, **kwargs):
pass
def runner_on_failed(self, host, res,ignore_errors=False):
log(host, 'FAILED', res)
def runner_on_ok(self, host, res):
log(host, 'OK', res)
def runner_on_skipped(self, host,item=None):
log(host, 'SKIPPED', '...')
def runner_on_unreachable(self, host, res):
log(host, 'UNREACHABLE', res)
def runner_on_no_hosts(self):
pass
def runner_on_async_poll(self, host, res,jid, clock):
pass
def runner_on_async_ok(self, host, res,jid):
pass
def runner_on_async_failed(self, host, res,jid):
log(host, 'ASYNC_FAILED', res)
def playbook_on_start(self):
pass
def playbook_on_notify(self, host,handler):
pass
def playbook_on_no_hosts_matched(self):
pass
def playbook_on_no_hosts_remaining(self):
pass
def playbook_on_task_start(self, name,is_conditional):
pass
def playbook_on_vars_prompt(self, varname,private=True, prompt=None, encrypt=None, confirm=False, salt_size=None,salt=None, default=None):
pass
def playbook_on_setup(self):
pass
def playbook_on_import_for_host(self, host,imported_file):
log(host, 'IMPORTED', imported_file)
def playbook_on_not_import_for_host(self,host, missing_file):
log(host, 'NOTIMPORTED', missing_file)
def playbook_on_play_start(self, name):
pass
def playbook_on_stats(self, stats):
pass
下面關於Ansible的文章您也可能喜歡,不妨參考下:
相關推薦
Ansible使用playbook自動化編譯安裝Nginx(親測)
★安裝: # yum install ansible -y (epel倉庫中) ★程式: ansible ansible-playbook //劇本 ansible-doc //獲取幫助文件 ★配置檔案 /etc/ansible/ansible
Ubuntu18.04 安裝WPS(親測)
解除安裝libreoffice sudo apt-get remove --purge libreoffice* 官網下載WPS http://community.wps.cn/download/ wget http://kdl.cc.ksosoft.com/
Ubuntu18安裝Scala(親測)
1.首先檢查是否安裝好了JDK,這是一個必要的環境。在terminal中輸入: java --version 2.安裝Scala 推薦安裝2.10版本,較為穩定,參考部落格多 (1)首先在官網下載.tgz安裝包 (2)解壓安裝 tar -zxvf s
Ubuntu16.04 安裝WPS(親測)
安裝 1.下載地址:http://community.wps.cn/download/(去WPS官網下載) 2.執行安裝命令:sudo dpkg -i wps-office_10.1.0.5672~a21_amd64.deb 解決字型缺失問題 1.下載:http://vd
Linux添加防火墻、iptables的安裝和配置(親測)
accept verbose conf inpu wall ron -h 數據流 ack iptables基礎 規則(rules)其實就是網絡管理員預定義的條件,規則一般的定義為“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息
ansible 自動化編譯安裝nginx服務、管理配置文件
lease root 嚴格 f2c 重啟 handlers nginx fig items 圖解: 說明: 系統版本:CentOS Linux release 7.4.1708 (Core) 需要先在一臺機上先裝好nginx,再配置ansible服務 1、將替換的文件放入
win7下python2.7安裝 pip,setuptools的正確方法(親測)
真是奇葩了,我在win7下測試python2.7安裝 pip,setuptools老是不行,好像是指令碼不行,使用的版本是python2.7.6版本。沒辦法看來只能換低點的版本了,高版本的也蛋疼啊,win7下python2.7.5安裝 pip,setuptools的正確方法(親測) window
Ubuntu 安裝 MyCat 初入門 與 ThinkPHP 連結MyCat配置 ( 親測 )
安裝openJDK sudo apt-get install openjdk-8-jdk java -version MyCat是給予java開發的 所以要安裝jave-jdk的包 下載Mycat 可以從MyCat的 http://dl.mycat.io/ 上下
Linux 下安裝pyspider deepin 或者Ubuntu(親測)
phantomjs PhantomJS 是一個基於 WebKit 的伺服器端 JavaScript API。它全面支援web而不需瀏覽器支援,其快速、原生支援各種Web標準:DOM 處理、CSS 選擇器、JSON、Canvas 和 SVG。 PhantomJS 可以用於頁面自動化、網路監測、
Rational Rose Windows10 64位作業系統安裝教程(親測,已實現)
因為最近UML課程實驗需要裝Rose這個軟體,因為現在大多數學生都是win10,64位作業系統。下面介紹安裝過程 1.首先下載Rational Rose2007版本 分享百度盤連結 連結:https://pan.baidu.com/s/14uR86_rNdHhwGgxy31mStQ&
完全解除安裝mysql(親測有效!!!)
1.停止mysql服務。 “執行”——>“cmd”——>輸入“net stop mysql;” 看連結: 2.將控制面板中的mysql正常解除安裝 控制面板——》“程式”,找到並解除安裝! 3.找到安裝路徑,將所有
Win7系統下neo4j資料庫的安裝過程(親測有效)
Win7系統下Neo4j的安裝過程(親測有效) 參考:https://blog.csdn.net/lihuaqinqwe/article/details/80314895 https://blog.csdn.net/u013132035/article/details/54782582
Linux-Centos7 下編譯安裝nginx (附nginx開機啟動指令碼)
1.安裝編譯所需環境: yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel 2.下載原始碼包(這裡用的是nginx-1.14.0) wget http://nginx.org/download/
Windows下安裝ScureCRT步驟(親測)
今天進到公司實習,第一次接觸到ScureCRT這個軟體,在瞭解了之後開始安裝,廢了很大功夫,總結具體步驟如下: 首先下載註冊器keygen.exe和ScureCRT的安裝檔案scrt814-x64.exe: 點選執行scrt814-x64.exe,傻瓜安裝法一
Apache Hadoop1.1.1+Apache Oozie3.3.2搭建安裝過程詳解(親測)
寫在前面: 最近需要定製的原因,需要將原來Cloudera版本的Hadoop更改為Apache版本的Hadoop和Oozie,對官方文件的學習,發現Hadoop1.1.1和Oozie3.3.2的組合比較好,所以,經過幾天的搭建,終於成功了,現在把心得分享出來,希望給需要的朋
在伺服器中安裝jdk1.8版本的安裝步驟(親測有效)轉載請註明出處
因為在烏班圖的系統中由於只能註冊普通的使用者,不能註冊root使用者。所以需要先把jdk-8u11-linux-x64.tar.gz的安裝包拷貝到普通使用者的許可權中去。我們可以使用WinSCP視覺化工具直接對壓縮包進行拖拽到指定的目錄下,也可以使用Xshell工具使用命令列
好用的線上 java 編譯網站,編輯器(親測)
1. https://www.jdoodle.com/online-java-compiler 這個支援 Java 10,並且能夠儲存程式碼,還支援匯入外部庫。 但有時候國內登不上,真不明白這個學習網站也封。 2. https://www.tutor
Android Studio離線安裝gradle(親測可用)
最近也是在試著熟悉使用android studio,畢竟是以後安卓的主流開發平臺,早晚都是要用的。但是面對谷歌這個版本帝,每次AS每次更新之後又是要更新gradle,總是因為我們偉大的天朝
Ubuntu16.04伺服器普通使用者(非管理員賬戶)在自己目錄下安裝TensorFlow, Keras等(親測)
最近在 MSRA 實習,組裡給了一臺多GPU的伺服器賬號,登入進去一看,已經多個使用者了。 本著不打擾別人的搭建的環境,也不被別人打擾的原則,決定在自己使用者的目錄下面單獨安裝相應的開發環境。 要安裝的的工具有: Anaconda3,TensorFlow,Keras 還有
ubuntu14.04 安裝配置JDK1.7(親測)
思路:新建資料夾-解壓-設定環境變數-測試環境變數 命令如下 新建資料夾-解壓 sudo mkdir /usr/lib/jvm sudo tar zxvf jdk-7u67-linux-x64.tar.gz -C /usr/lib/jvm 設定環境變數 sudo ge