Git+Gitlab+Ansible的roles實現一鍵部署Nginx靜態網站(一)--技術流ken

 

 

前言

 

截止目前已經寫了《Ansible基礎認識及安裝使用詳解(一)--技術流ken》,《Ansible經常使用模塊介紹及使用(二)--技術流ken》《Ansible劇本介紹及使用演示(三)--技術流ken》以及《Git介紹及經常使用操做演示(一)--技術流ken》,《Gitlab在linux/windows中免密使用(二)--技術流ken》等五篇有關ansible和git系列文章,相信看過個人這幾篇博客的小夥伴已經充分掌握瞭如何使用ansible劇本完成自動化批量管理,以及使用git實現持續化。如今咱們來作一個實際項目,來加深咱們對這兩個很是重要的工具的理解吧。html

 

項目需求

 

爲了增長項目的難度,特意要求使用role,以及templates來完成該項目。node

1. 在gitlab中建立一個項目 nginxinstall
2. 編寫playbook,實現一鍵部署nginx、部署一個靜態測試頁、測試部署結果
要求:
部署nginx
端口:83
運行身份:root
設置併發鏈接數:2048
主機名:當前節點的主機名
根目錄:/vaw/www/html

其餘要求:
部署兩個以上節點
用role
用templateslinux

3. 將寫好的playbook保存到gitlab倉庫中nginx

 

項目實現1

 

爲了讓你們更方便閱讀,上述項目我分爲三個部分,每一個部分完成一個要求,如今開始吧。git

1. 在gitlab中建立一個項目 nginxinstallweb

這個應該對咱們來講很簡單了,因此我就再也不細說vim

第一步:打開咱們gitlab的web頁面添加項目便可windows

點擊create project便可完成項目的建立緩存

roles使用詳解

 

role介紹

roles 用於層次性、結構化地組織playbook。
roles 可以根據層次型結構自動裝載變量文件、tasks以及handlers等。
要使用roles只須要在playbook中使用include指令便可。
簡單來說,roles就是經過分別將變量(vars)、文件(file)、任務(tasks)、模塊(modules)及處理器(handlers)放置於單獨的目錄中,並能夠便捷地include它們的一種機制。角色通常用於基於主機構建服務的場景中,但也能夠是用於構建守護進程等場景中。併發

 

建立 roles 的步驟

(1) 建立以包含roles命名的目錄,例如/tmp/ken/roles/;
(2) 在roles目錄中分別建立以各角色名稱命名的目錄,如nginx等
(3) 在每一個角色命名的目錄中(及nginx中)分別建立files、handlers、meta、tasks、templates和vars目錄;用不到的目錄能夠建立爲空目錄,也能夠不建立例如:mkdir /tmp/ken/roles/nginx/{files,handlers,meta,tasks,templates,vars};
(4) 在roles同級目錄中建立playbook文件,調用各角色例如:touch /tmp/ken/palybook.yml;

 

roles 內各目錄中可用的文件

tasks目錄:至少應該包含一個名爲main.yml的文件,其定義了此角色的任務列表;此文件可使用include包含其它的位於此目錄中的task文件;
files目錄:存放由copy或script等模塊調用的文件;
templates目錄:template模塊會自動在此目錄中尋找j2模板文件;
handlers目錄:此目錄中應當包含一個main.yml文件,用於定義此角色用到的各handler;在handler中使用include包含的其它的handler文件也應該位於此目錄中;
vars目錄:應當包含一個main.yml文件,用於定義此角色用到的變量;
meta目錄:應當包含一個main.yml文件,用於定義此角色的特殊設定及其依賴關係;ansible 1.3及其之後的版本才支持;
default目錄:爲當前角色設定默認變量時使用此目錄;應當包含一個main.yml文件。

 

項目實現2

 

第一步:建立目錄

能夠選擇所有建立,也能夠只建立你須要的,沒有用到的爲空便可

注意劇本和roles都在ken下

[root@ken ~]# mkdir /tmp/ken/roles/nginx/{tasks,handlers,files,vars,templates,meta,default} -pv

 

第二步:編輯hosts文件

即把須要管理的節點ip寫進去

[root@ken ken]# vim /etc/ansible/hosts 
[ken]
10.220.5.139
10.220.5.138

 

第三步:編輯roles下面的tasks文件

寫入以下信息

[root@ken ken]# cat /tmp/ken/roles/nginx/tasks/main.yml
- yum: name=nginx state=present
- template: src=/tmp/ken/roles/nginx/templates/nginx.j2 dest=/etc/nginx/nginx.conf
- service: name=nginx state=restarted
- copy: src=/tmp/ken/roles/nginx/files/index.html dest=/var/www/html/index.html

 

第四步:準備測試文件

[root@ken ~]# echo "test for static web"> /tmp/ken/roles/nginx/files/index.html

 

第五步:編輯vars變量文件

[root@ken ~]# cat /tmp/ken/roles/nginx/vars/main.yml
port: 83
user: root
conn: 2048
hostname: ken
dire: /var/www/html 

 

第六步;編輯templates模版文件

 把nginx的配置文件複製到template目錄下並更名爲nginx.j2,結尾必定要是j2

[root@server ken]# cp /etc/nginx/nginx.conf /tmp/ken/roles/nginx/templates/nginx.j2

須要把修改的部分更改成變量

[root@server roles]# grep -v -E "^#|^$" nginx/templates/nginx.j2
user {{ user }};      #定義成變量
worker_processes auto;    
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections {{ conn }}; #變量
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
       # include /etc/nginx/conf.d/*.conf;
    server {
        listen       {{ port }};  #變量
        server_name  {{ hostname }};  #變量
        root         {{ dire }};  #變量
    index index.html;
        # Load configuration files for the default server block.
        # include /etc/nginx/default.d/*.conf;
        location / {
  
        }
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

 

第七步:在roles同級目錄下建立劇本

必定要和roles在同一個目錄下建立

[root@server ken]# cd /tmp/ken/
[root@server ken]# ls
hosts  roles
[root@server ken]# vim test.yml
[root@server ken]# cat test.yml 
- hosts: all
  roles:
  - nginx  #即roles下面的一級目錄

 

第八步:執行劇本

[root@server ken]# ansible-playbook test.yml 


PLAY [all] **************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************
ok: [172.20.10.7]
ok: [172.20.10.2]

TASK [nginx : yum] ******************************************************************************************************
ok: [172.20.10.2]
ok: [172.20.10.7]

TASK [nginx : template] *************************************************************************************************
ok: [172.20.10.7]
changed: [172.20.10.2]

TASK [nginx : service] **************************************************************************************************
changed: [172.20.10.7]
changed: [172.20.10.2]

TASK [nginx : copy] *****************************************************************************************************
changed: [172.20.10.2]
changed: [172.20.10.7]

PLAY RECAP **************************************************************************************************************
172.20.10.2                : ok=5    changed=3    unreachable=0    failed=0   
172.20.10.7                : ok=5    changed=2    unreachable=0    failed=0   

 

第九步:查看是否執行成功

直接訪問節點頁面便可

由於咱們更改了端口爲83,再也不是默認端口80了,因此訪問頁面時須要指定83端口

測試成功

 

 

 

項目實現3

這一步是將咱們寫好的playbook保存在倉庫中,其實嚴格來作的話這一步必定是在項目2開始以前就要作的,咱們須要在工做目錄之下來寫這些文件,文件更改以後上傳便可。

第一步:打開gitlab找到ssh地址

 

第二步:下載倉庫內容

[root@ken kl]# git clone git@10.220.5.137:webs/nginxinstall.git
[root@ken kl]# ls
nginxinstall

 

第三步:進入nginxinstall項目工做目錄下

查看git幾個區 的狀態

[root@ken kl]# cd nginxinstall/
[root@ken nginxinstall]# ls -a
.  ..  .git
[root@ken nginxinstall]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

 

第四步:複製文件到該目錄下並提交

[root@ken nginxinstall]# cp /tmp/ken -a ./
[root@ken nginxinstall]# ls
ken
[root@ken nginxinstall]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    ken/
nothing added to commit but untracked files present (use "git add" to track)
[root@ken nginxinstall]# git add ken     #加入到緩存區
[root@ken nginxinstall]# git commit -m "v1: nginx"      #提交到倉庫
[master (root-commit) 78bc6c3] v1: nginx
 8 files changed, 196 insertions(+)
 create mode 100644 ken/hosts
 create mode 100644 ken/roles/nginx/files/index.html
 create mode 100644 ken/roles/nginx/tasks/main.yml
 create mode 100644 ken/roles/nginx/template/nginx.conf
 create mode 100644 ken/roles/nginx/template/nginx.j2
 create mode 100644 ken/roles/nginx/vars/main.yml
 create mode 100644 ken/test.retry
 create mode 100644 ken/test.yml

 

第五步:推送至遠程倉庫

[root@ken nginxinstall]# git push origin master
Counting objects: 20, done.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (19/19), 2.25 KiB | 0 bytes/s, done.
Total 19 (delta 1), reused 0 (delta 0)
To git@10.220.5.137:webs/nginxinstall.git
   838ee6a..57ec0b9  master -> master

 

第六步:在web端查看推送結果

發現推送完成

相關文章
相關標籤/搜索