文章

WordPress 博客搭建

WordPress 是世界上应用最广泛的开源 CMS 程序。

全球1/4的网站都是用 WordPress 制作,它起初只是一款个人博客系统,之后逐步演化成一款内容管理系统软件,你可以用它搭建任何一个你想要的网站。

WordPress 是使用 PHP 语言开发的平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。

我们的目的是在 Linux 主机上(Ubuntu 系统),利用 WordPress 搭建一个个人博客。

服务器的购买

我们可以从云平台购买服务器。国内的例如阿里云腾讯云等,国外的谷歌云、搬瓦工、Vultr等。本文以阿里云为例介绍服务器的购买,其他云平台类似。

这里推荐阿里云的轻量应用服务器(Simple Application Server)。服务器购买网址:阿里云

推荐的购买配置如下:

-c1000

需要注意的是,WordPress 是全球使用最广泛的内容管理 CMS,但是 WordPress 本身并没有使用缓存,我们需要通过插件来实现。另外 WordPress 使用了谷歌字体和全球头像服务,因此使用大陆服务器可能会导致网页加载缓慢。且大陆的服务器带宽只有1Mbps,后面配置 WordPress 也会导致加载需要等待较长时间。因此,我们这里最好选择香港或新加坡的服务器。

在配置方面,如果仅仅是用来搭建个人博客,1核 CPU、1GB 内存以及 25GB SSD 是足够的。镜像选择系统镜像,本文以 Ubuntu 20.04 为例。

购买完成后,点击进入管理控制台。

-c700

在控制台点击对应的服务器,进入服务器控制台。

-c450

进入控制台后,首先需要设定 Ubuntu 系统的 root 密码。找到“服务器信息”,点击“重置密码”,设定密码。

截屏2021-01-25 下午10.57.01

重置密码后,立即重启服务器。

记录服务器的公网IP地址,下面需要在本地远程连接服务器进行相关操作。

本地连接远程服务器

本节介绍推荐的 Windows 以及 macOS 端的远程登录服务器的相关工具,如你已经有相关的 SSH 工具,可以跳过本节,进入服务器的基本配置

Windows

Windows 端推荐 XShell。XShell 是一款非常强大的 SSH 工具。 XShell 和 XFtp:下载地址。 输入邮箱和姓名后,邮箱将会两封邮件,分别点击右键内的下载链接,下载两个软件即可。

下载XSHELL、XFTP-c400

安装完成后,我们首先打开 XShell。

-c1680

在自动弹出的会话窗口中,点击“新建”。会话名称自定义,协议选择SSH,主机填写IP地址,端口号为22。重新连接需要勾选,设置间隔300秒,限制5分钟。

-c500

接着点击左侧边栏的“用户身份验证”,输入用户名和密码:

-c500

点击连接,第一次连接会出现下图:

截屏2021-01-27 下午3.48.35-c500

选择接受并保存。出现如下界面则表明连接成功。

-c400

在 Windows 端也可以通过命令行工具 CMD 和 PowerShell 来远程连接。连接的命令为

1
ssh root@ip

下面我们简单的介绍 XFtp,XFtp 可以用于文件的传输。打开 XFtp,新建连接,与 XShell 类似,这里不再赘述。XFtp 左侧为本地文件,右侧为服务器文件。

macOS

macOS推荐使用自带的终端工具。

-c400

基本配置LAMP环境

本节我们在服务器上进行基本的配置,并配置好 LAMP(Linux + Apache + MySQL + PHP) 环境。首先我们将系统以及相关的库升级到最新版:

1
2
apt update
apt upgrade

apt upgrade等待时间会比较久,等待升级完成即可。

安装Apache服务

我们使用 Apache 作为服务器端的 Web 服务程序。

Apache 是世界使用排名第一的 Web 服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将 Perl/Python 等解释器编译到服务器中。

安装 apache2:

1
apt install apache2

安装完成后,启动apache2:

1
service apache2 start

Apache 常用命令:

1
2
3
service apache2 start #启动
service apache2 stop #停止
service apache2 restart #重启

启动后我们查看 Apache 服务状态,若和下图类似,则表明 Apache 正常服务。

-c570

在 Ubuntu 系统下,默认的 Web 路径为 /var/www/html,此路径为 Web 的根目录。安装好 apache2 后,/var/www/html 目录下有一个默认的 index.html。在浏览器中直接访问ip地址,正常可看到下图:

-c1324

安装MySQL

WordPress 的后端是采用 MySQL 作为支撑的。因此我们需要在服务器上安装并配置 MySQL。安装命令为:

1
apt install mysql-server

安装完成后,我们对 MySQL 进行基本的配置。在命令行中输入mysql_secure_installation,进入配置步骤。以下列出了详细的配置过程,请关注括号内的中文注释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: n(选择n,不进行强密码校验)
Please set the password for root here.

New password: (输入密码)

Re-enter new password: (再次验证密码)
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y(输入y,删除匿名用户)
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y(输入y,禁止MySQL的root用户远程登录数据库)
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : (输入y,删除测试数据库)
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y(输入y,立即刷新权限)
Success.

All done! 

配置完成后,我们可以登录数据库,输入命令:

1
mysql -u root -p

输入密码,即可进入 MySQL。在 MySQL 中输入exit可返回 Bash。

安装PHP

WordPress 是一个用 PHP 语言写成的应用,因此我们需要在服务器安装 PHP 及其所需的扩展。安装命令为:

1
apt install php7.4 libapache2-mod-php7.4 php7.4-curl php7.4-json php7.4-mbstring php7.4-mysql php-imagick php7.4-xml php7.4-zip

安装完成后,我们重启 Apache 服务:service apache2 restart

在服务器命令行进入 /var/www/html 目录下,新建一个 index.php

1
vim index.php

vim中按下 i 进入编辑状态,输入以下代码:

1
2
3
<?php
    phpinfo();
?>

输入完成后,按键盘 ESC 退出编辑状态,输入 :wq 保存并退出。

在浏览器中访问http://ip地址/index.php(替换 ip 地址为主机地址),正常可以显示以下界面:

-c964

域名的购买以及SSL配置

至此我们的基本环境已经配置完毕了。注意到此时Web都是通过直接的IPv4地址来访问的,下面介绍域名的解析以及配置。

域名购买

域名购买网址:链接

yuming-c1000

输入想要购买的域名即可,这里推荐 .top,.xyz 等域名,价格便宜。注意目前注册域名后需及时进行实名认证,实名认证后才可正常解析。

购买完成后,进入域名控制台

本文以codeswift.top为例,说明下面的域名解析、SSL 配置等过程,注意替换成自己购买的域名。

解析域名

参考阿里云的官方说明文档:

  1. 在域名解析页面,全部域名页签下,单击域名,进入解析设置页面。
  2. 在解析设置页面,单击添加记录按钮。
  3. 添加记录会话框中各项参数的添加说明。
    • 记录类型:选择 A
    • 主机记录:一般是指子域名的前缀(如需创建子域名为www.codeswift.top, 主机记录输入 www;如需直接codeswift.top,主机记录输入 @,也可直接省略)。本文选择@。
    • 解析线路:选择 **默认 **(默认为必选项,如未设置会导致部分用户无法访问 )。
    • 记录值:记录值为 IP 地址,填写 本主机的IPv4 地址。
    • TTL:为缓存时间,数值越小,修改记录各地生效时间越快,默认为10分钟。

等待解析过程需要10分钟。

SSL配置

如果解析完成,我们可以通过http://codeswift.top(注意替换成自己的域名)来访问服务器了。

注意到我们目前使用的是 HTTP,超文本传输协议 HTTP 协议被用于在 Web 浏览器和网站服务器之间传递信息,HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了 Web 浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,且目前有些APP内已经禁止跳转 HTTP。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议 HTTPS,为了数据传输的安全,HTTPS 在 HTTP 的基础上加入了 SSL 协议,SSL 依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

  • 我们这里选择阿里云的免费版的SSL证书资源包

  • 购买完成后,我们进入阿里云的SSL控制台,点击证书申请:

    -c400

  • 然后点击证书申请

    -c800

  • 输入证书绑定的域名,点击下一步。

    -c500

  • 然后点击验证,并提交审核。

  • 返回上一页后,我们等待一会刷新网页,点击下载,选择 Apache 下载文件。

    -c700

配置 SSL 操作步骤:

  1. 运行以下命令在 apache2 目录下创建 ssl 目录:

    1
    
     mkdir /etc/apache2/ssl
    
  2. 打开 XFtp ,左侧打开下载的文件,右侧打开 /etc/apache2/ssl 目录。

    -c700

    把三个文件复制到服务器的 /etc/apache2/ssl 目录下。

  3. 运行以下命令启用 SSL 模块。

    1
    2
    
     a2enmod ssl
     systemctl restart apache2
    

    SSL模块启用后可执行ls /etc/apache2/sites-available查看目录下生成的 default-ssl.conf 文件。

  4. 运行以下命令新建SSL配置文件 codeswift.conf(文件名可根据自己的域名来建立)。

    1
    
     vim /etc/apache2/sites-available/codeswift.conf
    

    然后编辑该文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
     <IfModule mod_ssl.c>
         <VirtualHost _default_:443>
             erverAdmin webmaster@localhost
             ServerName codeswift.top      #输入自己的域名
             DocumentRoot /var/www/html
             ErrorLog ${APACHE_LOG_DIR}/error.log
             CustomLog ${APACHE_LOG_DIR}/access.log combined
             SSLEngine on
             SSLCertificateFile      /etc/apache2/ssl/5125510_codeswift.top_public.crt  
             #输入自己的文件地址,替换为证书文件路径+证书文件名
             SSLCertificateKeyFile   /etc/apache2/ssl/5125510_codeswift.top.key  
             #输入自己的文件地址,替换为证书密钥文件路径+证书密钥文件名
             SSLCertificateChainFile /etc/apache2/ssl/5125510_codeswift.top_chain.crt  
             #输入自己的文件地址,替换为证书链文件路径+证书链文件名
             <FilesMatch "\.(cgi|shtml|phtml|php)$">
                 SSLOptions +StdEnvVars
             </FilesMatch>
             <Directory /usr/lib/cgi-bin>
                 SSLOptions +StdEnvVars
             </Directory>
         </VirtualHost>
     </IfModule>
    
  5. 运行以下命令把 default-ssl.conf 映射至 /etc/apache2/sites-enabled 文件夹中建立软链接、实现二者之间的自动关联:(注意文件名替换成自己建立的 conf 文件)

    1
    
     ln -s /etc/apache2/sites-available/codeswift.conf /etc/apache2/sites-enabled/codeswift.conf
    
  6. 重启 Apache 服务:service apache2 restart。Apache 服务重启成功后,您可在浏览器中输入https://codeswift.top(注意替换成自己的域名)验证证书安装结果。浏览器地址栏显示绿色的小锁标识说明证书安装成功。

关于http自动重定向至https:

  • 命令行输入a2enmod rewrite
  • 编辑/etc/apache2/sites-available/000-default.conf文件,输入以下三行:

    1
    2
    3
    
      RewriteEngine on
      RewriteCond   %{HTTPS} !=on
      RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]
    
  • 重启 Apache 即可实现访问 HTTP 自动重定向至 HTTPS。

WordPress 的安装与配置

WordPress 安装

进入 /var/www/html 目录,输入下载命令并解压安装包:

1
2
3
4
cd /var/www/html
wget https://cn.wordpress.org/latest-zh_CN.tar.gz
tar -zxvf latest-zh_CN.tar.gz wordpress
rm -rf latest-zh_CN.tar.gz

配置 WordPress

在正式配置 WordPress 之前,我们首先要在数据库中建立对应的 Database。

在命令行输入:

1
mysql -u root -p

输入密码后,进入 MySQL。创建数据库。为了安全起见,我们不直接将 MySQL 的 root 权限提供给 WordPress,而是单独新建一个用户,只给该用户 wordpress 这一个 database 的权限:

1
2
3
4
CREATE DATABASE wordpress;
CREATE USER 'wordpress'@'%' IDENTIFIED BY 'wp-pwd';     // 自定义用户名密码
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%';
FLUSH PRIVILEGES;

返回到 Bash,输入以下命令,让 WordPress 可将信息写入 wp-config.php 文件:

1
chmod a+w /var/www/html/wordpress

此时访问 https://域名/wordpress,对于本文,即https://codeswift.top/wordpress/(注意替换成自己的域名)。开始配置 WordPress。

首先对于数据库,输入刚才配置的 MySQL 相关信息:

-c400

提交成功后,可以设置站点标题、管理站点的用户名和密码等信息。然后就可以开始安装 WordPress 了。

-c400

大功告成

此时我们访问博客地址https://codeswift.top/wordpress/,就可以看到博客页面了:

-c1308

短链接

如果想要访问根目录,也可以直接跳转到博客,我们可以在/var/www/html目录下,首先删除 index.html,然后编辑 index.php,删除原来内容,填入一下内容:

1
2
3
4
5
6
7
8
<?php
    $url = $_SERVER['SERVER_NAME'];
    $url = 'https://'.$url.'/wordpress';
    #echo $url;
    $location = 'Location: '.$url;
    header($location);
    exit;
?>

此时访问根目录,也会自动跳转到 WordPress 首页了。

本文由作者按照 CC BY 4.0 进行授权