本文是另一篇博客:# Linux实战笔记:WordPress文创项目部署全流程记录的内容补充,将第一阶段的四项性能优化融入一键部署lnmp的ROLE之中,方便后续批量部署。
一、LNMP Role 融入性能优化的详细修改步骤
本次配置全程在zop控制节点主机进行操作。
步骤1:定位Role目录,确认基础结构
确保Role目录结构完整,本次修改涉及 vars/main.yml、templates/nginx.conf.j2、templates/www.conf.j2、tasks/main.yml 四个核心文件,先进入Role目录:
bash
[root@zop ansible]# cd roles/lnmp/
步骤2:修改变量文件(vars/main.yml)------ 新增性能优化相关变量
为统一管理优化参数(后续调整无需改模板/任务),在 vars/main.yml 中新增Nginx、PHP-FPM、OPcache的优化变量:
- 编辑vars/main.yml:
bash
[root@zop lnmp]# vim vars/main.yml
- 新增以下变量(追加到原有内容后):
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进程/连接数、静态资源缓存优化
- 编辑nginx.conf.j2模板:
bash
[root@zop lnmp]# vim templates/nginx.conf.j2
- 替换/新增核心优化内容:
- 全局块:引用变量设置
worker_processes; - events块:新增
epoll事件模型、multi_accept多连接接收; - server块:新增静态资源缓存的location规则。
- 全局块:引用变量设置
步骤4:修改PHP-FPM配置模板(templates/www.conf.j2)------ 融入PHP-FPM进程数优化
- 编辑www.conf.j2模板:
bash
[root@zop lnmp]# vim templates/www.conf.j2
- 将原有硬编码的PM进程数配置替换为变量引用,适配不同服务器资源场景。
步骤5:修改任务文件(tasks/main.yml)------ 新增OPcache安装与配置任务
- 编辑tasks/main.yml:
bash
[root@zop lnmp]# vim tasks/main.yml
- 在"启动 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
三、验证优化生效的方法
- 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'
- 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"
- 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