在开始本文前,我假定你已经安装好了nginx、php-fpm和mariaDB(或mysql)。它们的安装过程可参考我以前的文章。
1. 安装EPEL(Extra Packages for Enterprise Linux):
# yum install epel-release
2. 安装wordpress:
# yum install wordpress
安装好的wordpress在/usr/share/wordpress.
(以下步骤参考wordpress官网www.wordpress.org)
3. 配置文件在/etc/wordpress/wp-config.php,在/usr/share/wordpress下也有该文件的link
4. 在修改上述配置之前,我们需要先配置好数据库。
4.1 开启mariadb server:
# systemctl enable mariadb
# systemctl start mariadb
4.2 设置mariadb的root密码:
#mysqladmin -u root password your_mariadb_password
4.3 建立数据库和操作员:
#create database your_database_name;
#grant all privileges on your_database_name.* to "operator_name"@"localhost" identified by "operator_passwd";
# flush privileges;
# exit
5. 我们使用nginx,因此将wp-config.php的读权限赋予nginx:
# chgrp nginx wp-config.php
6. 修改wp-config.php:
修改DB_NAME、DB_USER、DB_PASSWORD;
使用wordpress的在线salt generator产生Security Keys,替换原文件里的相应内容;
(salt generator: https://api.wordpress.org/secret-key/1.1/salt/)
9. 将wordpress安装目录复制到/usr/share/nginx/blog,原/usr/share/wordpress作为备份。复制完成后,删除新目录里wp-config.php的link,以文件形式从原始位置(/etc/wordpress/wp-config.php)重新复制一份。注意该文件权限应该不允许一般用户进行读操作(660或640);
10. 将blog目录的own和group修改为网站文件所有者(一般为上传网站的FTP账号)(-R);
说明1:此处假定你的php-fpm按照我前面的blog进行了配置,使用了FTP账号作为php-fpm的user/group。
11. 执行https://your_web_site/blog/wp-admin/install.php
说明:因为前面我们已经手工修改了wp-config.php,所以此处不需要setup-config.php。
12. 配置blog用户名和密码,注意和上面的db用户不是一回事
13. 如果上一步submit后出现403,可能是没有将index.php加入nginx的默认首页,简单添加一下到location /就好了
14. 然后就可以看到Dashboard了。
15. 安全说明
1) 对于php文件,nginx并不会读取文件内容,而是将文件位置和名称直接扔给php-fpm,所以很多博客上说的“nginx需要对php有读权限”的说法是错误的。这是一个影响网站安全的重要的点。只有在nginx不需要php读权限的基础上,我们才可以将wp-config.php的权限设置为600,仅将该文件读权限开放给php-fpm,而nginx只需要文件所在目录的读权限就可以了。
16. 更改语言
在wp-content目录下新建一个目录languages,将你从wordpress.org下载得到的中文语言包解压后的文件放到该目录。回到browser,在dashboard里选择语言并save。
17. 低配置服务器上的优化
17.1 /etc/my.cnf
在[mysqld]下增加一行:
performance_schema=off
17.2 /etc/my.cnf.d/server.cnf
在[mysqld]下增加:
innodb_buffer_pool_size = 32M
key_buffer_size = 4M
# 说明:很多文章都会让你把innodb_buffer_pool_size 设置为服务器内存的80%,但这是以讹传讹的做法。按mariadb官方wiki/FAQ,仅当服务器内存>4G时,将innodb_buffer_pool_size设置为空闲内存(跑了其他所有服务,单单没有开maridb的情况下的free memory,而不是服务器配置内存!)的80%。对于低配置服务器,该值应该比默认值(128M)更小。key_buffer_size的值没有查到建议值,这里我按同等比例减小。
17.3 /etc/php-fpm.d/www.conf
pm.max_children = 10
pm.start_servers = 2
pm.max_spare_servers = 5