基于 Ansible playbook 快速构建起LNMP环境的实战的第一篇 。
1、环境描述软件 | 版本 |
OS |
CentOS 7.4 |
Ansible |
2.4.2 (extra仓库) |
Nginx |
1.16.1(epel仓库) |
PHP |
5.4.16 |
Mysql |
5.5.64 |
节点 | 规格 | 地址 | 角色 |
node1 |
2CPU 2G |
192.168.3.175 |
Ansible管理节点及被管理节点,部署nginx |
node2 |
2CPU 2G |
192.168.3.176 |
Ansible被管理节点,部署php、mysql |
1.配置YUM源
yum install epel release yum clean all && yum makecache
2.安装Ansible
yum install ansible
3.配置Ansible
修改host文件
vim /etc/hosts
192.168.3.175 node01
192.168.3.176 node02
配置免密登录
ssh-keygen ssh-copy-id root@node01 ssh-copy-id root@node02
修改inventory文件
vim /etc/ansible/hosts
[nginx]
node01
[phpmysql]
node02
[LNMP]
node01
node02
测试Ansible
ansible all -m ping
3、准备所需文件 文件及目录描述需要准备的文件如下:
1) phpmyadmin,phpMyAdmin-4.4.15-all-languages.tar.gz、node01-pma.sh、node02-pma.sh,config.inc.php
2)nginx,index.html ,www.jjf.com.conf
3)php-fpm,index.php,www.conf
4) mariadb,server.cnf
具体的生成步骤可以参考下文,也可以根据需要自行生成或修改。
文章中所用的文件的打包,可以通过如下链接进行获取
https://github.com/junfengjiang/
创建一个目录存稍后放这些文件,这些文件在稍后playbook当中都会用到
# mkdir /ansible
# cd /ansible/
准备phpMyAdmin所需文件phpMyAdmin,简单来说是一个以php为基础的web服务器程序,让管理者可用Web接口 管理MySQL数据库。文章最后我们将通过phpMyAdmin来验证我们NMP环境可用性。
我们是已RPM包的形式部署的LNMP环境,考虑到phpMyAdmin对NMP版本的依赖,我们这里使用的是phpMyAdmin-4.4.15,其他软件本可以参考文章开头软件信息说明。
要说明的是其中phpMyAdmin配置脚本要两个,因为phpMyAdmin的动态内容和静态内容不是分开的,所以最简单的方式是到时node1和node2上都要有一份。
下载phpMyAdmin - > phpMyAdmin-4.4.15-all-languages.tar.gz
curl -O https://files.phpmyadmin.net/phpMyAdmin/4.4.15/phpMyAdmin-4.4.15-all-languages.tar.gz
提供phpMyAdmin配置脚本 -> node01-pma.sh
vim node01-pma.sh
#!/bin/bash
ln -sv /appdata/phpMyAdmin-4.4.15-all-languages /data/nginx/html/pma
提供phpMyAdmin配置脚本 -> node02-pma.sh
vim node02-pma.sh
#!/bin/bash ln -sv /appdata/phpMyAdmin-4.4.15-all-languages /appdata/pma
提供phpMyAdmin配置文件 ->config.inc.php
获取phpMyAdmin配置文件模板
tar -xvf phpMyAdmin-4.4.15-all-languages.tar.gz
cp phpMyAdmin-4.4.15-all-languages/config.sample.inc.php ./config.inc.php
rm phpMyAdmin-4.4.15-all-languages -rf
生成一段随机数
openssl rand -base64 10 YyL82Wu2J4EjIw==
vim config.inc.php
只需修改这一项为上面生成的随机数
$cfg['blowfish_secret'] = 'YyL82Wu2J4EjIw'
准备nginx所需文件我们需要提供一个nginx的测试页面,后面来验证nginx的安装情况。
而后需要定义一个server,其中定义两个location,所有以.php结尾的动态内容都通过fastcgi模块代理至后端的fpmserver,其余所有静态内容都由nginx自身来进行处理。
提供nginx测页 -> index.html
我们需要提供一个nginx的测试页面,后面来验证nginx的安装情况。
vim index.html
提供nginx子配置文件 -> jjf.conf
server {
listen 80;
server_name www.jjf.com;
index index.php index.html;
location / {
root /data/nginx/html;
}
location ~* \.php$ {
fastcgi_pass 192.168.3.176:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /appdata$fastcgi_script_name;
include fastcgi_params;
}
}
准备php-fpm所需文件同样提供一个php的简单测试页面(phpinfo函数),后面来验证php的安装情况。
而后提供一个www.conf的配置文件,简单修改www这个连接池的listen参数。
提供php测页 -> index.php
vim index.php
<?php
phpinfo();
?>
提供php服务子配置文件 -> www.conf
这个配置文件内容太多就不贴出来了,可以跑一个php容器获取或者通过其他安装php的机器获取,文章中所有文件的打包上文也有链接
只需修改其中listene这一项
listen = 0.0.0.0:9000
准备mysql所需文件最后我们也为mysql提供一个配置文件,但mysql就不做过多配置,只简单给出两个参数验证可行性。
提供mysql配置文件 -> server.cnf
这个配置文件内容太多就不贴出来了,可以跑一个mysql容器获取或者通过其他安装mysql的机器获取,文章中所有文件的打包上文也有链接。
简单修改[mysqld]这个配置段中,如下两个参数
[mysqld]
skip_name_resolve=ON
innodb_file_per_table=ON
到此我们需要的文件已经准备完成。
4、编写playbook
vim lnmp.yaml
# 安装软件包
- hosts: node01
remote_user: root
tasks:
- name: install epel
yum: name=epel-release state=latest
- name: install nginx
yum: name=nginx state=latest
- hosts: node02
remote_user: root
tasks:
- name: install epel
yum: name=epel-release state=latest
- name: install php mysql
yum: name={{ item }} state=latest
with_items:
- php-fpm
- php-mysql
- php-mbstring
- php-mcrypt
- mariadb-server
#配置并启动服务
- hosts: node01
remote_user: root
tasks:
- name: mkdir nginx root
shell: mkdir -pv /data/nginx/html
- name: copy nginx config
copy: src=/ansible/index.html dest=/data/nginx/html/
- name: copy nginx config
copy: src=/ansible/phpMyAdmin-4.4.15-all-languages.tar.gz dest=/data/nginx/html/
- name: tar zxvf phpMyAdmin-4.4.15-all-languages.tar.gz
shell: tar zxvf /data/nginx/html/phpMyAdmin-4.4.15-all-languages.tar.gz -C /data/nginx/html/
- name: copy pma.sh
copy: src=/ansible/node01-pma.sh dest=/data/nginx/html/
- name: exec pma.sh
shell: bash /data/nginx/html/node01-pma.sh
- name: copy config inc php
copy: src=/ansible/config.inc.php dest=/data/nginx/html/pma/
- name: copy nginx config jjf.conf
copy: src=/ansible/jjf.conf dest=/etc/nginx/conf.d
- name: start nginx service
service: name=nginx state=restarted
- hosts: node02
remote_user: root
tasks:
- name: mkdir /var/lib/php/session
shell: mkdir -pv /var/lib/php/session/ && chown apache:apache /var/lib/php/session/
- name: copy www.conf
copy: src=/ansible/www.conf dest=/etc/php-fpm.d/
- name: start php-fpm
service: name=php-fpm state=restarted
- name: copy nginx config
copy: src=/ansible/phpMyAdmin-4.4.15-all-languages.tar.gz dest=/appdata/
- name: tar zxvf phpMyAdmin-4.4.15-all-languages.tar.gz
shell: tar zxvf /appdata/phpMyAdmin-4.4.15-all-languages.tar.gz -C /appdata/
- name: copy pma.sh
copy: src=/ansible/node02-pma.sh dest=/appdata
- name: bash pma.sh
shell: bash /appdata/node02-pma.sh
- name: copy config.inc.php
copy: src=/ansible/config.inc.php dest=/appdata/pma
- name: copy config index.php
copy: src=/ansible/index.php dest=/appdata/
tags: copyindexphp
- name: copy mariadb config
copy: src=/ansible/server.cnf dest=/etc/my.cnf.d/
- name: start mysql
service: name=mariadb state=restarted
5、运行playbook
语法检查和dryrun测试一下
ansible-playbook --syntax-check lnmp.yaml
ansible-playbook -C lnmp.yaml
执行playbook
ansible-playbook lnmp.yaml
6、验证结果
测试nginx安装情况
测试php安装情况
最后测试phpmyadmin安装情况
phpmyadmin默认情况下,如果mysql的root为空是拒绝登录的。如果需要登录root需要有密码
mysqladmin -u root -p password '你的密码'
设置root密码后可以登录到web界面上,查看验证我们LAMP的各种版本信息
作者:一点Linux