在 Ubuntu 上纯命令行部署 WordPress,核心逻辑就是搭建 LAMP(Linux + Apache/Nginx + MySQL/MariaDB + PHP)或 LNMP 环境,然后配置数据库和 Web 服务。
既然你明确排除了宝塔面板,说明你想要更底层、更可控的部署方式,或者是在学习服务器运维。以下是基于当前主流版本(Ubuntu 22.04/24.04 LTS)的标准实操步骤。我会尽量精简废话,直接给命令和关键配置点。
第一阶段:系统准备与基础软件安装
首先,更新源并安装必要的工具。
sudo apt update && sudo apt upgrade -y
sudo apt install software-properties-common curl wget -y
1. 安装 Nginx (推荐) 或 Apache
虽然 LAMP 很经典,但现代架构中 LNMP (Nginx) 性能更好,并发处理更强。如果你习惯 Apache 的 .htaccess 动态重写,可以用 Apache,否则强烈建议 Nginx。
这里以 Nginx 为例:
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
验证:浏览器访问 http://你的IP,看到 “Welcome to nginx!” 即成功。
2. 安装 MariaDB (MySQL 分支)
MariaDB 是 MySQL 的完美替代品,兼容性好且开源协议更友好。
sudo apt install mariadb-server mariadb-client -y
sudo systemctl enable mariadb
sudo systemctl start mariadb
安全加固(必须做):
sudo mysql_secure_installation
一路回车,设置 root 密码时选 Y,删除匿名用户,禁止远程 root 登录,移除测试数据库。
3. 安装 PHP 及相关扩展
WordPress 依赖 PHP,且需要特定的扩展支持。
sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip -y
注意:不同 Ubuntu 版本默认 PHP 版本可能不同(如 8.1, 8.2, 8.3)。如果提示找不到包,先添加 Ondrej 的 PPA 源,或者直接使用 php 代替 php-fpm 检查版本。
第二阶段:数据库配置
登录数据库,创建 WP 专用的用户和数据库。不要使用 root 账号连接 WP,这是安全红线。
sudo mysql -u root -p
输入刚才设置的 root 密码后,执行以下 SQL:
-- 创建数据库
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户 (替换 'your_password' 为强密码)
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'your_password';
-- 授权
GRANT ALL ON wordpress.* TO 'wp_user'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
EXIT;
第三阶段:下载 WordPress 源码
将文件放到 Web 根目录。Nginx 默认路径通常是 /var/www/html。
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
sudo mv wordpress /var/www/html/wordpress
关键权限设置:
Web 服务器进程通常由 www-data 用户运行。你需要确保该用户对 wp-content 目录有写入权限(用于上传媒体、安装插件等)。
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo chmod -R 755 /var/www/html/wordpress
# 特别注意 uploads 目录需要写权限,有时需设为 775 或调整所有者
sudo chown -R www-data:www-data /var/www/html/wordpress/wp-content
第四阶段:Nginx 站点配置
这是最容易出错的地方。我们需要告诉 Nginx 如何处理 PHP 请求。
编辑配置文件:
sudo nano /etc/nginx/sites-available/wordpress
写入以下内容(根据你的域名和路径调整):
server {
listen 80;
server_name your_domain.com; # 替换为你的域名或 IP
root /var/www/html/wordpress;
index index.php index.html index.htm;
# 日志
access_log /var/log/nginx/wordpress_access.log;
error_log /var/log/nginx/wordpress_error.log;
# 静态资源缓存
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
add_header Cache-Control "public, immutable";
}
# 主路由规则
location / {
try_files $uri $uri/ /index.php?$args;
}
# PHP 处理
location ~ .php$ {
include snippets/fastcgi-php.conf;
# 如果是 PHP 8.x,fastcgi_pass 可能需要指向 unix socket
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 请根据实际安装的 PHP 版本修改 sock 路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 隐藏敏感文件
location ~ /.ht {
deny all;
}
}
启用站点并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法,无错误则继续
sudo systemctl reload nginx
如何找到正确的 PHP Socket 路径?
运行 php-config --socket 或者查看 /etc/php/8.1/fpm/pool.d/www.conf 中的 listen = 那一行。
第五阶段:通过 Web 界面完成安装
现在打开浏览器,访问 http://your_domain.com。
- 选择语言。
- 输入数据库名称 (
wordpress)、用户名 (wp_user)、密码 (your_password)、主机名 (localhost)。 - 点击“提交”,然后运行安装程序。
- 填写站点标题、管理员账号和密码。
至此,WordPress 已部署完毕。
第六阶段:后续优化与安全(重要)
纯命令行部署的优势在于你可以精细控制,但也意味着你要自己负责安全。
1. 固定链接(Permalinks)
在 WP 后台 -> 设置 -> 固定链接,选择“文章名”。这会生成伪静态规则。由于我们上面 Nginx 配置里已经写了 try_files,所以不需要额外修改 Nginx 配置即可生效。
2. 配置 HTTPS (Let’s Encrypt)
生产环境必须上 HTTPS。使用 Certbot 是最简单的方式。
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain.com
Certbot 会自动修改 Nginx 配置并重定向 HTTP 到 HTTPS,同时自动续期。
3. 防火墙设置
假设你使用的是 UFW(Ubuntu 默认防火墙):
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full' # 允许 80 和 443
sudo ufw enable
sudo ufw status
4. 性能微调 (可选)
- OPcache: 在
php.ini中开启 OPcache 可以显著提升 PHP 执行效率。 - Redis/Memcached: 对于高流量站点,安装 Redis 并配合 WP 插件(如 WP Redis)做对象缓存,比单纯调优 PHP 更有效。
常见坑点排查
-
白屏或 502 Bad Gateway:
- 检查 Nginx 错误日志:
sudo tail -f /var/log/nginx/error.log。 - 最常见原因是 PHP-FPM 没启动,或者
fastcgi_pass指向的 socket 路径不对。 - 检查 PHP 版本是否匹配。
- 检查 Nginx 错误日志:
-
无法上传图片或安装插件:
- 检查
/var/www/html/wordpress/wp-content目录的所有者是否为www-data。 - 检查磁盘空间是否已满。
- 检查
-
数据库连接错误:
- 确认
wp-config.php里的密码是否正确。 - 确认 MySQL 服务正在运行:
systemctl status mariadb。
- 确认
总结
不使用宝塔,本质上就是手动串联 Nginx -> PHP-FPM -> MySQL 这三者的关系。关键在于:
- 权限:
www-data对网站目录要有读写权。 - 配置:Nginx 的
location ~ .php$块要正确指向 PHP-FPM 的 socket。 - 安全:务必上 HTTPS,限制数据库账户权限。
这套流程走通后,你对 Linux 服务器的理解会比只用面板深得多,遇到任何报错也能快速定位是 Nginx 层、PHP 层还是 DB 层的问题。
云技术博客