使用role来实现lnmp
第1步: 先确认都要有epel源(安装nginx需要)
第2步: 定义lnmp_mysql,lnmp_php,nginx,memcached这4个角色的目录结构
master# cd /etc/ansible/roles/
master# mkdir -p {lnmp_mysql,lnmp_php,nginx,memcached}/{files,tasks,handlers,templates,vars,meta}
master# touch {lnmp_mysql,lnmp_php,nginx,memcached}/{tasks,handlers,vars,meta}/main.yml
第3步: 编写nginx角色里的task任务列表
master# vim /etc/ansible/roles/nginx/tasks/main.yml
---
- name: install nginx
yum: name=nginx state=latest
- name: copy index file
copy: src=/etc/ansible/roles/nginx/files/index.html dest=/usr/share/nginx/html/index.html
- name: copy test_php file
copy: src=/etc/ansible/roles/nginx/files/test.php dest=/usr/share/nginx/html/test.php
- name: copy conf file
copy: src=/etc/ansible/roles/nginx/files/nginx.conf dest=/etc/nginx/nginx.conf
notify:
- restart nginx
- name: start nginx
service: name=nginx enabled=true state=started
第4步: 编写nginx角色里的handler
master# vim /etc/ansible/roles/nginx/handlers/main.yml
---
- name: restart nginx
service: name=nginx state=restarted
第5步: 编写lnmp_mysql角色的task任务列表
master# vim /etc/ansible/roles/lnmp_mysql/tasks/main.yml
---
- name: install mariadb
yum: name={{item}} state=latest
with_items:
- mariadb
- mariadb-server
- mariadb-libs
- mariadb-devel
- name: start service
service: name=mariadb enabled=true state=started
第6步: 编写lnmp_php角色的task任务列表
master# vim /etc/ansible/roles/lnmp_php/tasks/main.yml
---
- name: install php
yum: name={{item}} state=latest
with_items:
- php
- php-mysql
- php-gd
- php-ldap
- php-odbc
- php-pear
- php-xml
- php-xmlrpc
- php-mbstring
- php-bcmath
- php-common
- php-fpm
- php-pecl-zendopcache
- php-pecl-memcache
- libjpeg-turbo-devel
- name: copy conf file
copy: src=/etc/ansible/roles/lnmp_php/files/www.conf dest=/etc/php-fpm.d/www.conf
notify:
- restart php-fpm
- name: start php-fpm
service: name=php-fpm enabled=true state=started
第7步: 编写lnmp_php角色的handler
master# vim /etc/ansible/roles/lnmp_php/handlers/main.yml
---
- name: restart php-fpm
service: name=php-fpm state=restarted
第8步: 编写memcached角色的task任务列表
master# vim /etc/ansible/roles/memcached/tasks/main.yml
---
- name: install memcached
yum: name=memcached state=latest
- name: start memcached
service: name=memcached enabled=true state=started
第9步:在master上准备配置文件,主页文件与php测试页等
master# yum install epel -y
master# yum install nginx php-fpm
php配置文件可以按需求配置,我这里就保持默认不变
master# cp /etc/php-fpm.d/www.conf /etc/ansible/roles/lnmp_php/files/www.conf
master# echo "nginx test page" > /etc/ansible/roles/nginx/files/index.html
master# echo -e "<?php\n\tphpinfo();\n?>" > /etc/ansible/roles/nginx/files/test.php
修改nginx配置文件,主要加上连接php的配置段
master# vim /etc/nginx/nginx.conf
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 / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
location ~ \.php$ { # 加上支持php的配置段
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
master# cp /etc/nginx/nginx.conf /etc/ansible/roles/nginx/files/nginx.conf
第10步:编写lnmp的playbook文件调用上面定义的4个roles
master# vim /etc/ansible/playbook/lnmp.yaml
---
- hosts: group1
remote_user: root
roles:
- nginx
- lnmp_mysql
- lnmp_php
- memcached
第11步: 执行playbook
master# ansible-playbook /etc/ansible/playbook/lnmp.yaml