利用ansible 自动发布安装
生活随笔
收集整理的這篇文章主要介紹了
利用ansible 自动发布安装
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
使用本腳本可以自動(dòng)批量完成中間節(jié)點(diǎn)環(huán)境的部署工作,包括:Nginx編譯安裝、添加程序管理腳本、設(shè)置開機(jī)啟動(dòng)、反向代理配置、證書分發(fā)、添加iptables規(guī)則等。腳本支持自定義nginx安裝版本、設(shè)置編譯模塊、配置監(jiān)聽端口等。
1. Nginx Role規(guī)則說明
本腳本用于中間節(jié)點(diǎn)(Nginx反向代理)環(huán)境的自動(dòng)化配置,主要內(nèi)容包括:
安裝基礎(chǔ)依賴環(huán)境;
創(chuàng)建nginx啟動(dòng)用戶(支持自定義用戶);
下載nginx安裝文件(可自定義nginx版本);
解壓安裝文件;
執(zhí)行編譯安裝(可自定義編譯參數(shù)和模塊);
添加管理腳本,用于nginx服務(wù)的啟動(dòng)和關(guān)閉;
設(shè)置開機(jī)啟動(dòng);
分發(fā)https證書文件;
反向代理配置;
添加iptables規(guī)則,允許訪問nginx代理服務(wù)。
2. Nginx Role規(guī)則基本說明
2.1 目錄結(jié)構(gòu)說明
Nginx Role目錄結(jié)構(gòu)介紹:
nginx # Nginx Role腳本根目錄
├── defaults # 腳本默認(rèn)變量目錄
│ └── main.yml # 腳本默認(rèn)變量文件
├── files # 文件目錄
│ ├── https_cert # 文件目錄,用于存放https證書文件
│ └── nginx_start_scripts # nginx啟動(dòng)腳本
├── handlers # 任務(wù)處理器
│ └── main.yml # 定義了 nginx reload和iptables restarted兩個(gè)處理器任務(wù)
├── tasks # 任務(wù)目錄
│ └── main.yml # ansible任務(wù)文件,定義了需要執(zhí)行的自動(dòng)化任務(wù)
├── templates #模板目錄
│ ├── nginx_config_file.j2 # nginx配置模板,使用了jinja2模版語言進(jìn)行預(yù)定義,可通過變量傳遞配自定義置內(nèi)容
│ └── nginx_install.j2 # nginx編譯安裝執(zhí)行腳本
├── tests # 腳本使用的測(cè)試用例,腳本執(zhí)行案例
│ ├── inventory # 腳本執(zhí)行使用的主機(jī)清單
│ └── test.yml # 腳本執(zhí)行調(diào)用的playbook劇本
└── vars # 腳本變量目錄└── main.yml # 腳本變量文件2.2 腳本變量說明
默認(rèn)變量(nginx/defaults/main.yml)
變量名 默認(rèn)值 說明
nginx_install true nginx編譯安裝
nginx_start_scripts true 分發(fā)nginx啟動(dòng)腳本
nginx_start_service true 啟動(dòng)nginx服務(wù)
nginx_start_on_boot true 設(shè)置開機(jī)啟動(dòng)
nginx_copy_https_cert false 分發(fā)https證書文件
nginx_revproxy_config false 設(shè)置反向代理配置
add_iptables_for_nginx false 添加iptables防火墻規(guī)則
通過默認(rèn)變量可以控制腳本執(zhí)行的內(nèi)容,在使用本腳本前最好是執(zhí)行下common腳本,先進(jìn)行系統(tǒng)的初始優(yōu)化工作。
腳本變量(nginx/vars/main.yml)
---
nginx_user: nginx # nginx啟動(dòng)用戶
nginx_group: nginx # nginx組
nginx_version: 1.15.8 # 要安裝的nginx版本
download_url: http://nginx.org/download # nginx文件下載地址
download_dir: /usr/local/src # nginx文件下載存放目錄
install_dir: /usr/local/nginx # nginx安裝目錄model_config: # nginx編譯安裝參數(shù)- "--user={{ nginx_user }}"- "--group={{ nginx_group }}"- "--prefix={{ install_dir }}"- "--with-http_realip_module"- "--with-http_sub_module"- "--with-http_gzip_static_module"- "--with-http_stub_status_module"- "--with-http_ssl_module"- "--with-pcre"可以通過修改nginx_version來修改需要安裝的版本,但需要確認(rèn)下載地址download_url中存在對(duì)應(yīng)版本,并可以下載。
2.3 nginx反向代理配置模版說明
nginx反向代理配置模版(nginx/templates/nginx_config_file.j2)
user {{ nginx_user }};
worker_processes {{ ansible_processor_vcpus }};
events {worker_connections 102400;
}http {include mime.types;default_type application/octet-stream;log_format main '$remote_addr $http_X_Forwarded_For [$time_local] ' '$upstream_addr $upstream_response_time ' '$http_host $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_accept_language" "$http_user_agent" '; sendfile on;tcp_nopush on; tcp_nodelay on;server_tokens off;keepalive_timeout 65;{% for item in nginx_revproxy_sites %} # 對(duì)nginx_revproxy_sites配置變量進(jìn)行循環(huán){% if item.host == ansible_host %} # 判斷host是否等于當(dāng)前執(zhí)行任務(wù)的主機(jī)地址,如果相等繼續(xù)執(zhí)行后面操作upstream {{ item.desc }}_backend { # 使用desc變量?jī)?nèi)容加上_backend作為upstream名稱{% for upstream in item.upstreams %} # 遍歷upstreamsserver {{ upstream.address }}:{{ upstream.port }}; # 將遍歷結(jié)果作為upstream模塊集群轉(zhuǎn)發(fā)地址(反向代理的回源請(qǐng)求地址,upstream支持多節(jié)點(diǎn)的集群負(fù)載){% endfor %}} server {listen {{ item.listen_port | default(80) }}; # 配置http監(jiān)聽端口,如果沒有定義listen_port默認(rèn)使用80端口server_name {{ item.domains | join(" ") }}; 配置訪問域名,支持多域名設(shè)置access_log logs/access.log main;{% if item.ssl_status %} # 判斷ssl_status狀態(tài),如果狀態(tài)為true,則將http請(qǐng)求跳轉(zhuǎn)到https(跳轉(zhuǎn)會(huì)加上listen_ssl_port和請(qǐng)求鏈接)return 301 https://$server_name:{{ item.listen_ssl_port | default(443) }}$request_uri;{% else %} # 如果ssl_status狀態(tài)為false,則使用http代理將請(qǐng)求轉(zhuǎn)發(fā)到上面定義的upstream集群location / {proxy_pass http://{{ item.desc }}_backend;
}{% endif %}}{% if item.ssl_status %} # ssl_status狀態(tài)為true是進(jìn)行https反向代理配置和域名證書配置server {listen {{ item.listen_ssl_port | default(443) }} ssl;server_name {{ item.domains | join(" ") }};ssl_certificate {{ item.ssl_crt }};ssl_certificate_key {{ item.ssl_key }};ssl_session_timeout 50m;ssl_protocols TLSv1.2;ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;ssl_prefer_server_ciphers on;access_log logs/access.log main;location / {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_request_buffering off;proxy_ignore_client_abort on;proxy_pass https://{{ item.desc }}_backend;
}}{% endif %}{% endif %} {% endfor %}
}反向代理模版配置說明:
配置模版使用了Jinja2模版語言使用自定義變量來動(dòng)態(tài)進(jìn)行配置文件的渲染;
user {{ nginx_user }}:使用自定義的用戶作為nginx啟動(dòng)用戶;
worker_processes {{ ansible_processor_vcpus }}:獲取cup核數(shù),設(shè)置worker_processes;
其他說明詳見模版中注釋內(nèi)容。
3 Nginx role腳本使用說明
在腳本中已經(jīng)創(chuàng)建了一個(gè)簡(jiǎn)單的使用案例(nginx/tests/)可以作為參考,同時(shí)前面已經(jīng)介紹了默認(rèn)變量和腳本變量,在腳本使用過程中可以去自定義這些變量?jī)?nèi)容。
使用腳本前先將腳本目錄(nginx)拷貝到/etc/ansible/roles目錄下
3.1 基本功能使用
通過以下事例可以完成nginx的編譯安裝和開機(jī)啟動(dòng)配置:
1) 新建一個(gè)主機(jī)清單文件(nginx/tests/inventory):
[proxy_server]
192.168.0.100
192.168.0.101這里默認(rèn)已經(jīng)使用common腳本進(jìn)行了系統(tǒng)的初始化配置,可以通過密鑰來登陸主機(jī)清單中的主機(jī)。如果清單中主機(jī)沒有配置密鑰登陸,在定義清單時(shí)需要制定遠(yuǎn)程登陸用戶和密碼:
[proxy_server]
192.168.0.100 ansible_ssh_user=root ansible_ssh_pass=CPBal1Tid
192.168.0.101 ansible_ssh_user=root ansible_ssh_pass=KJadfiola新建執(zhí)行腳本用的playbook劇本(nginx/tests/nginx_site.yml)
---
- hosts: proxy_serverremote_user: rootroles:- nginx3) 執(zhí)行腳本
cd /etc/ansible/roles/nginx/tests/
ansible-playbook nginx_site.yml -i inventory腳本成功執(zhí)行完成后,ansible會(huì)在inventory清單中的遠(yuǎn)程主機(jī)編譯安裝nginx,并添加到開機(jī)啟動(dòng)。
4)執(zhí)行結(jié)果驗(yàn)證
ansible proxy_server -m shell -a "ps -ef |grep nginx" -i inventory
192.168.0.100 | CHANGED | rc=0 >>
root 2228 1 0 13:24 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nginx 2229 2228 0 13:24 ? 00:00:00 nginx: worker process
root 5781 5780 0 13:36 pts/0 00:00:00 /bin/sh -c ps -ef |grep nginx
root 5783 5781 0 13:36 pts/0 00:00:00 grep nginx....后面內(nèi)容省略....可以看到遠(yuǎn)程主機(jī)已經(jīng)成功安裝了nginx并啟動(dòng)了nginx服務(wù),當(dāng)然你也可以確認(rèn)下是否分發(fā)了nginx啟動(dòng)腳本和是否設(shè)置了開機(jī)啟動(dòng)。
3.2 反向代理配置和證書分發(fā)
如果想要在安裝nginx的同時(shí)配置反向代理,和分發(fā)證書文件,按照下面步驟進(jìn)行操作:
1)上傳證書文件
將https證書文件上傳到nginx/files/https_cert目錄。
2)修改nginx/tests/nginx_site.yml文件
---
- hosts: proxy_serverremote_user: rootvars:nginx_copy_https_cert: truenginx_revproxy_config: trueadd_iptables_for_nginx: truenginx_revproxy_sites: # nginx 反向代理配置內(nèi)容,對(duì)照《2.3 nginx反向代理配置模版說明》更便于理解 - host: 192.168.0.100 # 反向代理配置對(duì)應(yīng)的主機(jī)desc: t_server # 反向代理集群備注,nginx配置模版中引用它作為upstream名稱domains: # 域名,用于定義server_name,支持多個(gè)域名配置- example.com- www.example.comupstreams: # nginx反向代理集群配置內(nèi)容,可以添加多個(gè)節(jié)點(diǎn),默認(rèn)采用輪訓(xùn)方式進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)- { address: 192.168.10.11, port: 80}- { address: 192.168.10.12, port: 8080}listen_port: 80 # http監(jiān)聽端口,如果不設(shè)置,默認(rèn)使用80端口listen_ssl_port: 443 # https監(jiān)聽端口,如果不設(shè)置,默認(rèn)使用https端口ssl_status: true # 設(shè)置為true啟用https配置ssl_crt: /etc/ssl/test.com.crt # 證書文件ssl_key: /etc/ssl/test.com.key # 證書文件- host: 192.168.0.101desc: z_serverdomains:- example01.com- wwww.example01.comupstreams:- { address: 192.168.0.21, port: 80}- { address: 192.168.0.22, port: 80}ssl_status: falseroles:- nginx執(zhí)行nginx role的playbook劇本說明:
nginx_copy_https_cert:默認(rèn)變量,用來控制證書文件分發(fā),設(shè)置為true,執(zhí)行證書分發(fā)操作;
nginx_revproxy_config:默認(rèn)變量,用來啟用反向代理配置,設(shè)置為ture,進(jìn)行模版變量替換和分發(fā);
add_iptables_for_nginx:默認(rèn)變量,用來添加iptables規(guī)則,需要保證系統(tǒng)已安裝iptables-services服務(wù)(common基礎(chǔ)優(yōu)化腳本中已經(jīng)定義安裝過程);
nginx_revproxy_sites:nginx反向代理的配置內(nèi)容,詳細(xì)說明件上面的備注。配置注意事項(xiàng):
如果啟用了nginx_copy_https_cert、nginx_revproxy_config、add_iptables_for_nginx這三項(xiàng)配置,必須定義nginx_revproxy_sites;
nginx_revproxy_sites中必定義字段有:host、desc、domain、upstreams、ssl_status;
host: 用來確定反向代理配置對(duì)應(yīng)的主機(jī)(該主機(jī)必須存在于inventory主機(jī)清單中);
ssl_status:當(dāng)ssl_status狀態(tài)為true時(shí),需要定義證書文件ssl_crt和ssl_key,其中證書名稱必須和上傳到nginx/files/https_cert目錄中的名稱對(duì)應(yīng);
listen_port(listen_ssl_port): http(https)監(jiān)聽端口,這兩個(gè)選項(xiàng)不是必須定義,如果在playbook中沒有定義,腳本默認(rèn)會(huì)采用80(443)端口,這兩個(gè)監(jiān)聽端口不能用同一個(gè)端口。
配置文件使用的是yaml格式,在定義文件內(nèi)容時(shí)注意縮緊。
?
轉(zhuǎn)載于:https://www.cnblogs.com/jameslove/p/10923927.html
總結(jié)
以上是生活随笔為你收集整理的利用ansible 自动发布安装的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置redis能远程访问
- 下一篇: 【题解】装箱问题