目录
1.3、安装PHP和php-mysql模块和php-fpm模块
4.4、配置webserver.yml,构建prepare角色
5.3、根据需要修改nginx的配置文件模板。(这里改的是work进程生成数和监听的端口)
5.4、构建nginx的handlers目录和vars/下的main.yml文件
6.3、构建php的handlers目录下的main.yml文件
7.3、构建mysql的handlers目录下的main.yml文件
本案例是通过rpm包部署LNMP环境(基于aliyun和epel源),如果要通过源码包部署的话,可以编写shell脚本,通过script模块进行批量部署LNMP。
1、yum安装LNMP环境
首先,我们可以在ansible服务器上安装LNMP环境,然后,再将配置文件通过ansible拷贝到远程主机上
1.1、安装nginx软件
[root@cong11 ~]# yum -y install nginx #通过aliyun和epel源
[root@cong11 ~]# systemctl start nginx
测试访问nginx的默认测试页:
1.2、安装MySQL
[root@cong11 ~]# yum install -y mariadb-server mariadb
[root@cong11 ~]# mkdir -p /data/mysql/data #创建数据库保存目录
[root@cong11 ~]# chown -R mysql:mysql /data/mysql/ #修改权限
[root@cong11 ~]# vim /etc/my.cnf #修改数据保存目录
[mysqld]
datadir=/data/mysql/data #修改此行,其他参数保持默认即可
[root@cong11 ~]# systemctl start mariadb
1.3、安装PHP和php-mysql模块和php-fpm模块
[root@cong11 ~]# yum install -y php php-mysql php-fpm
[root@cong11 ~]# systemctl start php-fpm
1.4、提供php的测试页
[root@cong11 ~]# vim /usr/share/nginx/html/index.php
<?php
phpinfo();
?>
1.5、修改nginx.conf,支持php访问
[root@cong11 ~]# vim /etc/nginx/nginx.conf #在server{}中添加标红部分的内容
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}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 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
index index.php index.html;
include /etc/nginx/default.d/*.conf;location / {
}
location ~ .*\.(php|php5)?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
error_page 404 /404.html;
location = /40x.html {
}error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
重启nginx服务
[root@cong11 ~]# systemctl restart nginx
1.6、测试LNMP
确保已经出现上面的测试页,而且,要看到MySQL已经被整合进来了,才能进行下一步操作
2、roles角色
当我们刚开始学习运用 playbook 时,因为操作很多,所以很可能会把 playbook 写成一个很大的文件,慢慢你会发现,playbook的内容较为混乱,难以管理,怎么组织我们的Playbook才能让他们清晰明了,易于管理呢?也就是在这样的条件下,我们的Roles角色,才能体现出其功能。
Roles相当于我们剧本当中的角色,每个角色都有不同的事情要做,也正是分工才体现出了每个角色不同的作用,当你需要做不同的事情时,只需要调用不同角色即可。
比如一个互联网公司,想要研发新的软件时,就需要找产品去设计软件,找开发去研发软件,找测试去测试软件,找运维去维护软件,每一个角色都会完成各自的功能,这就是Role的作用。
总结:
Roles 角色:以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个事件切割成片段来执行。
估计对roles还是有一点点模糊吧,没关系,通过案例我们再来捋顺下们的思路
3、基于角色的方式部署LNMP
基于此案例我们先了解下Ansible自动化部署目录结构,当我们在做一个自动化部署的案例时,往往不会使用默认的配置项以及配置文件,都会单独创建自己的配置文件,也会根据功能不同,划分出不同的目录,因此,一个成熟的ansible项目会具备自己所需求的目录结构。
其中有文件有目录,我们一个个说明
ansible.cfg 对于整个项目的配置文件
hosts 定义主机的配置文件
roles 定义角色的目录(名字不能修改)
prepare 角色目录
nginx 角色目录
mysql 角色目录
php 角色目录
role_name/ #在相关角色目录下通常要创建如下目录
files/:存储由copy或script等模块调用的文件,例如存放需要同步到远程服务器的源码文件及配置文件等。
tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;
handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由main.yml进行“包含”调用;例如当服务的配置文件发生变化时需要进行的操作,比如:重启服务,重新加载配置文件。
vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
templates/:存储由template模块调用的模板文本。如用于执行lnmp相关配置文件的模板文件。
meta/:角色定义,可留空。此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;