从一台空服务器到 WordPress 上线:全程敲命令,不用任何面板

​本文来自我的个人博客:从一台空服务器到 WordPress 上线:全程敲命令,不用任何面板 - 叹惋博客

全程命令行操作,不靠任何面板,使性能利用最大化

写在前面

前两天写了一个搭建typecho的文章,有朋友看了问我你自己博客都是用wordpress的,咋先写了个搭建typecho的教程,哈哈哈哈哈哈,那我现在来写一下搭建wordpress教程。

我自己的博客是在一个有宝塔面板的服务器上的,不过我肯定不能把这个服务器拿来写教程,所以我要拿我在雨云买的另外一个配置较差服务器,鉴于宝塔面板有额外占用,我就选择了抛弃面板,转用纯命令行。

这篇文章会带你一步步完成全部操作。全程用命令行,但每一条命令的意思我都会说清楚,照着敲就行。

你需要准备:

1.一台 Linux 服务器(我这里用Ubuntu 24.04),我是用的雨云服务器

2.一个已经注册好的域名

3.能 SSH 连接服务器的终端工具

4.大概 30-60 分钟的时间(比搞typecho长多了嗯。)

第一步:连接服务器

拿到服务器之后,你会有一个 IP 地址、一个 用户名(通常是 root)和一个密码

打开终端(Mac)或 PowerShell(Windows),输入:

ssh root@你的服务器IP

如果你是第一次从这台电脑连接这个服务器,会看到一个提示:

The authenticity of host '你的服务器IP' can't be established.
Are you sure you want to continue connecting (yes/no)?

输入 yes 并回车就行。这是 SSH 在确认服务器的身份,只有第一次连接会出现。

然后输入密码(输入的时候屏幕不会显示任何字符,这是正常的),回车。如果看到类似 root@你的主机名:~# 这样的提示符,说明连接成功了。

第二步:更新系统软件包

刚拿到的服务器,软件包列表可能是旧的。先更新一下,保证后面装的都是最新版本。

apt update

这个命令会从软件源拉取最新的软件包列表。执行完之后再跑一个升级命令:

apt upgrade -y

-y 的意思是“所有询问都回答 yes”,省得你一个个确认。这个过程可能需要好多分钟,耐心等它跑完。

第三步:安装 Nginx(Web 服务器)

Nginx 是一个轻量级、高性能的 Web 服务器,它的工作就是“接待访客”——当有人在浏览器里输入你的网站地址,Nginx 负责接收这个请求,然后把对应的网页内容返回给访客。

安装命令:

apt install nginx -y

装完之后,Nginx 会自动启动。验证一下:

systemctl status nginx

如果看到 active (running) 的字样,说明 Nginx 已经在跑了。

现在打开浏览器,输入你的服务器 IP 地址,应该能看到一个“Welcome to nginx”的页面。这说明 Nginx 工作正常。

设置 Nginx 开机自启(这样服务器重启后网站还能自动恢复):

systemctl enable nginx

第四步:安装 MySQL(数据库)

MySQL 是用来存数据的——你的文章、页面、用户评论、网站设置,全都放在数据库里。

apt install mysql-server -y

装完之后,MySQL 也会自动启动。验证一下:

systemctl status mysql

看到 active (running) 就对了。

设置 MySQL 开机自启:

systemctl enable mysql

设置 root 密码:

Ubuntu 新版本的 MySQL 默认使用 auth_socket 认证方式,也就是说系统 root 用户可以直接免密码登录 MySQL,不需要密码。这本身是安全的,但会导致 mysql_secure_installation 这个安全配置工具跳过设置密码的步骤,让你没办法正常用密码登录。

所以我们要先手动设置 root 密码,再执行安全配置。

用系统 root 权限直接登录 MySQL(不需要输密码):

sudo mysql

进去之后提示符会变成 mysql>,执行下面的命令设置密码(你的密码 换成你自己要设的密码):

mysql_native_password 是 MySQL 传统的密码认证方式,设完之后你就可以用密码登录了。)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';

注意:要是提示Your password does not satisfy the current policy requirements ,那就生成一个有大小写字母,数字,特殊字符的16位密码,这样肯定符合要求(偷懒了算是)。

刷新权限让设置生效:

FLUSH PRIVILEGES;

退出 MySQL:

EXIT;

现在验证一下密码是否设置成功:

mysql -u root -p

输入刚才设的密码,能正常登录就说明成功了。输入 EXIT; 退出。

运行安全配置

mysql_secure_installation

运行后会有一系列问答,按下面这样回答就行:

  1. 是否验证密码插件? 输入 y 建议启用,它可以帮你检查密码强度。如果选 y,后面设置密码时如果密码太简单(比如纯数字、太短),MySQL 会拒绝。建议用大小写字母 + 数字 + 特殊字符的组合密码。(你要是不想被约束,那就输入n)
  2. 是否移除匿名用户? 输入 Y
  3. 是否禁止 root 远程登录? 输入 Y
  4. 是否移除测试数据库? 输入 Y
  5. 是否重新加载权限表? 输入 Y

记住你设的 root 密码,后面配置 WordPress 的数据库用户时要用到。但注意,WordPress 连接数据库用的不是这个 root 账号,而是我们下一步要专门创建的 wpuser 账号——root 账号权限太大,直接给网站用不安全。

情况说明:为什么 Ubuntu 新版 MySQL 跟以前不一样?

老版本的 MySQL 安装完后,mysql_secure_installation 会直接让你设置 root 密码。但从 Ubuntu 20.04 开始,MySQL 默认改用 auth_socket 插件认证 root 用户——这个插件的逻辑是“只有系统用户 root 才能登录 MySQL,不需要密码”。好处是更安全(没有密码泄露的风险),坏处是如果你想像传统方式那样用 mysql -u root -p 加密码登录,就得像上面这样手动改认证方式。

如果你后续只想用 sudo mysql 免密登录,也可以不改。但还是建议按上面的步骤改成密码认证,跟绝大多数教程保持一致,后续操作也更顺畅。

第五步:安装 PHP(运行环境)

PHP 是一种服务器端脚本语言,WordPress 就是用 PHP 写的。我们需要安装 PHP 以及 WordPress 需要的各种扩展。

apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip php-intl php-exif php-fileinfo php-bcmath php-soap -y

这条命令装了不少东西,一起安装了WordPress 官方推荐和必需的 PHP 扩展:

扩展 作用
curl 发起 HTTP 请求,用于获取更新、调用外部 API
fileinfo 检测上传文件的 MIME 类型,防止恶意上传
json 处理 JSON 数据,WordPress REST API 依赖它
mbstring 处理多字节字符(中文、日文等)
mysqlipdo_mysql 连接 MySQL 数据库
SimpleXML / xml 解析 XML 数据(RSS 订阅等)
zip 处理压缩包,安装主题和插件时必须
gdimagick 图片处理(缩略图、裁剪)
exif 读取图片元数据(用于修正手机照片方向)
intl 国际化支持(多语言网站、WooCommerce 等会用)
OPcache 缓存 PHP 字节码,大幅提升性能

装完之后检查一下 PHP-FPM 是否在运行:

systemctl status php8.3-fpm

注意:具体版本号可能不同。Ubuntu 22.04 默认装的是 PHP 8.1,Ubuntu 24.04 默认装的是 PHP 8.3。(我写教程用的是Ubuntu 24.04,所以我就以8.3为例)。如果不确定自己装的是哪个版本,可以用 systemctl status php 然后按 Tab 键自动补全看看,或者用 php -v 命令查看版本号。后面的 Nginx 配置文件中需要填这个版本号,务必保持一致。

第六步:为 WordPress 创建数据库

装好了 MySQL,现在要为 WordPress 创建一个专用的数据库和一个专用的数据库用户。不建议用 root 账号直接跑网站,不安全。

先登录 MySQL:

mysql -u root -p

输入刚才设置的 root 密码,进入 MySQL 命令行界面(提示符会变成 mysql>)。

依次执行以下命令(your_password 换成你自己设的密码):

CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

这条命令创建了一个名叫 wordpress 的数据库,字符集设为 utf8mb4(支持 emoji 和所有生僻字)。COLLATE utf8mb4_unicode_ci 指定了排序规则,ci 表示 case-insensitive(不区分大小写)。

CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'your_password';

创建了一个叫 wpuser 的数据库用户,密码由你设定。'wpuser'@'localhost' 表示这个用户只能从本地(也就是服务器本机)连接数据库,这是最安全的做法,因为 WordPress 和 MySQL 在同一台服务器上,根本不需要远程连接。

GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';

给这个用户赋予 wordpress 数据库的全部权限。wordpress.* 表示数据库 wordpress 里的所有表。

FLUSH PRIVILEGES;

让权限设置立即生效。

EXIT;

退出 MySQL。

记下来:数据库名是 wordpress,用户名是 wpuser,密码是你刚才设的那个——后面配置 WordPress 的时候要用。

第七步:域名解析(把域名指向服务器)

在继续之前,需要先把你的域名指向服务器的 IP 地址。这一步是在域名注册商的后台操作的(比如你在阿里云、腾讯云、Namesilo、Cloudflare 等地方买的域名)。

登录你的域名注册商网站,找到 DNS 解析域名解析管理页面。添加两条 A 记录

主机记录 记录类型 记录值 说明
@ A 你的服务器 IP @ 代表主域名本身,比如 example.com
www A 你的服务器 IP www.example.com 也能访问

什么是 A 记录? A 记录的全称是 Address Record,它的作用就是告诉全世界:“访问这个域名的时候,去这个 IP 地址”。

添加完之后,DNS 解析需要一段时间才能生效。快的话几分钟,慢的话可能要几个小时(取决于你的域名注册商和 TTL 设置,TTL 即 Time To Live,是 DNS 记录在各地 DNS 服务器上的缓存时间)。你可以用下面的命令测试域名是否已经指向了你的服务器:

ping 你的域名

如果返回的 IP 地址是你的服务器 IP,说明解析已经生效了。

新手提示:如果你急着测试,可以先在本地电脑上修改 hosts 文件临时将域名指向服务器(Windows 下是 C:\Windows\System32\drivers\etc\hosts,Mac/Linux 下是 /etc/hosts),但这个方法只对你自己的电脑有效,正式上线还是要等 DNS 解析生效。

第八步:开放防火墙端口

如果你的服务器开启了防火墙(Ubuntu 默认没有安装 UFW,但有些云服务商默认会开启),需要确保 80 端口(HTTP)和 443 端口(HTTPS)是开放的。

检查 UFW 状态:

ufw status

如果显示 Status: inactive,说明防火墙没开,可以跳过这一步。

如果显示 Status: active,需要开放端口:

ufw allow 80/tcp
ufw allow 443/tcp
ufw reload

为什么要开放这两个端口? 80 端口是 HTTP 协议的默认端口,443 端口是 HTTPS 协议的默认端口。如果这两个端口被防火墙挡住了,外部用户就根本打不开你的网站。

另外,有些云服务商,要去后台防火墙或安全组里放行 80 和 443 端口。这一点很容易被忽略——服务器内部的防火墙打开了,但云服务商外围的安全组还挡着,网站照样访问不了。

第九步:下载 WordPress

准备工作都做完了,现在把 WordPress 的程序文件下载到服务器上。

先进入 Nginx 的网站根目录(/var/www/html 是 Nginx 默认的网站根目录):

cd /var/www/html

补充说明:/var/www/html 这个路径是有历史渊源的。/var 目录存放的是“可变数据”(variable data),比如日志、缓存、网站文件等;/www 是 web 相关文件的常见存放位置;html 是存放 HTML 文件的目录。不过这个路径是可以自定义的,只是 Nginx 默认配置里用的是这个。

然后用 wget 下载 WordPress 中文版的最新压缩包:

wget https://cn.wordpress.org/latest-zh_CN.tar.gz

解压:

tar -xzf latest-zh_CN.tar.gz

tar -xzf 的参数含义:-x 表示解压,-z 表示通过 gzip 解压,-f 表示指定文件名。

解压之后会看到一个 wordpress 文件夹,里面就是 WordPress 的全部程序文件。

wordpress 文件夹里的所有文件移动到当前目录(也就是 /var/www/html):

mv wordpress/* .

删掉空的 wordpress 文件夹和下载的压缩包:

rmdir wordpress
rm latest-zh_CN.tar.gz

第十步:配置 WordPress 数据库连接

WordPress 需要一个配置文件来告诉它数据库在哪、账号密码是什么。

先复制一份示例配置文件:

cp wp-config-sample.php wp-config.php

然后用 nano 编辑器打开配置文件(nanovim 友好得多,适合新手):

nano wp-config.php

在文件里找到这几行(大概在文件中间偏下的位置):

define( 'DB_NAME', 'database_name_here' );
define( 'DB_USER', 'username_here' );
define( 'DB_PASSWORD', 'password_here' );
define( 'DB_HOST', 'localhost' );

把它们改成你刚才创建的数据库信息:

define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', '你的密码' );
define( 'DB_HOST', 'localhost' );

改完之后,按 Ctrl + X,然后按 Y 确认保存,再按回车退出。

额外安全步骤一:添加 Salt 密钥

WordPress 官方建议在配置文件里加一组随机密钥,用来加密用户会话、Cookie 等信息。你可以访问 https://api.wordpress.org/secret-key/1.1/salt/ 这个地址,会生成一串随机字符,把它们完整复制到 wp-config.php 文件中 Authentication Unique Keys and Salts 那几行的位置,替换掉原来那些占位内容。

额外安全步骤二:设置网站域名

wp-config.php 文件中找到 /* That's all, stop editing! Happy publishing. */ 这行注释,在它之前加上下面两行(把 example.com 换成你自己的域名):

define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');

为什么现在就要写成 https? 因为我们在后续步骤会配置 HTTPS,如果这里写的是 http://,到时候还要回头改,容易遗漏。直接写成 https:// 一步到位。而且 WordPress 后台的“设置 → 常规”里也有站点地址(Site URL)和首页地址(Home URL)两个选项,但在配置文件里定义优先级更高,会覆盖后台的设置。

第十一步:配置 Nginx(绑定域名 + 准备 HTTPS)

这一步比较关键,我们要配置 Nginx 让它知道:

  1. 你的网站文件在哪个目录
  2. 你的域名是什么
  3. 如何处理 PHP 文件

首先,为你的网站创建一个单独的 Nginx 配置文件,而不是直接改默认配置。这样更干净,以后也好管理。

nano /etc/nginx/sites-available/你的域名.conf

比如你的域名是 example.com,就输入:

nano /etc/nginx/sites-available/example.com.conf

然后把下面的内容粘贴进去(把所有的 example.com 换成你自己的域名,把 php8.3 换成你实际的 PHP 版本):

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    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:/var/run/php/php8.3-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

逐行解释一下:

  • listen 80listen [::]:80:监听 80 端口(HTTP 的默认端口),前者监听 IPv4,后者监听 IPv6
  • server_name:告诉 Nginx,当用户访问 example.comwww.example.com 时,使用这个配置。Nginx 支持多个域名指向同一个站点,用空格分隔就行,如果你不需要www.你的域名,那只保留前面那个即可。
  • root:网站文件存放在哪个目录
  • index:当用户访问一个目录时,默认加载哪个文件(优先找 index.php,然后是 index.html,再是 index.htm
  • location / { try_files ... }:这是 WordPress 的“伪静态”规则。它的意思是:如果用户请求的是一个实际存在的文件或目录,就直接返回;否则把所有请求交给 /index.php 处理,并把原始的查询参数($args)带过去。这样 WordPress 才能处理像 /about 这样的“友好 URL”
  • location ~ \.php$:所有以 .php 结尾的请求,交给 PHP-FPM 处理。~ 表示使用正则表达式匹配
  • fastcgi_pass:PHP-FPM 的通信地址。这里用的是 Unix socket 方式(unix:/var/run/php/php8.1-fpm.sock),比 TCP socket(127.0.0.1:9000)性能略好,配置也更简单
  • location ~ /\.ht:禁止访问所有以 .ht 开头的文件(.htaccess.htpasswd),这是 Apache 用的配置文件,Nginx 不认,直接拒绝访问更安全

如何确认 PHP-FPM 的 socket 路径? 可以用 ls /var/run/php/ 看看里面有什么 .sock 文件,比如 php8.1-fpm.sockphp8.3-fpm.sock,把配置文件里的版本号改成对应的就行。

保存退出(Ctrl + X,然后 Y,再回车)。

然后,启用这个配置——在 Nginx 中,sites-available 是存放所有可用配置的地方,而 sites-enabled 是存放实际启用配置的地方。我们需要创建一个软链接

ln -s /etc/nginx/sites-available/你的域名.conf /etc/nginx/sites-enabled/

比如:

ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

什么是软链接? 软链接(symbolic link)类似于 Windows 下的快捷方式。这样做的目的是把配置文件集中放在 sites-available 里管理,想启用某个站点就在 sites-enabled 里创建一个指向它的链接,想停用就直接删除这个链接,而不用删除原始文件。

最后,删除默认的 Nginx 配置(不然可能会和你的配置冲突):

rm /etc/nginx/sites-enabled/default

检查一下 Nginx 配置有没有语法错误:

nginx -t

如果显示 syntax is oktest is successful,说明配置没问题。

然后重载 Nginx:

systemctl reload nginx

现在在浏览器里输入你的域名(http://你的域名),应该能看到 WordPress 的安装界面了。不过别急,我们先加上 HTTPS 再继续。

第十二步:用 Certbot 自动配置 HTTPS(Let’s Encrypt 免费证书)

HTTP 是明文传输的,你输入的任何信息(包括密码)在网络传输过程中都是裸奔的,非常不安全。我们要给网站加上 HTTPS,用 Let’s Encrypt 提供的免费 SSL 证书。

什么是 Let’s Encrypt? 它是一个非营利性的证书颁发机构(CA),由 Linux 基金会托管,为全球网站提供免费的 SSL/TLS 证书。它的证书有效期为 90 天,但可以自动续期,完全不需要手动干预。

Let’s Encrypt 的证书申请和配置过程可以使用 Certbot 这个工具全自动完成。

安装 Certbot 和 Nginx 插件

apt install certbot python3-certbot-nginx -y

申请证书并自动配置 Nginx

如果不需要www.的部分去掉后面的-d www.你的域名即可

certbot --nginx -d 你的域名 -d www.你的域名

比如:

certbot --nginx -d example.com -d www.example.com

运行后,Certbot 会问你几个问题:

  1. 输入邮箱地址:用于接收紧急续期通知和安全提醒(如果证书即将过期或出现问题,会发邮件通知你)
  2. 同意服务条款:输入 A 同意
  3. 是否愿意分享邮箱给 EFF(电子前哨基金会,EFF 是 Let’s Encrypt 的主要发起方之一):输入 YN 都行,看你自己

然后 Certbot 会自动完成以下步骤:

  • 验证你对域名的所有权(通过在你网站目录下放一个临时验证文件,Let’s Encrypt 的服务器会通过 HTTP 访问这个文件来确认你确实拥有这个域名的控制权)
  • 向 Let’s Encrypt 申请证书
  • 自动修改你的 Nginx 配置文件,加上 HTTPS 相关的配置
  • 重载 Nginx 让配置生效

整个过程不到一分钟。完成后,打开浏览器输入 https://你的域名,应该能看到浏览器地址栏旁边有个小锁头图标,说明 HTTPS 已经生效了。

检查证书状态:任何时候你可以用 certbot certificates 命令查看当前所有已安装的证书列表及其到期时间。

第十三步:配置 HTTP 自动跳转到 HTTPS

虽然 Certbot 通常会自动帮你配置好 HTTP 到 HTTPS 的重定向,但最好确认一下。打开你的 Nginx 配置文件:

nano /etc/nginx/sites-available/你的域名.conf

检查一下,应该有两个 server 块:

第一个(监听 80 端口)负责把 HTTP 请求重定向到 HTTPS:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

return 301 是永久重定向(Moved Permanently),告诉浏览器和搜索引擎:这个地址已经永久迁移到 HTTPS 版本了。301302 的区别是:301 是永久性的,搜索引擎会把权重转移到新地址;302 是临时性的,搜索引擎不会转移权重。

第二个(监听 443 端口)负责处理 HTTPS 请求,Certbot 会自动帮你填好证书路径:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com www.example.com;
    root /var/www/html;
    index index.php index.html index.htm;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

证书文件的含义:fullchain.pem 是完整的证书链文件,包含了你的站点证书和中间证书;privkey.pem 是你的私钥文件,必须严格保密,绝对不能泄露。

如果你的配置里没有第一个 server 块(80 端口那个),手动加上就行。保存后检查配置并重载:

nginx -t
systemctl reload nginx

现在访问 http://你的域名 会自动跳转到 https://你的域名

第十四步:设置文件权限

WordPress 需要对某些文件夹有写入权限,比如上传图片、安装主题和插件。但权限也不能给得太松,不安全。

先修改文件所有者:

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

这条命令把网站目录的所有者改成 www-data-R 表示递归处理,会修改该目录下所有子目录和文件。

www-data 是什么? 它是 Ubuntu/Debian 系统中 Nginx 和 PHP-FPM 默认的运行用户。Web 服务器以这个用户的身份读取和执行网站文件。把网站目录的所有者设为 www-data,Web 服务器才有权限读写这些文件。

然后设置文件夹权限为 755,文件权限为 644

find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;

755 和 644 是什么意思? Linux 权限用三位数字表示:第一位是所有者(owner)的权限,第二位是所属组(group)的权限,第三位是其他人(others)的权限。7 = 读(4)+ 写(2)+ 执行(1),5 = 读(4)+ 执行(1),4 = 只读。所以 755 表示所有者有全部权限,组用户和其他用户只有读和执行权限;644 表示所有者有读写权限,组用户和其他用户只有读权限。

这样 WordPress 就能正常读写文件了,同时安全性也有保障。

第十五步:调整 PHP 上传文件大小限制

WordPress 默认允许上传的文件大小是 2MB,这个对于上传主题、插件或者大图片来说通常是不够的。我们需要修改 PHP 的配置文件。

找到 PHP 的配置文件:

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

注意:版本号换成你实际的 PHP 版本。Ubuntu 22.04 是 8.1,Ubuntu 24.04 是 8.3

找到下面这三行,修改成你想要的数值(这里以 64MB 为例):

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 128M
  • upload_max_filesize:单个上传文件的最大大小
  • post_max_size:单次 POST 请求的最大大小(必须大于等于 upload_max_filesize,因为上传文件是用 POST 方法提交的)
  • memory_limit:PHP 脚本可使用的最大内存(必须大于 post_max_size,否则大文件上传过程中可能内存溢出)

改完之后保存退出,然后重启 PHP-FPM 让配置生效:

systemctl restart php8.3-fpm

注意版本号同样要换成你实际的版本。

第十六步:浏览器中完成 WordPress 安装

以上所有步骤都做完之后,打开浏览器,输入你的域名(https://你的域名)。

应该会看到 WordPress 的安装界面,让你选择语言——选简体中文,点“继续”。

然后会看到数据库连接信息(前面如果你跟着我的教程在文件里设置过了,那可以直接去设置网站基本信息了):

1.数据库名wordpress

2.用户名wpuser

3.密码:你设的密码

4.数据库主机localhost

5.表前缀wp_(默认就好,如果你有特殊需求可以改,但一般不需要动)

填好之后点“提交”,如果信息都对,就会进入下一步。

如果提示“无法连接数据库”:返回检查 wp-config.php 里的数据库信息是否完全正确,尤其是密码有没有打错字、有没有多余的空格。

下一步是设置网站的基本信息:

1.站点标题:你的网站名字(之后可以随时修改)

2.用户名:管理员账号(不要用 admin,因为这是 WordPress 默认的管理员用户名,很容易被暴力破解攻击盯上)

3.密码:设一个复杂点的(WordPress 会给你一个强密码建议,可以直接用)

4.您的电子邮件:填你的邮箱

填完之后点“安装 WordPress”,等几秒钟,看到“安装成功”的页面就大功告成了。

点“登录”,用刚才设的管理员账号和密码登录后台。后台地址是 https://你的域名/wp-admin

第十七步:确认 HTTPS 自动续期

Let’s Encrypt 的证书只有 90 天有效期,但 Certbot 会自动帮你续期。验证一下自动续期是否配置好了:

certbot renew --dry-run

--dry-run 是“模拟运行”的意思,不会真的去续期,只是测试整个续期流程是否正常。

如果输出类似 The dry run was successful 的信息,说明自动续期正常工作。

Certbot 会在系统中创建一个定时任务(systemd timer),每天运行两次,检查所有已安装的证书,如果发现哪个证书距离过期不足 30 天,就自动续期。你什么都不用做。

第十八步:(可选)开启 HSTS 提升安全性

HSTS(HTTP Strict Transport Security)是一个安全机制,它告诉浏览器:在接下来的一年里,只能用 HTTPS 访问我的网站,绝对不要用 HTTP。这样即使有人点击了 HTTP 链接或输入了 HTTP 地址,浏览器也会自动把它转换成 HTTPS。

在 Nginx 配置文件的 HTTPS server 块里加上一行:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

max-age=31536000 表示有效期一年(单位是秒,31536000 秒 = 365 天),includeSubDomains 表示对所有子域名也生效。

加完保存后检查并重载配置:

nginx -t
systemctl reload nginx

注意:启用 HSTS 后,如果你后续想关闭 HTTPS,会非常麻烦。因为浏览器已经记住了“只能用 HTTPS”的指令,即使你删除了服务器上的 HTTPS 配置,浏览器还是会固执地尝试用 HTTPS 访问。所以建议在网站运行稳定后再开启。

常见的坑和解决办法

1. 打开浏览器看到的是 Nginx 欢迎页,不是 WordPress 安装界面

说明 Nginx 的配置没有生效,或者默认配置没有被替换。检查一下:

<1>/etc/nginx/sites-enabled/default 是否已经被删除

<2>你的配置文件是否已经软链接到 sites-enabled

<3>运行 nginx -t 检查配置是否有语法错误

<4>运行 systemctl reload nginx 重载配置

2. 提示“Error establishing a database connection”

多半是 wp-config.php 里的数据库名、用户名或密码填错了。回去检查一下,尤其是密码有没有打错字。也有可能是 MySQL 服务没启动,用 systemctl status mysql 看一下。

3. 安装主题或插件时提示需要 FTP 信息

wp-config.php 文件中找到 /* That's all, stop editing! Happy publishing. */ 这行注释,在它之前加上一行:

define('FS_METHOD', 'direct');

这样 WordPress 就会直接用文件系统写入,不需要 FTP。

4. 上传图片或主题时提示“文件大小超过限制”

这是 PHP 上传大小限制的问题。按第十五步调整 upload_max_filesizepost_max_sizememory_limit 这三个参数,然后重启 PHP-FPM。

5. 上传图片失败,提示“无法创建目录”

检查一下 /var/www/html/wp-content/uploads 文件夹是否存在,如果不存在就手动创建:

mkdir -p /var/www/html/wp-content/uploads
chown www-data:www-data /var/www/html/wp-content/uploads

6. 页面打不开,显示 502 Bad Gateway

通常是 PHP-FPM 没启动或者 Nginx 和 PHP-FPM 之间的通信出了问题。检查 PHP-FPM 的状态:

systemctl status php8.3-fpm

如果没启动,就启动它:

systemctl start php8.3-fpm

如果 PHP-FPM 是启动的但问题依然存在,检查 Nginx 配置文件中的 fastcgi_pass 路径是否正确(版本号是否匹配)。

7. 浏览器提示“您的连接不是私密连接”或证书无效

可能的原因:

<1>证书还没有生效(刚申请完需要等几秒)

<2>你访问的是 http:// 而不是 https://(某些浏览器会把 HTTP 访问显示为“不安全”而不是“私密连接”)

<3>域名解析还没生效,Certbot 验证域名所有权时失败了

<4>你是用 IP 地址访问的,而 SSL 证书是绑定在域名上的,用 IP 访问必然证书报错

可以用 certbot certificates 命令查看证书状态,确认证书是否已成功签发。

8. 域名解析一直不生效

DNS 解析的生效时间取决于两个因素:一是你域名注册商那边的 TTL(Time To Live)设置,二是各地 DNS 服务器的缓存刷新速度。如果你急着测试,可以先把 TTL 设短一些(比如 300 秒,即 5 分钟),等正式上线再改回默认值(通常是 600 秒或 3600 秒)。

9. 打开网站显示空白页(白屏)

可能是 PHP 内存不足或某个插件/主题报错。可以先检查 PHP 错误日志:

tail -f /var/log/php8.3-fpm.log

版本号换成你实际的版本。tail -f 会实时显示日志的最后几行并持续更新。

如果错误日志里没有信息,可以临时在 wp-config.php 中开启调试模式:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

然后访问网站,错误信息会被记录到 /var/www/html/wp-content/debug.log 文件中,查看这个文件就能定位问题。

接下来可以做什么

网站跑起来之后,你可以:

1.换个好看的主题:后台“外观 → 主题”里有很多免费的,挑一个顺眼的

2.装几个实用的插件:比如 Yoast SEO(搜索引擎优化)、Akismet(防垃圾评论)、UpdraftPlus(自动备份)

3.写第一篇文章:点击后台左侧的“文章 → 写文章”,开始你的创作

4.定期备份:建议每周备份一次数据库和网站文件,可以用 mysqldump 导出数据库,用 tar 打包网站目录

部署 WordPress 的核心就是装好 Nginx + MySQL + PHP 这三个东西,再把域名解析做好,用 Certbot 一键搞定 HTTPS。看着挺多,实际部署起来挺简单。

希望这篇教程对你有帮助。

这不是更麻烦吗我为啥不用面板 :sleepy_face:

低配服务器再用面板占用大没必要啊。而且不是所有人都喜欢面板

理论上跑得动nginx+mysql的服务器应该都应该够跑面板:thinking:

面板浪费内存,何必呢?