wordpress运行环境LNMP安装教程(2024.2.6更新为lnmp2.0正式版)

2018年8月10日更新为lnmp1.5
2020年3月10日更新为lnmp1.6
2021年4月5日更新为lnmp1.7 for centos 7.2
2023年4月2日更新为lnmp2.0 for centos 7.6
2024年2月6日更新为lnmp2.0 for centos 7.6
—————————
1\服务器操作系统基本配置
—————————
ssh登录上服务器:
基本的加强linux服务器安全的措施:修改ssh端口禁用root账户密码登录,限制使用密匙登录->>>参照https://xiaohost.com/2414.html

基本环境及工具

1
2
3
4
5
yum install wget screen -y && screen -S lnmp
sudo yum check-update || sudo yum update -y
yum groupinstall -y 'Development Tools'
yum install -y epel-release
yum install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel

—————————
2\

准备lnmp


—————————

1
cd / && mkdir codefiles && cd codefiles
1
wget http://soft.vpser.net/lnmp/lnmp2.0.tar.gz -cO lnmp2.0.tar.gz && tar zxf lnmp2.0.tar.gz && cd lnmp2.0

准备工作:下载ngx_cache_purge-2.3.tar.gz解压后放入lnmp2.0目录内(当前目录)

1
cd src && wget https://publicfilesforkk-1251162478.cos.ap-chongqing.myqcloud.com/ngx_cache_purge-2.3.tar.gz && tar zxvf ngx_cache_purge-2.3.tar.gz && rm -rf ngx_cache_purge-2.3.tar.gz && cd ..

修改lnmp根目录下(一键包解压后的lnmp1.x目录下)的lnmp.conf文件,将需要安装的模块加入Nginx_Modules_Arguments=””
另外,为了以后需要增加前端做反代的时候扩展,启用Nginx自带的Module ngx_http_realip_module

1
vi lnmp.conf

修改配置文件

为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Download_Mirror='https://soft.lnmp.com'

Nginx_Modules_Options='--add-module=/codefiles/lnmp2.0/src/ngx_cache_purge-2.3'
PHP_Modules_Options=''

##MySQL/MariaDB database directory##
MySQL_Data_Dir='/usr/local/mysql/var'
MariaDB_Data_Dir='/usr/local/mariadb/var'
##Default website home directory##
Default_Website_Dir='/home/wwwroot/default'

Enable_Nginx_Openssl='y'
#允许在 Nginx 中嵌入和执行 Lua 脚本
Enable_Nginx_Lua='y'
Enable_Ngx_FancyIndex='n'
Enable_Swap='y'  
Enable_PHP_Exif='n'
#用于检测文件类型和 MIME 类型的 PHP 模块
Enable_PHP_Fileinfo='y'
Enable_PHP_Ldap='n'
#处理 bzip2 格式的压缩文件,bzip2 是一种广泛使用的数据压缩算法,其压缩率通常比 Gzip 更高,但计算密集度也相对更大一些
Enable_PHP_Bz2='y'
#Sodium 扩展提供了丰富的加密、解密、签名和验证等函数,为 PHP 开发者带来了强大的加密和解密功能
Enable_PHP_Sodium='y'
Enable_PHP_Imap='n'

———————–

安装lnmp

启动安装脚本

1
./install.sh lnmp

选择需要安装的数据库,输入数据库root账户密码
选择要安装的php版本

然后……….等着安装完成

—————————
3\安装网站需要用到的其他软件
—————————

先删除之前安装lnmp不需要保留的东西

1
rm -rf /codefiles/lnmp2.0.tar.gz && rm -rf /codefiles/lnmp2.0/src/ngx_cache_purge-2.3.tar.gz

安装mercached

1
cd /codefiles/lnmp2.0/ && ./addons.sh

wordpress 的mercached插件下载地址:
https://github.com/tollmanz/wordpress-pecl-memcached-object-cache
下载并解压得到的 object-cache.php,上传到 wp-content 目录即可开启 memcached 缓存。
注意:

在wp-config.php中增加配置

1、memcached在本机

1
2
3
4
5
6
7
global $memcached_servers;
$memcached_servers = array(
    array(
        '127.0.0.1', // Memcached server IP address
        11211        // Memcached server port
    )
);

2、memcached在不同的服务器(需要修改ip地址和端口,注意远程服务器的防火墙问题)

1
2
3
4
5
6
7
8
9
10
11
global $memcached_servers;
$memcached_servers = array(
    array(
        '1.2.3.4',
        11211
    ),
    array(
        '1.2.3.5',
        11211
    )
);

上述下载地址失效的话,可以在这里下载wordpress-pecl-memcached-object-cache-master

mercached官方探针下载:
http://pecl.php.net/get/memcache-3.0.8.tgz
解压后,里面有一个 memcache.php 文件,编辑并找到如下代码:

1
2
3
4
5
6
7
8
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

修改为:

1
2
3
4
5
6
7
8
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 状态:

如果发现页面可以打开,但是里面没有 Hits 数据,说明 WordPress 并没有成功连接到 memcached,这时候我们可以在 wp-config.php 加入如下参数:

1
2
3
4
5
6
7
global $memcached_servers;
$memcached_servers = array(
    array(
        '127.0.0.1', // Memcached server IP address
         11211        // Memcached server port
    )
);

实际的 memcached 监听 IP 和端口,通过命令查看

1
netstat -nutlp | grep memcache

启用opcache优化php执行(lnmp已经有,但未启用,使用下面命令启用即可)

1
./addons.sh install opcache

重要:

添加泛域名SSL

要支持泛域名,必须用DNS解析验证方式去申请
要用的各家DNS验证API详见https://lnmp.org/faq/letsencrypt-wildcard-ssl.html
下面以he为例
ssh连接上后每行输入

1
export HE_Username="he账户的用户名"
1
export HE_Password="he账户的密码"
1
lnmp dnsssl he

然后输入相关信息进行SSl申请并生成网站配置
注意第一个域名输入根域名,第二个域名输入*.根域名,否则生成失败

copy配置文件到新服务器备用
Nginx主配置文件
/usr/local/nginx/conf/nginx.conf
虚拟主机配置文件
/usr/local/nginx/conf/vhost/域名.conf
MySQL配置文件(Mariadb的配置文件与mysql通用,但是新环境所以决定使用默认的配置进行修改)
/etc/my.cnf
PHP配置文件
/usr/local/php/etc/php.ini
php-fpm配置文件
/usr/local/php/etc/php-fpm.conf

SNMP监控配置文件
/etc/snmp/snmpd.conf

coretab 的计划任务

,同时查看原服务器定时执行的任务相关脚本,可能之前对脚本进行过修改,需要在新服务器使用

1
2
3
4
*/5 * * * * /bin/bash /codefiles/lnmp1.4/tools/checkmysql.sh
*/5 * * * * /bin/bash /codefiles/lnmp1.4/tools/check502.sh
00 03 * * * /bin/bash /codefiles/lnmp1.4/tools/cut_nginx_logs.sh
00 23 * * 3 /bin/bash /codefiles/lnmp1.4/backup.sh

—————————
4\

网站配置


—————————
(1)新建vhost/绑定域名/开启SSL/将原来的php/Nginx配置文件拷贝过来,优化php及Nginx配置
(2)https://xiaohost.com/1138.html Centos下lnmp正确iptables配置规则

—————————
5\lnmp日志的记录与处理
—————————
(1)使用脚本设定coretab任务,对日志进行切割按天保存,30天后自动删除,参照https://xiaohost.com/1201.html
(2)禁用lnmp的mysql日志功能防止占满磁盘导致出错,参考https://xiaohost.com/119.html

—————————
6\

防火墙规则


—————————
注意iptables规则与云主机的安全组相匹配,参照https://xiaohost.com/1138.html
另外,如果服务器或者程序需要给用户发邮件,需要开启25端口,如果用第三方,开启465
注意:check502和checkmysql脚本检测到php和mysql异常时,服务器会发送邮件通知自己
如果默认使用linux当前登录用户发信,通常会被当成垃圾邮件,需要指定发件人邮箱信息
命令:vi /etc/mail.rc编辑内容如:

1
2
3
4
5
set from=username@126.com
set smtp=smtp.126.com
set smtp-auth-user=username
set smtp-auth-password=password
set smtp-auth=login

注意配置中的smtp-auth-password不是邮箱登录密码,是邮箱服务器开启smtp的授权码,每个邮箱开启授权码操作不同(网易126邮箱开启菜单:设置-> 客户端授权密码)。
—————————
7\开启snmp,使用第三方监控平台对服务器进行监控,以便及时掌握服务器状态(有精力,后期可以自己搭建监控平台,使用)
—————————

1
yum install net-snmp net-snmp-devel -y

snmp分v2c和v3,各自的数据验证方式不同

V2版验证方法
首先清空默认配置文件,里面太多无关内容

1
> /etc/snmp/snmpd.conf

然后编辑配置文件

1
vi /etc/snmp/snmpd.conf

加入以下内容

1
2
3
4
5
rocommunity public 127.0.0.1
rocommunity public 192.168.1.1
# 如果您使用的是采集器,以下IP应该是安装采集器的服务器的IP
rocommunity public 60.195.252.107
rocommunity public 60.195.252.110

将上述的192.168.1.1更改为服务器IP,public可替换为您希望的验证字符串。
之前清空的默认的配置文件里会有一些权限控制的配置,如果您有这个需求,请自行参考CentOS的man文档加入相关配置。

V3验证方法
运行之前请先停用net-snmp服务,否则无法添加,命令如下:

1
service snmpd stop

使用如下命令创建一个snmpv3用户(权限为只读,加密方式为MD5,用户名为jiankongbao,密码为snmp@jiankongbao):

1
net-snmp-config --create-snmpv3-user -ro -A snmp@jiankongbao -a MD5 jiankongbao

运行Net-SNMP

1
2
service snmpd start
chkconfig snmpd on

V2c版本检测
使用如下命令查看161UDP端口是否打开:

1
netstat –antupl

在另外任意一台机器上执行如下命令(请将commity换成您自己的字符串,tartget_ip换为被监控服务器的IP):

1
snmpwalk -v2c –ccommity target_ip

如果出现长串数字,则说明mib没有安装好。

V3版本检测

1
snmpwalk -v 3 -u jiankongbao -a MD5 -A "snmp@jiankongbao" -l authNoPriv 127.0.0.1 sysDescr

我们可以使用snmpwalk来检测snmp服务是否正常开启,命令如下:

1
snmpwalk -v 3 -u jiankongbao -a MD5 -A "snmp@jiankongbao" -l authNoPriv 127.0.0.1 sysDescr

如果一切正常,就会返回正常结果。
如果提示命令无效 使用

1
yum install net-snmp-utils -y

安装即可

snmp防火墙(iptables)设置
V2版

1
iptables -L -n

允许UDP的161端口

1
iptables -I INPUT -p udp --dport 161 -j ACCEPT

高级设置:以下防火墙规则限制为360和监控宝的snmp监控服务器IP,限定只有这些IP能获取信息

1
iptables -I INPUT -p udp -s 60.195.252.107 --dport 161 -j ACCEPT;iptables -I INPUT -p udp -s 60.195.252.110 --dport 161 -j ACCEPT;iptables -I INPUT -p udp -s 127.0.0.1 --dport 161 -j ACCEPT;iptables -I INPUT -p udp -s 45.63.121.42 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 101.199.100.150 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 220.181.150.98 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 180.153.229.230 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 220.181.150.125 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 103.28.11.237 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 103.28.10.244 --dport 161 -j ACCEPT;iptables -A INPUT -i eth0 -p udp -s 103.28.10.245 --dport 161 -j ACCEPT

—————————
8\

完善服务器备份


—————————
(1)使用coretab每天凌晨执行脚本,将本地磁盘/mnt目录增量备份到云磁盘(排除缓存目录,只备份数据库),覆盖,本地盘出问题,修改配置,然后使用云磁盘的备份
(2)使用云磁盘自动快照功能,每天凌晨自动对系统盘及数据盘进行快照(由于本地盘无法提供快照功能,而数据库又跑在上面,所以需要上一步的每天备份数据库至数据盘,要注意(1)(2)的时间配合好,先备份数据库到数据盘,再对数据盘进行快照)
(3)使用脚本每月自动打包备份数据库及网站文件(不含缓存)到远程FTP服务器或其他云提供的对象存储中,定期删除历史备份,保存时间30天

—————————
9\

优化网站


—————————
(1)网站动静完全分离 参考https://xiaohost.com/2473.html
(2)全站https 这个..实在没有难度,就不写出来了吧

—————-拓展:为什么用Nginx+php-fpm,不用Apache+MOD_PHP——————–
Nginx+PHP-FPM很容易实现动静分离,支持upstream配置PHP-FPM集群实现负载均衡以及故障转移
Nginx+PHP-FPM相对Nginx+Apache(libphp5.so)来说,PHP-FPM更灵活,
在php-fpm.conf里可以配置监听不同端口的多个pool
每个pool又可以自由配置PHP-FPM工人进程数pm.max_children
一个pool里的工人进程繁忙不会影响到另一个pool
而且一台服务器上可以运行多个版本的PHP-FPM,借助Nginx的upstream功能,PHP-FPM非常容易横向扩展。

Nginx返回502 Bad Gateway错误不是因为Nginx的问题,而是因为后端的问题.
比如后端PHP-FPM在处理一个请求时进程崩溃了,那么Nginx就会返回502错误.
可行的方法是:用fastcgi_next_upstream配置让Nginx把请求转移给另一个upstream处理.

1
fastcgi_next_upstream error timeout invalid_header http_500 http_502 http_504;

PHP-FPM配合Nginx还可以把I/O密集操作分离出来,减少阻塞对整个PHP应用的影响.
用户下载和curl请求是典型的I/O密集型操作,因为耗时主要发生在网络I/O和磁盘I/O.
需要PHP认证的下载操作可以委托为Nginx的AIO线程池:
header(“X-Accel-Redirect: $filepath”);
至于curl操作,比如可以建立一个监听9001端口的名为io的PHP-FPM进程池(pool),
专门负责处理curl操作(通过Nginx分发),避免curl操作阻塞到监听9000端口的www进程池.
这时io进程池多开点进程也无所谓:

nginx.conf配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
;访问io.php的请求都交给监听9001的PHP-FPM进程池处理
location = /io.php {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9001;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
;php-fpm正常脚本由静态www池处理,阻塞脚本由动态io池处理
[www]
;名为www的进程池监听9000端口,常驻进程数量为固定4个
listen = 127.0.0.1:9000
pm = static
pm.max_children = 4
[io]
;名为io的进程池监听9001端口,进程数常驻4个,最大8个
listen = 127.0.0.1:9001
pm = dynamic
pm.max_children = 8
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 4

其中I/O密集这个进程池[io]采用动态的prefork进程,比如这里是繁忙时8个,空闲时4个.
利用PHP-FPM提供的池的隔离性,分离计算密集和I/O密集操作,可以减少阻塞对整个PHP应用的影响.

原文链接:https://xiaohost.com/2753.html,转载请注明出处。
0