WordPress (LNMP 架构) 一键部署 Playbook

WordPress (LNMP 架构) 一键部署 Playbook

采用 LNMP 架构组件组合:

  • Linux:CentOS 7 操作系统作为基础环境
  • Nginx:高性能 Web 服务器,处理 HTTP 请求并解析 PHP
  • MariaDB:关系型数据库,存储 WordPress 应用数据
  • PHP-FPM:PHP 进程管理器,处理动态脚本执行

第一部分:deploy lnmp(部署 LNMP 基础环境)

- name: deploy lnmp  # Play 名称:部署 LNMP 环境
  hosts: lnmp  # 目标主机组:lnmp(在 inventory 中定义的主机)
  vars:  # 变量定义区,后续任务可引用这些变量
    mysql_root_password: '123'  # MariaDB root 用户密码
    app_host: "localhost"  # 数据库应用用户允许访问的主机(本地)
    app_user: 'yy'  # 应用使用的数据库用户名
    app_password: '123'  # 应用数据库用户的密码
    app_priv: "{{ db_name }}.*:ALL"  # 应用用户的数据库权限(对 db_name 数据库的所有表有全部权限)
    db_name: webapp  # 应用使用的数据库名称
  tasks:  # 任务列表:具体部署步骤
任务 1:安装 MariaDB 及相关依赖
    - name: install mariadb  # 任务名称:安装 MariaDB 相关包
      yum:  # 使用 yum 模块(适用于 RHEL/CentOS 系统)
        name:  # 要安装的包列表
           - mariadb-server  # MariaDB 服务端
           - python2-PyMySQL  # Python 连接 MySQL 的库(供 Ansible 模块使用)
        state: present  # 确保包已安装(若未安装则安装)
任务 2:启动并启用 MariaDB 服务
    - name: start mariadb  # 任务名称:启动 MariaDB 服务
      service:  # 使用 service 模块管理系统服务
        name: mariadb  # 服务名称:mariadb
        state: started  # 状态:启动(若未运行则启动)
        enabled: yes  # 开机自启:启用
任务 3:设置 MariaDB root@localhost 密码(初始设置)
    - name: set root@localhost password  # 任务名称:设置 root@localhost 密码
      shell: mysqladmin password '{{ mysql_root_password }}'  # 执行 shell 命令:用 mysqladmin 设置 root 密码
      ignore_errors: yes  # 忽略错误(若密码已设置,再次执行会报错,此处忽略以继续后续任务)
任务 4:为不同主机设置 root 密码(完善密码配置)
    - name: set root password  # 任务名称:为不同主机设置 root 密码
      mysql_user:  # 使用 mysql_user 模块管理数据库用户
        name: root  # 用户名:root
        password: "{{ mysql_root_password }}"  # 密码:引用变量中的 root 密码
        host: "{{ item }}"  # 允许登录的主机:循环中的每个值(见下方 with_items)
        state: present  # 确保用户存在
        login_user: root  # 执行操作时的登录用户:root
        login_password: "{{ mysql_root_password }}"  # 登录密码:引用 root 密码
      with_items:  # 循环:对以下主机分别设置
        - "{{ ansible_fqdn }}"  # 主机的完全限定域名(如 node1.example.com)
        - 127.0.0.1  # IPv4 本地回环地址
        - ::1  # IPv6 本地回环地址

作用:确保 root 用户可以从本地、FQDN 等地址登录,统一密码

任务 5:创建应用数据库用户
    - name: create user{{ user }}  # 任务名称:创建应用数据库用户(注:变量名应为 app_user,可能笔误)
      mysql_user:  # 使用 mysql_user 模块
        name: '{{ app_user }}'  # 用户名:引用 app_user 变量(yy)
        password: '{{ app_password }}'  # 密码:引用 app_password 变量(123)
        priv: "{{ app_priv }}"  # 权限:引用 app_priv 变量(webapp.*:ALL)
        host: '{{ app_host }}'  # 允许登录的主机:引用 app_host 变量(localhost)
        state: present  # 确保用户存在
        login_user: root  # 登录用户:root
        login_password: "{{ mysql_root_password }}"  # 登录密码:root 密码
任务 6:创建应用数据库
    - name: create database db_name  # 任务名称:创建应用数据库
      mysql_db:  # 使用 mysql_db 模块管理数据库
        name: "{{ db_name }}"  # 数据库名:引用 db_name 变量(webapp)
        state: present  # 确保数据库存在
        login_user: root  # 登录用户:root
        login_password: "{{ mysql_root_password }}"  # 登录密码:root 密码
任务 7:安装 Nginx
    - name: install nginx  # 任务名称:安装 Nginx
      yum:  # 使用 yum 模块
        name: nginx  # 包名:nginx
        state: present  # 确保安装
任务 8:启动并启用 Nginx 服务
    - name: start nginx  # 任务名称:启动 Nginx 服务
      service:  # 使用 service 模块
        name: nginx  # 服务名:nginx
        state: started  # 状态:启动
        enabled: yes  # 开机自启:启用
任务 9:准备 Nginx 默认页面(存在路径笔误)
    - name: prepare file  # 任务名称:准备文件(默认首页)
      copy:  # 使用 copy 模块创建文件
        content: from nginx  # 文件内容:字符串 "from nginx"
        dest: /user/share/nginx/html/index.html  # 目标路径(注:路径有误,应为 /usr/share/nginx/html/index.html)
任务 10:安装 PHP 及相关组件
    - name: install php  # 任务名称:安装 PHP 相关包
      yum:  # 使用 yum 模块
        name: php,php-fpm,php-mysqlnd  # 包列表:PHP 解释器、PHP-FPM 进程管理器、PHP 连接 MySQL 的扩展
        state: present  # 确保安装
任务 11:修改 PHP-FPM 运行用户 / 组
    - name: modify running user for php  # 任务名称:修改 PHP-FPM 的运行用户和组
      lineinfile:  # 使用 lineinfile 模块修改配置文件
        path: /etc/php-fpm.d/www.conf  # 目标配置文件路径
        regexp: "{{ item}} = "  # 匹配行的正则:以 "user = " 或 "group = " 开头的行
        line: "{{ item }} = nginx"  # 替换后的行:将用户/组改为 nginx
      loop:  # 循环:分别处理 user 和 group
        - user
        - group

作用:让 PHP-FPM 与 Nginx 使用相同的用户(nginx),避免文件权限问题

任务 12:启动并启用 PHP-FPM 服务
    - name: start php-fpm.service  # 任务名称:启动 PHP-FPM 服务
      service:  # 使用 service 模块
        name: php-fpm  # 服务名:php-fpm
        state: started  # 状态:启动
        enabled: yes  # 开机自启:启用
任务 13:配置 Nginx 支持 PHP
    - name: config php for nginx  # 任务名称:配置 Nginx 处理 PHP 请求
      copy:  # 使用 copy 模块复制配置文件
        src: php.conf  # 本地源文件:php.conf(需在 Ansible 控制节点的指定路径)
        dest: /etc/nginx/default.d/php.conf  # 目标路径:Nginx 默认配置目录下的 php.conf

作用:添加 Nginx 解析 PHP 的规则(如将 .php 请求转发给 PHP-FPM 处理)

任务 14:重启 Nginx 使配置生效
    - name: restarted nginx  # 任务名称:重启 Nginx
      service:  # 使用 service 模块
        name: nginx  # 服务名:nginx
        state: restarted  # 状态:重启(使新配置生效)

第二部分:deploy web app(部署 Web 应用:WordPress)

- name: deploy web app  # Play 名称:部署 Web 应用
  hosts: lnmp  # 目标主机组:仍为 lnmp(与上一个 play 相同)
  vars:  # 变量定义:应用相关配置
    blog_vhost: blog.yy.cloud  # WordPress 虚拟主机域名
  tasks:  # 任务列表:部署步骤
任务 1:准备 WordPress 虚拟主机配置
    - name: prepare vhost for wordpress  # 任务名称:准备 WordPress 的虚拟主机配置
      template:  # 使用 template 模块(支持变量替换)
        src: vhost-wordpress.conf.j2  # 本地模板文件:vhost-wordpress.conf.j2(含变量,如 {{ blog_vhost }})
        dest: /etc/nginx/conf.d/vhost-wordpress.conf  # 目标路径:Nginx 虚拟主机配置文件

作用:生成针对 WordPress 的 Nginx 虚拟主机配置(如域名、根目录、PHP 解析规则等)

任务 2:创建 WordPress 网站根目录
    - name: create /usr/share/nginx/html/{{ blog_vhost }}  # 任务名称:创建网站根目录
      file:  # 使用 file 模块
        path: /usr/share/nginx/html/{{ blog_vhost }}  # 路径:引用 blog_vhost 变量(如 /usr/share/nginx/html/blog.yy.cloud)
        state: directory  # 确保为目录(不存在则创建)
任务 3:解压 WordPress 程序包
    - name: Unarchive a wordpress file  # 任务名称:解压 WordPress 文件
      unarchive:  # 使用 unarchive 模块解压文件
        src: wordpress-4.9.4-zh_CN.zip  # 本地源文件:WordPress 压缩包(需在控制节点)
        dest: /usr/share/nginx/html/{{ blog_vhost }}/  # 解压目标目录:网站根目录
        owner: nginx  # 解压后文件的所有者:nginx
        group: nginx  # 解压后文件的所属组:nginx

作用:将 WordPress 程序部署到网站根目录,并设置正确权限

任务 4:重启 Nginx 使虚拟主机配置生效
    - name: restart nginx  # 任务名称:重启 Nginx
      service:  # 使用 service 模块
       name: nginx  # 服务名:nginx
       state: restarted  # 状态:重启

总结

整个 Playbook 分两阶段完成部署:

  1. 先安装并配置 LNMP 基础环境(MariaDB、Nginx、PHP),包括数据库用户 / 库创建、服务启动等;
  2. 再部署 WordPress 应用,通过虚拟主机配置、程序解压等步骤使应用可用。

1. 准备项目目录

mkdir blog && cd blog

cat > ansible.cfg <<'EOF'
[defaults]
remote_user = laoma
inventory = ./inventory
vault_password_file=./secret.txt

[privilege_escalation]
become = True
become_user = root
become_method = sudo
become_ask_pass = False
EOF

cat > inventory <<'EOF'
blog ansible_host=10.1.8.100
EOF

准备虚拟站点模版

cat > vhost-wordpress.conf.j2 <<EOF
server {
    listen       80;
    server_name  {{ blog_vhost }};
    root         {{wp_install_dir }};
    index index.php index.html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
    
    # log file
    access_log  /var/log/nginx/access-{{ blog_vhost }}.log;
    error_log /var/log/nginx/error-{{ blog_vhost }}.log;
}
EOF

配置nginx对接php

cat > php.conf <<'EOF'
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
EOF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值