Ubuntu 24.04 搭建 Caddy + PHP8.3 + MariaDB + WordPress 完整部署存档教程

116次阅读
没有评论

Ubuntu 24.04 搭建 Caddy + PHP8.3 + MariaDB + WordPress 完整部署存档教程

环境说明

  • 系统:Ubuntu 24.04 LTS
  • Web服务:Caddy 2(自动HTTPS、无需配置证书、原生支持FastCGI)
  • PHP:8.3 FPM
  • 数据库:MariaDB 10.11
  • 站点目录统一规范:/srv/www/你的域名
  • 运行用户:www-data(PHP文件读写)、caddy(网页服务)
  • 适用服务器:Raksmart/阿里云/腾讯云所有Ubuntu24.04机器

一、系统初始化(必做,统一环境)

1. 更新系统软件源

apt update && apt upgrade -y

2. 系统时区设置

timedatectl set-timezone Asia/Shanghai

3. 防火墙放行端口(80 HTTP / 443 HTTPS)

ufw allow 80/tcp
ufw allow 443/tcp
ufw reload
# 查看防火墙规则
ufw status

云服务器务必在服务商后台安全组同步放行80、443端口

二、安装 Caddy Web 服务

1. 官方源安装Caddy

# 导入官方GPG密钥
curl -fsSL https://dl.filippo.io/caddy/key | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
# 添加软件源
echo "deb [signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] https://dl.filippo.io/caddy/debian stable main" | tee /etc/apt/sources.list.d/caddy-stable.list
# 安装
apt update
apt install caddy -y

2. Caddy 基础管理命令

systemctl enable --now caddy    # 开机自启+立刻运行
systemctl start caddy
systemctl stop caddy
systemctl reload caddy         # 重载配置(平滑生效)
systemctl restart caddy        # 重启服务
systemctl status caddy         # 查看运行状态
journalctl -u caddy -f         # 实时查看运行日志(排错必备)

3. Caddy 配置文件路径

  • 主配置文件:/etc/caddy/Caddyfile
  • 网站根目录统一存放:/srv/www/

三、安装 PHP8.3 + PHP-FPM 及WordPress所需全部扩展

1. 安装PHP官方源 + 安装全套组件

# 安装依赖
apt install ca-certificates apt-transport-https software-properties-common -y
# 添加PHP官方ppa源
add-apt-repository ppa:ondrej/php -y
apt update

# 安装PHP8.3核心+fpm+WP必备扩展
apt install php8.3-cli php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-opcache php8.3-intl -y

2. PHP-FPM 服务管理

systemctl enable --now php8.3-fpm
systemctl reload php8.3-fpm
systemctl restart php8.3-fpm
systemctl status php8.3-fpm

3. PHP-FPM 进程池配置(核心配置,适配Caddy sock通信)

编辑进程池配置文件

nano /etc/php/8.3/fpm/pool.d/www.conf

3.1 监听方式(使用unix sock,性能高于TCP 9000端口)

listen = /run/php/php8.3-fpm.sock
;listen = 127.0.0.1:9000

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

3.2 进程资源配置(通用1H2G服务器标准参数)

user = www-data
group = www-data

pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pm.max_requests = 1000

4. php.ini 全局参数优化(适配WordPress上传、运行)

nano /etc/php/8.3/fpm/php.ini

修改以下参数:

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai
display_errors = Off

修改完成重载生效

systemctl reload php8.3-fpm

5. 解决Caddy无权限访问php-fpm.sock(高频报错点)

Caddy运行用户为caddy,sock文件归属www-data,加入用户组授权访问

usermod -aG www-data caddy
systemctl restart caddy

校验sock文件存在

ls -l /run/php/php8.3-fpm.sock

四、安装 MariaDB 数据库

1. 安装数据库服务

apt install mariadb-server mariadb-client -y
systemctl enable --now mariadb
systemctl status mariadb

2. 数据库安全初始化(去除默认不安全配置)

mariadb-secure-installation

按照交互提示配置:

  1. Enter current password for root (enter for none) → 直接回车
  2. Switch to unix_socket authentication [Y/n] → n
  3. Change the root password? [Y/n] → Y,设置root高强度密码
  4. Remove anonymous users? [Y/n] → Y
  5. Disallow root login remotely? [Y/n] → Y
  6. Remove test database and access to it? [Y/n] → Y
  7. Reload privilege tables now? [Y/n] → Y

3. 为WordPress创建独立数据库、独立账号(禁止网站使用root账号)

mariadb

执行SQL语句(自行替换库名、用户名、密码)

-- 创建数据库,utf8mb4完整支持emoji表情
CREATE DATABASE wp_zenroly CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建本地访问账号
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY '自定义高强度密码';
-- 赋予数据库全部权限
GRANT ALL PRIVILEGES ON wp_zenroly.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
exit;

五、下载并部署WordPress源码

1. 创建站点根目录

mkdir -p /srv/www
cd /srv/www

2. 下载官方最新WordPress压缩包

wget https://wordpress.org/latest.tar.gz
# 解压文件
tar xf latest.tar.gz
# 将文件移动到你的域名目录
mv wordpress/* /srv/www/zenroly.com/

3. 目录权限标准化(WP读写、主题插件更新必备)

# 归属www-data用户组
chown -R www-data:www-data /srv/www/zenroly.com
# 文件夹权限755,文件权限644
find /srv/www/zenroly.com -type d -exec chmod 755 {} \;
find /srv/www/zenroly.com -type f -exec chmod 644 {} \;

4. 预配置 wp-config.php(推荐做法,无需安装页手动填写数据库信息)

cp /srv/www/zenroly.com/wp-config-sample.php /srv/www/zenroly.com/wp-config.php
nano /srv/www/zenroly.com/wp-config.php

修改数据库字段:

define( 'DB_NAME', 'wp_zenroly' );
define( 'DB_USER', 'wp_user' );
define( 'DB_PASSWORD', '刚才设置的数据库密码' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );

密钥可访问:https://api.wordpress.org/secret-key/1.1/salt 生成替换文件内随机密钥

wp-config安全加固

chmod 600 /srv/www/zenroly.com/wp-config.php

六、Caddy 站点配置编写(Caddyfile)

编辑主配置文件

nano /etc/caddy/Caddyfile

全局基础配置(文件最顶部)

{
    http_port 80
    https_port 443
}

单个WordPress站点标准配置

zenroly.com {
    # 网站物理目录
    root * /srv/www/zenroly.com
    # 静态文件服务
    file_server
    # 对接php-fpm sock通道
    php_fastcgi unix/run/php/php8.3-fpm.sock
    # WordPress通用伪静态规则(适配首页、文章、后台、固定链接)
    rewrite * /index.php{path}

    # 安全响应头
    header Strict-Transport-Security "max-age=31536000; includeSubDomains"
    header X-Content-Type-Options nosniff
    header X-Frame-Options SAMEORIGIN
    header Referrer-Policy strict-origin-when-cross-origin
}

校验配置语法 + 重载Caddy

# 校验配置是否书写错误
caddy validate --config /etc/caddy/Caddyfile
# 无报错再重载
systemctl reload caddy

七、域名解析与WordPress初始化安装

  1. 域名 zenroly.com 将A记录指向服务器公网IP,等待DNS解析生效
  2. 浏览器无痕窗口访问:https://zenroly.com/wp-admin/install.php
  3. 填写站点标题、管理员账号、邮箱,完成安装
  4. 安装后在后台设置 → 常规修改站点地址为HTTPS域名
  5. 设置 → 永久链接选择「朴素/文章名」,伪静态自动生效无需额外修改

八、安装完成后安全优化(必做存档项)

1. 关闭后台在线文件编辑(防止木马篡改代码)

wp-config.php最底部添加:

define( 'DISALLOW_FILE_EDIT', true );

2. 禁止XML-RPC(暴力破解常用入口)

Caddy配置站点块内加入:

@xmlrpc path /xmlrpc.php
respond @xmlrpc 403

3. 定期备份脚本(简易备份数据库+网站文件)

# 网站打包备份
tar -zcf /backup/zenroly_web_$(date +%Y%m%d).tar.gz /srv/www/zenroly.com
# 数据库导出备份
mariadb-dump -uwp_user -p wp_zenroly > /backup/zenroly_db_$(date +%Y%m%d).sql

九、日常排错常用命令汇总

# 查看Caddy实时日志
journalctl -u caddy -f
# 查看PHP-FPM日志
journalctl -u php8.3-fpm -f
# 查看sock文件状态
ls /run/php/php8.3-fpm.sock
# 本机自测网页返回内容
curl -v https://zenroly.com
# 检查目录权限归属
ls -lh /srv/www/zenroly.com

十、整体架构流程图

域名DNS → Caddy(80/443自动SSL) → php_fastcgi sock通信 → PHP8.3-FPM解析PHP文件 → MariaDB读取数据库数据 → 页面返回浏览器

正文完
 0
评论(没有评论)