关于搭建LNMP环境的一些坑

背景

本人因为在用LNMP环境搭建WordPress博客时遇到了很多坑,本着记录下来回忆和给他人解忧的心态写下这篇博客.

LNMP环境

LNMP环境指的是Linux+Nginx+MySQL+PHP.这环境是大多数小型服务器,个人网站的模板.

这环境既可以通过云服务器商提供的免费服务镜像获得,也可以自己手动搭建.

手动搭建过程可以参考腾讯云官方指导:基于 CentOS 搭建 WordPress 个人博客

阿里云的也可以,这看个人

本人的Linux版本是CentOS7.5 64位,博客里的CentOS版本为6.8(之所以遇到那么多坑和版本相关甚密)

搭建过程中遇到的问题如下:

Nginx 环境

在CentOS 7.5下下载的Nginx 是1.12.2版本,教程所下载的Nginx是1.10.2版本

位置问题

Nginx1.12.2 没有default.conf.

而1.10.2版本的default.conf是放在/etc/nginx/conf.d下,并且有着默认的值.

配置内容问题

在Nginx1.12.2中nginx.conf中的内容多了如下这部分

include /etc/nginx/conf.d/*.conf;
server {
​ listen 80 default_server;
​ listen [::]:80 default_server;
​ server_name _;
​ root /usr/share/nginx/html;
​ Load configuration files for the default server block.
​ include /etc/nginx/default.d/**.conf;

location / {
​ }

error_page 404 /404.html;
​ location = /40x.html {
​ }

error_page 500 502 503 504 /50x.html;
​ location = /50x.html {
​ }
}

这段代码声明了一个默认的server,本意是想着安装之后可以看到Nginx的默认跳转页面,可是如果安装教程上的在conf.d中加入wordpress.conf就会报错,报的是启动错误,多个server占用80端口.

这是因为之前默认server是在conf.d中的default.conf中书写的,教程中会让你把默认的default.conf改成default.conf.bak,这样include /ect/nginx/conf.d/*.conf就不会引入default.conf.bak了.

但是在新版的nginx中你必须去掉nginx.conf多出来这段默认server声明才能正确运行.

PS: 这个问题并不会在nginx -t -c nginx.conf(检查配置文件是否配置正确,-c后为配置文件路径)中检查出来,因为语法是没问题的,只有运行起来才会发现.

MySQL 环境

啊啊啊啊…MySQL环境是最多坑的,因为MySQL更新到8之后很多以前的东西都废弃了或者换成另一种形式.

关于CentOS下载MySQL

因为在CentOS 7之后就不再提供MySQL的默认下载包了,yum里面是不能直接下载MySQL的.

只能通过自己装yum源才能下载,这里具体我就不细讲了,到时会专门拉一个专题讲MySQL的坑.

这里是我找到的一个解决方案

WordPress连接数据库时出错(根本原因是密码不正确)
  • 因为在MySQL5.7.9时加强了密码验证机制,初始的密码会有诸多限制,例如需要有大小写英文字母,数字,特殊符号等,因为是自己的博客用,便不想设置那么高强度的密码.下面时调低密码强度的方法.

    进入MySQL

    查看密码校验参数 : show variables like ‘%validate%’;

    validate picture

    需要根据自己显示的变量名来更改,例如有些时validate_password__length.

    下面介绍下各个变量的含义:

    • validate_password.check_user_name 检查用户名

    • dictionary_file 插件用于验证密码强度的字典文件路径。

    • length 密码最小长度,参数默认为8,它有最小值的限制,最小值为:number_count + special_char_count + (2 * mixed_case_count)

    • mixed_case_count 大写字母和小写字母包含的个数

    • number_count 数字数量

    • special_char_count 特殊字符数量

    • policy 密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG。有以下取值:
      Policy Tests Performed
      0 or LOW Length

      1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
      2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file
      默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。

    修改参数配置

    mysql> set global validate_password.policy = 0;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> set global validate_password.mixed_case_count = 0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> set global validate_password.special_char_count=0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> set global validate_password.number_count = 3;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> set global validate_password.length = 3;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show variables like '%validate%';
    +--------------------------------------+-------+
    | Variable_name                        | Value |
    +--------------------------------------+-------+
    | validate_password.check_user_name    | ON    |
    | validate_password.dictionary_file    |       |
    | validate_password.length             | 3     |
    | validate_password.mixed_case_count   | 0     |
    | validate_password.number_count       | 3     |
    | validate_password.policy             | LOW   |
    | validate_password.special_char_count | 0     |
    +--------------------------------------+-------+
    7 rows in set (0.00 sec)
    
    
  • 修改密码

    修改密码也有个大坑,这个大坑卡了我好几个小时.那时WordPress显示连接不上数据库,我以为服务没起来,看了一下发现一切正常,用命令行进入数据库也没问题,就僵住了.

    最后才发现,是因为WordPress用配置文件里的账号密码连数据库时会用MySQL的密码形式加密密码,但我设置密码的时候设置的是明文.(命令行进数据库时加不加密都能进,真是日狗了)

    这需要重新设置密码

    MySQL 6.7设置密码

    set password for 'username'@'localhost' = password('yourpassowrd');
    

    MySQL 8设置密码

    alter user 'username'@'localhost' identified with mysql_native_password by 'yourpassword'
    

    **注意一下这里必须加with mysql_native_password **不然就会出现我上面出现的情况,写在配置文件里的密码不能通过校验.

    关于运行时MySQL总是自动关闭问题

    在装好所有环境并搭好WordPress后,总会出现MySQL自动关闭的问题,重启时会报不能从mysql.sock的连接MySQL.

    后来一查错误日志

    2018-09-23T11:37:46.830631Z 0 [ERROR] [MY-012681] [InnoDB] InnoDB: mmap(137428992 bytes) failed; errno 12
    
    2018-09-23T11:37:46.830703Z 1 [ERROR] [MY-012956] [InnoDB] InnoDB: Cannot allocate memory for the buffer pool
    
    2018-09-23T11:37:46.830726Z 1 [ERROR] [MY-012930] [InnoDB] InnoDB: Plugin initialization aborted with error Generic error.
    
    2018-09-23T11:37:46.830755Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
    
    2018-09-23T11:37:46.830880Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
    
    2018-09-23T11:37:46.830908Z 0 [ERROR] [MY-010119] [Server] Aborting
    

    [InnoDB] InnoDB: Cannot allocate memory for the buffer pool内存不够…

    我的服务器是个学生服务器,1核1G的最小型.第一次遇见内存不够引发的问题.

    解决方案:

    1. 废话,用钱砸啊,扩大容量,上8核32G,就不会有这种问题了.能用钱解决的问题就不是问题!(想上那张"就是干"的大爷图,没找着).但都用学生服务器了,那就是没钱嘛,别拆穿别拆穿.

    2. 第二种方法就是操作系统里说的虚拟内存,割硬盘的一部分作内存,速度嘛肯定会低,但只能留下没钱的眼泪了.操作如下:参考博客

      1. 创建交换分区的文件

        #dd if=/dev/zero of=/mnt/swap bs=block_size count=number_of_block

        注:block_size、number_of_block 大小可以自定义,比如bs=1M count=1024 代表设置1G大小swap分区

      2. 设置交换分区文件

        mkswap /mnt/swap

      3. 启用交换

        swapon /mnt/swap

        如果在/etc/rc.local中有swapoff -a 需要修改为swapon -a

      4. 设置开机自启

        需要修改文件/etc/fstab中的swap行。

        添加 /mnt/swap swap swap defaults 0 0

        注:/mnt/swap 路径可以修改,可以根据创建的swap文件具体路径来配置。

        fstab

        设置后可以执行free -m命令查看效果

        free -m

当然也有降低InnoDB引擎的缓冲区大小,限制MySQL的最大连接数还有Nginx优化等方法,也在参考博客里有,可自行查看.

PHP环境

php环境没遇到啥,感动常在.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值