# Linux实战笔记:WordPress文创项目四项优化结合Ansible ROLE

本文是另一篇博客:# Linux实战笔记:WordPress文创项目部署全流程记录的内容补充,将第一阶段的四项性能优化融入一键部署lnmp的ROLE之中,方便后续批量部署。

一、LNMP Role 融入性能优化的详细修改步骤

本次配置全程在zop控制节点主机进行操作。

步骤1:定位Role目录,确认基础结构

确保Role目录结构完整,本次修改涉及 vars/main.ymltemplates/nginx.conf.j2templates/www.conf.j2tasks/main.yml 四个核心文件,先进入Role目录:

bash 复制代码
[root@zop ansible]# cd roles/lnmp/
步骤2:修改变量文件(vars/main.yml)------ 新增性能优化相关变量

为统一管理优化参数(后续调整无需改模板/任务),在 vars/main.yml 中新增Nginx、PHP-FPM、OPcache的优化变量:

  1. 编辑vars/main.yml:
bash 复制代码
[root@zop lnmp]# vim vars/main.yml
  1. 新增以下变量(追加到原有内容后):
yaml 复制代码
# ========== 性能优化 - Nginx 相关 ==========
# Nginx工作进程数(auto=匹配CPU核心)
nginx_worker_processes: "auto"
# Nginx单进程最大连接数
nginx_worker_connections: 1024
# Nginx事件模型(epoll为Linux高性能模型)
nginx_events_use: "epoll"
# Nginx是否开启多连接接收
nginx_multi_accept: "on"

# ========== 性能优化 - PHP-FPM 相关 ==========
# PHP-FPM进程管理模式(dynamic=动态)
php_fpm_pm: "dynamic"
# PHP-FPM最大进程数(2G内存建议20,4G建议40)
php_fpm_max_children: 20
# PHP-FPM启动初始进程数
php_fpm_start_servers: 5
# PHP-FPM空闲最小进程数
php_fpm_min_spare_servers: 2
# PHP-FPM空闲最大进程数
php_fpm_max_spare_servers: 8
# PHP-FPM单进程最大请求数(防止内存泄漏)
php_fpm_max_requests: 1000

# ========== 性能优化 - PHP OPcache 相关 ==========
# 是否开启OPcache
php_opcache_enable: 1
# CLI模式是否开启OPcache
php_opcache_enable_cli: 1
# OPcache共享内存大小(MB)
php_opcache_memory_consumption: 128
# OPcache最大缓存脚本数
php_opcache_max_accelerated_files: 10000
# OPcache脚本更新检查频率(秒,开发期60,生产期3600)
php_opcache_revalidate_freq: 60
# 是否开启OPcache快速关闭
php_opcache_fast_shutdown: 1
# 是否保存注释(兼容WordPress插件)
php_opcache_save_comments: 1
步骤3:修改Nginx配置模板(templates/nginx.conf.j2)------ 融入Nginx进程/连接数、静态资源缓存优化
  1. 编辑nginx.conf.j2模板:
bash 复制代码
[root@zop lnmp]# vim templates/nginx.conf.j2
  1. 替换/新增核心优化内容:
    • 全局块:引用变量设置worker_processes
    • events块:新增epoll事件模型、multi_accept多连接接收;
    • server块:新增静态资源缓存的location规则。
步骤4:修改PHP-FPM配置模板(templates/www.conf.j2)------ 融入PHP-FPM进程数优化
  1. 编辑www.conf.j2模板:
bash 复制代码
[root@zop lnmp]# vim templates/www.conf.j2
  1. 将原有硬编码的PM进程数配置替换为变量引用,适配不同服务器资源场景。
步骤5:修改任务文件(tasks/main.yml)------ 新增OPcache安装与配置任务
  1. 编辑tasks/main.yml:
bash 复制代码
[root@zop lnmp]# vim tasks/main.yml
  1. 在"启动 PHP-FPM 服务"任务前,新增安装php-opcache配置OPcache参数的任务,通过lineinfile模块写入php.ini,确保幂等性。
步骤6:验证Handlers(handlers/main.yml)------ 确保服务重载/重启生效

原有handlers已包含"重载Nginx""重启PHP-FPM",无需修改,仅需确认内容完整。

步骤7:运行Playbook验证优化生效

执行原有deploy_lnmp.yml剧本,批量部署包含性能优化的LNMP:

bash 复制代码
[root@zop ansible]# ansible-playbook deploy_lnmp.yml

二、修改后LNMP Role 所有核心配置文件完整内容

1. vars/main.yml(完整内容)
yaml 复制代码
# 路径与版本变量
nginx_version: "1.22.1"
nginx_install_path: "/usr/local/nginx"
nginx_src_package: "/root/nginx-{{ nginx_version }}.tar.gz"
nginx_user: "nginx"
web_root: "{{ nginx_install_path }}/html"

# PHP 基础配置
php_fpm_listen: "127.0.0.1:9000"

# MariaDB 配置
mariadb_service: "mariadb"

# ========== 性能优化 - Nginx 相关 ==========
nginx_worker_processes: "auto"
nginx_worker_connections: 1024
nginx_events_use: "epoll"
nginx_multi_accept: "on"

# ========== 性能优化 - PHP-FPM 相关 ==========
php_fpm_pm: "dynamic"
php_fpm_max_children: 20
php_fpm_start_servers: 5
php_fpm_min_spare_servers: 2
php_fpm_max_spare_servers: 8
php_fpm_max_requests: 1000

# ========== 性能优化 - PHP OPcache 相关 ==========
php_opcache_enable: 1
php_opcache_enable_cli: 1
php_opcache_memory_consumption: 128
php_opcache_max_accelerated_files: 10000
php_opcache_revalidate_freq: 60
php_opcache_fast_shutdown: 1
php_opcache_save_comments: 1
2. templates/nginx.conf.j2(完整内容)
jinja2 复制代码
# 全局块:引用变量设置工作进程数
worker_processes  {{ nginx_worker_processes }};

# events块:性能优化配置
events {
    worker_connections  {{ nginx_worker_connections }};
    use {{ nginx_events_use }};
    multi_accept {{ nginx_multi_accept }};
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;# 安全加固:隐藏版本号
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        root         {{ web_root }};
        index        index.php index.html index.htm;

        location / {
            root   html;
            index index.php  index.html index.htm;
        }

        # ========== 性能优化:静态资源缓存规则 ==========
        location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot|svg)$ {
            expires 7d;
            add_header Cache-Control "public, no-transform";
            access_log off;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ \.php$ {
        root           html;
        fastcgi_pass   {{ php_fpm_listen }};
        fastcgi_index  index.php;
        include        fastcgi.conf;
        }
    }
}
3. templates/www.conf.j2(完整内容)
jinja2 复制代码
[www]
; 基础配置
listen = {{ php_fpm_listen }}
listen.allowed_clients = 127.0.0.1
listen.acl_users = apache,nginx
user = apache
group = apache

; ========== 性能优化:PHP-FPM进程数配置 ==========
pm = {{ php_fpm_pm }}
pm.max_children = {{ php_fpm_max_children }}
pm.start_servers = {{ php_fpm_start_servers }}
pm.min_spare_servers = {{ php_fpm_min_spare_servers }}
pm.max_spare_servers = {{ php_fpm_max_spare_servers }}
pm.max_requests = {{ php_fpm_max_requests }}

; 日志与会话配置(默认保留)
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache
4. tasks/main.yml(完整内容)
yaml 复制代码
---
# 1. 安装系统依赖(Nginx编译依赖 + PHP/MariaDB 运行依赖)
- name: 安装 LNMP 全量依赖包
  yum:
    name:
      - gcc
      - make
      - pcre-devel
      - openssl-devel
      - php
      - php-fpm
      - php-mysqlnd
      - php-json
      - mariadb
      - mariadb-server
      - mariadb-devel
    state: present

# 2. 创建 Nginx 运行用户
- name: 创建 Nginx 系统用户
  user:
    name: "{{ nginx_user }}"
    shell: /sbin/nologin
    create_home: no
    state: present

# 3. 拷贝 Nginx 源码包到被管理节点
- name: 拷贝 Nginx 源码包
  copy:
    src: "{{ nginx_src_package }}"
    dest: "/root/"
    mode: 0644

# 4. 解压源码包
- name: 解压 Nginx 源码包
  unarchive:
    src: "/root/nginx-{{ nginx_version }}.tar.gz"
    dest: "/root/"
    remote_src: yes
    creates: "/root/nginx-{{ nginx_version }}"  # 已解压则跳过

# 5. 编译安装 Nginx(已安装则跳过,实现幂等)
- name: 编译安装 Nginx
  shell: |
    ./configure --prefix={{ nginx_install_path }} \
    --user={{ nginx_user }} --group={{ nginx_user }} \
    --with-http_ssl_module --with-http_stub_status_module && make && make install
  args:
    chdir: "/root/nginx-{{ nginx_version }}"
    creates: "{{ nginx_install_path }}/sbin/nginx"  # 已存在则不执行编译

# 6. 渲染 Nginx 主配置文件(模板方式,替代 sed 改行号)
- name: 生成 Nginx 主配置文件
  template:
    src: nginx.conf.j2
    dest: "{{ nginx_install_path }}/conf/nginx.conf"
    mode: 0644
  notify: 重载 Nginx  # 配置变更才触发重载

# 7. 渲染 PHP-FPM 配置文件
- name: 配置 PHP-FPM 监听端口
  template:
    src: www.conf.j2
    dest: /etc/php-fpm.d/www.conf
    mode: 0644
  notify: 重启 PHP-FPM

# ========== 性能优化:安装并配置PHP OPcache ==========
- name: 安装 PHP OPcache 扩展
  yum:
    name: php-opcache
    state: present

- name: 配置 PHP OPcache 优化参数
  lineinfile:
    path: /etc/php.ini
    line: |
      [opcache]
      opcache.enable = {{ php_opcache_enable }}
      opcache.enable_cli = {{ php_opcache_enable_cli }}
      opcache.memory_consumption = {{ php_opcache_memory_consumption }}
      opcache.max_accelerated_files = {{ php_opcache_max_accelerated_files }}
      opcache.revalidate_freq = {{ php_opcache_revalidate_freq }}
      opcache.fast_shutdown = {{ php_opcache_fast_shutdown }}
      opcache.save_comments = {{ php_opcache_save_comments }}
    regexp: '^\[opcache\]'  # 匹配[opcache]开头行,避免重复添加
    create: yes  # 若php.ini无opcache段则创建
  notify: 重启 PHP-FPM

# 8. 启动 MariaDB 服务并设置开机自启
- name: 启动 MariaDB 服务
  service:
    name: "{{ mariadb_service }}"
    state: started
    enabled: yes

# 9. 启动 PHP-FPM 服务并设置开机自启
- name: 启动 PHP-FPM 服务
  service:
    name: php-fpm
    state: started
    enabled: yes

# 10. 设置 Nginx 开机自启(写入 rc.local,兼容原有习惯)
- name: 设置 Nginx 开机自启
  lineinfile:
    path: /etc/rc.d/rc.local
    line: "{{ nginx_install_path }}/sbin/nginx"
    state: present
- name: 赋予 rc.local 执行权限
  file:
    path: /etc/rc.d/rc.local
    mode: 0755

# 11. 启动 Nginx 服务(幂等:已启动则不重复操作)
- name: 启动 Nginx 服务
  shell: "{{ nginx_install_path }}/sbin/nginx"
  args:
    creates: /var/run/nginx.pid
5. handlers/main.yml(完整内容)
yaml 复制代码
---
# handlers file for roles/lnmp
- name: 重载 Nginx
  shell: "{{ nginx_install_path }}/sbin/nginx -s reload"

- name: 重启 PHP-FPM
  service:
    name: php-fpm
    state: restarted

- name: 重启 MariaDB
  service:
    name: "{{ mariadb_service }}"
    state: restarted

三、验证优化生效的方法

  1. Nginx 优化验证
bash 复制代码
# 查看Nginx优化参数是否加载
ansible webserver -m shell -a "/usr/local/nginx/sbin/nginx -T | grep -E 'worker_processes|worker_connections|epoll|multi_accept'"
# 验证静态资源缓存
curl -I http://<Web节点IP>/wp-includes/css/dashicons.min.css | grep -E 'Expires|Cache-Control'
  1. PHP-FPM 优化验证
bash 复制代码
# 查看PHP-FPM进程数配置
ansible webserver -m shell -a "grep -E 'pm.max_children|pm.start_servers' /etc/php-fpm.d/www.conf"
# 查看PHP-FPM实际进程数
ansible webserver -m shell -a "ps aux | grep php-fpm | wc -l"
  1. OPcache 优化验证
bash 复制代码
# 创建phpinfo文件
ansible webserver -m copy -a "content='<?php phpinfo(); ?>' dest=/usr/local/nginx/html/opcache.php mode=0644"
# 访问验证OPcache状态
curl http://<Web节点IP>/opcache.php | grep -i opcache | head -20