Debian主机安装Nginx、WordPress和MariaDB

LEMP 就是 “Linux + Nginx + MySQL/MariaDB + PHP” 的组合,专门用来跑像 WordPress 这样的动态 PHP 网站。

准备工作

在开始安装之前,确保Debian系统是最新的,并且有root权限(或使用sudo)。假设是Debian 12(Bookworm)或类似版本。

  1. 更新系统包: 打开终端,运行以下命令:

apt update && apt upgrade -y && apt autoremove -y

  1. 安装必要的依赖: WordPress需要PHP和一些扩展。运行:

apt install wget unzip sudo -y

安装Nginx

Nginx作为Web服务器。

  1. 安装Nginx

sudo apt install nginx -y

  1. 启动并启用Nginx

ufw allow 80,443,8080,8443/tcp

sudo systemctl start nginx && sudo systemctl enable nginx

  1. 检查Nginx状态

sudo systemctl status nginx

如果运行正常,你可以在浏览器访问服务器IP,应该看到Nginx欢迎页。

安装数据库(使用MariaDB)

  1. 安装MariaDB

sudo apt install mariadb-server mariadb-client -y

  1. 启动并启用MariaDB

sudo systemctl start mariadb && sudo systemctl enable mariadb

  1. 安全配置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。
  1. 创建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和相关扩展。

  1. 安装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

以上安装过程会出现

为什么会出现这个错误?

  1. 地盘被占:在 Debian 系统中,当你执行 apt install php 时,系统会自动把 apache2 作为一个推荐依赖包也装上。
  2. 冲突发生:Apache 默认也想占用 80 端口。但此时你的 Nginx 已经在 80 端口工作了
  3. 结果:Apache 启动时发现 80 端口被占,于是报错 Address already in use(地址已被占用)并启动失败。

为什么说“没影响”?

因为我们的目标是使用 LNMP 架构(Nginx + MySQL + PHP),我们根本不需要 Apache。PHP 的核心组件 php-fpm 已经安装成功了,它和 Apache 是相互独立的。

你需要做的“善后”工作(强烈建议执行)

为了防止 Apache 以后每次开机都尝试启动并持续报错,或者误导你的排错方向,建议直接彻底处理掉它:

  1. 停止并禁用 Apache

sudo systemctl stop apache2 && sudo systemctl disable apache2

  1. (可选) 彻底删除 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 环境就是健康的。

  1. 启动并启用PHP-FPM(可能自动启动了)

sudo systemctl start php8.4-fpm  # 如果是其他版本,替换8.4

sudo systemctl enable php8.4-fpm

  1. 检查PHP版本

php -v

安装和配置WordPress

  1. 下载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 文件夹内的所有内容,“提取”到当前所在的目录下,并清除干净空目录和压缩包。

  1. 设置权限: 确保Nginx用户(www-data)有权限:

sudo chown -R www-data:www-data /var/www/html

sudo chmod -R 755 /var/www/html

  1. 配置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)。

  1. 生成安全密钥: 在浏览器访问 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

  1. 创建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。

  1. 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 错误。

  1. 安全防护(禁止外部窥探)

location ~ /\.ht {

    deny all;

}

含义: 禁止任何人访问以 .ht 开头的文件(例如 .htaccess 或 .htpasswd)。

为什么要它: 虽然 Nginx 不使用 Apache 的 .htaccess 文件,但有时你会从其他地方搬运网站,里面可能残留着这些包含数据库账号或其他敏感信息的配置文件。这段代码就像给这些敏感文件上了一把锁,任何人尝试访问都会直接返回 403 拒绝访问。

  1. 启用站点配置

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/

  1. 测试Nginx配置

sudo nginx -t

  1. 重启Nginx

sudo systemctl restart nginx

完成安装

  1. 访问WordPress安装向导: 在浏览器访问 http://your_server_ip 或 http://your_domain.com ,跟随屏幕提示完成安装(选择语言、输入站点标题、用户名、密码等)。
  1. 可选:安装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 配置文件:

  1. 修改 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;

    }

}

  1. 检查与生效

保存并退出(Ctrl+O, Enter, Ctrl+X),然后执行以下命令:

检查语法,重启 Nginx:

sudo nginx -t

sudo systemctl restart nginx

  1. 注意事项(必看)
  • 根目录对齐:注意到你之前的配置 root 是 /var/www/html。请确保你的 WordPress 文件确实在这个目录下,而不是 /var/www/wordpress。如果位置错了,你会看到 404 或 403 错误。
  • 证书权限:Nginx 需要权限读取 /etc/letsencrypt 目录。如果你是使用 Certbot 申请的证书,通常权限是没问题的。
  • WordPress 后台设置: 如果你现在能进入 WordPress 后台,请务必在 设置 -> 常规 中,将“WordPress 地址(URL)”和“站点地址(URL)”都改为以 https:// 开头的域名。
  1. 解决“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 界面?

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注