Research

如何在Ubuntu20.04服务器上搭建WordPress.org网站

This is an article written by my student Xincheng Ren. He helps me setup this site.


本文将详细介绍如何在Ubuntu20.04服务器上搭建WordPress.org网站。按照此教程所述的步骤进行,你将成功在你的服务器上搭建一个自己的WordPress.org网站。

1.操作平台

安装了Ubuntu20.04的服务器

2.安装必备软件

1.安装PHP

在服务器端命令行执行:

# 安装php
$ sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc

注意:这些软件不包含在LAMP中,需要额外手动安装。

2.安装LAMP

LAMP(Linux + Apache + MySQL/MariaDB + PHP)是最经典的建站环境之一,安装LAMP只需要一句命令:

# 安装LAMP
$ sudo tasksel install lamp-server

或者可以在tasksel用户界面来安装LAMP:

# 进入tasksel用户界面
$ sudo tasksel
# 上下选择到LAMP server,按下空格键进行选择和取消,按下Tab键,确认即可


Package configuration

  ┌───────────────────────────────────┤ Software selection ├────────────────────────────────────┐
  │ You can choose to install one or more of the following predefined collections of software.  │ 
  │                                                                                             │ 
  │ Choose software to install:                                                                 │ 
  │                                                                                             │ 
  │    [ ] Xubuntu live CD                                                                  ↑   │ 
  │    [ ] Ubuntu Cloud Image (instance)                                                    ▮   │ 
  │    [ ] DNS server                                                                       ▒   │ 
  │    [ ] Kubuntu desktop                                                                  ▒   │ 
  │    [*] LAMP server                                                                      ▒   │ 
  │    [ ] Lubuntu Desktop                                                                  ↓   │ 
  │                                                                                             │ 
  │                                                                                             │ 
  │                                           <Ok>                                              │ 
  │                                                                                             │ 
  └─────────────────────────────────────────────────────────────────────────────────────────────┘                                                                                               

3.检测安装

以上步骤完成后,在服务器端会生成一个新的目录/var/www/html,在新的目录下会生成一个新的文件index.html,完整的目录为:/var/www/html/index.html。若存在这个文件,则可在浏览器输入你的IP地址并确认(若不知道服务器IP地址,可以在服务器端命令行输入curl ifconfig.me并确认来查看),一切顺利的话即可在出现图1所示界面。

图1-apache2默认界面

若没有出现图1界面,则可以尝试卸载apache2再次安装。一些apache2常用命令如下:

# 安装apache2
$ sudo apt install apache2
# 卸载apache2(若图1界面未显示,可加上--purge参数来删除配置信息,再安装)
$ sudo apt remove apache2
$ sudo apt remove apache2 --purge
# 启动apache2服务
$ systemctl start apache2.service
# 停止apache2服务
$ systemctl stop apache2.service
# 重启apache2服务
$ systemctl restart apache2.service

最终保证可以在浏览器输入IP地址确认后可以出现图1界面即可。

3.配置MySQL

1.安全配置MySQL

虽然安装LAMP后,在MySQL中会有一些默认设置,但是还是应该修改一下MySQL的一些设置,以提高MySQL的安全性。包括:
1.为本地管理员帐户设置密码;
2.删除可以从外部访问的管理员帐户;
3.删除匿名用户账户;
4.删除测试数据库(默认情况下,所有用户,甚至匿名用户都可以访问该数据库),以及允许所有用户访问以“test_”开头的数据库。

运行命令:

# 安全配置MySQL
$ sudo mysql_secure_installation
# 会按照一下顺序出现在终端中
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: Y(用户输入确认)

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1(用户输入确认)
Please set the password for root here.

New password: (用户输入确认)

Re-enter new password: (用户输入确认)

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y(用户输入确认)
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(用户输入确认)
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(用户输入确认)
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(用户输入确认)
Success.

All done! 

至此,MySQL安全配置完成。

2.修改防火墙配置

修改防火墙以允许外部访问默认的Web端口。配置一个UFW防火墙来限制对服务器的访问。
允许Apache Full(此配置文件打开端口80(正常,未加密的Web流量)和端口443(TLS / SSL加密流量))配置文件的传入流量。

运行命令:

# 添加防火墙
$ sudo ufw allow in 'Apache Full'
Rules updated
Rules updated (v6)

接下来可以查看防火墙状态:

# 查看防火墙状态
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
Apache Full                ALLOW       Anywhere                  
Apache Full (v6)           ALLOW       Anywhere (v6) 
# 假如显示的结果是:
Status: inactive
# 则需要启动防火墙
$ sudo ufw enable
Firewall is active and enabled on system startup

3. 创建数据库和用户账户

首先以管理员用户登录:

# 管理员账户登录MySQL
$ sudo mysql -u root -p
Enter password: (用户输入确认)
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 14
Server version: 8.0.21-0ubuntu0.20.04.4 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> 

创建一个名为wordpress的数据库:

mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.00 sec)

创建一个wordpress用户并授权:用户名为’username’,密码为'Userpwd123+''%'表示允许远程登陆但是不允许本机登录;赋予权限表示将数据库wordpress下的所有表授权给用户'username',这样用户'username'就能远程访问到这个数据库(wordpress)下的所有表。

--创建用户
mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'Userpwd123+';
Query OK, 0 rows affected (0.01 sec)

--赋予权限
--不同版本赋予权限的语法不同,应具体根据自己的MySQL版本,本机版本为8.0.21-0ubuntu0.20.04.4
mysql> GRANT ALL ON wordpress.* to 'username'@'%';
Query OK, 0 rows affected (0.00 sec)

--刷新MySQL的系统权限相关表
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

--退出
mysql> exit;
Bye

4.下载安装WordPress

下载最新版本的WordPress:

# 进入/var/www/html目录
$ cd /var/www/html
# 删除index.html
$ sudo rm index.html
# 下载最新版本WordPress到/var/www/html目录
$ sudo wget https://wordpress.org/latest.tar.gz
# 解压WordPress
$ sudo tar xpf latest.tar.gz
$ ls
latest.tar.gz  wordpress
# 把解压之后的文件拷贝到/var/www/html
$ sudo cp -R /var/www/html/wordpress/* /var/www/html/
# 删除解压之后的wordpress目录和压缩包
$ sudo rm -rf wordpress latest.tar.gz
# 查看当前目录文件
$ ls
index.php        wp-admin              wp-content         wp-load.php      wp-signup.php
license.txt      wp-blog-header.php    wp-cron.php        wp-login.php     wp-trackback.php
readme.html      wp-comments-post.php  wp-includes        wp-mail.php      xmlrpc.php
wp-activate.php  wp-config-sample.php  wp-links-opml.php  wp-settings.php
# 更改文件夹的拥有者为指定的组
$ sudo chown -R www-data:www-data /var/www/html

首次登录WordPress后台,在浏览器端输入服务器IP地址并确认,WordPress正确安装的话即可出现图2界面:

图2-首次打开WordPress

点击“Let’s go!”按钮,出现图3所示界面:

图3-数据库信息初始界面

图3中需要填写五项信息,分别为:
1.数据库名称,在本文中需要填写“wordpress”;
2.用户名,即给用户赋予操作“wordpress”数据库权利的名称,本文中填写“username”;
3.密码,对应用户名的密码,本文中填写“Userpwd123+”;
4.数据库所在服务器IP地址;
5.该WordPress所使用数据库表前缀,如果你需要在一个数据库中运行多个WordPress,则需要更改此项,本文不更改。

全部输入完成如图4所示:

图4-数据库信息的填写

点击图4中的“Submit”按钮,即可出现图5界面:

图5-数据库连接成功

点击图5中的“Run the installation”按钮进入图7所示界面。或者出现如图6所示,这表示自动创建“wp-config.php”文件失败:

图6-无法自动创建wp-config.php文件

图6提示自动创建wp-config.php失败,可以在/var/www/html目录下自行创建一个名为“wp-config.php”文件,并将文本框中的内容复制进去,然后保存文件,之后之后点击“Run the installation”按钮即可出现图7界面:

图7-WordPress后台登录信息填写初始界面

在图7中填入所有信息后如图8所示:

图8-WordPress后台登录信息填写完成

点击图8中的“Install WordPress”按钮进入图9界面:

图9-WordPress用户注册成功

点击图9中的“Log in”按钮,进入图10所示界面:

图10-初始登录界面

将图8中的信息填入在图10中之后,如图11所示:

图11-填入用户名和密码

点击图11中的“Log in”按钮进入图12所示后台界面:

图12-WordPress后台界面

在WordPress后台,你可以操作并更改你的整个网站,在浏览器端输入主机IP地址或者主机域名/wp-admin并确认即可登录你的网站。例如:xxx.xxx.xxx.xxx/wp-admin
在浏览器端直接输入主机IP或者域名则会有图13所示WordPress主界面:

图13-WordPress网站主界面

看见图13界面即表明你的WordPress网站已经搭建成功。至此,在Ubuntu20.04服务器上搭建WordPress.org网站已经进行完毕。

5.注意事项

下面列出的为使用WordPress中常见的问题以及解决方案:

1.发布失败。 此响应不是合法的JSON响应(Publishing failed. The response is not a valid JSON response)

图14-此响应不是合法的JSON响应

发表文章(Post)或者页面(Page)时候提示:发布失败。 此响应不是合法的JSON响应 (Publishing failed. The response is not a valid JSON response)。
解决此问题有多种方法,在这里只推荐两种方法,可以多尝试另外多种方法。推荐方法如下所示:

1.修改固定链接格式

进入WordPress后台,如图12所示,依次点击设置(Settings)->固定链接(Permalinks)->常用设置(Common Settings)。将固定链接格式改为文章名(Post name),若已经是文章名,则修改为其他一种,保存,再将格式改为文章名保存。或者直接修改为朴素(Plain),但是不建议这样修改,这样修改固定链接会变得难以理解,图中展示了修改为文章名的结果:

图15-修改固定链接格式
2.修改.htaccess文件权限以及修改apache2.conf内容

修改服务器中/var/www/html/.htaccess的权限,修改为755:

# 修改权限
$ sudo chmod 755 /var/www/html/.htaccess

之后修改固定链接格式为文章名(Post name),测试是否成功。若依然失败,则需要保证启动mod_rewrite(默认不启动),之后重启apache2服务器:

# 启动mod_rewrite
$ sudo a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  systemctl restart apache2
# 重启apache2服务器
$ sudo systemctl restart apache2.service
# 如果执行sudo a2enmod rewrite之后出现如下,则mod_rewrite之前已经启动,无需重启apache2服务器
Module rewrite already enabled

之后修改固定链接格式为文章名(Post name),测试是否成功。若还是失败,则说明您的apache2配置可能太严格了,需要修改服务器上/etc/apache2/apache2.conf文件内容。首先打开/etc/apache2/apache2.conf,然后在文件中查找如下:

# 查找如下字符串
AllowOverride None
# 找到如下内容
<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
</Directory>

将AllowOverride None中的None修改为All。之后重启apache2服务(sudo systemctl restart apache2.service)。
最终修改固定链接测试是否成功。

2.安装主题或插件需要FTP

进入服务器端/var/www/html/wp-content目录,新建一个名为tmp的文件夹,并设置tmp文件夹的权限为777(/var/www/html/wp-content/tmp)。之后返回到网站根目录(/var/www/html),编辑wp-config.php并添加如下代码:

define('WP_TEMP_DIR',ABSPATH.'wp-content/tmp');
define("FS_METHOD","direct");
define("FS_CHMOD_DIR",0777);
define("FS_CHMOD_FILE",0777);

添加之后的结果内容如下:

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
	define( 'ABSPATH', __DIR__ . '/' );
}

define('WP_TEMP_DIR',ABSPATH.'wp-content/tmp');
define("FS_METHOD","direct");
define("FS_CHMOD_DIR",0777);
define("FS_CHMOD_FILE",0777);

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

之后设置WordPress的主题文件夹(/var/www/html/wp-content/themes)和插件文件夹(/var/www/html/wp-content/plugins)的权限为777。之后便可以更新主体和插件,而不需要FTP。

3.修改WordPress文件上传限制(Maximum upload file size: 2 MB.)

WordPress上传文件一般都有限制文件大小,通常为2M,如图16所示:

图16-限制上传文件大小为2M

这个限制大小包括图片和视频,一般情况下,对于大部分视频或者部分图片来讲2M大小的空间是不够用的。这时,就需要修改上传文件大小限制,从而上传大于2M的多媒体文件。
WordPress上传文件限制是由PHP的环境配置决定的,通过更改PHP的配置文件可以修改上传限制,PHP的配置文件名为php.ini,全路径通常为:/etc/php/PHP版本号/apache2/php.ini。若配置文件位置未知,则可以在网站根目录(/var/www/html)下新建一个名为phpinfo.php的php文件,内容为:

<?php
// 查看PHP配置信息
phpinfo();
?>

保存文件之后在浏览器端输入:主机IP地址/phpinfo.php确认即可得到类似如图17:

图17

即可得知PHP配置文件的路径为:/etc/php/7.4/apache2/php.ini。随后打开该路径下的php.ini,在配置文件中搜索三个参数:upload_max_filesize,post_max_size和max_execution_time,如下:

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M
...
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 8M
...
; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 30

upload_max_filesize为文件的最大上传大小,在这里为2M,也是默认的大小,可以更改为512M;post_max_size为PHP将接受的POST数据的最大大小,也可以更改为512M;max_execution_time为执行时间,在这里即为上传文件的最大时间,超过最大时间的话,服务器将会强制终端任务,在这里可以更改为600,即10分钟。以上修改值仅为参考,可根据自己的具体情况进行更改。
修改完成保存文件,重启apache2服务器:sudo systemctl restart apache2.service。即可发现最大上传文件大小已经修改为512M,如图18:

图18-最大上传限制修改为512M

至此,修改WordPress文件上传限制完成。

Leave a Reply

Your email address will not be published. Required fields are marked *