LEMP 就是 “Linux + Nginx + MySQL/MariaDB + PHP” 的组合,专门用来跑像 WordPress 这样的动态 PHP 网站。
准备工作
在开始安装之前,确保Debian系统是最新的,并且有root权限(或使用sudo)。假设是Debian 12(Bookworm)或类似版本。
- 更新系统包: 打开终端,运行以下命令:
apt update && apt upgrade -y && apt autoremove -y
- 安装必要的依赖: WordPress需要PHP和一些扩展。运行:
apt install wget unzip sudo -y
安装Nginx
Nginx作为Web服务器。
- 安装Nginx:
sudo apt install nginx -y
- 启动并启用Nginx:
ufw allow 80,443,8080,8443/tcp
sudo systemctl start nginx && sudo systemctl enable nginx
- 检查Nginx状态:
sudo systemctl status nginx
如果运行正常,你可以在浏览器访问服务器IP,应该看到Nginx欢迎页。
安装数据库(使用MariaDB)
- 安装MariaDB:
sudo apt install mariadb-server mariadb-client -y
- 启动并启用MariaDB:
sudo systemctl start mariadb && sudo systemctl enable mariadb
- 安全配置MariaDB: 运行安全脚本:
sudo mariadb-secure-installation
成功进入安全设置后,会看到一系列询问:
- Enter current password for root: 第一次安装直接按 回车。
- Switch to unix_socket authentication: 选 n(除非你非常了解这个机制)。
- Change the root password?: 选 Y,然后设置你的数据库管理员密码。asb#2345
- Remove anonymous users?: 选 Y。不区分大小写。
- Disallow root login remotely?: 选 Y。
- Remove test database?: 选 Y。
- Reload privilege tables now?: 选 Y。
- 创建WordPress数据库和用户: 登录MariaDB:
sudo mariadb -u root -p
输入数据库root密码asb#2345,然后运行以下SQL命令(替换your_db_name、your_db_user和your_db_password为自定义值):
CREATE DATABASE database_name_here;
CREATE USER ‘username_here’@’localhost’ IDENTIFIED BY ‘password_here’;
GRANT ALL PRIVILEGES ON database_name_here.* TO ‘username_here’@’localhost’;
FLUSH PRIVILEGES;
EXIT;
使用下面数据
/** The name of the database for WordPress */
define( ‘DB_NAME’, ‘database_name_here’ );
/** Database username */
define( ‘DB_USER’, ‘username_here’ );
/** Database password */
define( ‘DB_PASSWORD’, ‘password_here’ );
如果你在执行上面的 SQL 时报错,请检查:
分号:每一行 SQL 命令的末尾必须有一个英文分号 ;。
引号:密码必须用英文单引号 ‘ 包起来。
安装PHP
WordPress是PHP应用,需要PHP和相关扩展。
- 安装PHP和扩展: Debian默认PHP版本可能为4,适合WordPress。
sudo apt install php php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip php-imagick -y
以上安装过程会出现
为什么会出现这个错误?
- 地盘被占:在 Debian 系统中,当你执行 apt install php 时,系统会自动把 apache2 作为一个推荐依赖包也装上。
- 冲突发生:Apache 默认也想占用 80 端口。但此时你的 Nginx 已经在 80 端口工作了。
- 结果:Apache 启动时发现 80 端口被占,于是报错 Address already in use(地址已被占用)并启动失败。
为什么说“没影响”?
因为我们的目标是使用 LNMP 架构(Nginx + MySQL + PHP),我们根本不需要 Apache。PHP 的核心组件 php-fpm 已经安装成功了,它和 Apache 是相互独立的。
你需要做的“善后”工作(强烈建议执行)
为了防止 Apache 以后每次开机都尝试启动并持续报错,或者误导你的排错方向,建议直接彻底处理掉它:
- 停止并禁用 Apache
sudo systemctl stop apache2 && sudo systemctl disable apache2
- (可选) 彻底删除 Apache
既然用 Nginx,留着 Apache 只是浪费磁盘空间:
sudo apt purge apache2 -y && sudo apt autoremove -y
关键:确认 PHP-FPM 是否正常
我们的 WordPress 真正依赖的是 php-fpm。请运行以下命令检查它的状态:
# 注意:根据你的报错,你安装的似乎是 php8.4,请确认版本号
systemctl status php8.4-fpm
只要看到 Active: active (running),你的 PHP 环境就是健康的。
- 启动并启用PHP-FPM(可能自动启动了):
sudo systemctl start php8.4-fpm # 如果是其他版本,替换8.4
sudo systemctl enable php8.4-fpm
- 检查PHP版本:
php -v
安装和配置WordPress
- 下载WordPress: 进入Web根目录(默认/var/www/html):
cd /var/www/html
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzvf latest.tar.gz
sudo mv wordpress/* .
sudo rm -rf wordpress latest.tar.gz
最后两句的作用是为了将 wordpress 文件夹内的所有内容,“提取”到当前所在的目录下,并清除干净空目录和压缩包。
- 设置权限: 确保Nginx用户(www-data)有权限:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
- 配置WordPress: 复制样例配置文件:
sudo cp wp-config-sample.php wp-config.php
编辑wp-config.php:可以用xftp直接打开文件编辑。
sudo nano wp-config.php
修改以下行(使用之前创建的数据库信息):
实际上已经不需要修改
define( ‘DB_NAME’, ‘database_name_here’ );
define( ‘DB_USER’, ‘username_here’ );
define( ‘DB_PASSWORD’, ‘password_here’ );
define( ‘DB_HOST’, ‘localhost’ );
保存并退出(Ctrl+O, Enter, Ctrl+X)。
- 生成安全密钥: 在浏览器访问 https://api.wordpress.org/secret-key/1.1/salt/ ,复制生成的密钥,粘贴到wp-config.php中的相应位置,替换占位符。/var/www/html/wp-config.php
curl -s https://api.wordpress.org/secret-key/1.1/salt/
define(‘AUTH_KEY’, ‘CkF>=(p)?X>C0hve{>2K81U@w;hT:+A6Y.RRe*-0+.7YAMFyDsrXebNj22_lw[^M’);
define(‘SECURE_AUTH_KEY’, ‘Wta+[yp,$>0n9d_Q<Q;CsaBrP|:M_MgGxOWQ!o-!Z;,:an*J diJ:rV+=.Wo,7|6’);
define(‘LOGGED_IN_KEY’, ‘_}-IO<cz/G+ePIZ[J+T.+I0T}3L:1VXW{=urL-vU9BcOY3|lL|bK:Uxwy1pi`oh.’);
define(‘NONCE_KEY’, ‘;Ntdzu`Zv|d{Pos},p0TDQ;sJKVnVv!B5-]v,4?=K31B=vv,/DiA]FCj?x*?|zkg’);
define(‘AUTH_SALT’, ‘N6Q6o3YSGhf-%ED%Cp1&eHU7C|5F #eg!#L~}OYOHKpuE* L+p/bvmY_hUFE)f}B’);
define(‘SECURE_AUTH_SALT’, ‘8/U.t&mNP&2FW:-B*.uN5m5?7wxVDWy<4gUmz0h;4~;8SC{5b$s@;mkof)7eMB2t’);
define(‘LOGGED_IN_SALT’, ‘/bMj}rMvRI{O.Gq>w%sb#JmhbCz}ub$qZN,qv~eW+&G3MPJ~vVim4Im,l_CtwS<6’);
define(‘NONCE_SALT’, ‘hss ?Z($PrIQxp[KR6y=/:}gbq7Pr<IblDx5QVw&cj%D&DjQNaGBkmC-gwn<xkMt’);
替换以上内容。
配置Nginx以服务WordPress
- 创建Nginx站点配置文件:
sudo nano /etc/nginx/sites-available/wordpress
sudo nano /etc/nginx/conf.d/wordpress.conf #放在这个位置更好
粘贴以下内容(替换your_domain.com为你的域名或IP;如果没有域名,用服务器IP):
server {
listen 80;
server_name 192.168.22.122;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock; # 替换为实际的PHP版本
}
location ~ /\.ht {
deny all;
}
}
后三段代码是 Nginx 配置文件的核心逻辑。它们决定了服务器如何处理访问请求、如何运行 PHP 以及如何保护隐私。
1.伪静态与路由控制(WordPress 的灵魂)
location / {
try_files $uri $uri/ /index.php?$args;
}
含义: 当有人访问你的网站时(比如 你的域名.com/about),Nginx 会按顺序尝试:
$uri:看看服务器里有没有叫 about 的真实文件。
$uri/:看看有没有叫 about 的文件夹。
/index.php?$args:如果前两个都没有,就把请求丢给 WordPress 的主入口 index.php,并带上参数。
为什么要它: 它是实现 “漂亮链接” 的关键。没有这一段,你的文章地址就会变成丑陋的 …/?p=123,而不是 …/hello-world。
- PHP 处理(网站的动力源)
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
}
含义: 这是一个匹配规则,告诉服务器:“凡是遇到以 .php 结尾的文件,都不要直接下载,要交给 PHP 处理器去运行。”
include snippets/fastcgi-php.conf:加载一些处理 PHP 的标准配置参数。
fastcgi_pass …:指定 PHP 处理器的“地址”。这里使用的是 Unix Socket(即 php8.4-fpm.sock),它的效率比网络端口(127.0.0.1:9000)更高。
注意点: 这里的 php8.4 必须和你服务器上安装的 PHP 版本完全一致,否则网站会报 502 错误。
- 安全防护(禁止外部窥探)
location ~ /\.ht {
deny all;
}
含义: 禁止任何人访问以 .ht 开头的文件(例如 .htaccess 或 .htpasswd)。
为什么要它: 虽然 Nginx 不使用 Apache 的 .htaccess 文件,但有时你会从其他地方搬运网站,里面可能残留着这些包含数据库账号或其他敏感信息的配置文件。这段代码就像给这些敏感文件上了一把锁,任何人尝试访问都会直接返回 403 拒绝访问。
- 启用站点配置:
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default # 移除默认配置防止冲突
其实删除的只是一个快捷方式(软链接)。
真正的源文件还在 /etc/nginx/sites-available/default。
找回方法:如果想恢复它,只需要重新建立链接:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
- 测试Nginx配置:
sudo nginx -t
- 重启Nginx:
sudo systemctl restart nginx
完成安装
- 访问WordPress安装向导: 在浏览器访问 http://your_server_ip 或 http://your_domain.com ,跟随屏幕提示完成安装(选择语言、输入站点标题、用户名、密码等)。
- 可选:安装SSL(推荐生产环境): 如果需要HTTPS:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot –nginx -d your_domain.com
如果遇到错误,检查日志:Nginx (/var/log/nginx/error.log),PHP-FPM (/var/log/php8.2-fpm.log),MariaDB (/var/log/mysql/error.log)。确保防火墙允许80/443端口(如果使用ufw:sudo ufw allow ‘Nginx Full’)。
对于已有证书,要加入域名和证书,需要将当前的 HTTP(80端口) 配置升级为 HTTPS(443端口)。
可以手动修改 Nginx 配置文件:
- 修改 Nginx 配置文件
sudo nano /etc/nginx/sites-available/wordpress
将内容替换为以下结构(它包含自动从 HTTP 跳转到 HTTPS 的逻辑):
server {
listen 80;
server_name ljx.kxsw.uk;
# 强制将所有 HTTP 请求跳转到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on;
server_name ljx.kxsw.uk;
root /var/www/html;
index index.php index.html index.htm;
# — SSL 证书配置 —
ssl_certificate /etc/letsencrypt/live/ljx.kxsw.uk/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ljx.kxsw.uk/privkey.pem;
# 推荐的安全性配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# ——————
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
- 检查与生效
保存并退出(Ctrl+O, Enter, Ctrl+X),然后执行以下命令:
检查语法,重启 Nginx:
sudo nginx -t
sudo systemctl restart nginx
- 注意事项(必看)
- 根目录对齐:注意到你之前的配置 root 是 /var/www/html。请确保你的 WordPress 文件确实在这个目录下,而不是 /var/www/wordpress。如果位置错了,你会看到 404 或 403 错误。
- 证书权限:Nginx 需要权限读取 /etc/letsencrypt 目录。如果你是使用 Certbot 申请的证书,通常权限是没问题的。
- WordPress 后台设置: 如果你现在能进入 WordPress 后台,请务必在 设置 -> 常规 中,将“WordPress 地址(URL)”和“站点地址(URL)”都改为以 https:// 开头的域名。
- 解决“Error establishing a database connection”
既然你已经配置了域名,如果访问时依然提示数据库连接错误,请再次检查 /var/www/html/wp-config.php 中的数据库密码。
由于你之前提到安装了 PHP 8.4,请确保你也安装了对应的 MySQL 扩展,否则 PHP 无法与 MariaDB 通信:
sudo apt install php8.4-mysql -y
sudo systemctl restart php8.4-fpm
现在尝试访问 https://ljx.kxsw.uk,看看是否已经出现了带绿色小锁的 WordPress 界面?