• Debian 13+ Caddy + PHP 8.4 + MariaDB 高性能 WordPress 部署指南

    文档版本: v1.1 (修正 PHP 8.4 及 Caddy 源)
    适用系统: Debian 13
    目标硬件: 2核 CPU / 2GB RAM
    关键特性: 全中文环境 / HTTP/3 (QUIC) 支持 / 针对低内存优化

    1. 系统初始化与环境准备

    在开始安装软件之前,我们需要更新系统并配置 Swap(虚拟内存),这对于 2GB 内存的服务器至关重要,能防止数据库因内存不足被系统强制关闭。

    1.1 更新系统组件并开启自动安全更新

    apt update && apt upgrade -y
    apt install -y curl wget unzip gnupg2 ca-certificates lsb-release apt-transport-https ufw unattended-upgrades
    sudo dpkg-reconfigure unattended-upgrades

    1.2 配置 Swap 分区 (2GB)

    创建并启用 Swap

    fallocate -l 2G /swapfile
    chmod 600 /swapfile
    mkswap /swapfile
    swapon /swapfile

    写入 fstab 确保重启后生效

    echo ‘/swapfile none swap sw 0 0’ | tee -a /etc/fstab

    调整系统策略:仅在物理内存快满时才使用 Swap

    echo ‘vm.swappiness=10’ | tee -a /etc/sysctl.conf
    sysctl -p

    1.3 配置防火墙 (支持 HTTP/3)

    注意: 如果使用的是云服务器(如阿里云、AWS),请务必在云服务商的控制台“安全组”中同步放行 UDP 443 端口。

    ufw allow ssh
    ufw allow 80/tcp
    ufw allow 443/tcp
    ufw allow 443/udp # HTTP/3 关键端口
    ufw enable

    1. 安装核心软件栈

    2.1 安装 Caddy Web 服务器

    Debian 13 官方源已包含 Caddy,直接安装即可。

    apt update
    apt install caddy -y

    2.2 安装 PHP 8.4 及全功能扩展

    为了支持 WordPress 的所有特性(包括图片处理、多字节字符、数学运算等),需要安装以下扩展。

    apt install -y php8.4-fpm php8.4-mysql php8.4-curl php8.4-gd php8.4-mbstring php8.4-xml php8.4-xmlrpc php8.4-soap php8.4-intl php8.4-zip php8.4-bcmath php8.4-imagick php8.4-gmp php8.4-cli

    2.3 安装 MariaDB 数据库

    apt install -y mariadb-server
    systemctl enable –now mariadb

    1. 针对 2C/2G 配置的深度优化

    默认配置会消耗大量内存,导致服务器不稳定。必须进行以下调整。

    3.1 优化 PHP-FPM (改为按需模式)

    注意路径: PHP 8.4 的配置文件路径为 /etc/php/8.4/…。

    编辑 /etc/php/8.4/fpm/pool.d/www.conf:

    ; 找到并修改以下参数
    pm = ondemand
    pm.max_children = 15
    pm.process_idle_timeout = 10s
    pm.max_requests = 500

    3.2 优化 PHP 上传与执行限制

    编辑 /etc/php/8.4/fpm/php.ini:

    upload_max_filesize = 64M
    post_max_size = 64M
    memory_limit = 256M
    max_execution_time = 300

    ; 确保 Opcache 已开启
    [opcache]
    opcache.enable=1
    opcache.memory_consumption=128
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=4000

    重启 PHP 服务:

    systemctl restart php8.4-fpm

    3.3 优化 MariaDB 内存占用

    创建 /etc/mysql/mariadb.conf.d/50-custom.cnf 并填入:

    [mysqld]
    performance_schema = OFF
    innodb_buffer_pool_size = 256M
    max_connections = 50
    tmp_table_size = 32M
    max_heap_table_size = 32M
    expire_logs_days = 7

    重启数据库服务:

    systemctl restart mariadb

    1. 部署 WordPress

    4.1 创建数据库

    进入数据库命令行 mariadb,执行以下命令。
    请注意:这里的 YourStrongPassword 即为前面提到的数据库密码,请务必修改。

    — 1. 创建数据库
    CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    — 2. 创建用户 (请修改密码!)
    CREATE USER ‘wp_user’@’localhost’ IDENTIFIED BY ‘YourStrongPassword’;

    — 3. 授权
    GRANT ALL PRIVILEGES ON wordpress_db.* TO ‘wp_user’@’localhost’;

    — 4. 刷新并退出
    FLUSH PRIVILEGES;
    EXIT;

    4.2 下载与权限设置

    mkdir -p /var/www/wordpress
    cd /var/www/wordpress
    wget https://cn.wordpress.org/latest-zh_CN.tar.gz
    tar -xzvf latest-zh_CN.tar.gz –strip-components=1
    rm latest-zh_CN.tar.gz

    关键:设置权限,否则无法更新插件或上传图片

    chown -R www-data:www-data /var/www/wordpress
    find /var/www/wordpress -type d -exec chmod 755 {} \;
    find /var/www/wordpress -type f -exec chmod 644 {} \;

    4.3 添加 wp-config.php 优化

    编辑 /var/www/wordpress/wp-config.php (在安装完成后生成,或手动从 sample 复制),添加:

    define( ‘WP_POST_REVISIONS’, 3 ); // 限制修订版本
    define( ‘AUTOSAVE_INTERVAL’, 120 ); // 延长自动保存
    define( ‘DISALLOW_FILE_EDIT’, true ); // 禁止在线编辑代码

    1. Caddyfile 配置 (HTTPS + HTTP/3)

    编辑 /etc/caddy/Caddyfile。
    注意: 请将 your-domain.com 替换为您的真实域名。
    注意: 这里的 php_fastcgi 必须指向 PHP 8.4 的 sock 文件。

    your-domain.com {
    # 网站根目录
    root * /var/www/wordpress
    
    # 启用 Gzip 和 Zstd 压缩
    encode gzip zstd
    
    # PHP 处理 (指向 PHP 8.4)
    php_fastcgi unix//run/php/php8.4-fpm.sock
    
    # 静态文件服务
    file_server
    
    # 安全头
    header {
        X-Content-Type-Options nosniff
        X-Frame-Options SAMEORIGIN
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    }
    
    # 处理静态资源缓存 (配合 Caddy 强悍的性能)
    @static {
        file
        path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.woff2
    }
    header @static Cache-Control "max-age=5184000"
    }
    www.your-domain.com {
        # WWW跳转
        redir https://your-domain.com{uri} permanent
    }

    应用配置:
    systemctl reload caddy

    1. 常见问题解答 (Q&A)

    Q1: 为什么我的 HTTP/3 (QUIC) 检测显示不支持?

    A: HTTP/3 使用 UDP 协议 的 443 端口。

    检查服务器防火墙:ufw status 确保 443/udp 是 ALLOW 状态。

    最常见原因: 检查云服务商(阿里云/腾讯云/AWS)的网页控制台,在“安全组”或“防火墙规则”中,必须手动添加一条规则:协议 UDP,端口 443,源 0.0.0.0/0。

    Q2: 为什么安装插件或上传主题时提示需要 FTP 账号?

    A: 这通常是文件权限问题。
    请再次执行权限修复命令:
    chown -R www-data:www-data /var/www/wordpress
    这确保 Web 服务器(用户名为 www-data)有权写入文件。

    Q3: 内存占用多少是正常的?

    A: 按照本文档优化后:

    空闲时:内存占用约 400MB – 600MB。
    负载时:内存占用约 800MB – 1.2GB。
    剩余内存和 Swap 足够应对突发流量。

    Q4: 网站显示 “Error establishing a database connection”?

    A:
    检查 wp-config.php 中的数据库名、用户名、密码是否正确(参考本文档第 0 节的配置表)。

    检查 MariaDB 是否运行:systemctl status mariadb。

    如果因为内存不足导致数据库挂掉,系统会自动尝试重启,或者你可以手动 systemctl restart mariadb。如果频繁发生,请检查 Swap 是否启用成功。