环境
- 系统:Ubuntu 18.04 ×64
- 服务:Apache 2
- 语言:PHP 7.4
- 数据库:MySQL 5.7
- 网站框架:WordPress 5.4.2–zh_CN
安装
更新系统
$ sudo apt update
$ sudo apt upgrade
添加 ppa 源
$ sudo apt install software-properties-common -y
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt update
$ sudo apt upgrade
安装所需要的软件
Apache
$ sudo apt install apache2 -y
PHP
$ sudo apt install php7.4 -y
$ sudo apt install libapache2-mod-php7.4 -y
MySQL
$ sudo apt install php7.4-mysql -y
$ sudo apt install mysql-server -y
WordPress
到官方简体中文网手动下载:cn.wordpress.org/download 或者执行:
$ wget https://cn.wordpress.org/latest-zh_CN.tar.gz
下载后解压并拷贝到目录 /var/www/html/ 下
$ tar zxf latest-zh_CN.tar.gz
$ sudo mv -f wordpress/ /var/www/html/
配置
修改 wordpress 文件夹的所有者和读写属性
$ cd /var/www/html/
# 将 wp 替换为你的用户名,www-data是服务器的默认组
$ sudo chown -R wp:www-data wordpress
# 修改读写属性
$ sudo chmod 777 -R wordpress
启用 Apache Rewrite 操作,让其能够重定向你的访问链接
$ sudo a2enmod rewrite
配置 MySQL 数据库,用于后面的网站数据存储
先给 MySQL 控制台 root 用户添加免密登录
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在最后一行添加:
skip-grant-tables
重启服务后进入 MySQL 控制台
$ sudo service mysql restart # 重启服务
$ mysql -u root -p # 直接回车进入
修改 MySQL root 用户的密码
# 将 xxxxxx 替换为你自己的密码
update mysql.user set authentication_string=PASSWORD('xxxxxx'), plugin='mysql_native_password' where user='root';
flush privileges;
exit
这样下次进入时就使用自己定义的密码登录 MySQL 控制台了,然后记得回到 mysqld.cnf 把刚刚添加的 skip-grant-tables 删除,否则不安全
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf # 删除 skip-grant-tables
$ sudo service mysql restart # 重启服务
创建数据库
# 将 xxxxxx 替换为你自己的密码
create database wordpressdb;
create user wordpress@localhost IDENTIFIED BY 'xxxxxx';
GRANT ALL PRIVILEGES ON wordpressdb.* TO wordpress@localhost;
FLUSH PRIVILEGES;
exit
配置 Apache 主页
$ sudo vi /etc/apache2/sites-enabled/000-default.conf
修改主页在 wordpress 目录下
# 将原来的
DocumentRoot /var/www/html
# 修改为
DocumentRoot /var/www/html/wordpress
修改 Apache 服务器对文件夹的读写限制
$ sudo vi /etc/apache2/apache2.conf
# 将原来的
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# 修改为
<Directory /var/www/>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
并在最后添加一行域名地址,否则重启服务会报错
# 替换为你的域名
ServerName www.domain.com
修改 WordPress 数据库配置
$ cd /var/www/html/wordpress/
$ cp wp-config-sample.php wp-config.php
$ sudo vi wp-config.php
将要连接的数据库设置为前面 MySQL 控制台所配置的
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define( 'DB_NAME', 'wordpressdb' );
/** MySQL数据库用户名 */
define( 'DB_USER', 'wordpress' );
/** MySQL数据库密码 */
# 将 xxxxxx 替换为前面配置数据的密码
define( 'DB_PASSWORD', 'xxxxxx' );
并在最后面添加 WordPress 进行更新时免登录的配置
define("FS_METHOD", "direct");
define("FS_CHMOD_DIR", 0777);
define("FS_CHMOD_FILE", 0777);
重启服务
$ sudo service mysql restart
$ sudo apache2ctl restart
到这里已经可以用你的域名访问 WordPress 进行网站的初始化配置了~
ssl 配置
若你的域名是 http 类型的,可以在阿里云申请免费 ssl 证书,将 http 升级为 https,申请比较简单这里就不说了
选择 Apache 服务器类型的证书下载,并上传到 /etc/apache2/xxx 目录下,如 /etc/apache2/cert
启用SSL模块
$ sudo a2enmod ssl
可以执行命令查看是否自动生成 default-ssl.conf 文件
$ ll /etc/apache2/sites-available/
total 20
drwxr-xr-x 2 root root 4096 Jun 22 12:26 ./
drwxr-xr-x 9 root root 4096 Jun 22 12:27 ../
-rw-r--r-- 1 root root 1342 Jun 22 10:28 000-default.conf
-rw-r--r-- 1 root root 6308 Jun 22 10:47 default-ssl.conf
修改SSL配置文件
$ sudo vi /etc/apache2/sites-available/default-ssl.conf
将对应的参数修改为你自己的内容
<IfModule mod_ssl.c>
<VirtualHost *:443>
# 添加ServerName, 域名替换为你自己的
ServerName www.domain.com
DocumentRoot /var/www/html/wordpress
...
SSLCertificateFile /etc/apache2/cert/cert.crt
SSLCertificateKeyFile /etc/apache2/cert/cert.key
...
SSLCertificateChainFile /etc/apache2/cert/chain.crt
创建软连接进行关联
$ sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl.conf
重新加载 Apache 配置文件
$ sudo /etc/init.d/apache2 force-reload
重启 Apache 服务
$ sudo /etc/init.d/apache2 restart
然后使用 https://www.domain.com 访问你的域名,看是否能正常访问并且域名左边有个小锁头,说明成功~
强制 https 访问
$ cd /var/www/html/wordpress/
$ sudo vi .htaccess
在配置里最后增加两行,必须在 <IfModule> 以外,否则会被自动重写从而丢失
</IfModule>
# END WordPress
# 强制 HTTPS 访问
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
这样用 http 访问也会自动跳转到 https,同时最好也在 WordPress 后台管理的 个人资料 和 设置 里面的把 站点/域名 都改为 https 类型的
美化 WordPress 搜索 url
将搜索后的 url 从
https://www.domain.com/?s=搜索词
变为
https://www.domain.com/search/搜索词
在主题函数模板 functions.php 最后添加即可
//搜索美化伪静态
function change_search_url_rewrite() {
if ( is_search() && ! empty( $_GET['s'] ) ) {
wp_redirect( home_url( '/search/' ) . urlencode( get_query_var( 's' ) ) );
exit();
} elseif ( is_search() && empty( get_query_var( 's' ) ) ) {
wp_redirect( home_url( '/search' ) );
exit();
}
}
add_action( 'template_redirect', 'change_search_url_rewrite' );
安装 PHP 模组
安装完后在 管理后台 – 工具 – 站点健康 会看到 WordPress 检测到 PHP 缺失的模组,根据提示的模组名字一个个安装即可,比如 curl
$ apt-cache search curl | grep php
php7.2-curl - CURL module for PHP
php-http-request2 - Provides an easy way to perform HTTP requests
php-curl - CURL module for PHP [default]
php5.6-curl - CURL module for PHP
php7.0-curl - CURL module for PHP
php7.1-curl - CURL module for PHP
php7.3-curl - CURL module for PHP
php7.4-curl - CURL module for PHP
# 根据搜索结果安装与当前 php 版本相同的模组
$ sudo apt install php7.4-curl -y
# 提示缺失的模组全部安装完后重启 Apache2 服务即可
$ sudo /etc/init.d/apache2 restart
又或者直接执行下面命令,全部一次性安装
$ sudo apt install php-curl php-gd php-xml php-mbstring php-xmlrpc php-zip php-soap php-intl php-imagick -y
$ sudo /etc/init.d/apache2 restart