wordpress搭建和优化Centos+LNMP

2020-05-18  本文已影响0人  寻心之海

由于更新需要,需要把旧有的网站重新搭建,我选择了最新的服务器软件版本和流行的网站优化技术。基于阿里云ECS Centos 7.5,nigix,MariaDB, PHP搭建wordpress程序,并且优化了缓存memcached,并使用了opcache优化php加载。优化后速度有很大提升

1.更新操作系统

首先用ssh登陆服务器并执行yum update更新系统

升级命令:yum update

2.安装LNMP基础环境

LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Aliyun/Amazon Linux、Debian/Ubuntu/Raspbian/Deepin/Mint Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQL/PHP/Apache)、LAMP(Apache/MySQL/PHP)生产环境的Shell程序。

支持自定义Nginx、PHP编译参数及网站和数据库目录、支持生成Let’seEcrypt免费证书及自备证书、LNMP模式支持多PHP版本、支持单独安装Nginx/MySQL/MariaDB/Pureftpd服务器、支持无人值守安装,同时提供一些实用的辅助工具如:虚拟主机管理、FTP用户管理、Nginx/MySQL/MariaDB/PHP/PHPMyAdmin的升级、常用缓存组件Redis/Xcache等的安装、重置MySQL root密码、502自动重启、日志切割、SSH防护DenyHosts/Fail2Ban、备份等许多实用脚本。

官网lnmp.org,可以查看安装说明。

我选择安装LNMP ,LNMP无人值守命令生成器https://lnmp.org/auto.html

由于是wordpress应用,所以勾选不启用InnoDB,MyISAM引擎最适合。

各软件版本尽量使用最高版本,毕竟更新迭代提升了性能。

内存分配器选择jemalloc性能优异,使用其内存优化管理程序。

2.1 内存不足的问题

安装过程中,如果报错:

Memory less than 1GB, can't install MySQL 5.6+ or MairaDB 10+!

这是因为该一键安装脚本会自动检测你的服务器内存大小,并且要求系统可用最小内存不低于1GB,你可以尝试删掉该一键安装包中 lnmp1.5/include/main.sh 文件的第62~65行内容:

if [[ "${DBSelect}" =~ ^[345789]$ ]] && [ `free -m | grep Mem | awk '{print  $2}'` -le 1024 ]; then

    echo "Memory less than 1GB, can't install MySQL 5.6+ or MairaDB 10+!"

    exit 1

fi

然后创建一个交换分区(用作虚拟内存,CentOS 7默认情况下并没有创建交换分区),依次执行以下命令(需使用root用户执行):

fallocate -l 2G /swapfile  # 创建一个2GB大小的文件,用作交换分区

chmod 600 /swapfile        # 修改文件权限,只允许root用户读写操作

mkswap /swapfile            # 创建交换分区

swapon /swapfile            # 激活/启用该交换分区

swapon -s                  # 查看交换分区是否生效

free -m                    # 查看内存使用情况

最后重新安装lnmp。

安装完成后,如果你不想保留该交换分区,可以使用以下命令进行清除:

swapoff /swapfile          # 释放交换分区

rm -f /swapfile            # 删除上述用作交换分区的文件

2.2 PureFtpd安装

cd lnmp1.5

./pureftpd.sh

使用lnmp ftp edit 编辑功能修改pureftp默认目录。

2.3 LNMP添加虚拟主机、FTP、数据库、伪静态

参考https://lnmp.org/faq/lnmp-vhost-add-howto.html

Nginx虚拟默认主机配置

/usr/local/nginx/conf/nginx.conf 注释server块。虽然只有一个网站,但我还是配置了虚拟主机配置,nginx.conf 后面有代码include vhost/*conf加载网站配置。

nginx检查配置 /usr/local/nginx/sbin/nginx -t

nginx修改配置后重载 /usr/local/nginx/sbin/nginx -s reload

3.上传wordpress网站程序

网站程序上传到wwwroot目录后,执行以下。

对网站目录进行权限设置 ,

目录以及目录下的文件授权

chown -R 755 /home/wwwroot

将目录的所有者分给www组下的www用户。

chown -R www:www /home/wwwroot/

4.PHP缓存加速

缓存操作码(opcode)

Opcode,PHP编译后的中间文件,缓存给用户访问

当客户端请求一个PHP程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码文件,该文件是执行PHP代码后的一种二进制文件表现形式。默认情况下,这个编译好的操作码文件由PHP引擎执行后丢弃;而操作码缓存的原理就是将编译后的操作码保存下来,并放入到共享内存里,以便再下一次调用该PHP页面时重用它,避免了相同代码的重复编译。节省了PHP引擎重复编译的时间,降低了服务器负载,同时减少了CPU和内存的开销.

参考文章让PHP7达到最高性能的几个提示http://www.laruence.com/2015/12/04/3086.html

4.1 Opcache

编辑php.ini

[opcache]

zend_extension=opcache.so

;启用Zend Optimizer优化开关

opcache.enable=1

opcache.enable_cli=1

;共享内存的大小, 总共能够存储多少预编译的 PHP 代码(单位:MB)

opcache.memory_consumption=64

;暂存池中字符串的占内存总量.(单位:MB)

opcache.interned_strings_buffer=4

;最大缓存的文件数目 200  到 100000 之间

opcache.max_accelerated_files=10000

;2s检查一次文件更新 注意:0是一直检查不是关闭

opcache.revalidate_freq=7200

opcache.validate_timestamps=1

;是否保存文件/函数的注释  如果apigen、Doctrine、 ZF2、 PHPUnit需要文件注释,推荐 0

opcache.save_comments=0

; 让Opcache把opcode缓存缓存到外部文件中

opcache.file_cache=/tmp

最后,让配置生效,重新加载php-fpm

service php-fpm restart

4.2 opcache常用配置说明

;开关打开

opcache.enable=1

;开启CLI

opcache.enable_cli=1

;可用内存, 酌情而定, 单位为:Mb

opcache.memory_consumption=528

;Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB)

opcache.interned_strings_buffer=8

;对多缓存文件限制, 命中率不到 100% 的话, 可以试着提高这个值

opcache.max_accelerated_files=10000

;Opcache 会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 定位为秒

opcache.revalidate_freq=1

;打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会提高

opcache.fast_shutdown=1

;检查脚本时间戳是否有更新的周期,以秒为单位。设置为 0 会导致针对每个请求, OPcache 都会检查脚本更新。

opcache.revalidate_freq=0 

;开启源文件时间戳验证

;如果启用,那么 OPcache 会每隔 opcache.revalidate_freq 设定的秒数 检查脚本是否更新。

;如果禁用此选项,你必须使用 opcache_reset() 或者 opcache_invalidate() 函数来手动重置 OPcache,也可以 通过重启 Web 服务器来使文件系统更改生效。

opcache.validate_timestamps=1 

注意:如果设置opcache的opcache.validate_timestamps的指令设成0,那么zend opcache就察觉不到PHP脚本的变化,我们必须手动清空zend opcache缓存的字节码,让他发现php脚本的变动.这个设置适合在生产环境中设置成0,在开发环境下最好还是设置成1.

我们可以这样配置,启用自动重新验证缓存功能:

opcache.validate_timestamps=1

opcache.revalidate_freq=0

视具体生产环境来设定opcache.revalidate_freq值,倘若php代码很少变动,建议该值设置的大一些,可减少opcahce由于检查php文件变动而带来的额外开销,比如7200

关于Opcache file cache

开启Opcache File Cache(实验性), 通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升.

在php.ini中加入:

opcache.file_cache=/tmp

这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在。

4.3 使用新的编译器

使用新一点的编译器, 推荐GCC 4.8以上, 因为只有GCC 4.8以上PHP才会开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能提升(Wordpres的QPS角度衡量)

其实GCC 4.8以前的版本也支持, 但是我们发现它支持的有Bug, 所以必须是4.8以上的版本才会开启这个特性.

4.5 Opcache file cache

开启Opcache File Cache(实验性), 通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升.在php.ini中加入:

opcache.file_cache=/tmp

这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.

5.Memcached安装配置(不建议)

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。

1、安装memcached和memcache php扩展。

进入lnmp解压后的目录,执行:./addons.sh install memcached

可以根据自己的需求选择php-memcache或php-memcached扩展,目前discuz x使用的是前者,功能上php-memcached更强大一些。

建议选择php-memcached,然后自动安装memcached php扩展和memcached。

2、安装wordpress插件

    需要你的服务器支持,就是你的 PHP 需要安装上 Memcached 相关的扩展,注意 PHP 有两个扩展:PHP Memcache 扩展 和 PHP Memcached 扩展,两者仅仅相差一个字母 D,你可以通过 phpinfo() 这个 PHP 函数来检测,你安装的是哪个扩展。或者通过进程查看。

根据不同的 PHP 扩展下载不同的 WordPress Memcached 插件(这个很重要): PHP Memcache 扩展:http://wordpress.org/extend/plugins/memcached/ PHP

因为上面安装的Memcached,所以我的wordpress选择Memcached 扩展插件:https://wordpress.org/plugins/memcached-is-your-friend/

6.Memcached监控面板

从官方下载探针:

http://pecl.php.net/get/memcache-3.0.8.tgz

解压后,里面有一个 memcache.php 文件,编辑并找到如下代码:

define('ADMIN_USERNAME','memcache');    // Admin Username

define('ADMIN_PASSWORD','password');    // Admin Password

define('DATE_FORMAT','Y/m/d H:i:s');

define('GRAPH_SIZE',200);

define('MAX_ITEM_DUMP',50);

$MEMCACHE_SERVERS[] = 'mymemcache-server1:11211'; // add more as an array

$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

修改如下:

define('ADMIN_USERNAME','memcache');    // Admin Username 登录名称,自行修改

define('ADMIN_PASSWORD','password');    // Admin Password 登录密码,自行修改

define('DATE_FORMAT','Y/m/d H:i:s');

define('GRAPH_SIZE',200);

define('MAX_ITEM_DUMP',50);

//下面是定义memcached服务器,一般我们是单机部署,所以注释掉一行,并将服务器地址根据实际修改,比如本文是127.0.0.1

$MEMCACHE_SERVERS[] = '127.0.0.1:11211'; // add more as an array

//$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

上传到网站私密目录(临时测试可以放到根目录),然后通过前台访问 memcache.php 这个文件,输入上面的用户名和密码即可看到 memcached 状态

7.WP Super Cache设置

安装 WP Super Cache插件,在高级页面启用专家模式。

勾选 使用对象缓存系统来存储缓存文件。 (实验室功能)

勾选后使用memcached缓存,如果不用memcached则不需要。

1.WP Super Cache有两种缓存机制

WP Super Cache 设置->内容里面,点击列出所有已缓存的文件网页会刷新出一个显示框,里面有“最新的 WP-Cached 文件”和“最新的 Super Cached 文件”。之前以为都是没有什么区别,或者说没弄明白有什么区别。

经过一番研究终于搞明白,WP Super Cache缓存的内容有两种,一种是对已知用户的,一种是对未知用户的。这两种缓存文件放置的位置和格式都不相同。

WP Super Cache 缓存机制有两种,WP Cache 和 Super Cache。

WP Cache 缓存时,会在你的“wordpress 安装文件夹/wp-content/cache/”文件夹下生成一系列wp-cache-xxxxxx.php格式的文件。而且,每个不同的已知用户即使他们访问同一个页面,都为单独的为他们缓存一个新的文件,因为他们的昵称、邮箱、网址是不同的;

当你一个访问者来的你的站点,他没有登录或者也没有留言,这样他得到是一个在 WordPress cache 文件夹下的 supercache 子文件夹下的纯静态文件,其实你都可以自己到上面的 supercache 目录下去查看同样的永久链接的 HTML 文件的备份。

如果要判断一个页面是否已经被缓存了,在页面中右键查看该页面的源代码,最后一行会有“Cached page generated by WP-Super-Cache+缓存时间”这行字。

2.WP Super Cache高级设置杂项中的两个设置的作用

“不要为已知用户缓存”的作用。「勾选」

明显,不勾选管理员后台无法登录。也就是说登录用户或已评论用户,不缓存,每次都能得到最新页面。

“让已知用户匿名使他们浏览的内容是缓存文件”的作用。

开启CDN缓存HTML文件后,缓存期内,谁第一个访问一个页面,后来者显示的都是他打开后显示的页面。而产生这个问题的原因,就是WordPress会记住评论者的信息,这些人就成为了WP Super Cache中的已知用户,他们在打开文章的时候,会自动填上昵称、邮箱等内容。而勾选了这个选项之后,这些已知用户访问页面的时候,会强制匿名,让他们也成为未知用户。

8.配置文件

LNMP相关配置文件位置

Nginx主配置(默认虚拟主机)文件:/usr/local/nginx/conf/nginx.conf

添加的虚拟主机配置文件:/usr/local/nginx/conf/vhost/域名.confMySQL

配置文件:/etc/my.cnfPHP

配置文件:/usr/local/php/etc/php.iniphp-fpm

配置文件:/usr/local/php/etc/php-fpm.conf

PureFtpd配置文件:/usr/local/pureftpd/pure-ftpd.conf 1.3及更高版本:/usr/local/pureftpd/etc/pure-ftpd.conf

PureFtpd MySQL配置文件:/usr/local/pureftpd/pureftpd-mysql.conf

Proftpd配置文件:/usr/local/proftpd/etc/proftpd.conf 1.2及之前版本为/usr/local/proftpd/proftpd.conf

Proftpd 用户配置文件:/usr/local/proftpd/etc/vhost/用户名.confRedis 配置文件:/usr/local/redis/etc/redis.conf

9.信息面板

memcached面板 见前文

phpinfo信息 lnmp安装后在/home/wwwroot/default下面

opcache面板 lnmp安装后在/home/wwwroot/default下面

PHP探针 lnmp安装后在/home/wwwroot/default下面

PhpMyAdmin可以下载中文版到网站根目录

10、lnmp升级

lnmp所有相关配置

https://github.com/licess/lnmp

https://lnmp.org/

wget http://soft.vpser.net/lnmp/lnmp1.6beta.tar.gz -cO lnmp1.6beta.tar.gz && tar zxf lnmp1.6beta.tar.gz && cd lnmp1.6

nginx升级

cd lnmp1.6 && ./upgrade.sh nginx

然后按提示输入要升级的Nginx版本号,Nginx的版本号可以从http://nginx.org/en/download.html查询。输入版本号后回车,再次回车确认即可开始安装

升级php注意:升级php后,需要重新配置php.ini里面的opcache配置。

2018-11-30 xinyuan

上一篇下一篇

猜你喜欢

热点阅读