思路:先在一臺機器上編譯安裝好nginx、打包,而後再用ansible去下發 cd /etc/ansible 進入ansible配置文件目錄 mkdir nginx_install 建立一個nginx_install的目錄,方便管理 cd nginx_install mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}
說明:roles目錄下有兩個角色,common爲一些準備操做,install爲安裝nginx的操做。
每一個角色下面又有幾個目錄,handlers下面是當發生改變時要執行的操做,一般用在配置文件發生改變,重啓服務。
files爲安裝時用到的一些文件,
meta爲說明信息,說明角色依賴等信息,
tasks裏面是核心的配置文件,
templates一般存一些配置文件,啓動腳本等模板文件,
vars下爲定義的變量mysql
[root@Dasoncheng ~]# cd /etc/ansible/ [root@Dasoncheng ansible]# mkdir nginx_install && cd nginx_install [root@Dasoncheng nginx_install]# mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars} [root@Dasoncheng nginx_install]# ls roles [root@Dasoncheng nginx_install]# ls roles/ common install [root@Dasoncheng nginx_install]# ls roles/common/ files handlers meta tasks templates vars [root@Dasoncheng nginx_install]# ls roles/install/ files handlers meta tasks templates vars
須要事先準備好安裝用到的文件,具體以下: 在一臺機器上事先編譯安裝好nginx,配置好啓動腳本,配置好配置文件 安裝好後,咱們須要把nginx目錄打包,並放到/etc/ansible/nginx_install/roles/install/files/下面,名字爲nginx.tar.gz 啓動腳本、配置文件都要放到/etc/ansible/nginx_install/roles/install/templates下面 cd /etc/ansible/nginx_install/roles 定義common的tasks,nginx是須要一些依賴包的 vim ./common/tasks/main.yml //內容以下,這裏用到了循環 但使用過程當中會報錯,我就在下面直接yum: name="zlib-devel,pcre-devel" state=installed 這樣安裝了; - name: Install initializtion require software yum: name={{ item }} state=installed with_items: - zlib-devel - pcre-devel
[root@Dasoncheng ~]# cd /usr/local/ [root@Dasoncheng local]# tar -zcvf nginx.tar.gz --exclude "ngin.conf" --exclude "vhosts" nginx/ [root@Dasoncheng local]# cp nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/nginx.tar.gz ##拷貝安裝目錄 [root@Dasoncheng local]# cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/nginx ##拷貝啓動腳本 [root@Dasoncheng local]# cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/nginx.conf ##拷貝配置文件 [root@Dasoncheng local]# vim /etc/ansible/nginx_install/roles/common/tasks/main.yml [root@Dasoncheng local]# cat /etc/ansible/nginx_install/roles/common/tasks/main.yml --- - name: install initaliztion require software yum: name="zlib-devel,pcre-devel" state=installed
定義變量 vim /etc/ansible/nginx_install/roles/install/vars/main.yml //內容以下 nginx_user: www nginx_port: 80 nginx_basedir: /usr/local/nginx 首先要把全部用到的文檔拷貝到目標機器 vim /etc/ansible/nginx_install/roles/install/tasks/copy.yml //內容以下 - name: Copy Nginx Software copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root - name: Uncompression Nginx Software shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/ - name: Copy Nginx Start Script template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755 - name: Copy Nginx Config template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644
[root@Dasoncheng roles]# vim install/vars/main.yml ##定義變量 [root@Dasoncheng roles]# cat install/vars/main.yml nginx_user: www nginx_port: 80 nginx_basedir: /usr/local/nginx [root@Dasoncheng roles]# vim install/tasks/copy.yml ##拷貝文檔 [root@Dasoncheng roles]# cat !$ cat install/tasks/copy.yml - name: copy nginx software copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root - name: uncopression nginx software shell: tar -zxf /tmp/nginx.tar.gz -C /usr/local/ - name: copy nginx start script template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755 - name: copy nginx config template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644
接下來會創建用戶,啓動服務,刪除壓縮包 vim /etc/ansible/nginx_install/roles/install/tasks/install.yml //內容以下 - name: Create Nginx User user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin - name: Start Nginx Service shell: /etc/init.d/nginx start - name: Add Boot Start Nginx Service shell: chkconfig --level 345 nginx on - name: Delete Nginx compression files shell: rm -rf /tmp/nginx.tar.gz
[root@Dasoncheng roles]# vim install/tasks/install.yml [root@Dasoncheng roles]# cat !$ cat install/tasks/install.yml - name: create nginx user user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin - name: start nginx service shell: /etc/init.d/nginx start - name: add boot start nginx service shell: chkconfig --level 345 nginx on - name: delete nginx compression files shell: rm -f /tmp/nginx.tar.gz
再建立main.yml而且把copy和install調用 vim /etc/ansible/nginx_install/roles/install/tasks/main.yml //內容以下 - include: copy.yml - include: install.yml 到此兩個roles:common和install就定義完成了,接下來要定義一個入口配置文件 vim /etc/ansible/nginx_install/install.yml //內容以下 --- - hosts: testhost remote_user: root gather_facts: True roles: - common - install 執行: ansible-playbook /etc/ansible/nginx_install/install.yml
[root@Dasoncheng roles]# vim install/tasks/main.yml [root@Dasoncheng roles]# cat !$ cat install/tasks/main.yml - include: copy.yml - include: install.yml [root@Dasoncheng roles]# cd .. [root@Dasoncheng nginx_install]# pwd /etc/ansible/nginx_install [root@Dasoncheng nginx_install]# vim install.yml [root@Dasoncheng nginx_install]# cat !$ cat install.yml --- - hosts: rs remote_user: root gather_facts: true roles: - common - install
執行結果:nginx
[root@Dasoncheng local]# ansible-playbook /etc/ansible/nginx_install/install.yml PLAY [rs] ******************************************************************************************** TASK [Gathering Facts] ******************************************************************************* ok: [cdn002] ok: [cdn003] TASK [common : install initaliztion require software] ************************************************ ok: [cdn002] ok: [cdn003] TASK [install : copy nginx software] ***************************************************************** changed: [cdn003] changed: [cdn002] TASK [install : uncopression nginx software] ********************************************************* [WARNING]: Consider using the unarchive module rather than running tar. If you need to use command because unarchive is insufficient you can add warn=False to this command task or set command_warnings=False in ansible.cfg to get rid of this message. changed: [cdn003] changed: [cdn002] TASK [install : copy nginx start script] ************************************************************* ok: [cdn002] ok: [cdn003] TASK [install : copy nginx config] ******************************************************************* ok: [cdn002] ok: [cdn003] TASK [install : create nginx user] ******************************************************************* ok: [cdn002] ok: [cdn003] TASK [install : start nginx service] ***************************************************************** changed: [cdn002] changed: [cdn003] TASK [install : add boot start nginx service] ******************************************************** changed: [cdn002] changed: [cdn003] TASK [install : delete nginx compression files] ****************************************************** [WARNING]: Consider using the file module with state=absent rather than running rm. If you need to use command because file is insufficient you can add warn=False to this command task or set command_warnings=False in ansible.cfg to get rid of this message. changed: [cdn002] changed: [cdn003] PLAY RECAP ******************************************************************************************* cdn002 : ok=10 changed=5 unreachable=0 failed=0 cdn003 : ok=10 changed=5 unreachable=0 failed=0
機器cdn002查看:sql
[root@Dason02 tmp]# ps aux |grep nginx root 11526 0.0 0.0 20500 620 ? Ss 17:55 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 11527 0.0 0.3 22944 3208 ? S 17:55 0:00 nginx: worker process nobody 11528 0.0 0.3 22944 3208 ? S 17:55 0:00 nginx: worker process root 11654 0.0 0.1 112664 968 pts/1 S+ 17:55 0:00 grep --color=auto nginx [root@Dason02 tmp]# netstat -lntp 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 11526/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 899/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1683/master tcp6 0 0 :::3306 :::* LISTEN 1378/mysqld tcp6 0 0 :::22 :::* LISTEN 899/sshd tcp6 0 0 ::1:25 :::* LISTEN 1683/master
##目錄: [root@Dasoncheng ~]# cd /etc/ansible/ [root@Dasoncheng ansible]# mkdir nginx_install && cd nginx_install [root@Dasoncheng nginx_install]# mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars} [root@Dasoncheng nginx_install]# ls roles [root@Dasoncheng nginx_install]# ls roles/ common install [root@Dasoncheng nginx_install]# ls roles/common/ files handlers meta tasks templates vars [root@Dasoncheng nginx_install]# ls roles/install/ files handlers meta tasks templates vars ##文件: [root@Dasoncheng ~]# cd /usr/local/ [root@Dasoncheng local]# tar -zcvf nginx.tar.gz --exclude "ngin.conf" --exclude "vhosts" nginx/ [root@Dasoncheng local]# cp nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/nginx.tar.gz ##拷貝安裝目錄 [root@Dasoncheng local]# cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/nginx ##拷貝啓動腳本 [root@Dasoncheng local]# cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/nginx.conf ##拷貝配置文件
[root@Dasoncheng ~]# cd /etc/ansible/nginx_install/ [root@Dasoncheng nginx_install]# cat install.yml --- - hosts: rs remote_user: root gather_facts: true roles: - common - install [root@Dasoncheng nginx_install]# ls roles/common/tasks/main.yml roles/common/tasks/main.yml [root@Dasoncheng nginx_install]# cat !$ cat roles/common/tasks/main.yml --- - name: install initaliztion require software yum: name="zlib-devel,pcre-devel" state=installed [root@Dasoncheng nginx_install]# ls roles/install/tasks/ copy.yml install.yml main.yml [root@Dasoncheng nginx_install]# cat !$main.yml cat roles/install/tasks/main.yml - include: copy.yml - include: install.yml [root@Dasoncheng nginx_install]# cat roles/install/tasks/copy.yml - name: copy nginx software copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root - name: uncopression nginx software shell: tar -zxf /tmp/nginx.tar.gz -C /usr/local/ - name: copy nginx start script template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755 - name: copy nginx config template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644 [root@Dasoncheng nginx_install]# cat roles/install/tasks/install.yml - name: create nginx user user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin - name: start nginx service shell: /etc/init.d/nginx start - name: add boot start nginx service shell: chkconfig --level 345 nginx on - name: delete nginx compression files shell: rm -f /tmp/nginx.tar.gz
[root@Dasoncheng local]# ansible-playbook /etc/ansible/nginx_install/install.yml