案例分析基于openEuler系统部署WordPress个人博客网站
1. 规划节点
节点规划,见表1。
表1 节点规划
| IP | 主机名 | 节点 |
|---|---|---|
| 192.168.100.3 | wordpress | nginx、php、mysql、wordpress |
2. LNMP简介
LNMP 是由 Linux 操作系统、Nginx Web 服务器、MySQL 数据库 和 PHP 脚本语言 组成的 高性能动态网站部署方案,广泛应用于现代 Web 开发领域。它通过各组件的协同工作,实现了对静态资源、动态逻辑和数据存储的高效管理,是部署 WordPress、电商系统、API 服务等动态网站的核心技术栈之一。LNMP 以开源免费、轻量灵活 和 高并发支持 为核心优势,解决了传统 LAMP(Apache + MySQL + PHP)架构在性能和可扩展性上的局限,成为云原生时代动态网站开发的标准解决方案。
- Linux 操作系统
- 提供稳定运行环境,管理硬件资源和系统服务。
- 支持主流发行版(如 Ubuntu、CentOS),适配性强。
- Nginx Web 服务器
- 高性能反向代理与负载均衡,优化静态资源(HTML/CSS/JS/图片)的响应速度。
- 通过 FastCGI 协议与 PHP-FPM 协作,高效处理动态请求。
- MySQL 数据库
- 支持结构化数据存储,提供事务处理与 ACID 特性,保障数据一致性。
- 适配 PHP 的 mysqli/PDO 扩展,实现灵活的数据交互。
- PHP 动态脚本语言
- 解析
.php文件,生成动态 HTML 内容,执行业务逻辑(如用户认证、表单处理)。 - 与 MySQL 协同工作,构建动态网站的核心功能。
- 解析
3. LNMP 工作原理与协作流程
当用户通过浏览器访问网站时,请求将按以下标准化流程高效流转:
(1) Nginx 接收请求
-
用户输入 URL(如
http://example.com/index.php) -
Nginx 根据 nginx.conf
配置智能判断请求类型:
- 静态资源(
.html,.css,.js,.jpg):直接返回文件 - 动态资源(
.php):转发至 PHP 处理器(PHP-FPM)
- 静态资源(
(2) PHP-FPM 解析动态请求
- Nginx 通过 FastCGI 协议 将
.php请求精准转发至 PHP-FPM - PHP-FPM 启动子进程执行 PHP 脚本,完成以下关键步骤:
- 加载 PHP 代码(如 WordPress 的
wp-blog-header.php) - 连接 MySQL 数据库,执行 SQL 查询(如获取文章列表)
- 将查询结果嵌入 HTML 模板,生成最终页面
- 加载 PHP 代码(如 WordPress 的
(3)MySQL 提供数据支持
- PHP 脚本通过 wp-config.php 中的数据库参数连接 MySQL:
DB_NAME:数据库名DB_USER:数据库用户名DB_PASSWORD:数据库密码
- 执行 SQL 语句(如
SELECT * FROM wp_posts) - 将查询结果安全返回给 PHP 用于动态内容生成
(4)Nginx 返回响应
- PHP-FPM 将生成的 HTML 完整返回给 Nginx
- Nginx 通过 HTTP 协议将响应高效传输至用户浏览器
- 全流程完成:用户浏览器渲染最终页面
关键特性:
该流程通过 Nginx 静态资源直连 + FastCGI 动态请求转发 实现最优性能,避免 Apache 的进程模型开销,单服务器可支撑 10,000+ 并发连接(实测数据)。
4. 基础准备
修改主机名
[root@localhost ~]# hostnamectl set-hostname wordpress
[root@localhost ~]# bashWelcome to 6.6.0-28.0.0.34.oe2403.x86_64System information as of time: Wed Dec 3 09:05:12 PM CST 2025System load: 0.01
Memory used: 4.4%
Swap used: 0%
Usage On: 3%
IP address: 192.168.100.4
Users online: 1[root@wordpress ~]#
设置防火墙和selinux开机不自启
[root@wordpress ~]# systemctl disable firewalld --now && setenforce 0
永久关闭selinux
[root@wordpress ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
配置华为云YUM源,openEuler常用repo源链接
[root@wordpress ~]# cp -rvf /etc/yum.repos.d/openEuler.repo /tmp/
[root@wordpress ~]# sed -i \-e '/^baseurl/ s#http://repo.openeuler.org#https://mirrors.huaweicloud.com/openeuler#g' \-e '/^gpgkey/ s#http://repo.openeuler.org#https://mirrors.huaweicloud.com/openeuler#g' \/etc/yum.repos.d/openEuler.repo
清理YUM/DNF的所有缓存文件(包括元数据、软件包缓存等)并快速生成YUM缓存
[root@wordpress ~]# yum clean all
[root@wordpress ~]# yum makecache
安装工具
[root@wordpress ~]# yum install -y vim tar net-tools lrzsz lsof bash-com*
[root@wordpress ~]# source /etc/profile
案例实施
1. 部署 Nginx 环境
(1)安装nginx
[root@wordpress ~]# yum install -y nginx
(2)启动nginx
[root@wordpress ~]# systemctl enable nginx --now
浏览器测试访问nginx首页

2. 部署 MySQL 环境
(1)安装mysql
[root@wordpress ~]# yum install -y mysql-server
(2)设置mysql开机自启
[root@wordpress ~]# systemctl enable mysqld --now
(3)创建wordpress数据库
设置mysql的root密码
[root@wordpress ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.44 Source distributionCopyright (c) 2000, 2025, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> alter user 'root'@'localhost' identified by '000000';
Query OK, 0 rows affected (0.03 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
直接登录失败需要使用密码登录
[root@wordpress ~]# mysql -uroot -p000000
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.44 Source distributionCopyright (c) 2000, 2025, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
创建wordpress用户和wordpress数据库
mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)mysql> create user 'wordpress'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.02 sec)mysql> grant all privileges on wordpress.* to 'wordpress'@'localhost';
Query OK, 0 rows affected (0.01 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)mysql> show grants for 'wordpress'@'localhost';
+------------------------------------------------------------------+
| Grants for wordpress@localhost |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `wordpress`@`localhost` |
| GRANT ALL PRIVILEGES ON `wordpress`.* TO `wordpress`@`localhost` |
+------------------------------------------------------------------+
2 rows in set (0.00 sec)
3. 部署 PHP 环境
(1)安装php
[root@wordpress ~]# yum install -y php php-fpm php-mysqlnd php-gd php-common php-cli php-mbstring php-xml php-opcache
# PHP核心解释器:解析执行PHP代码,PHP运行的基础
# PHP-FPM进程管理器:接收Nginx请求并管理PHP进程,实现PHP与Nginx协同
# MySQL原生驱动:高效连接MySQL/MariaDB数据库,支持数据操作
# GD图形扩展:处理图片生成、裁剪等,满足图片功能需求
# PHP通用组件库:提供基础配置和公共函数,支撑其他扩展
# PHP命令行工具:终端执行PHP脚本,用于调试和命令行操作
# 多字节字符串扩展:处理中文等多字节字符,解决编码问题
# XML解析扩展:支持XML数据处理,适配依赖XML的功能
# Opcode缓存扩展:缓存预编译代码,提升PHP运行性能
(2)设置php开机自启
[root@wordpress ~]# systemctl enable php-fpm --now
4. 配置 Nginx 解析 PHP
(1)配置 nginx 文件
[root@wordpress ~]# vim /etc/nginx/conf.d/wordpress.conf
# WordPress站点专属配置(适配LNMP架构,基于Unix Socket连接PHP-FPM)
server {# 监听80端口(HTTP默认端口),接收所有网卡的HTTP请求listen 80;# 设置网站根目录:Nginx查找网页文件的基础路径root /usr/share/nginx/html;# 设置服务器匹配域名:本地测试用localhost,生产环境可改为实际域名server_name localhost;# 字符集配置(如需启用可去掉#,指定网页字符编码)#charset koi8-r;# 访问日志路径(如需记录站点访问日志可去掉#)#access_log /var/log/nginx/log/wordpress.access.log main;# ========== 超时与上传优化配置 ==========# 允许客户端最大上传文件大小(解决WordPress上传主题/插件过大问题)client_max_body_size 64M;# FastCGI读取超时时间(延长PHP脚本执行时长,适配长任务)fastcgi_read_timeout 300;# FastCGI发送超时时间(Nginx向PHP-FPM传输请求的超时阈值)fastcgi_send_timeout 300;# 客户端请求体读取超时时间(防止慢速客户端占用连接)client_body_timeout 300;# 客户端请求头读取超时时间(提升连接复用效率)client_header_timeout 300;# ========== 根路径请求处理 ==========location / {# 定义默认首页优先级:优先执行PHP脚本,再加载静态页面index index.php index.html index.htm;# 支持WordPress固定链接(伪静态),若无需求可注释try_files $uri $uri/ /index.php?$args;}# ========== 错误页面配置 ==========# 自定义404页面(如需启用可去掉#,并创建对应文件)#error_page 404 /404.html;# 配置5xx服务器错误跳转页面error_page 500 502 503 504 /50x.html;# 精确匹配50x错误页面请求location = /50x.html {# 错误页面文件所在目录(与网站根目录一致)root /usr/share/nginx/html;}# ========== PHP脚本解析配置 ==========# 正则匹配所有.php结尾的请求(~区分大小写,适配PHP文件)location ~ .php$ {# 转发到PHP-FPM的Unix Socket(通过upstream php-fpm定义)fastcgi_pass php-fpm;# 设置PHP默认索引文件fastcgi_index index.php;# 传递PHP脚本真实路径给PHP-FPM(核心参数,避免文件找不到)fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;# 引入FastCGI通用参数(包含请求方法、HTTP头信息等)include fastcgi_params;}# ========== 静态资源优化(可选) ==========# 对图片、CSS、JS等静态文件设置缓存,减轻服务器压力location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d; # 缓存有效期30天add_header Cache-Control "public, max-age=2592000";}
}
(2)重新加载 nginx 配置
检查nginx配置文件语法是否正确(包含主配置及所有子配置文件),提前发现语法错误避免服务异常
[root@wordpress ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx配置热加载(平滑重载):不中断现有服务的情况下,使新配置生效(旧连接不中断,新请求用新配置)
[root@wordpress ~]# nginx -s reload
(3)测试 nginx 解析 php
[root@wordpress ~]# vim /usr/share/nginx/html/info.php
<?php
/*** 测试PHP解析是否正常* 访问方式:http://你的服务器IP/info.php*/
phpinfo(); // 输出PHP环境配置、模块信息等,确认PHP解析生效
?>
浏览器访问:http://你的服务器IP/info.php

(4)测试 mysql 数据库连接
[root@wordpress ~]# vim /usr/share/nginx/html/mysql_connection.php
<?php
/*** MySQL连接测试* 访问方式:http://你的服务器IP/mysql_connection.php*/
$db_host = 'localhost';
$db_user = 'wordpress';
$db_pass = '123456';
$db_name = 'wordpress';$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);if (!$conn) {$status = "❌ 连接失败";$message = "错误: " . mysqli_connect_error();
} else {$status = "✅ 连接成功";$message = "数据库: <strong>{$db_name}</strong><br>版本: " . mysqli_get_server_info($conn);mysqli_close($conn);
}
?><!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>MySQL连接测试结果</title><style>* { margin: 0; padding: 0; box-sizing: border-box; }body {font-family: 'Segoe UI', 'PingFang SC', sans-serif;background: linear-gradient(135deg, #1e3a8a 0%, #0c4a6e 100%);min-height: 100vh;display: flex;justify-content: center;align-items: center;color: white;text-align: center;padding: 20px;}.container {background: rgba(0, 0, 0, 0.6);border-radius: 25px;padding: 45px 55px;max-width: 90%;box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);backdrop-filter: blur(10px);border: 1px solid rgba(255, 255, 255, 0.1);}.status {font-size: 48px;margin-bottom: 25px;text-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);animation: pulse 2s infinite;}.message {font-size: 22px;line-height: 1.6;margin-bottom: 35px;font-weight: 500;color: #e0f2fe;}.version {font-size: 18px;color: #a5b4fc;margin-top: 20px;font-style: italic;}.note {margin-top: 40px;font-size: 15px;color: #cbd5e0;font-style: italic;border-top: 1px dashed rgba(255, 255, 255, 0.2);padding-top: 20px;}@keyframes pulse {0% { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.4); }70% { box-shadow: 0 0 0 15px rgba(255, 255, 255, 0); }100% { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); }}</style>
</head>
<body><div class="container"><div class="status"><?= $status ?></div><div class="message"><?= $message ?></div><div class="version">—— 由MySQL连接测试工具生成</div><div class="note">💡 提示:测试完成后请立即删除此文件!生产环境切勿暴露密码</div></div>
</body>
</html>
浏览器访问:http://你的服务器IP/mysql_connection.php

5. 部署 WordPress 至 Nginx 根目录
(1)下载源代码并解压
[root@wordpress ~]# wget https://cn.wordpress.org/wordpress-latest-zh_CN.zip
[root@wordpress ~]# unzip wordpress-latest-zh_CN.zip
(2)配置 wordpress
复制源码至nginx
[root@wordpress ~]# cp -rvf wordpress/* /usr/share/nginx/html/
将 WordPress 默认提供的配置示例文件复制并重命名为 WordPress 运行必需的正式配置文件
[root@wordpress ~]# cp /usr/share/nginx/html/wp-config-sample.php /usr/share/nginx/html/wp-config.php
编辑正式配置文件
[root@wordpress ~]# vim /usr/share/nginx/html/wp-config.php
...
// ** MySQL 设置 - 具体信息来自您的主机服务提供商 ** //
/** WordPress数据库的名称 */
define( 'DB_NAME', 'wordpress' ); // 填写之前创建的数据库名/** MySQL数据库用户名 */
define( 'DB_USER', 'wordpress' ); // 填写数据库用户名/** MySQL数据库密码 */
define( 'DB_PASSWORD', '你的数据库密码' ); // 填写用户对应的密码/** MySQL主机 */
define( 'DB_HOST', 'localhost' ); // 数据库主机(本地填localhost即可)/** 创建数据表时默认的文字编码 */
define( 'DB_CHARSET', 'utf8mb4' );/** 数据库整理类型。如不确定请勿更改 */
define( 'DB_COLLATE', '' );
...
设置权限
[root@wordpress ~]# chmod -R 777 /usr/share/nginx/html/
(3)浏览器安装 wordpress

(4)登录 wordpress
用户名/密码:admin/000000

(5)美化网站
使用提供的WordPress项目包和数据库文件上传到服务器并替换源文件
[root@wordpress ~]# tar -zxvf wordpress-dist.tar.gz
[root@wordpress ~]# cp -rvf dist/* /usr/share/nginx/html/
[root@wordpress ~]# chmod -R 777 /usr/share/nginx/html/
导入数据库文件
[root@wordpress ~]# mysql -uroot -p wordpress < dist/wordpress.sql
浏览器访问

