从上篇博客《Git+Gitlab+Ansible剧本实现Nginx静态页面部署(一)》我们部署一键部署了静态页面,接下来我们实现以下一键部署动态页面吧!
需求一:使用gitlab创建项目
需求二:使用ansible的roles实现一键化部署wordpress
每次部署需要备份之前的网站数据
使用roles
使用templates
脚本对网站监控检测
需求三: 完成之后项目上传至gitlab
centos7
Gitlab服务器: 10.220.5.42
Ansible服务器: 10.220.5.41
wordpress服务器1: 10.220.5.45
防火墙以及selinux关闭状态
使用gitlab创建一个项目
相信大家对这个已经很熟悉了,所以我就不再详细演示该过程
第一步:打开浏览器创建项目
这里我创建了一个wordpress1的项目
上传wordpress到gitlab
第一步:创建目录
[root@ansible ~]# mkdir /yy
[root@ansible ~]# cd /yy
[root@ansible yy]#
[root@ansible yy]# git clone http://10.220.5.42/root/wordpress1.git
Cloning into 'wordpress1'...
warning: You appear to have cloned an empty repository.
第四步:上传本地安装包至远程目录
[root@ansible yy]# cp -a wordpress/* ./wordpress1/
[root@ansible yy]# ls wordpress1
[root@ansible wordpress1]# cd wordpress1
[root@ansible wordpress1]# git add
[root@ansible wordpress1]# git add --all
[root@ansible wordpress1]# git commit -m "v2.0"
上一篇博客已经详细讲解了有关roles的使用,这里我们依然是使用roles来完成该项目
第一步:创建相关目录
在ansible服务器端操作
[root@ansible ~]# mkdir /project/roles/wordpress1/{vars,tasks,files,templates} -pv
第二步:编写templates模版
[root@ansible ~]# cp /etc/httpd/conf/httpd.conf /project/roles/wordpress1/templates/httpd.conf.j2
[root@ansible~]# grep -v -E '^#|^$| +#' /project/roles/wordpress1/templates/httpd.conf.j2
ServerRoot "/etc/httpd"
Listen {{ port }} #定义成变量
Include conf.modules.d/*.conf
User {{ user }} #定义成变量
Group apache
ServerAdmin root@localhost
ServerName {{ ansible_eth0.ipv4.address }} #引用内置变量
DocumentRoot {{ root }} #定义成变量
第三步:编辑hosts配置文件
[root@ansible project]# vim /etc/ansible/hosts
[devser]
10.220.5.45
第四步:编写测试文件
[root@ansible project]# vim roles/wordpress1/files/index.php
第五步:编写网站健康监测脚本
[root@ansible project]# cd roles/wordpress1/files/
[root@ansible files]# vim check.sh
[root@ansible files]# cat check.sh
#!/bin/bash
URL=$1
PORT=$2
curl -I http://$1:$2/index.php | grep "200 OK" &>/dev/null
if [ $? -eq 0 ];then
echo "$1 status is ok"
else
echo "$1 status is not ok"
fi
第六步:编写tasks下的文件
[root@ansible wordpress1]# vim tasks/main.yaml
######## 安装 httpd php mysql ###############
- name: install httpd
yum: name=httpd state=present
- name: install mysql
yum: name=mariadb-server state=present
- name: install php
shell: yum install php php-mysql -y
######## 配置httpd #########################
- name: make configrantion file
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
- name: install test page
copy: src=index.php dest={{ root }}
######## 启动服务 ####################
- name: start httpd
service: name=httpd state=restarted
- name: start mysql
service: name=mariadb state=restarted
######### 检查部署结果是否正常 ##########
- name: make health check
shell: sh roles/wordpress/files/check.sh {{ ansible_eth0.ipv4.address }} {{ port }}
delegate_to: localhost
register: health_status
- debug: msg="{{ health_status.stdout }}"
########## 从gitlab拉取代码 #################
- name: backup old files
shell: mv {{ root }} {{ backup_to }}
- name: close ssl authtication
shell: git config --global http.sslVerify false
- name: git clone wordpress from gitlab
git: "repo=http://{{ gitlab_user }}:{{ gitlab_pass }}@10.220.5.137/webg1/wordpress.git dest={{ root }} version=master"
第七步:编写vars下的文件
[root@ansible wordpress1]# cat /project/roles/wordpress1/vars/main.yaml
port: 82
user: apache
root: /var/www
gitlab_user: root
gitlab_pass: 12345678
第八步:编辑剧本
剧本一定要和roles在同一个目录之中
执行剧本的时候也要在roles同级目录下执行
[root@ansible wordpress1]# cat /project/wordpress1.yaml
- hosts: all
vars:
backup_to: "{{ root }}_{{ ansible_date_time.epoch }}"
roles:
- wordpress1
第九步:一键部署wordpress
未完待续… …