Centos7 搭建LNMP环境

Auth:HasanZHBi   Date:2020/06/20   CAT:Linux环境搭建

一、安装环境

Centos 7.8 Nginx 1.16.1 MySQL 5.7.29 PHP 7.4.7

二、准备工具

Xshell 6 WinSCP Navicat Premium 12

三、开始安装

1. 安装Nginx

注:我们首先安装nginx,在安装nginx之前 需要提前安装gc++环境支持,当然还有一些nginx模块依赖的lib库

# yum install gcc-c++
# yum install pcre pcre-devel
# yum install zlib zlib-devel
# yum install openssl openssl--devel 

好了,安装完上面的环境支持我们接下来继续开始安装 nginx

首先我们需要连接WinSCP进入远程服务器目录,在/usr/local/路径下创建一个 nginx文件夹,方便我们后续管理。

我们这里是提前将下载好的文件直接拷贝到服务器nginx目录下;

依次执行:

# cd /usr/local/nginx      //进入目录
# tar -zxvf nginx-1.16.1.tar.gz     //解压
# cd nginx-1.16.1   //进入解压目录
# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module //检测环境
# make      //编译
# make install  //安装

这里列举几个在这里常见的几个问题:

1 ./configure: error: the HTTP rewrite module requires the PCRE library.

解决方式->需要安装pcre-devel

# yum install pcre-devel

2 ./configure: error: the HTTP gzip module requires the zlib library.

解决方式->需要安装zlib-devel

# yum install zlib-devel

3 ./configure: error: the HTTP cache module requires md5 functions from OpenSSL library.

解决方式->需要安装openssl-devel

# yum install openssl-devel

好了,到这里如果没有任何问题应该是编译安装完成了

我们来检查一下

# whereis nginx

完毕后,我们进入安装后的目录(/usr/local/nginx)便可以启动或停止它了。


启动指令:

# /usr/local/nginx/sbin/nginx

停止指令:

# /usr/local/nginx/sbin/nginx -s stop

重启指令:

# /usr/local/nginx/sbin/nginx -s reload

查看状态:

# ps -aux | grep nginx

查看版本:

# /usr/local/nginx/sbin/nginx -v

2. 安装MySQL

2.1 首先我们进入到/usr/local目录,然后下载 mysql 源码包。

当然也可以提前下载好传到服务器上,这里我们就采用wget命令直接在服务器下载。

# cd /usr/local     //进入目录
# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz  //wget指令 下载Mysql源码包
# tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz  //解压
# mv mysql-5.7.29-linux-glibc2.12-x86_64 mysql    //文件夹重命名

2.2 添加系统 mysql 组和 mysql 用户

# groupadd mysql
# useradd -r -g mysql mysql

2.3 开始安装

# cd /usr/local/mysql         //切换到mysql目录
# chown -R mysql:mysql ./     //修改当前目录拥有者为mysql用户
# mkdir data                  //创建一个名为data的目录
# cd bin                      //进入mysql目录下的bin目录    
# ./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql      //安装

注:到这一步有可能会出现以下问题

1.error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory

出现该问题首先检查该链接库文件有没有安装使用 命令进行核查

# rpm -qa |grep libaio

运行该命令后发现系统中无该链接库文件,那我们来安装它就解决了

# yum install libaio-devel.x86_64

2.4 拷贝临时密码

我们在安装完成之后 系统会生成 mysql 的临时密码 ,需要保存一下,第一次登录要用到。

2.5 修改当前目录拥有者为root用户,仅开放 mysql 用户data目录权限

# chown -R root:root ./
# chown -R mysql:mysql data

2.6 配置 my.cnf 和 开机启动

# cd /usr/local/mysql/support-files       //进入mysql文件目录
# cp mysql.server /etc/init.d/mysql       //拷贝脚本文件到服务目录下
# vim /etc/init.d/mysql                   //编辑脚本文件

注: 这里对不熟悉Linux或者有使用差异的推荐使用WinSCP打开对应目录,直接找到对应文件编辑比较直观和方便。

添加以下参数 ,并保存退出。

basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

之后进入服务器根目录下的etc文件夹

# cd /etc

我们找到 my.cnf 文件(如果没有,我们可以自己手动创建一个)编辑它 添加并修改部分配置信息

# vim my.cnf     

贴一张配置图自行对照

img

编辑完我们保存;


注:这里我们说一下 最基本 VIM 编辑器的指令和介绍

1、vim默认进入的是「命令模式」,此时需要按下 i 进入编辑(插入)模式之后才可以进行编辑。

2、i 切换到输入模式

3、按ESC键可随时退出底线命令模式。

4、: 切换到底线命令模式,以在最底一行输入命令。

5、命令模式中 q 退出程序

6、命令模式中 w 保存文件

7、底线命令模式中 :wq 保存退出 :q! 强制退出不保存


OK ! 完成上面步骤我们来启动 mysql 看看成没成功

# service mysql start

这里出现了问题,我们统一列举一下,后续有小伙伴出现类似问题就可以解决了!


1.log-error set to ‘/var/log/mariadb/mariadb.log’, however file don’t exists. Create writable for user ‘mysql’.

解决方式->用WinSCP去看的时候发现并没有/var/log/mariadb/mariadb.log这个路径和文件,那我们就创建, 并给mysql用户授权即可

# mkdir /var/log/mariadb
# touch /var/log/mariadb/mariadb.log
# chown -R mysql:mysql /var/log/mariadb/

2.mysqld_safe Directory ‘/var/lib/mysql’ for UNIX socket file don’t exists

解决方式->没有对应的路径和文件,创建并赋权给 mysql 用户

# mkdir /var/lib/mysql
# touch /var/lib/mysql/mysql.sock
# chown -R mysql:mysql /var/lib/mysql/

3.配置信息中 pid-file=/var/run/mariadb/mariadb.pid 目录及文件不存在

解决方式->创建目录及文件,赋权给 mysql 用户

# mkdir /var/run/mariadb
# touch /var/run/mariadb/mariadb.pid
# chown -R mysql:mysql /var/run/mariadb/

2.7 登录数据库修改部分信息

# mysql -u root -p

注:这里登录需要输入我们安装时系统给自动生成的临时密码


出现问题:

1.输入完成后,部分会出现错误 -bash: mysql: command not found

原因是这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。那我们首先得知道 mysql 命令或 mysqladmin 命令的完整路径,我们这里 mysql 的路径是:/usr/local/mysql/bin/mysql,我们则可以这样执行命令:

# ln -s /usr/local/mysql/bin/mysql /usr/bin

2.ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’

我们需要在我们的 my.cnf 文件中配置 client 参数,如图所示

# cd /etc
# vim my.cnf

img


我们继续登录 ,登录进入之后首先修改临时密码。

set password for root@localhost = password('这里填写你的密码');

刷新

flush privileges;

退出

exit;

再次登录,我们需要开启远程登陆。

use mysql;
grant all privileges on *.* to 'root'@'%' identified by '你要设置的远程登录数据库密码' with grant option;
flush privileges;
quit;

这样我们就可以使用Navicat等图形化界面连接服务器数据库了。

3.安装PHP

首先我们安装php依赖包:(这里我是把包全部下载下来 用WinSCP工具直接上传到服务器中的)

3.1 安装 libxml2

# mkdir /usr/local/libxml2/
# cd /usr/local/libxml2/
# tar -zxvf libxml2-2.9.9.tar.gz
# cd libxml2-2.9.9
# ./configure --prefix=/usr/local/libxml2/
# make
# make install

出现报错:make的时候会报错,这里我们需要先安装 python-devel 就解决了

# yum install python-devel

3.2 安装libmcrypt

# mkdir /usr/local/libmcrypt/
# cd /usr/local/libmcrypt/
# tar -zxvf libmcrypt-2.5.8.tar.gz
# cd libmcrypt-2.5.8
# ./configure --prefix=/usr/local/libmcrypt/
# make 
# make install
3.2.1 安装libltdl 就在libmcrypt的源码目录下
# cd libltdl
# ./configure --enable-ltdl-install
# make
# make install

3.3 安装mhash

# mkdir /usr/local/mhash/
# cd /usr/local/mhash
# tar -zxvf mhash-0.9.9.9.tar.gz
# cd mhash-0.9.9.9
# ./configure --prefix=/usr/local/mhash
# make 
# make install

3.4 安装mcrypt

# mkdir /usr/local/mcrypt/
# cd /usr/local/mcrypt
# tar -zxvf mcrypt-2.6.8.tar.gz
# cd mcrypt-2.6.8
# export LD_LIBRARY_PATH=/usr/local/libmcrypt/lib:/usr/local/mhash/lib
# export LDFLAGS="-L/usr/local/mhash/lib/ -I/usr/local/mhash/include/"
# export CFLAGS="-I/usr/local/mhash/include/"
# ./configure --prefix=/usr/local/mcrypt --with-libmcrypt-prefix=/usr/local/libmcrypt
# make 
# make install

3.5 安装libpng

# mkdir /usr/local/libpng/
# cd /usr/local/libpng
# tar -zxvf libpng-1.6.7.tar.gz
# cd libpng-1.6.7
# ./configure --prefix=/usr/local/libpng
# make
# make install 

3.6 安装jpeg

# mkdir /usr/local/jpeg9/
# cd /usr/local/jpeg9
# tar -zxvf jpegsrc.v9c.tar.gz
# cd jpeg-9c
# ./configure --prefix=/usr/local/jpeg9 --enable-shared --enable-static
# make
# make install

3.7 安装freetype

# mkdir /usr/local/freetype/
# cd /usr/local/freetype
# tar -zxvf freetype-2.10.0.tar.gz
# cd freetype-2.10.0
# ./configure --prefix=/usr/local/freetype
# make 
# make install

3.8 安装部分所需开发库

# yum install libxml2-devel
# yum install sqlite-devel
# yum install libcurl-devel
# yum install oniguruma-devel
# yum install libpng-devel
# yum install libjpeg-devel
# yum install freetype-devel
# yum install libzip-devel
# yum install openssl-devel

3.9 创建用户组和用户

最好在搭建环境的时候,每安装一个服务,最好都创建一个nologin去赋权,这样防止出现安全隐患。

# groupadd www
# useradd -g www www

3.10 到这里我们正式安装PHP:

注:我们这里安装的是php 7.4.x 版本 如以前的7.3.x版本不同,部分参数有变化,具体变化对照官网

https://www.php.net/manual/zh/migration74.other-changes.php

# mkdir /usr/local/php/
# cd /usr/local/php
# tar -zxvf php-7.4.7.tar.gz
# cd php-7.4.7
# ./configure \
--prefix=/usr/local/php \
--with-fpm-user=www \
--with-fpm-group=www \
--with-config-file-path=/usr/local/php/etc \
--with-MySQL=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-jpeg=/usr/local/jpeg9 \
--with-freetype=/usr/local/freetype \
--with-mcrypt=/usr/local/libmcrypt \
--with-mhash=/usr/local/mhash \
--with-libxml \
--with-zlib \
--with-curl \
--with-pear \
--with-gettext \
--with-openssl \
--with-pcre-dir \
--with-iconv-dir \
--without-gdbm \
--with-kerberos \
--with-pdo-mysql \
--with-pdo-sqlite \
--with-xmlrpc \
--with-xsl \
--with-zip \
--with-bz2 \
--enable-exif \
--enable-bcmath \
--enable-gd \
--enable-sockets \
--enable-fpm \
--enable-fastcgi \
--enable-soap \
--enable-mbstring \
--enable-xml
# make 
# make install

编译PHP时会出现的几个问题:

1.No package ‘libxml-2.0’ found 缺失libxml2.0 库 //如果不是提前源码安装过libxml2并且在编译时指定对应路径就会报这个错误

解决方式->最简单的方式就是直接yum源安装

# yum -y install libxml2
# yum -y install libxml2-devel

2.No package ‘sqlite3’ found

解决方式->使用yum源安装

# yum install sqlite-devel

3.configure: error: Package requirements (oniguruma) were not met: Package ‘oniguruma’, required by ‘virtual:world’, not found

解决方式->使用yum源安装

# yum -y install http://mirror.centos.org/centos-7/7/cloud/x86_64/openstack-queens/Packages/o/oniguruma-6.7.0-1.el7.x86_64.rpm
# yum -y install http://mirror.centos.org/centos-7/7/cloud/x86_64/openstack-queens/Packages/o/oniguruma-devel-6.7.0-1.el7.x86_64.rpm

4.error: Please reinstall the BZip2 distribution

解决方式->使用yum源安装

# yum install bzip2 bzip2-devel

5.error: Package requirements (libxslt >= 1.1.0) were not met: No package ‘libxslt’ found.

解决方式->使用yum源安装

# yum install libxslt-devel

6.No package ‘libzip’ found 或者 Requested ‘libzip >= 0.11’ but version of libzip is 0.10.1

解决方式->这个报错提示非常明显,配置程序没有找到 libzip 库或者找到了但是版本低于 0.11,你用 yum 安装 libzip-devel 的话,安装的版本是 0.10,版本达不到要求。所以,我们需要卸载掉 之前yum 安装的 libzip 然后手动安装新版。

# yum remove libzip libzip-devel
# mkdir /usr/local/libzip/
# cd /usr/local/libzip
# wget https://libzip.org/download/libzip-1.2.0.tar.gz
# tar -zxvf libzip-1.2.0.tar.gz
# cd libzip-1.2.0
# ./configure --prefix=/usr/local/libzip
# make && make install

注:这里我们安装完还需要告诉PHP libzip安装在哪里了,我们再在 configure 的会话窗口直接输入:

# export PKG_CONFIG_PATH="/usr/local/libzip/lib/pkgconfig/"

3.11 安装完成之后,配置PHP

3.11.1 将PHP源码包(/usr/local/php/php-7.4.7)中的php.ini-development文件复制到/usr/local/php/下并更名为php.ini
# cp /usr/local/php/php-7.4.7/php.ini-production /usr/local/php/etc/php.ini
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
3.11.2 配置php.ini文件中 “cgi.fix_pathinfo=1” 字段 去掉注释并把 1 改为 0
3.11.3 启动php-fpm服务
# /usr/local/php/sbin/php-fpm

为了方便后续维护,这里也贴一下php-fpm服务重启及停止的命令 (5.3.3版本以后不在支持(start|stop|reload)等命令),所以这里我们使用信号控制。

# ps aux | grep php-fpm   //获取php-fpm的进程
# kill -USR2 pid    //重启
# kill -QUIT pid    //停止
# kill -INT pid  或者 kill -TERM pid // 立刻终止

启动完毕后,php-fpm 服务默认使用9000端口 ,查看端口使用情况可以使用下面命令

# netstat -tln | grep 9000
3.11.4 配置环境变量
# vim /etc/profile

在在最后添加

img

添加保存之后,更新环境变量

# source /etc/profile
3.11.5 查看php版本
# php -v

好了,到这里整体的LNMP环境就算搭建完成了!!!

贴上部分环境包下载链接,需要的可以自行选择下载。

🔗->链接:https://pan.baidu.com/s/1aWtMqgYq6sXibB3SSq22aQ 提取码:3n5v


补充:这里还要补充一下就是端口问题,如果你的firewalld防火墙处于开启状态,那么我们就需要开启一下部分的服务端口;如果默认不开启还无法访问部分服务时,那么我们就要去服务器运营商控制面板中的安全策略组设里设置端口访问权限。

firewalld 服务基本命令:

1.查看防火墙状态

# systemctl status firewalld

2.关闭防火墙,停止 firewall 服务

# systemctl stop firewalld

3.开启防火墙,启动 firewall 服务

# systemctl start firewalld

4.重启防火墙,重启 firewall 服务

# systemctl restart firewalld

5.查看 firewall 服务是否开机启动

# systemctl is-enabled firewalld

6.开机时自动启动 firewall 服务

# systemctl enable firewalld service 

7.开机时自动禁用 firewall 服务

# systemctl disable firewalld service 

8.查看已打开的所有端口

# firewall-cmd --zone=public --list-ports

9.开启指定端口(–permanent 永久生效,没有加此参数重启后失效)

# firewall-cmd --zone=public --add-port=端口号/tcp --permanent

10.关闭指定端口(–permanent 永久生效,没有加此参数重启后失效)

# firewall-cmd --zone=public --remove-port=端口号/tcp --permanent

11.重新加载 firewall,修改配置后,必须重新加载才能生效

原创文章,作者:HasanZHBi,转载请注明出处: https://www.9ike.com/50/

打赏支持

如果您觉得我的文章对您有帮助,您可以通过扫描下方二维码进行打赏,感谢支持。

打赏二维码

发表回复