美文网首页
wordpress搭建和优化Centos+LNMP

wordpress搭建和优化Centos+LNMP

作者: 寻心之海 | 来源:发表于2020-05-18 10:45 被阅读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

    相关文章

      网友评论

          本文标题:wordpress搭建和优化Centos+LNMP

          本文链接:https://www.haomeiwen.com/subject/btuonhtx.html