WordPress 是一个开源的网站建设工具,可以用它来“快速”搭建个人博客,官网等等。它本身是用 php 开发的,本身部署不复杂,主要是需要一些配套的东西才能跑起来,网上的一些教程也是写的不清不楚,本文针对非 php 技术栈人员, phper 勿扰。
我们会分 Windows 和 Linux 两个平台来说明部署过程,由于 WordPress 本身是 php 开发的,与平台无关,所以首先我们从官网下载 WorpPress 源码,目前的最新版是 6.6.2。它是一个压缩包,到这里第一步就结束了。
在正式开始之前,还有一点前置知识需要说明。php 是前端用的后端语言,不同于 go 或 elixir,它不是编译成可执行文件运行并提供网络服务,而是类似于静态文件,但也不完全相同。所以运行 php 服务还需要额外的网络服务器作为静态文件服务。当客户端请求 html 文件时,服务器就直接将文件响应给客户端了,而请求 php 文件时,服务器先调用 php 解释器运行 php 文件,然后将结果响应给客户端,当然这里说的调用也不是直接调用,而是通过 cgi 来调用。这里的服务器可以选择 nginx 或者 apache 都可以。下图是两种请求区别的示意图。
关于什么是 cgi,什么是 php-cgi 以及 php 的运行原理,推荐阅读这篇文章:彻底明白php中cgi、fastcgi和php-cgi、php-fpm及php运行原理_什么是php-cgi-****博客。建议先看看,作为预备知识了解下,后面会用得上。
接下来我们来看各个平台上面的具体部署过程。服务器的话,我选择的是 nginx,因为刚好有。
Windows+Nginx
在 nginx 的安装目录下新建一个 www
目录,将之前下载的 wordpress 安装包解压到该目录下。然后进入 www
目录,将 wordpress
目录重命名为 wp.test.com
目录。
注意这些目录并不是一定要按我的来命名,这只是一种习惯,将静态资源放在 www
目录下,将各网站内容放在各自域名的同名目录下。我是在本地测试,所以用了一个假的域名 wp.test.com
。随后我们到 C:\Windows\System32\drivers\etc
目录下找到 hosts
文件,以管理员身份编辑改文件,在最后加上一行内容:
192.168.1.xx wp.test.com
前面的 IP 是你自己电脑的IP地址,不通过域名访问的话,后面也可以配置通过端口访问。到这里 WordPress 就算安装好了,后面就是服务器配置和依赖环境安装了。
还是 nginx 的安装目录,找到 conf/nginx.conf
文件,在最后一个 }
前加上一行配置:
include ../hosts/*.conf;
我们将自定义的代理配置统一放到 nginx 安装目录下的 hosts
目录下,方便管理。在 nginx 目录下手动创建该目录,然后新建 wp.test.com.conf
文件,输入以下内容:
server {
listen 80;
server_name wp.test.com;
location / {
root www/wp.test.com;
index index.php index.html index.htm;
}
location ~ \.php$ {
root www/wp.test.com;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
这些依然不是必须的,你可以选择自己的配置习惯,重要的 wp.test.com.conf
文件里的内容。这里我选择监听 80 端口,你可以配置其他端口。两个 location
配置里的 root
都是 WordPress 存放的目录,因为我们放在 nginx 的安装目录下,所以这里使用了相对路径,如果你放在其他地方,使用绝对路径。
第二个 location
里面有一行配置 fastcgi_pass 127.0.0.1:9000;
,这个就是 php-cgi 的监听地址,因为我们到目前为止还没安装过 php,所以先这样配置。
服务器的配置到这里就结束了,接下来我们来安装 php。首先去官网下载 php 安装包,我选择的是 8.2 版本,建议选择 7 以上的版本。
下载完以后直接找个地方解压就行了,然后进入解压目录,将 php.ini-development
文件拷贝一份,重命名为 php.ini
。
打开 php.ini
文件 搜索 mysqli
将 ;extension=mysqli
取消注释,它在 939行。否则的话,后面运行 WordPress 安装时会报错。然后是 768 行的 ;extension_dir = "ext"
也把注释取消,然后保存。
好了,再回到 php 的解压目录,看到有一个叫 php-cgi.exe
的程序,看到这里应该感到无比熟悉了吧,它正是我们用来解析 .php
文件的程序。在该目录下打开 cmd 命令行,输入 .\php-cgi.exe -b 127.0.0.1:9000
运行 php-cgi 程序,它会监听本地的 9000 端口,这正是我们在 nginx 中配置的端口: fastcgi_pass 127.0.0.1:9000;
,nginx 也是用的 fastcgi 来管理 php-cgi 进程。
最后我们还需要一个 MySQL 数据,创建一个叫 wordpress 的库,当然也可以是任意你喜欢的名字。别忘了把 nginx 也运行起来,到这里所有的准备工作就全部结束了。接下来就是著名的5分钟安装 WordPress 流程,说是安装,其实是配置 WordPress。
在浏览器输入 http://wp.test.com/ap-admin/install.php
,如果你没有使用域名,输入 IP+端口访问。第一步是选择语言,拉到最后选择简体中文。
第二步是配置数据库信息,需要输入数据库的库名,用户名和密码。这一步会做两件事:一是在 WordPress 安装目录下生成 wp-config.php
文件,二是建表。网上会有人教你将 wp-config-sample.php
拷贝一份并重命名为 wp-config.php
,然后手动去改配置。千万不要这么做,因为如果 wp-config.php
以存在的话,访问 wp.test.com/ap-admin/install.php
时就会跳过这一步,导致它不会帮你建表,后面的步骤也就出错了。
点击提交进入下一步,配置管理后台的登录用户名和密码,此外还需要你填写标题,也就是管理后台网页的标题,邮箱也是必填的,要不要被搜索引擎检索就看个人需要了,填完之后点击安装WordPress就可以了。
点完安装之后,会跳转到安装成功的页面,点击登录,用这里填的用户名和密码就能登录管理后台了。管理后台都在 wp-admin
路径下,管理后台首页长这个样子:
直接输入域名的话就是我们的网站了。默认的网站是这样的。
大功告成。至于 WordPress 如何使用就请各位慢慢摸索了。
Linux+nginx
Linux 下的安装过程其实和 Windows 基本一致。只是 nginx 的配置稍有不同,准确来说是只有一个地方不同,就是 nginx 代理配置里面的 fastcgi_pass
这个配置不同。
这个配置配置实际上配置的是 nginx 和 php-cgi 之间通信的方式,这是两个进程,在 Windows 上他们通过 ip 和端口进行网络通信。那么在 Linux 上它们通过 .sock
文件进行进程间通信,所以明白了吧,在 Linux 上面我们需要配置的不再是 ip+端口, 而是一个 .sock
文件的路径,当然还要加上一个 unix:
的前缀。这里给出一个示例:
server {
listen 80;
server_name wp.test.com;
location / {
root /www/wwwroot/wp.test.com/wordpress;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /www/wwwroot/wp.test.com/wordpress;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
是不是和 Windows 上长得挺像的。整个安装步骤其实是一摸一样的。
- 首先找个地方解压 WordPress 压缩包。
- 然后配置 nginx 访问代理。
- MySQL 上建个库,注意如果你同时为它新建了用户的话,一定要给用户加上建表的权限,因为表是 WordPress 自动给你建的。如果是测试或者怕麻烦的话可以
ALL PRIVILEGES
一把梭。 - 没有 php 环境的话自己装一个 php 环境。
- 浏览器访问
http://xxxx.xxxx.com/wp-admin/install.php
填写两个表单,齐活。
在 Linux 上面填写完第一个表单之后可能会遇到一个错误,提示说写入 wp-config.php
失败,这是文件权限问题,根据提示到 WordPress 的安装目录下创建这个文件并写入网页上的内容即可。当然更好的做法是将 WordPress 的所有文件拥有者改成和 php 一致,一般是 www
。