第十一周作业

1 ansible 常用指令总结,并附有相关示例。

Command 模块:

功能:在远程主机上执行命令,此为默认模块,可忽略-m 选项

注意:此命令不支持$VARNME<> | ;&等,可能用shell模型实现

注意:此模块不具备幂等性

常见选项:

chdir=dir    # 执行命令前,先切换至目录dir

creates=file  # 当file不存在时不会执行

removes=file # 当file存在时才会执行

ansible 10.0.0.21 -m command -a 'touch a.txt chdir=/opt creates=/tmp/abc'

shell 模块:

功能:在远程主机上执行命令,此为默认模块,可忽略-m 选项

注意:属于command的增强版,支持管道符

注意:此模块不具备幂等性(可能出现错误)建议能不用就不用,最好使用专有模块

常见选项:

chdir=dir    # 执行命令前,先切换至目录dir

creates=file  # 当file不存在时不会执行

removes=file # 当file存在时才会执行

ansible 10.0.0.21 -m shell -a 'echo 123 > /opt/a.txt'

修改默认模块的设置:

vim /etc/ansible/ansible.cfg

#module_name = command

module_name = shell

这样默认模块就是shell了,比command模块功能多一些

再去操作的时候这样写:ansible 10.0.0.21 -a 'touch /opt/b.txt'

Script(剧本,脚本)

功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)

注意:此模块不具有幂等性

chdir=dir    # 执行命令前,先切换至目录dir

cmd               #指定ansible主机的命令

creates=file  # 当file不存在时不会执行

removes=file # 当file存在时才会执行

ansible webserver -m script -a /data/test.sh

命令    组名      运行脚本模块   脚本

Copy模块

功能:复制ansible服务器主控端或远程的本机的文件到远程主机

注意:src=file 如果没有指明路径,则为当前目录或当前目录下的files目录下的file文件

常见选项:

Src     #控制端源文件路径

Dest    #被控制端文件路径

Owner  #属主

Group  #属组

Mode   #权限

Backup  #是否备份

Validate  #验证成功才会执行copy

Remote_src #no是默认值,表示src文件在ansible主机,yes表示src文件在远程主机

ansible one -m copy -a 'src=/etc/issue dest=/opt/issue.bak mode=600 owner=root group=bin'

在同一命令的情况下ansible因为幂等性的原因,重复的命令不会覆盖,如果是属性变更的话将会覆盖(在完全一致的情况下才会具有幂等性)

Get_url模块

功能:用于将文件从http、https或ftp下载到被管理机节点上(专门拷贝第三方文件)

常用功能如下:

url          #下载文件的URL,支持HTTP、HTTPS或FTP协议

dest         #下载到目录路径(绝对路径),如果目标是一个目录,就用源文件名,如果设置了名称就用目标设置的名称

owner       #指定属主

group       #指定属组

mode       #指定权限

force        #如果yes、dest不是目录,将每次下载文件,如果内容改变替换文件,如果no,则只有在目标不存在时才会下载

checksum    #对目标文件在下载后计算摘要,以确保其完整性

url_username  #用于HTTP基本认证的用户名,对于允许密码的站点,此参数可以不适用‘url_password’

url_password  #用于HTTP基本认证的密啊,如果‘url_usrname’参数,则不会使用‘url_passweord’参数

validate_certs  #如果‘no’,ssl证书将不会被验证,适用于自签名证书在私有的网站上使用

timeout       #URL请求的超时时间,秒为单位

ansible two -m get_url -a 'url=http://nginx.org/download/nginx-1.18.0.tar.gz dest=/opt checksum="md5:b2d33d24d89b8b1f87ff5d251aa27eb8"'

Fetch(取来)模块

功能:从远程主机提取文件至ansible主控端,copy相反,目前不支持目录

常见选项:

Src    #被控端的源文件路径,只支持文件

Dest   #ansible控制端的目录路径

ansible 10.0.0.7 -m fetch -a 'src=/opt/nginx-1.18.0.tar.gz dest=/opt'

       远程机器   抓取    远程机器的文件          抓取到本机的位置

Flie 模块

功能:设置文件属性,创建文件,目录和软链接等

常见选项:

Path   #在被控端创建的路径

Owner  #属主

Group  #属组

Mode   #权限

State    #状态

       =touch     #创建文件

       =directory   #创建目录

       =link           #软连接

       =hard            #硬链接

Recurse  #yes表示递归授权

ansible all -m file -a 'path=/tmp/ state=directory'

                         path目标文件路径  创建目录

stat模块

功能:检查文件或文件系统状态

注意:对于windows目标,请改用win_stat模块

常见选项:

Path #文件/对象的完整路径(必须)

ansible 127.0.0.1 -m stat -a 'path=/etc/passwd'

unarchive模块

功能:解包解压缩

实现有两种用法:

将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置remote_src=no,此为默认值,可省略

将远程本主机上或非ansible的其他主机的某个压缩包解压缩到远程主机的指定路径下,需要设置remote_src=yes

常见参数:

remote_src  #和copy功能一样且选项互斥,yes表示源文件在远程被控制主机或其他非ansible的其他主机上,no表示文件在ansible主机上,默认值为no,此选项代替copy选项

Copy       #默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no会在远程主机上寻找src源文件,此选项已废弃

Src         #源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,如果是远程主机上的路径,则需要设置remote_src=yes

Dest         #远程主机上的目标路径

Mode            #设置解压缩后的文件权限

Create=/path/file   #当绝对路径/path/file不存在时才会执行

ansible all -m unarchive -a 'src=http://nginx.org/download/nginx-1.22.1.tar.gz dest=/tmp remote_src=yes owner=root group=root'

Archive模块

功能:打包压缩保存在被管理节点

常见选项:

Path  #压缩的文件或目录

Dest  #压缩后的文件

Format #压缩格式,支持gz.bz2 ,xz,tar,zip

ansible one -m archive -a ‘path=/var/log/ dest=/data/log.tar.bz2 format=bz2 owner=wang mode=0600’

hostname模块

管理主机名:

Name #修改后的主机名称

ansible 10.0.0.21 -m hostname -a 'name=web-two'

cron 模块

功能:计划任务

支持时间:minute,hour,day,month,weekday

常见选项:

Name            #描述脚本的作用

Minute           #分钟

Hour             #小时

Weekday       #周

User              #任务由那个用户运行,默认root

Job                #任务

创建计划任务:

ansible 10.0.0.21 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'

每周的1-5天的晚上2点30开始执行备份脚本

禁用计划任务:

nsible 10.0.0.21 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh disabled=yes'

yum模块和apt模块

功能:管理软件包

Yum管理软件包,只支持RHEL,CenOS,fedora,不支持ubunut其他版本

Apt模块管理debian相关版本的软件包

Yum常见选项

Name            #软件包名称

State              #状态

       =present        #安装,此为默认值 (泼森特)

       =absent         #删除  (啊泼森特)

       =latest           #最新版

List                       #列出指定包

Enablerepo           #启用那个仓库安装

Disablerepo          #不适用那个仓库的包

Exclude                 #排除指定的包

Validete                #是否检验,默认为yes

ansible 10.0.0.21 -m yum -a 'name=nginx state=present'

ansible 10.0.0.10 -m apt -a 'name=nginx state=present'

卸载:

ansible 10.0.0.10 -m apt -a 'name=nginx state=absent'

yum_repository模块

功能:此模块实现yum的仓库配置管理

常见选项:

name             #仓库id

description     #仓库描述名称,对应配置文件的name=

baseurl          #仓库的地址

gpgcheck       #验证开启

gpgkey          #仓库公钥路径

ansible one -m yum -a 'name=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/8/x86_64/zabbi x-agent2-5.0.24-1.el8.x86_64.rpm state=present validate_certs=no'

ansible 10.0.0.21 -m yum -a ‘name=zabbix-agent2’

service模块

此模块和systemd功能相似,选项很多相同

功能:管理服务

常见选项:

Name            #服务名称

State              #服务状态

 =Stated        #启动

 =stopped     #停止

 =restarted  #重启

 =reloaded    #重载

Enabled         #开启自启动

Daemon_reload    #加载新的配置文件,适用于systemd模块

ansible 10.0.0.22 -m service -a 'name=nginx state=started'

设置开机启动:

ansible 10.0.0.22 -m service -a 'name=nginx state=started enabled=yes'

User模块

功能:管理用户

常见选项:

name                   #创建的名称

uid                    #指定uid

group                  #指定基本组

shell                     #登录shell类型默认/bin/bash

create_home        #是否创建家目录

password             #设定对应的密码,必须是加密后的字符串才行,否则不生效 system #yes表示系统用户

groups            #附加组

append                #追加附加组使用,yes表示增加新的附加组

state                   #absen删除

remove                #yes表示删除用户时将家目录一起删除

generate_ssh_key   #创建私钥

ssh_keyu_bits       #私钥位数

ssh_key_file         #私钥文件路径

ansible all -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'

group模块

功能:管理组

常见选项:

name        #指定组名称

gid         #指定gid state  

=present  #创建,默认  

=absent   #删除

ansible websrvs -m group  -a 'name=nginx gid=88 system=yes'

Lineinfile模块

ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时, 会存在问题,无法正常进行替换

ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换 一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块 功能:相当于sed,主要用于修改一行的文件内容

常见选项

path                                   #被控端文件的路径

regexp                               #正则匹配语法格式,表示被替换的内容

line                                    #替换为的内容

state                                  #absent表示删除

insertafter                       #插入到替换内容前面,如和regexp同时存在,只在没找到与regexp匹配时才使用

insertafter insertbefore     #插入到替换内容后面,如和regexp同时存在,只在没找到与regexp匹配时才使用

insertafter backrefs        #支持后面引用,yes和no

backup                      #修改前先备份

create                       #如果文件不存在,则创建,默认不存在会出错

mode                       #指定权限

owner                      #指定用户

group                      #指定组

#注意

regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被 匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。

ansible websrvs -m lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' line='Listen 8080'"

replace模块

该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用 (多行替换)

功能: 多行修改替换

常见选项:

path                     #被控端文件的路径

regexp               #正则匹配语法格式,表示被替换的内容

replace                #替换为的内容

after              #插入到替换内容前面

before            #插入到替换内容后面

backup           #修改前先备份

mode             #指定权限

owner            #指定用户

group            #指定组

ansible all -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"

mount模块

功能:挂载和卸载文件系统

常见选项:

Sec         #源设备路径,或网络地址

Path       #挂载至本地那个路径下

Fstype    #设备类型,nfs

Opts       #挂载选项

State       #挂载还是卸载

       =present        #永久挂载,但没有立即生效

       =absent         #卸载临时挂载,并删除永久挂载

       =mounted     #临时挂载

       =unmounted #临时卸载

Setup模块

功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机 较多,会影响执行速度

可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息

常见选项

filter #指定过滤条件

ansible all -m setup ansible all -m setup -a "filter=ansible_nodename"

ansible all -m setup -a "filter=ansible_hostname"

ansible all -m setup -a "filter=ansible_domain"

ansible all -m setup -a "filter=ansible_memtotal_mb"

ansible all -m setup -a "filter=ansible_memory_mb"

ansible all -m setup -a "filter=ansible_memfree_mb"

ansible all -m setup -a "filter=ansible_os_family"

ansible all -m setup -a "filter=ansible_distribution"

ansible all -m setup -a "filter=ansible_distribution_major_version"

ansible all -m setup -a "filter=ansible_distribution_version"

ansible all -m setup -a "filter=ansible_processor_vcpus"

ansible all -m setup -a "filter=ansible_all_ipv4_addresses"

ansible all -m setup -a "filter=ansible_architecture"

ansible all -m setup -a "filter=ansible_uptime_seconds"

ansible all -m setup -a "filter=ansible_processor*"

ansible all -m setup -a 'filter=ansible_env'

debug模块

功能: 此模块可以用于输出信息,并且通过 msg 定制输出的信息内容,功能类似于echo命令 注意: msg后面的变量有时需要加 " " 引起来

常见选项

msg        #指定命令输出的信息

var         #指定变量名,和msg互斥

verbosity   #详细度

sysctl模块

功能: 修改内核参数

常见选项

name     #内核参数

value     #指定值

state      #是否保存在sysctl.conf文件中,默认present

sysctl_set #使用sysctl -w 验证值生效

ansible websrvs -m sysctl -a 'name=net.ipv4.ip_forward value=1 state=present'

pam_limits

功能:管理资源限制

apt_repository 模块

功能: 此模块实现apt的仓库配置管理

apt_key 模块

功能: 添加和删除apt key

常见选项

url                 #key路径

state           #添加或删除

#先导入key,注意先后顺序

ansible ubuntu-servers -m apt_key -a 'url=https://download.ceph.com/keys/release.asc state=present'


2. 总结ansible playbook目录结构及文件用途。

playbook是ansible的核心功能组件之一,它是用于定义任务和配置的自动化脚本,使用ymal语法编写可以描述在受管主机上执行的一系列任务和配置。Playbook定义了一个或多个剧本,每个剧本定义了一组任务,这些任务将在目标主机上执行。剧本中的任务按照定义的顺序依次执行。

每个任务包含一个或多个模块,模块是Ansible的可重用功能单元,用于执行各种操作,例如文件操作、软件安装、服务管理等。每个模块接收参数,根据这些参数执行操作,并返回结果。可以根据需要在剧本中使用不同的任务和模块。

 Playbook的结构一般包括以下内容:

- `name`: Playbook的名称或描述

- `hosts`: 定义要管理的主机或主机组 

- `vars`: 定义变量,用于在任务中传递参数和配置选项 

- `tasks`: 包含一个或多个任务的任务列表- `handlers`: 定义处理程序,用于在任务执行过程中处理特定的事件

- `roles`: 定义可重用的角色,包含一组相关的任务和配置
 


3. 使用ansible playbook实现一个mysql角色。

开始配置mysql:

先去设置mysql的配置文件

/data/ansible/roles/mysql/files

vim ./my.cnf

[mysqld]

server-id=1

log-bin

datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/data/mysql/mysql.log

pid-file=/data/mysql/mysql.pid

[client]

socket=/data/mysql/mysql.sock

设置mysql变量

/data/ansible/roles/mysql/var

vim ./main.yml

mysql_version: 8.0.35

mysql_file: mysql-{{mysql_version}}-linux-glibc2.28-x86_64.tar.xz

mysql_root: 123456

配置mysql任务,这里的区别在于将每个任务分成一个文件,然后main.yml作为文件的总入口开始调用这些任务文件

/data/ansible/roles/mysql/tasks

vim ./main.yml

- include_tasks: install.yml

- include_tasks: group.yml

- include_tasks: user.yml

- include_tasks: unarchive.yml

- include_tasks: linkfile.yml

- include_tasks: data.yml

- include_tasks: config.yml

- include_tasks: script.yml

- include_tasks: path.yml

- include_tasks: service.yml

- include_tasks: secure.yml

vim ./insatll.yml

- name: install packages

  yum:

    name:

    - libaio

    - numactl-libs

vim ./group.yml

- name: create mysql group

  group: name=mysql gid=306

vim ./user.yml

- name: create mysql user

  user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql

vim ./unarchive.yml

- name: copy tar to remote host and file mode

  unarchive: src=/data/mysql-8.0.35-linux-glibc2.28-x86_64.tar.xz dest=/usr/local/ owner=root group=root

vim ./linkfile.yml

- name: create linkfile /usr/local/mysql

  file: src=/usr/local/mysql-{{ mysql_version }}-linux-glibc2.28-x86_64 dest=/usr/local/mysql state=link

vim ./data.yml

- name: data dir

  shell: /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql

  tags: data

vim ./config.yml

- name: config my.cnf

  copy: src=src=/data/ansible/roles/mysql/files/my.cnf  dest=/etc/my.cnf

vim ./script.yml

- name: service script

  shell: /bin/cp /usr/local/mysql/support-files/mysql.service /etc/init.d/mysql

vim ./path.yml

- name: PATH variable

  copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh

vim ./service.yml

- name: enable service

  shell: chkconfig --add mysql;/etc/init.d/mysqld start

  tage: service

vim ./secure.yml

- name: change password

  shell: /usr/local/mysql/bin/mysqlamin -uroot password{{mysql_root_password}}

创建mysql角色文件

cd /data/ansible/

vim ./role_mysql.yml

- hosts: sql

  remote_user: root

  gather_facts: no

  roles:

    - mysql


4. 基于角色完成部署LNMP架构,并支持一键发布,回滚应用。同时基于zabbix角色批量部署zabbix。

mkdir -pv /data/ansible

使用ansible对LNMP进行角色部署的配置文件以及其它相关文件就存放到这个目录下

cd /data/ansible/

创建配置文件:

touch ansible.cfg

touch hosts

将ansible.cfg配置复制到配置文件中

修改配置文件,让配置文件识别当前文档的hosts

inventory      = ./hosts

配置hosts分布好

创建角色目录:

mkdir ./roles/{nginx,mysql,php-fpm,redis,tomcat,wordpress}/{tasks,handlers,templates,files,var} -pv

在role平级的情况下创建单个文件

接下来针对每一个角色进行实现,依次nginx、php、mysql或者redis、wordpress

Nginx角色文件:

创建任务配置文件:先去写执行的ngxin编译安装执行的任务,当任务正常的写完之后,再去进行后面的步骤:

vim tasks/main.yml

- name: install packages

  yum:

   name: "{{ item }}"

  loop:

    - gcc

    - make

    - pcre-devel

    - openssl-devel

    - zlib-devel

    - perl-ExtUtils-Embed

- name:

  unarchive:

    src: "{{ url }}"

    dest: "/usr/local/src"

    remote_src: yes

- name: compile and install

  shell:

    cmd: "./configure --prefix={{ install_dir }} --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module &&  make && make install"

    chdir: "/usr/local/src/nginx-{{ version }}"

    creates: "{{install_dir}}/sbin/nginx"

- name: create "{{ group }}"

  group:

    name: "{{ group }}"

    gid: "{{ gid }}"

- name: create "{{ user }}"

  user:

    name: "{{ user }}"

    uid: "{{ uid }}"

    group: "{{ group }}"

    system: yes

- name: service file

  template:

    src: /data/ansible/roles/nginx/templates/nginx.service.j2

    dest: /lib/systemd/system/nginx.service

- name: start nginx

  service:

     name: nginx

     state: started

     enabled: yes

- name: copy config

  template: 

    src: /data/ansible/roles/nginx/templates/nginx.conf.j2

    dest: "{{install_dir}}/conf/nginx.conf"

  notify:

    - restart nginx 

- name: check nginx config

  shell:

    cmd: "{{install_dir}}/sbin/nginx -t"

  register: check_nginx_config

  changed_when:

    - check_nginx_config.stdout.find('successful')

    - false

- name: config dir

  file:

    path: "{{install_dir}}/conf.d"

    state: directory

- name: config file mode

  file:

    path: "{{install_dir}}"

    owner: "{{ user }}"

    group: "{{ group }}"

recurse: yes

以上内容定义了yum 安装gcc等编译软件,设置了解压下载下来的nginx源码包,以及所需要存储的位置,通过shell模块对软件进行编译,设置群组,用户,配置service文件,开启nginx 以及检查nginx配置文件是否正确的判断

当以上的任务写完之后就要针对里面的内容开始进行响应的配置,例如其中的变量,配置文件

开始设置配置文件,在nginx上的配置文件需要重新进行配置之后以便传输到需要目录:

创建模板:

vim ./templates/nginx.conf.j2

user {{ user }};

worker_processes auto;

events {

        worker_connections 1024;

}

http {

        include                 mime.types;

        default_type application/octet-stream;

        keepalive_timeout       65;

        include {{install_dir}}/conf.d/*.conf;

}

配置nginx启动文件模板

vim ./templates/nginx.service.j2

[Unit]

Description=A high performance web server and a reverse proxy server

Documentation=man:nginx(8)

After=network.target nss-lookup.target

[Service]

Type=forking

PIDFile={{ install_dir }}/logs/nginx.pid

ExecStartPre=/usr/bin/rm -f {{ install_dir }}/logs/nginx.pid

ExecStartPre={{ install_dir }}/sbin/nginx -t

ExecStart={{ install_dir }}/sbin/nginx

ExecReload=/bin/kill -s HUP $MAINPID

KillSignal=SIGQUIT

TimeoutStopSec=5

KillMode=mixed

PrivateTmp=true

[Install]

WantedBy=multi-user.target

两个模板解决完成之后开始设置变量:

可以通过hosts添加:

vim hosts

[nginx]

10.0.0.21

10.0.0.22

[nginx:vars]

uid=88

user=nginx

gid=88

group=nginx

version="1.24.0"

url="http://nginx.org/download/nginx-{{ version }}.tar.gz"

user=nginx

install_dir="/apps/nginx"

开始配置触发器,handlers:

vim ./roles/nginx/handlers/main.yml

- name: restart nginx

  service:

    name: nginx

state: restarted

配置调用角色:

切换到roles平等目录下:ansible.cfg  hosts  roles

- hosts: nginx

  remote_user: root

  roles:

    - nginx

先测试以下:

ansible-playbook -i hosts nginx_role.yml

小i指定hosts文件,如果项目多了可以单独指定

实现PHP角色:

cd ./roles/php-fpm/

这里先去配置php的配置文件

vim ./templates/php-fpm.conf.j2

server {

        listen 80;

        server_name {{ fqdn }};

        location ~ \.php$ {

            root           {{ root_path }};

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include        fastcgi_params;

        }

}

先去相应的复制一个www.conf到files目录下修改以下内容

vim templates/www.conf.j2 #这个文件就是原始的php文件复制过来的

user = nginx

group = nginx

listen = 127.0.0.1:9000

只留下

[www] 

 

prefix = /path/to/pools/{{ pool }} 

 

user = {{ user }} 

group = {{ group }} 

 

listen = /run/php/php8.1-fpm.sock 

listen = 127.0.0.1:9000 

 

listen.backlog = 511

创建一个php配置文件

vim templates/php.ini.j2  #这个文件就是原始的php文件复制过来的

date.timezone = Asiz/Shanghai

max_execution_time = 350

max_input_time = 600

post_max_size = 200M

upload_max_filesize = 200M

开始配置任务:

- name: install packages

  yum:

    name: "{{ item }}"

  loop:

    - php-fpm

    - php-mysqlnd

    - php-json

    - php-xml

    - php-gd

    - php-pecl-zip

- name: php path

  file:

    path: /var/lib/php

    owner: "{{ user }}"

    group: "{{ group }}"

    recurse: yes

- name: config php.ini

  template:

    src: /data/ansible/roles/php-fpm/templates/php.ini.j2

    dest: /etc/php.ini

  notify: restart php-fpm

- name: config www.conf

  copy:

    src: /data/ansible/roles/php-fpm/files/www.conf

    dest: /etc/php-fpm.d/www.conf

  notify: restart php-fpm

- name: config nginx

  template:

    src: /data/ansible/roles/php-fpm/templates/php-fpm.conf.j2

    dest: "{{ install_dir }}/conf.d/php-fpm.conf"

  notify: restart nginx

- name: start php-fpm

  service:

    name: php-fpm

    state: started

    enabled: yes

- name: test page

  copy:

    src: test.php

    dest: "{{ root_path }}/"

- name: create php datadir

  file:

    name: "{{ root_path }}"

    state: directory

    owner: "{{ user }}"

    group: "{{ group }}"

配置php触发器

vim handlers/main.yml

- name: restart php-fpm

  service:

    name: php-fpm

    state: restarted

- name: restart nginx

  service:

    name: nginx

state: restarted

以上配置好之后不清楚nginx与php是否能正常的运行,就在files下配置一个info.php的文件进行测试:

vim files/test.php

<?php

phpinfo();

?>

打开hosts文件开始添加新的变量:

vim hosts

root_path=/data/php

fqdn=10.0.0.21

创建php的可调用yml文件:

vim php-fpm-role.yml

- hosts: nginx

  remote_user: root

  roles:

    - php-fpm

执行命令:

ansible-playbook php-fpm-role.yml

配置wordpress:

cd wordpress/

vim tasks/main.yml

- name: down wordpress

  unarchive:

    src: "/data/wordpress-6.3.2-zh_CN.tar.gz"

    dest: /data/

    owner: "{{ user }}"

group: "{{ group }}"

同时需要把压缩包放到data文件当中

回到目录下,在写一个wordpress的角色文件

cd /data/ansible/

cp php-fpm-role.yml wordpress.yml

vim wordpress.yml

- hosts: nginx

  remote_user: root

  roles:

- wordpress

ansible-playbook wordpress.yml

将以上的步骤全部重新执行一次:

vim lnmp_role.yml

- include: nginx_role.yml

- include: php-fpm-role.yml

- include: wordpress.yml

#- include:

ansible-playbook lnmp_role.yml

开始配置mysql:

先去设置mysql的配置文件

/data/ansible/roles/mysql/files

vim ./my.cnf

[mysqld]

server-id=1

log-bin

datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/data/mysql/mysql.log

pid-file=/data/mysql/mysql.pid

[client]

socket=/data/mysql/mysql.sock

设置mysql变量

/data/ansible/roles/mysql/var

vim ./main.yml

mysql_version: 8.0.35

mysql_file: mysql-{{mysql_version}}-linux-glibc2.28-x86_64.tar.xz

mysql_root: 123456

配置mysql任务,这里的区别在于将每个任务分成一个文件,然后main.yml作为文件的总入口开始调用这些任务文件

/data/ansible/roles/mysql/tasks

vim ./main.yml

- include_tasks: install.yml

- include_tasks: group.yml

- include_tasks: user.yml

- include_tasks: unarchive.yml

- include_tasks: linkfile.yml

- include_tasks: data.yml

- include_tasks: config.yml

- include_tasks: script.yml

- include_tasks: path.yml

- include_tasks: service.yml

- include_tasks: secure.yml

vim ./insatll.yml

- name: install packages

  yum:

    name:

    - libaio

    - numactl-libs

vim ./group.yml

- name: create mysql group

  group: name=mysql gid=306

vim ./user.yml

- name: create mysql user

  user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql

vim ./unarchive.yml

- name: copy tar to remote host and file mode

  unarchive: src=/data/mysql-8.0.35-linux-glibc2.28-x86_64.tar.xz dest=/usr/local/ owner=root group=root

vim ./linkfile.yml

- name: create linkfile /usr/local/mysql

  file: src=/usr/local/mysql-{{ mysql_version }}-linux-glibc2.28-x86_64 dest=/usr/local/mysql state=link

vim ./data.yml

- name: data dir

  shell: /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql

  tags: data

vim ./config.yml

- name: config my.cnf

  copy: src=src=/data/ansible/roles/mysql/files/my.cnf  dest=/etc/my.cnf

vim ./script.yml

- name: service script

  shell: /bin/cp /usr/local/mysql/support-files/mysql.service /etc/init.d/mysql

vim ./path.yml

- name: PATH variable

  copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh

vim ./service.yml

- name: enable service

  shell: chkconfig --add mysql;/etc/init.d/mysqld start

  tage: service

vim ./secure.yml

- name: change password

  shell: /usr/local/mysql/bin/mysqlamin -uroot password{{mysql_root_password}}

创建mysql角色文件

cd /data/ansible/

vim ./role_mysql.yml

- hosts: sql

  remote_user: root

  gather_facts: no

  roles:

    - mysql

~           

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值