mysql_basedir: /usr/local/mysql/ 源码目录
mysql_datadir: /data/mysql/ 数据目录
mysql_user: mysql mysql用户
mysql_database_user: root 数据库用户
mysql_passwd: '123456789' 数据库密码
mysql_port: 3306 mysql监听端口
mysql_sock: /usr/local/mysql/tmp/mysql.sock mysql的sock
mysql_charset: utf8 mysql字符集
mysql_collation: utf8_general_ci mysql排序方式
mysql_version: mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz mysql版本
mysql_log_dir: /usr/local/mysql/log/ mysql日志目录
php_user: php-fpm php-fpm模式的启动用户
php_port: 9000 php-fpm使用tcp的端口
php_dir: /usr/local/php7 php的安装目录
php_version: 7.2.6 php的版本
mysql_basedir: /usr/local/mysql/ mysql的目录
php_log_dir: /usr/local/php7/var/log/ php日志目录
nginx_user: php-fpm nginx用户
nginx_port: 80 nginx监听端口
nginx_web_dir: /usr/local/nginx nginx的目录
nginx_version: 1.15.0 nginx的版本
pcre_version: 8.32 pcre的版本
nginx_log_dir: /data/nginx/log/ nginx日志目录
[root@localhost ~]# vim /etc/ansible/hosts
[webserver]
192.168.182.11:22
[root@localhost roles]# mkdir -p {
mysql_install,nginx_install,php_install}/{
files,handlers,meta,tasks,templates,vars}
目录说明:
files
:存放需要同步到异地服务器的源码文件及配置文件;handlers
:当资源发生变化时需要进行的操作,若没有此目录可以不建或为空;meta
:存放说明信息、说明角色依赖等信息,可留空;tasks
:安装过程中需要进行执行的任务;templates
:用于执行lnmp安装的模板文件,一般为脚本;vars
:本次安装定义的变量最终目录文件创建效果:
[root@localhost roles]# tree .
.
├── lnmp.yml
└── roles
├── mysql_install
│ ├── files
│ │ └── mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
│ ├── tasks
│ │ ├── copy.yml
│ │ ├── install.yml
│ │ ├── main.yaml
│ │ └── prepare.yml
│ ├── templates
│ │ ├── change_passwd.sh
│ │ ├── my.cnf
│ │ └── mysqld.service
│ └── vars
│ └── main.yml
├── nginx_install
│ ├── files
│ │ └── nginx-1.15.0.tar.gz
│ ├── tasks
│ │ ├── copy.yml
│ │ ├── install.yml
│ │ └── main.yml
│ ├── templates
│ │ ├── fastcgi_params
│ │ ├── nginx.conf
│ │ ├── nginx.service
│ │ └── server.conf
│ └── vars
│ └── main.yml
└── php_install
├── files
│ ├── libmcrypt-2.5.8.tar.gz
│ └── php-7.2.6.tar.gz
├── handlers
├── meta
├── tasks
│ ├── copy.yml
│ ├── install.yml
│ └── main.yml
├── templates
│ └── php-fpm.conf
└── vars
└── main.yml
18 directories, 26 files
[root@localhost roles]# vim lnmp.yml
---
- hosts: webserver
remote_user: root
gather_facts: True
roles:
- php_install
- nginx_install
[root@localhost roles]# vim mysql.yml
#用于批量安装MySQL
---
- hosts: dbserver
remote_user: root
gather_facts: True
roles:
- mysql_install
[root@localhost roles]# vim mysql_install/vars/main.yml
#定义mysql安装中的变量
MYSQL_VER: 5.7.25
MYSQL_VER_MAIN: "{
{ MYSQL_VER.split('.')[0] }}.{
{ MYSQL_VER.split('.')[1] }}"
DOWNLOAD_URL: https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-{
{
MYSQL_VER_MAIN }}/mysql-{
{
MYSQL_VER }}-linux-glibc2.12-x86_64.tar.gz
MYSQL_USER: mysql
MYSQL_PORT: 3306
MYSQL_PASSWD: 123456789
SOURCE_DIR: /software
BASE_DIR: /usr/local/mysql
DATA_DIR: /data/mysql
[root@localhost roles]# vim mysql_install/templates/my.cnf
[client]
port = {
{
MYSQL_PORT }}
socket = {
{
BASE_DIR }}/tmp/mysql.sock
[mysql]
default-character-set=utf8
[mysqld]
default-storage-engine=INNODB
character_set_server=utf8
explicit_defaults_for_timestamp
basedir={
{
BASE_DIR }}
datadir={
{
DATA_DIR }}
socket={
{
BASE_DIR }}/tmp/mysql.sock
log_error = {
{
BASE_DIR }}/log/error.log
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[root@localhost roles]# vim mysql_install/templates/mysqld.service
[Unit]
Description=MySQL Server
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart={
{
BASE_DIR }}/bin/mysqld --defaults-file=/etc/my.cnf
#连接数限制
LimitNOFILE=65535
LimitNPROC=65535
#Restart配置可以在进程被kill掉之后,让systemctl产生新的进程,避免服务挂掉
#Restart=always
PrivateTmp=false
[root@localhost roles]# vim mysql_install/templates/change_passwd.sh
#该脚本用于更改数据库root密码
#!/bin/bash
passwd={
{
MYSQL_PASSWD }}
n=`grep "{
{ BASE_DIR }}/bin" /etc/profile |wc -l`
if [ $n -eq 0 ]
then
echo "export PATH=$PATH:{
{ BASE_DIR }}/bin" >> /etc/profile
source /etc/profile
else
source /etc/profile
fi
{
{
BASE_DIR }}/bin/mysql -uroot -D mysql -e "UPDATE user SET authentication_string=PASSWORD("$passwd") WHERE user='root';"
{
{
BASE_DIR }}/bin/mysql -uroot -e "FLUSH PRIVILEGES;"
{
{
BASE_DIR }}/bin/mysql -uroot -p$passwd -e "grant all privileges on *.* to root@'%' identified by '$passwd';