CentOS Stream 9入门学习教程,从入门到精通,CentOS Stream 9 使用 LNMP 架构部署网站 —— 语法详解与实战案例(12)

CentOS Stream 9 使用 LNMP 架构部署网站 ------ 语法详解与实战案例


一、了解 LNMP 架构


1.1 LNMP 是什么?

LNMP 是一套用于部署动态网站的开源 Web 服务架构组合,由以下组件组成:

组件 作用
Linux 操作系统(CentOS Stream 9)
Nginx 高性能 Web 服务器 / 反向代理服务器
MariaDB 关系型数据库(MySQL 的开源分支)
PHP 服务端脚本语言,用于动态网页处理

✅ 优势:

  • 高并发、低内存占用(Nginx)
  • 开源免费、社区活跃
  • 支持 WordPress、Drupal、Laravel 等主流 CMS 和框架

1.2 Nginx 是什么?

Nginx 是轻量级、高性能的 HTTP 服务器和反向代理服务器,支持高并发连接。

  • 默认端口:80(HTTP)、443(HTTPS)
  • 配置文件路径:/etc/nginx/nginx.conf
  • 站点配置目录:/etc/nginx/conf.d//etc/nginx/sites-enabled/
  • 服务管理命令:systemctl start|stop|restart|status nginx

1.3 MySQL、MariaDB 是什么?

MariaDB 是 MySQL 的一个开源分支,完全兼容 MySQL 协议和语法,由原 MySQL 作者维护。

  • 默认端口:3306
  • 配置文件:/etc/my.cnf/etc/mysql/mariadb.conf.d/
  • 管理工具:mysql 命令行客户端、phpMyAdmin(可选)

1.4 PHP 是什么?

PHP(Hypertext Preprocessor)是一种广泛用于 Web 开发的服务器端脚本语言。

  • 通过 PHP-FPM(FastCGI Process Manager)与 Nginx 通信
  • 配置文件:/etc/php.ini/etc/php-fpm.d/www.conf
  • 常用扩展:php-mysqlndphp-gdphp-mbstringphp-xmlphp-curl

1.5 LNMP 架构工作原理

复制代码
用户浏览器
    ↓ HTTP 请求
Nginx(Web服务器)
    ↓ .php 请求 → 通过 FastCGI 协议
PHP-FPM(处理PHP脚本)
    ↓ 数据库查询
MariaDB(存储数据)
    ↑ 返回结果
PHP-FPM → Nginx → 浏览器

✅ 流程说明:

  1. Nginx 接收用户请求
  2. 若请求的是 .php 文件,Nginx 通过 fastcgi_pass 转发给 PHP-FPM
  3. PHP-FPM 解析执行 PHP 脚本,如需数据库操作,则连接 MariaDB
  4. 最终结果返回给 Nginx,再返回给用户浏览器

1.6 LNMP 架构部署方式

三种主流部署方式:

方式 说明 适用场景
YUM/DNF 安装 使用系统包管理器安装,简单稳定 生产环境推荐
源码编译安装 自定义模块、优化性能 高级用户、定制需求
一键安装脚本 LNMP.org 提供的脚本 快速部署、新手友好

✅ 本文采用 DNF 安装方式(CentOS Stream 9 默认包管理器)


二、安装与配置 Nginx 服务器


2.1 安装 Nginx 软件包

bash 复制代码
# 更新系统
sudo dnf update -y

# 安装 EPEL 仓库(提供额外软件包)
sudo dnf install epel-release -y

# 安装 Nginx
sudo dnf install nginx -y

# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

# 防火墙放行 HTTP/HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

# 验证安装
curl http://localhost
# 应看到 "Welcome to nginx!" 页面

✅ 案例:检查 Nginx 状态和版本

bash 复制代码
# 查看服务状态
systemctl status nginx

# 查看版本信息
nginx -v
# 输出示例:nginx version: nginx/1.20.1

# 测试配置文件语法
sudo nginx -t
# 成功输出:nginx: configuration file /etc/nginx/nginx.conf test is successful

2.2 熟悉 Nginx 的配置文件

主配置文件:/etc/nginx/nginx.conf

nginx 复制代码
# 全局块
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# 事件块
events {
    worker_connections 1024;
}

# HTTP 块
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  65;
    types_hash_max_size 2048;

    include /etc/nginx/conf.d/*.conf;  # 加载站点配置
}

✅ 关键配置说明:

配置项 说明
user nginx; Nginx 运行用户
worker_processes auto; 自动设置工作进程数
include /etc/nginx/conf.d/*.conf; 包含站点配置文件

✅ 站点配置文件模板(/etc/nginx/conf.d/your_site.conf

nginx 复制代码
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    root /var/www/html;
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    # PHP 支持(后续章节配置)
    location ~ \.php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 拒绝访问隐藏文件
    location ~ /\. {
        deny all;
    }
}

✅ 案例:创建测试站点并验证

bash 复制代码
# 创建网站根目录
sudo mkdir -p /var/www/html/test

# 创建测试页面
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/test/info.php
echo "Hello from Nginx!" | sudo tee /var/www/html/test/index.html

# 创建站点配置
sudo tee /etc/nginx/conf.d/test.conf << 'EOF'
server {
    listen 80;
    server_name localhost;
    root /var/www/html/test;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
EOF

# 重载 Nginx
sudo nginx -t && sudo systemctl reload nginx

# 测试访问
curl http://localhost/index.html
curl http://localhost/info.php   # 需要 PHP 支持(后续安装)

三、安装 MariaDB 数据库


3.1 安装并初始设置 MariaDB

bash 复制代码
# 安装 MariaDB 服务器和客户端
sudo dnf install mariadb-server mariadb -y

# 启动并设置开机自启
sudo systemctl start mariadb
sudo systemctl enable mariadb

# 运行安全初始化脚本(设置 root 密码、移除匿名用户等)
sudo mysql_secure_installation

🎯 初始化过程交互示例:

复制代码
Enter current password for root (enter for none): [直接回车]
Set root password? [Y/n] Y
New password: your_strong_password
Re-enter new password: your_strong_password
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

3.2 初始化并登录 MariaDB

bash 复制代码
# 登录数据库(使用密码)
mysql -u root -p

# 或使用 socket 登录(无需密码,需 root 权限)
sudo mysql

✅ 案例:登录并查看数据库

bash 复制代码
sudo mysql -e "SHOW DATABASES;"
# 输出:
# +--------------------+
# | Database           |
# +--------------------+
# | information_schema |
# | mysql              |
# | performance_schema |
# +--------------------+

3.3 管理 MariaDB

常用 SQL 命令:

sql 复制代码
-- 创建数据库
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建用户并授权
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;

-- 查看用户权限
SHOW GRANTS FOR 'wpuser'@'localhost';

-- 删除数据库(谨慎!)
DROP DATABASE wordpress;

-- 退出
EXIT;

✅ 案例:自动化创建 WordPress 数据库和用户

bash 复制代码
#!/bin/bash
# 文件名:create_wp_db.sh

DB_NAME="wordpress"
DB_USER="wpuser"
DB_PASS="StrongPassword123!"

# 检查是否已存在
if sudo mysql -e "SHOW DATABASES LIKE '$DB_NAME';" | grep -q "$DB_NAME"; then
    echo "❌ 数据库 $DB_NAME 已存在!"
    exit 1
fi

# 创建数据库和用户
sudo mysql << EOF
CREATE DATABASE $DB_NAME DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';
GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
EOF

if [ $? -eq 0 ]; then
    echo "✅ 数据库 $DB_NAME 和用户 $DB_USER 创建成功!"
else
    echo "❌ 创建失败!"
    exit 1
fi

💡 使用:

bash 复制代码
chmod +x create_wp_db.sh
sudo ./create_wp_db.sh

四、安装配置 PHP 环境


4.1 安装 PHP 环境

CentOS Stream 9 默认 PHP 版本较低,建议启用 Remi 仓库 安装新版 PHP(如 8.1/8.2)。

bash 复制代码
# 安装 Remi 仓库
sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm -y

# 启用 PHP 8.2 模块
sudo dnf module reset php -y
sudo dnf module enable php:remi-8.2 -y

# 安装 PHP 及常用扩展
sudo dnf install php php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-curl php-zip -y

# 启动 PHP-FPM 并设置开机自启
sudo systemctl start php-fpm
sudo systemctl enable php-fpm

# 验证安装
php -v
# 输出示例:PHP 8.2.12 (cli) ...

4.2 配置 PHP-FPM 服务

配置文件:/etc/php-fpm.d/www.conf

ini 复制代码
; 运行用户和组
user = nginx
group = nginx

; 监听方式(推荐 socket,性能更好)
listen = /run/php-fpm/www.sock

; 权限设置
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

; 进程管理
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

✅ 修改后重载服务:

bash 复制代码
# 检查配置语法
sudo php-fpm -t

# 重载服务
sudo systemctl reload php-fpm

# 检查 socket 文件是否存在
ls -l /run/php-fpm/www.sock
# 应显示:srw-rw----. 1 nginx nginx ...

4.3 配置 Nginx 服务器对 PHP 程序的支持

在站点配置中添加 PHP 处理规则(前面已展示):

nginx 复制代码
location ~ \.php$ {
    fastcgi_pass unix:/run/php-fpm/www.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

✅ 完整测试配置(/etc/nginx/conf.d/php_test.conf

nginx 复制代码
server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

✅ 测试 PHP 是否正常工作:

bash 复制代码
# 创建测试文件
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

# 重载 Nginx
sudo nginx -t && sudo systemctl reload nginx

# 本地测试
curl -s http://localhost/info.php | grep "PHP Version"
# 应输出包含 PHP 版本的信息

# 浏览器访问:http://your_server_ip/info.php

五、部署基于 LNMP 的 WordPress 博客网站


5.1 安装 WordPress

bash 复制代码
# 进入网站根目录
cd /var/www/html

# 下载最新版 WordPress(中文版)
sudo curl -O https://cn.wordpress.org/latest-zh_CN.tar.gz

# 解压
sudo tar -xzf latest-zh_CN.tar.gz

# 移动文件到当前目录
sudo mv wordpress/* ./

# 删除临时文件
sudo rm -rf wordpress latest-zh_CN.tar.gz

# 设置权限(Nginx 用户可读写)
sudo chown -R nginx:nginx /var/www/html
sudo chmod -R 755 /var/www/html
sudo mkdir -p /var/www/html/wp-content/uploads
sudo chmod -R 775 /var/www/html/wp-content/uploads

5.2 为 WordPress 创建 MariaDB 数据库环境

使用前面创建的数据库和用户(wordpress / wpuser / StrongPassword123!
✅ 若未创建,运行:

bash 复制代码
sudo mysql -e "
CREATE DATABASE IF NOT EXISTS wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'wpuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
"

5.3 配置 WordPress

WordPress 会通过 Web 界面引导配置,但也可手动创建 wp-config.php

bash 复制代码
# 复制配置文件模板
sudo cp wp-config-sample.php wp-config.php

# 编辑配置文件
sudo nano wp-config.php

修改以下部分:

php 复制代码
<?php
define('DB_NAME', 'wordpress');     // 数据库名
define('DB_USER', 'wpuser');        // 数据库用户
define('DB_PASSWORD', 'StrongPassword123!'); // 密码
define('DB_HOST', 'localhost');     // 数据库主机

// 生成唯一密钥(从 https://api.wordpress.org/secret-key/1.1/salt/ 获取)
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

$table_prefix = 'wp_';  // 表前缀(可自定义提高安全性)

define('WP_DEBUG', false); // 生产环境关闭调试

if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');

require_once(ABSPATH . 'wp-settings.php');

✅ 自动生成密钥(命令行):

bash 复制代码
curl -s https://api.wordpress.org/secret-key/1.1/salt/
# 复制输出内容,替换 wp-config.php 中的对应部分

5.4 配置基于 IP 地址的 Nginx 虚拟主机

若无域名,可直接使用服务器 IP 访问。
创建站点配置文件:/etc/nginx/conf.d/wordpress.conf

nginx 复制代码
server {
    listen 80;
    server_name _;  # 匹配任意主机名(或替换为你的服务器IP)
    root /var/www/html;
    index index.php index.html index.htm;

    # 日志
    access_log /var/log/nginx/wordpress_access.log;
    error_log /var/log/nginx/wordpress_error.log;

    # WordPress 伪静态规则(固定链接支持)
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP 处理
    location ~ \.php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 静态文件缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # 禁止访问敏感文件
    location ~* /(?:uploads|files)/.*\.php$ {
        deny all;
    }

    location ~ /\.ht {
        deny all;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
}

✅ 重载 Nginx:

bash 复制代码
sudo nginx -t && sudo systemctl reload nginx

5.5 通过 Web 界面完成 WordPress 配置

浏览器访问:http://your_server_ip
将看到 WordPress 安装向导:

  1. 选择语言 → 简体中文
  2. 填写站点信息:
    • 站点标题:我的博客
    • 用户名:admin(建议修改)
    • 密码:自定义强密码
    • 邮箱:your@email.com
  3. 点击"安装 WordPress"
  4. 安装成功 → 登录后台:http://your_server_ip/wp-admin

✅ 安全建议:

  • 修改默认用户名(不要用 admin)
  • 安装安全插件(如 Wordfence)
  • 定期备份数据库和文件
  • 启用 HTTPS(见综合案例)

六、综合案例


🎯 综合案例 1:一键部署 WordPress 脚本(全自动)

功能:自动安装 LNMP + WordPress + 创建数据库 + 配置虚拟主机

bash 复制代码
#!/bin/bash
# 文件名:deploy_wordpress.sh
# 用法:sudo ./deploy_wordpress.sh

# ===== 配置参数 =====
DOMAIN="_"  # 使用 IP 访问,或替换为你的域名
WP_DB="wordpress"
WP_USER="wpuser"
WP_PASS="StrongPassword123!"
WP_TITLE="我的博客"
WP_ADMIN="admin"
WP_ADMIN_PASS="AdminPass123!"
WP_ADMIN_EMAIL="admin@example.com"
WP_PATH="/var/www/html"

# ===== 颜色定义 =====
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

log() {
    echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] $1${NC}"
}

error() {
    echo -e "${RED}[ERROR] $1${NC}" >&2
    exit 1
}

# ===== 1. 安装 Nginx =====
log "正在安装 Nginx..."
sudo dnf install epel-release -y
sudo dnf install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload

# ===== 2. 安装 MariaDB =====
log "正在安装 MariaDB..."
sudo dnf install mariadb-server -y
sudo systemctl start mariadb
sudo systemctl enable mariadb

# 安全初始化(非交互式)
log "正在初始化 MariaDB..."
sudo mysql_secure_installation <<EOF

y
$WP_ADMIN_PASS
$WP_ADMIN_PASS
y
y
y
y
EOF

# ===== 3. 安装 PHP 8.2 =====
log "正在安装 PHP 8.2..."
sudo dnf install dnf-utils -y
sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
sudo dnf module reset php -y
sudo dnf module enable php:remi-8.2 -y
sudo dnf install php php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-curl php-zip -y
sudo systemctl start php-fpm
sudo systemctl enable php-fpm

# 修改 PHP-FPM 用户为 nginx
sudo sed -i 's/user = apache/user = nginx/' /etc/php-fpm.d/www.conf
sudo sed -i 's/group = apache/group = nginx/' /etc/php-fpm.d/www.conf
sudo systemctl reload php-fpm

# ===== 4. 创建数据库 =====
log "正在创建 WordPress 数据库..."
sudo mysql -u root -p"$WP_ADMIN_PASS" <<EOF
CREATE DATABASE IF NOT EXISTS $WP_DB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '$WP_USER'@'localhost' IDENTIFIED BY '$WP_PASS';
GRANT ALL PRIVILEGES ON $WP_DB.* TO '$WP_USER'@'localhost';
FLUSH PRIVILEGES;
EOF

# ===== 5. 下载并配置 WordPress =====
log "正在下载 WordPress..."
cd /tmp
curl -O https://cn.wordpress.org/latest-zh_CN.tar.gz
tar -xzf latest-zh_CN.tar.gz

log "正在部署 WordPress 文件..."
sudo rm -rf $WP_PATH/*
sudo mv wordpress/* $WP_PATH/
sudo chown -R nginx:nginx $WP_PATH
sudo chmod -R 755 $WP_PATH
sudo mkdir -p $WP_PATH/wp-content/uploads
sudo chmod -R 775 $WP_PATH/wp-content/uploads

# 生成 wp-config.php
log "正在生成 wp-config.php..."
cd $WP_PATH
sudo cp wp-config-sample.php wp-config.php

# 获取安全密钥
SECRET_KEYS=$(curl -s https://api.wordpress.org/secret-key/1.1/salt/)

# 替换配置
sudo sed -i "s/database_name_here/$WP_DB/" wp-config.php
sudo sed -i "s/username_here/$WP_USER/" wp-config.php
sudo sed -i "s/password_here/$WP_PASS/" wp-config.php
sudo sed -i "s/localhost/localhost/" wp-config.php

# 插入安全密钥(删除原有8行,插入新密钥)
sudo sed -i "/AUTH_KEY/,/NONCE_SALT/d" wp-config.php
LINE_NUM=$(grep -n "table_prefix" wp-config.php | cut -d: -f1)
sudo sed -i "${LINE_NUM}i $SECRET_KEYS" wp-config.php

# ===== 6. 配置 Nginx 虚拟主机 =====
log "正在配置 Nginx 虚拟主机..."
sudo tee /etc/nginx/conf.d/wordpress.conf > /dev/null <<EOF
server {
    listen 80;
    server_name $DOMAIN;
    root $WP_PATH;
    index index.php index.html index.htm;

    access_log /var/log/nginx/wordpress_access.log;
    error_log /var/log/nginx/wordpress_error.log;

    location / {
        try_files \$uri \$uri/ /index.php?\$args;
    }

    location ~ \\.php\$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~* \\.(js|css|png|jpg|jpeg|gif|ico|svg)\$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    location ~* /(?:uploads|files)/.*\\.php\$ {
        deny all;
    }

    location ~ /\\.ht {
        deny all;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
}
EOF

# 测试并重载 Nginx
sudo nginx -t && sudo systemctl reload nginx

# ===== 7. 通过 WP-CLI 完成安装(可选)=====
# 如果安装了 wp-cli,可自动完成安装
if command -v wp &> /dev/null; then
    log "正在通过 WP-CLI 完成安装..."
    cd $WP_PATH
    sudo -u nginx wp core install \
        --url="http://$DOMAIN" \
        --title="$WP_TITLE" \
        --admin_user="$WP_ADMIN" \
        --admin_password="$WP_ADMIN_PASS" \
        --admin_email="$WP_ADMIN_EMAIL" \
        --skip-email
fi

log "🎉 WordPress 部署完成!"
echo -e "${YELLOW}请访问:http://$(hostname -I | awk '{print $1}')${NC}"
echo -e "${YELLOW}后台:http://$(hostname -I | awk '{print $1}')/wp-admin${NC}"
echo -e "${YELLOW}用户名:$WP_ADMIN${NC}"
echo -e "${YELLOW}密码:$WP_ADMIN_PASS${NC}"

💡 使用方法:

bash 复制代码
chmod +x deploy_wordpress.sh
sudo ./deploy_wordpress.sh

⚠️ 注意:

  • 此脚本为全自动部署,适合测试环境
  • 生产环境请修改密码、域名、路径等参数
  • 建议部署后立即修改默认用户名和密码

🎯 综合案例 2:为 WordPress 配置 HTTPS(Let's Encrypt 免费证书)

使用 Certbot 自动申请和配置 SSL 证书

bash 复制代码
# 安装 Certbot 和 Nginx 插件
sudo dnf install certbot python3-certbot-nginx -y

# 申请证书(替换 yourdomain.com 为你的域名)
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

# 自动续期(Certbot 已自动配置 systemd 定时任务)
sudo systemctl list-timers | grep certbot

# 手动测试续期
sudo certbot renew --dry-run

# 修改 WordPress 配置强制 HTTPS
# 在 wp-config.php 中添加:
# define('FORCE_SSL_ADMIN', true);
# define('WP_HOME','https://yourdomain.com');
# define('WP_SITEURL','https://yourdomain.com');

✅ Nginx 配置将自动更新,包含 301 重定向和 SSL 设置。


🎯 综合案例 3:WordPress 安全加固脚本

bash 复制代码
#!/bin/bash
# 文件名:harden_wordpress.sh

WP_PATH="/var/www/html"

log() {
    echo -e "\033[32m[INFO] $1\033[0m"
}

# 1. 修改文件权限
log "设置安全文件权限..."
sudo find $WP_PATH -type f -exec chmod 644 {} \;
sudo find $WP_PATH -type d -exec chmod 755 {} \;
sudo chmod 600 $WP_PATH/wp-config.php

# 2. 禁用文件编辑
log "禁用 WordPress 文件编辑器..."
sudo tee -a $WP_PATH/wp-config.php > /dev/null << 'EOF'

/* 禁用主题和插件编辑器 */
define('DISALLOW_FILE_EDIT', true);
EOF

# 3. 隐藏 WordPress 版本
log "隐藏 WordPress 版本信息..."
sudo tee -a $WP_PATH/wp-config.php > /dev/null << 'EOF'

/* 隐藏版本号 */
remove_action('wp_head', 'wp_generator');
EOF

# 4. 限制登录尝试(需安装插件,此处为提示)
log "建议安装插件:Limit Login Attempts Reloaded"

# 5. 备份数据库(示例)
log "创建数据库备份..."
DB_NAME="wordpress"
BACKUP_FILE="/backup/wp_$(date +%Y%m%d_%H%M%S).sql"
sudo mysqldump -u root -p"$WP_ADMIN_PASS" $DB_NAME > $BACKUP_FILE
sudo gzip $BACKUP_FILE
log "备份完成:$BACKUP_FILE.gz"

echo "✅ WordPress 安全加固完成!"

✅ LNMP 部署最佳实践

  1. 最小权限原则 :Nginx、PHP-FPM 使用 nginx 用户,非 root
  2. 文件权限wp-config.php 设置为 600,其他文件 644,目录 755
  3. 定期备份:数据库 + 网站文件(可使用脚本自动化)
  4. 启用 HTTPS:使用 Let's Encrypt 免费证书
  5. 更新维护:定期更新系统、PHP、WordPress、插件
  6. 监控日志/var/log/nginx//var/log/php-fpm//var/log/mariadb/
  7. 防火墙:仅开放 80、443、22 端口
  8. 禁用危险函数 :在 php.ini 中禁用 execsystemshell_exec

📚 附录:常用命令速查表

功能 命令
启动 Nginx sudo systemctl start nginx
重载 Nginx sudo nginx -t && sudo systemctl reload nginx
启动 MariaDB sudo systemctl start mariadb
登录数据库 mysql -u root -p
启动 PHP-FPM sudo systemctl start php-fpm
查看 PHP 版本 php -v
查看监听端口 `ss -tuln
查看进程 `ps aux
查看日志 tail -f /var/log/nginx/access.log

这份文档覆盖了 CentOS Stream 9 上 LNMP 架构部署的全部核心知识点 + 语法细节 + 实用案例 + 综合项目,所有代码均含详细注释,可直接用于教学、自学或生产环境参考。

相关推荐
范纹杉想快点毕业1 小时前
AI助教初学者问答FPGA芯片基础概念100道问题,适用入门嵌入式软件初级工程师,筑牢基础,技术积累
fpga开发·架构
崇山峻岭之间1 小时前
C++ Prime Plus 学习笔记037
c++·笔记·学习
π同学1 小时前
遗传算法学习一之求函数的最值
学习
ASKED_20191 小时前
不同 QPS 场景下的服务部署架构指南(实战经验总结)
http·架构
Chasing__Dreams1 小时前
kafka--基础知识点--3.1--生产者架构
分布式·架构·kafka
灰灰勇闯IT1 小时前
RN性能优化实战:从卡顿到丝滑的进阶之路
学习·性能优化
CS Beginner1 小时前
【单片机】orange prime pi开发板与单片机的区别
笔记·嵌入式硬件·学习
im_AMBER9 小时前
Leetcode 74 K 和数对的最大数目
数据结构·笔记·学习·算法·leetcode
DBA小马哥9 小时前
Oracle迁移实战:如何轻松跨越异构数据库的学习与技术壁垒
数据库·学习·oracle·信创·国产化平替