LNMP环境和软件版本:

名称 版本号 查询命令
Linux系统 CentOS Linux release 8.1.1911 (Core) cat /etc/redhat-release
Nginx nginx-1.14.1-9.module_el8.0.0+184+e34fea82.x86_64 rpm -qa | grep nginx
MySQL mysql-8.0.17-3.module_el8.0.0+181+899d6349.x86_64 rpm -qa | grep mysql
PHP php-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64 rpm -qa | grep php

一、安装Nginx

1、查看是否安装过Nginx。

  rpm -qa | grep nginx

2、 有就卸载Nginx。

  yum remove -y "nginx*"

3、重新安装Nginx。

  yum install -y nginx

4、查看启动状态。

  systemctl status  nginx

5、启动Nginx。

  systemctl start nginx

6、添加开机启动。

  systemctl enable nginx

7、设置防火墙开放tcp80端口。

  firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
firewall-cmd --query-port=80/tcp

8、使用浏览器访问http://外网ip/,显示如下界面,说明安装的Nginx服务正常运行。

9、由以上内容可知,默认主页index.html位于默认目录/usr/share/nginx/html中。若要发布自己的网站内容,替换index.html主页内容即可。例:主页内写入内容 “This is a Nginx test.” 。使用浏览器访问http://外网ip,则显示内容‘This is a Nginx test’。若要更换主页目录位置,需在nginx配置文件/etc/nginx/nginx.conf中设置目录路径。

   echo     "This is a Nginx  test."     >     /usr/share/nginx/html/index.html

10、部署项目之后,如果用的是thinkPHP框架,一定要记得 给Runtime 文件夹写的权限

二、安装MySQL数据库

1、查看是否安装过MySQL。

  rpm -qa | grep mysql

2、有就卸载MySQL。

  yum remove -y "mysql*"

3、查看之前安装的Mysql的目录并删除。

  find / -name mysql

如果有结果,例如:

   /var/lib/mysql
/usr/share/mysql

则进行删除

   rm -rf /var/lib/mysql
rm -rf /usr/share/mysql

4、手动删除my.cnf配置文件

  rm -rf /etc/my.cnf

5、确保您的系统已更新。

  sudo yum update

6、MySQL8.0包在AppStream存储库中可用,可以通过运行以下命令来安装:

  sudo dnf install @mysql:8.0

提示时确认安装(不同的版本一些参数可能有所差异)

   Transaction Summary
Install 7 Packages Total download size: 35 M
Installed size: 229 M
Is this ok [y/N]: y

将安装以下软件包

   `Installed:
mysql-8.0.12-6.el8+1923+5642a751.x86_64
mysql-server-8.0.12-6.el8+1923+5642a751.x86_64
mecab-0.996-1.el8+1521+e4919bed.9.x86_64
mysql-common-8.0.12-6.el8+1923+5642a751.x86_64
mariadb-connector-c-config-3.0.6-2.el8.noarch
protobuf-lite-3.5.0-7.el8.x86_64
mysql-errmsg-8.0.12-6.el8+1923+5642a751.x86_64
Complete!`

7、启动MySQL。

    systemctl start mysqld

如果启动失败,用 systemctl status mysqld 命令查看报错信息。

     Status: "Data Dictionary upgrade from MySQL 5.7 in progress"
Error: 2 (No such file or directory)

如果有上面的这条报错信息。可以尝试在MySQL的配置文件中修改 datadir 的值来解决。(MySQL的配置文件一般是 /etc 下面的my.cnf及其指定的文件,具体的寻找方法可以参考linux下查看mysql的配置文件(查看加载的那个配置文件) 这篇博文)

首先把配置文件中的

    datadir=/var/lib/mysql

     改为

    datadir=/var/lib/mysql/data

保存退出。然后在原来的MySQL的数据存储文件夹(yum 安装,一般是/var/lib/mysql)下新建 data 文件夹,并赋予写权限(这一点一定不要忘,否则启动不成功)。然后再一次启动MySQL。

8、添加开机启动。

  systemctl enable mysqld

9、启动服务后,运行命令mysql_secure_installation来加强MySQL数据库服务器

   mysql_secure_installation

运行这个命令之后主要的操作包括:

  • 设置数据库root用户密码 Please set the password for root here.

  • 删除匿名用户 Remove anonymous users?(Press y|Y for Yes, any other key for No)

  • 不允许root用户远程登录 Disallow root login remotely?(Press y|Y for Yes, any other key for No)

  • 删除测试数据库并访问它 Remove test database and access to it?(Press y|Y for Yes, any other key for No)

  • 重新加载特权表 Reload privilege tables now? (Press y|Y for Yes, any other key for No)

设置root密码之后,其他的都可以选择 y ,然后回车。

10、完成后,使用root用户测试访问

   mysql -uroot -p

11、登陆MySQL之后,创建一个新用户newuser,密码为123456,授权远程计算机使用账号newuser登陆数据库,并立刻刷新权限。

   CREATE USER 'newuser'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%' WITH GRANT OPTION;
flush privileges;

上述语句表示使用"newuser"账户,"123456“”密码从任何主机连接到mysql服务器,并赋予所有的权限。

12、退出MySQL数据库。

   quit;

   exit;

13、设置防火墙开放tcp3306端口。

   firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --query-port=3306/tcp

三、 安装PHP

1、查看是否安装过PHP。

  rpm -qa | grep php

2、有就卸载PHP。

  yum remove -y "php*"

3、重新安装PHP。

  yum install -y php

4、创建文件/usr/share/nginx/html/index.php,写入内容 “”。

  touch    /usr/share/nginx/html/index.php
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/index.php

5、重启Nginx服务,使用浏览器访问http://外网ip/index.php,如果显示PHP的消息,则说明php安装成功。

  systemctl restart  nginx

6、完成后还需要添加PHP常用扩展。

   yum install -y  php-opcache php-pdo php-json php-mysqlnd php-devel php-mbstring php-ldap php-gd php-odbc php-pear php-xml php-xmlrpc php-soap curl-devel

PHP的扩展目录是 /usr/include/php/ext( 可以通过 rpm -qal |grep ext 这个命令来查找扩展目录),可以在这里选择安装自己需要的扩展。

7、一些常用扩展缺失的报错

   ‘Call to undefined function Think\simplexml_load_string()’

缺少 php-xml 扩展

    无法加载数据库驱动: Think\Db\Drive

如果thinkPHP框架,报这个错误,是缺失mysql相关的扩展

    如果PHP的图片验证码加载不出来,是缺失 php-gd 扩展
如果ajax不能正常返回 json字符串,可能是缺少 php-json 扩展

写在最后

至此,LNMP环境就安装好了。

我在具体的实践中,主要有两个地方浪费了不少时间:

一是项目部署到服务器之后,Nginx一直报404,我花了差不多半天时间,最后发现竟是Runtime文件夹(本人这次项目中PHP框架用的是thinkPHP3.2.3)没给写的权限;

这个问题解决之后,接踵而至的又是,PHP缺少xml、gd、pdo_mysql等相关扩展导致的问题。

而其中又数pdo_mysql的扩展的安装最是曲折。我一开始是用编译的方法安装pdo_mysql扩展,但是安装时一直提示找不到MySQL数据库。于是我把一开始安装的MariaDB(MariaDB是MySQL关系数据库管理系统的一个复刻,与MySQL的

高度兼容)卸载,重新安装了MySQL8.0,但提示信息还是和原来一样。在我用这个rpm -qal |grep mysql命令查找服务器上所有的含有‘mysql’关键字的文件和文件夹时,发现在 “/usr/include/php/ext/” 这个文件夹下有一个

‘mysqlnd’的文件夹,下图是我搜索结果的‘mysqlnd’部分:

除此还有 xml、json等等文件夹。而这些文件夹的名字就是我安装过的PHP扩展的名字。我猜测这是服务器上可以安装的PHP的扩展库。当我用yum install -y php-mysqlnd命令尝试安装mysqlnd的扩展时,

果然成功。

到这一步,整个项目才顺利运行。

接下来,就是对并发的调试。

并发的调试包括针对Web服务器NginxPHP进程管理器PHP-FPM数据库MySQL的配置修改,以及对Linux操作系统内核参数的调整。

后来我还安装了Redis来应对并发中的大量读写。

现在,我把我所有踩过的坑,标记一下,填补一下。以提醒日后的自己,或许也可以帮助其他的人。

下一篇随笔总结一下Nginx针对高并发的一些配置

本文参考的主要文章有:

Linux安装LNMP(Linux+Nginx+MySQL+PHP)(centos8)

CentOS8或RHEL8系统如何安装MySQL 8.0

centos7下 mysql5.7.9(8.0)启动失败问题

在CentOS7中部署php7.1及开启MySQL扩展

Mysql8.0卸载教程【linux】

阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP)的更多相关文章

  1. 阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之调试工具ab(apache bench)

    ab 测试工具,全称是 apache bench ,是 Apache 提供的一款测试工具,具有简单易上手的特点,在测试 Web 服务时非常实用. ab 可以在 Windows 系统中使用,也可以在 L ...

  2. 阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之MySQL配置

    mysql高并发配置 要在mysqld下设置 1. 修改back_log参数值:由默认的50修改为500.(每个连接256kb,占用:125M) back_log=500 back_log值指出MyS ...

  3. 阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之php-fpm配置及其与Nginx的通信

    一.php-fpm的配置 1. php-fpm的配置,首先要关注进程数量. php-fpm的进程管理方式有三种:static.dynamic.ondemand. static方式,开启固定数量(pm. ...

  4. 阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之Nginx配置

    搭建好LNMP环境之后,接着要考虑的就是整个系统的并发能力了. 一.Nginx的配置 Nginx有很好的并发能力.但是要想使它的并发能力能够施展出来,需要在初步安装好的Nginx上做一些配置.主要需要 ...

  5. 阿里云CentOS 7.4 64位,jdk1.6、mysql5.7、tomcat6部署步骤(个人记录)

    jdk1.6.mysql5.7.tomcat6部署步骤 一.安装jdk1.6 查看当前系统jdk的版本:java -version 方法一:利用yum源来安装jdk(此方法不需要配置环境变量) 查看y ...

  6. 阿里云Centos 6.3 64位 安全加固版 升级 Php 中的 Curl 7.19 到 7.35

    *注意是使用阿里云一键安装包的升级,升级前快照备份哟,小伙伴! 1.SSH远程到root下下载新版本curl 网址地址:http://curl.haxx.se/download.html 完成curl ...

  7. 阿里云上的Centos 7.6的一次Nginx+Mysql+PHP7.3 部署

    阿里云申请了一台服务器 Centos 7.6,每次安装都要上网找一大堆教程,因为不熟悉,因为总是忘记. 所以,有时间的时候,还是记录下自己的学习过程,有助于下次的问题解决. 我先总结下: 1)安装VS ...

  8. 【linux基础】如何查看Linux系统是64位还是32位

    如何查看Linux系统是64位还是32位 $getconf LONG_BIT or $file /bin/ls or #查看linux版本 $lsb_release -a or $uname -a 参 ...

  9. Linux系统部署JavaWeb项目(超详细tomcat,nginx,mysql)

    转载自:Linux系统部署JavaWeb项目(超详细tomcat,nginx,mysql) 我的系统是阿里云的,香港的系统,本人选择的是系统镜像:CentOS 7.3 64位. 具体步骤: 配置Jav ...

随机推荐

  1. centos 7 源码安装openssh

    环境:centos 7.1.1503 最小化安装 依赖包下载:  yum -y install lrzsz zlib-devel perl gcc pam-devel 1.安装openssl ,选用最 ...

  2. kka-typed(5) - cluster:集群节点状态监视

    akka-cluster对每个节点的每种状态变化都会在系统消息队列里发布相关的事件.通过订阅有关节点状态变化的消息就可以获取每个节点的状态.这部分已经在之前关于akka-cluster的讨论里介绍过了 ...

  3. 第12章 Java内存模型与线程

    参考<深入理解Java虚拟机> 一.Java内存模型 1.Java内存模型 2.内存间交互操作  流程图: 3.volatile关键字 两个特性: 3.1.保证变脸对所有线程的可见性: 由 ...

  4. ModelArts准备工作

    说明: 本文是一个ModelArts准备工作文档,适用于初次使用ModelArts的用户.使用ModelArts之前,需要做如下工作:注册华为云账号.完成ModelArts全局配置.以及熟悉OBS相关 ...

  5. TensorFlow开发者证书 中文手册

    经过一个月的准备,终于通过了TensorFlow的开发者认证,由于官方的中文文档较少,为了方便大家了解这个考试,同时分享自己的备考经验,让大家少踩坑,我整理并制作了这个中文手册,请大家多多指正,有任何 ...

  6. 【分区】使用 GPT 分区表分区并格式化 (FreeBSD 系统)

    1. 查看磁盘列表 使用命令 diskinfo -v /dev/vtbd1 查看磁盘设备列表. 2. 创建 GPT 分区 1). 执行命令 gpart create -s gpt vtbd1.2). ...

  7. skynet 初步分析

    自己想实现一个tcp 粘包,残包的功能.  先看看一些开源的库是怎么实现的. 首先开启一个线程.使劲的执行: skynet_socket_poll skynet_socket_poll  这个玩意是干 ...

  8. Linux nohup命令详解,终端关闭程序依然可以在执行!

    大家好,我是良许. 在工作中,我们很经常跑一个很重要的程序,有时候这个程序需要跑好几个小时,甚至需要几天,这个时候如果我们退出终端,或者网络不好连接中断,那么程序就会被中止.而这个情况肯定不是我们想看 ...

  9. 史上最经典的git教程

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wsyht90.blog.51cto.com/9014030/1832284 文档 ...

  10. springboot使用多个@RestControllerAdvice时的拦截顺序

    我们的项目中经常会使用到别人的模块,例如我的项目demo,要依赖别人的A模块,以及基础的核心core模块,此时core模块有一个使用了@RestControllerAdvice的类,负责拦截所有的co ...