企业级LNMP环境部署实践

6 篇文章 0 订阅
本文详细介绍了LNMP(Linux + Nginx + MySQL + PHP)组合的工作流程和搭建过程,包括用户请求的处理、MySQL的安装配置、PHP的编译与安装,以及Nginx与PHP的交互。在安装过程中,强调了安全策略、服务配置和权限设定,最后通过测试验证了LNMP环境的正确性。
摘要由CSDN通过智能技术生成

LNMP组合工作流程

LNMP组合调用关系逻辑图
在这里插入图片描述
LNMP组合FastCGI模式调用PHP、MySQL关系逻辑图
在这里插入图片描述
当LNMP组合工作时,首先是用户通过浏览器输入域名请求NginxWeb服务,如果请求的是静态资源,则由Nginx解析返回给用户,如果是动态请求(以.php结尾),那么Nginx就会把它通过FastCGI接口(生产常用方法)发送给PHP引擎服务(FastCGI进程php-fpm)进行解析,如果这个动态请求要读取数据库数据,那么PHP就会继续向后请求MySQL数据库,以读取需要的数据,并最终通过Nginx服务把获取的数据返回给用户,这就是LNMP环境的基本请求顺序流程(如图),这个请求流程是企业使用LNMP环境的常用流程。

Nginx已经搭建完成,下面要搭建LNMP中的,mysql和php。

安装MySQL数据库

MySQL的安装方法也有很多,常见的方法见表
在这里插入图片描述

  • 安装步骤介绍

(1)创建MySQL用户的账号
使用命令如下:
在这里插入图片描述
查看结果

[root@db01 ~]# id mysql
uid=1002(mysql) gid=1002(mysql)=1002(mysql)
[root@db01 ~]# cat /etc/passwd | grep mysqlk
[root@db01 ~]# cat /etc/passwd | grep mysql
mysql:x:1002:1002::/home/mysql:/sbin/nologin
[root@db01 ~]# 

(1)获取MySQL软件包
下载的地方有很多,这里是到网易镜像站下载 mysql 二进制包,同时创建存放软件安装包的目录,并通过ftp或rz命令从本地把已经下载好的MySQL软件包上传到Linux系统中

[root@db01 ~]# ll /server/
总用量 0
drwxr-xr-x. 2 root root 51 517 16:57 scripts
drwxr-xr-x. 2 root root  6 41 04:20 tools
[root@db01 ~]# 

提示:本例以MySQL二进制的方式来讲解,两种方法都是可以的,其应用场景一般没太大差别。不同之处在于,二进制的安装包较大,名字和源码包也有些区别,安装过程会快一些,因为不需要编译。

MySQL二进制安装包和源码包名称见表
在这里插入图片描述
(2)采用二进制方式安装MySQL
1)解压并移动MySQL二进制软件包到指定的安装路径。
2)创建软链接,生成去掉版本号的访问路径并查看。
在这里插入图片描述
当安装LNMP一体化环境时,MySQL数据库要装在Nginx所在的机器上。如果MySQL和Nginx不在一台机器上启动,那么,Nginx服务器上不需要安装MySQL数据库。在非一体的LNMP环境(Nginx和MySQL不在一台机器上)下编译PHP环境时,也是需要MySQL数据库环境的,但是高版本的PHP,如5.3版本以上,内置了PHP需要的MySQL程序,因此,对于此类版本就不需要在Nginx服务器上安装MySQL软件了,只需要在编译PHP时指定相关参数即可。这个PHP的编译参数为–with-mysql=mysqlnd,表示PHP程序在编译时会调用内置的MySQL的库。

(3)初始化MySQL配置文件my.cnf
配置前先卸载 系统自带的Mariadb,命令如下:
在这里插入图片描述
然后编辑 my.cnf 配置文件,内容如下:

[root@db01 ~]# cat /etc/my.cnf 
[mysqld]     #服务器模块名称
basedir = /application/mysql/     #mysql安装目录
datadir = /application/mysql/data   #mysql数据文件目录
socket = /tmp/mysql.sock			#mysql服务器端 sock 文件目录
server_id = 1                    #mysql实例ID
port = 3306						#mysql默认端口				
log_error = /application/mysql/data/oldboy_mysql.err   #mysql错误日志路径
[mysql]     #mysql客户端模块名
socket = /tmp/mysql.sock   #mysql客户端 sock 文件目录
prompt = yy [\\d]>     #mysql登录提示符

(4)初始化MySQL数据库文件
1)卸载系统自动安装的mariadb-libs,并安装依赖包。
在这里插入图片描述
这里的 libaio-devel 包要安装,需要添加epel源。

2)创建数据文件目录并授权。
建立mysql数据文件目录,授权mysql用户管理mysql安装目录。
在这里插入图片描述
3)初始化数据库。
在这里插入图片描述
提示:只要没有error字符串的错误就算初始化通过了,有的时候初始化没有任何提示也是OK的,不要慌张。
说明:上述初始化数据库参数
在这里插入图片描述
安全策略:
1)密码长度:12以上。
2)密码复杂度:数字、大小字符、特殊符号。
3)密码默认过期时间为180天。
4)初始化完成后会立即生成一个临时密码。

  • 配置并启动MySQL数据库

1)设置启动脚本,使用systemctl命令来管理服务

[root@db01 ~]# cat /etc/systemd/system/mysqld.service 
[Unit]
Descripttion=MySQL Server by oldboy
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

2)启动MySQL数据库:

[root@db01 ~]# systemctl status mysqld
● mysqld.service
   Loaded: loaded (/etc/systemd/system/mysqld.service; disabled; vendor preset: disabled)
   Active: active (running) since 五 2021-06-04 20:29:04 CST; 18h ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
 Main PID: 3235 (mysqld)
   CGroup: /system.slice/mysqld.service
           └─3235 /application/mysql/bin/mysqld --defaults-file=/et...

6月 04 20:29:04 db01 systemd[1]: Started mysqld.service.
[root@db01 ~]# 

3)查看3306端口,检查MySQL数据库是否启动:
4)查看MySQL数据库启动结果日志:只要每行的中括号里没有error字样,一般就无大碍。
5)配置MySQL命令的全局使用路径:

[root@db01 ~]# echo 'export PATH=/application/mysql/bin/:$PATH' >> /etc/profile
[root@db01 ~]# source /etc/profile   #是配置生效

提示:如果不配置MySQL全局路径,则无法直接输入MySQL命令管理数据库,就只能采用/application/mysql/bin/mysql这样的带着路径的形式输入命令。还有另外一个办法,就是把/application/mysql/bin下面的命令拷贝到已经是全局系统命令路径的/usr/local/sbin下。
6)登录MySQL测试:直接使用mysql就可以进入mysql界面,MySQL安装完成后,默认情况下,管理员账号root是无密码的,这个必须要设置下。
7)为MySQL root用户设置密码,命令如下:
在这里插入图片描述
mysql数据库到这里就简单安装好了。

安装php

  • 检查安装PHP所需的lib库

PHP程序在开发及运行时会调用诸如zlib、gd等函数库,因此需要确认lib库是否已经安装,执行命令如下:
在这里插入图片描述
提示:libjpeg-turbo-devel是早期的libjpeg-devel的新名字,libcurl-devel是早期的curl-devel的新名字。

1)每个lib一般都会存在对应的以“-devel”命名的包,安装对应的“-devel”包后,对应的lib包会自动安装好,如安装gd-devel就会安装gd。
2)这些lib库也不是必须安装的,但是目前的企业环境下一般都需要安装。否则,PHP程序运行会有问题,如验证码无法显示等。

执行下面命令安装相关的lib软件包:
在这里插入图片描述
其中libiconv-devel这个包没有安装,因为默认的yum源没有此包,后面会编译安装。

  • 安装yum无法安装的libiconv库

使用wget命令下载,也可以自行下载后上传服务器。
在这里插入图片描述
解压编译安装,命令如下:
在这里插入图片描述

  • 安装libmcrypt库

这是一个使用动态加载的模块化的libmcrypt。libmcrypt对于在程序运行时添加/移除算法是有用的。Limbcrypt-nm目前不再被官方支持,软件地址:http://mcrypt.hellug.gr/lib/,编译PHP的过程中libmcrypt库不是必须要安装的包。
由于在CentOS默认的yum源里没有libmcrypt-devel,因此需要事先配置EPEL第三方yum源(阿里云镜像,网易云镜像都可以),具体命令如下:
在这里插入图片描述
在这里插入图片描述

  • 安装Mhash加密扩展库

Mhash是基于离散数学原理不可逆向的PHP加密方式扩展库,其在默认情况下不会开启。Mhash可以用于创建校验数值、消息摘要、消息认证码,以及无须原文的关键信息保存(如密码)等。它为PHP提供了多种哈希算法,如MD5、SHA1、GOST等。可以通过MHASH_hashname()来查看支持的算法有哪些。
不过,需要注意以下几点:
❑ 该扩展不能提供最新的哈希算法。
❑ 该扩展结果原则上运算不可逆。
在这里插入图片描述

  • 安装Mcrypt加密扩展库

PHP除了自带的几种加密函数外,还有功能更全面的PHP加密扩展库Mcrypt和Mhash。其中,Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以将密文还原。可以说,Mcrypt是PHP里面重要的加密支持扩展库,该库在默认情况下不开启。Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示。
在这里插入图片描述

  • 获取PHP软件包

我们可以使用wget方式下载PHP软件包(http://mirrors.sohu.com/php/php-7.3.5.tar.gz),或者下载后再上传。
提示:工作中如何选择PHP版本,取决于开发人员使用什么版本的PHP。

  • 解压配置PHP

执行如下命令解压并配置PHP软件:

./configure --prefix=/application/php7.3.5 --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir=/application/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --enable-short-tags --enable-static --with-xsl --with-fpm-user=nginx --with-fpm-group=nginx --enable-ftp --enable-opcache=no

特别强调:如果需要换行,每行结尾的换行符反斜线(\)之后不能再有任何字符,包括空格。

对于上面的命令,部分参数说明如下:
❑ --prefix=/application/php7.3.5:表示指定PHP的安装路径为/application/php7.3.5。
❑ --enable-mysqlnd使用PHP包里自带的MySQL相关软件包。
❑ --with-fpm-user=nginx:nginx表示指定PHP-FPM进程管理的用户为Nginx,此处最好和Nginx服务用户统一。
❑ --with-fpm-group=nginx:表示指定PHP-FPM进程管理的组为Nginx,此处最好和Nginx服务用户组统一。
❑ --enable-fpm:表示激活PHP-FPM方式服务,即以FastCGIF方式运行PHP服务。
❑ 另外,针对此命令还有一些说明,如下:
❑ 可以通过执行./configure --help命令来详细查看以上各参数的用途。

其他需要MySQL相关包场景的PHP对应编译参数如下:
在这里插入图片描述

  • 编译以及安装PHP

正确执行前文配置PHP软件的./configure系列命令后,就可以编译PHP软件了,具体操作过程如下。

make 		<==编译
echo $?    <==查看编译后有没有错误,返回0表示无错误
make install
echo $? 

编译安装中可能会出现各种各样的错误,要耐心查看错误提示排错。

  • 配置PHP引擎配置文件php.ini

1)设置软链接方便访问,命令如下:
在这里插入图片描述

[root@wen01 nginx]# ll /application/
总用量 0
drwxr-xr-x  6 root  root   56 62 09:46 libiconv
lrwxrwxrwx  1 mysql mysql  26 61 15:51 mysql -> /application/mysql-5.7.34/
drwxr-xr-x 10 mysql mysql 141 61 16:01 mysql-5.7.34
lrwxrwxrwx  1 root  root   26 525 11:49 nginx -> /app-lication/nginx-1.19.2
lrwxrwxrwx  1 root  root   22 62 10:51 php -> /application/php7.3.5/
drwxr-xr-x  9 root  root   88 62 10:50 php7.3.5

2)查看PHP配置默认模板文件:
在这里插入图片描述
两个模板,开发环境下更多的是开启日志、调试信息,而生产环境下都是关闭状态。

3)拷贝PHP配置文件到PHP默认目录,并更改文件名称为php.ini:
在这里插入图片描述

  • 配置PHP服务(FastCGI模式)配置文件php-fpm.conf

在这里插入图片描述
关于php-fpm.conf,暂时可用默认的配置,先把服务搭建好,后面再对php-fpm. conf进行优化

  • 启动PHP服务(FastCGI模式)

在这里插入图片描述
使用ss或者netstat命令检查PHP服务php-fpm的进程及端口的启动情况。

[root@wen01 nginx]# ss -luntp | grep 9000
tcp    LISTEN     0      128    127.0.0.1:9000                  *:*                   users:(("php-fpm",pid=50436,fd=5),("php-fpm",pid=50435,fd=5),("php-fpm",pid=50424,fd=5),("php-fpm",pid=31864,fd=7))

配置Nginx以支持PHP程序请求访问

  • 修改Nginx配置文件

1)查看Nginx当前的配置

[root@wen01 nginx]# cat conf/nginx.conf
worker_processes  1;
error_log logs/error.log;
events {
    worker_connections  1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include extra/01_www.conf;
    include extra/02_bbs.conf;
    include extra/03_status.conf;
    include extra/04_blog.conf; 
}  

2)配置PHP程序解析

[root@wen01 nginx]# cat conf/extra/04_blog.conf 
server {
	listen 80;
	server_name blog.yeye.net;
	root html/blog;
	index index.php index.html index.htm;
	location / {
		if (-f $request_filename/index.html){
		rewrite (.*) $1/index.html break;
		}
		if (-f $request_filename/index.php){
		rewrite (.*) $1/index.php;
		}
		if (!-f $request_filename){
		rewrite (.*) /index.php;
		}
		
	}
	location ~.*\.(php|php5)?$ {       #这里为添加的php配置
		root html/blog;
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		include fastcgi.conf;
	}
	access_log logs/access_blog.log main buffer=32k flush=5s;

}
  • 检查并启动Nginx

[root@wen01 nginx]# /application/nginx/sbin/nginx -t
nginx: the configuration file /app-lication/nginx-1.19.2/conf/nginx.conf syntax is ok
nginx: configuration file /app-lication/nginx-1.19.2/conf/nginx.conf test is successful
[root@wen01 nginx]# /application/nginx/sbin/nginx -s reload

该步骤在生产环境中很关键,如不提前检查语法,重启后发现语法错误会导致Nginx无法提供服务,给用户访问带来不便。

  • 测试LNMP环境生效的情况

(1)测试PHP解析请求是否OK
在这里插入图片描述
2)调整Windows下的host解析
3)最好先ping检查,没问题后打开浏览器,blog.yeye.net/test_info.php,出现php信息页面表示解析成功。测试后记得删除test_info.php
*注意:如果页面空白或者页面提示错误,特别是浏览时直接提示下载,一般问题为PHP的引擎解析没有配置好导致。例如:Nginx里的PHP解析配置没有生效,或者PHP服务没有启动等。

页面空白的问题解决方法:请打开php.ini文件,找到“short_open_tag”,将 short_open_tag = Off 这行注释掉,再打开 ;short_open_tag = On (要重启php才生效,因为我的实验中单独重启nginx没有效果,phpinfo还是空白没有显示)*

(2)针对Nginx请求访问PHP,然后PHP连接MySQL的情况进行测试
编辑test_mysql.php,加入如下内容:
文件路径: /application/nginx/html/blog/test_mysql.php

<? // $link_id=mysqli_connect('主机名', '用户名', '密码') or mysql_error(); 这里的的mysql不是安装在本地,则主机名应修改为mysql服务器的ip地址
   $link_id=mysqli_connect('localhost', 'root', 'oldboy123') or mysql_error();
   if($link_id){
 echo "mysql suecssful by oldboy.\n";
   }else{
 echo mysql_error(); 
   }
?>;

在这里插入图片描述
客户端正常的结果为:
在这里插入图片描述
至此,LNMP的组合已基本搭建完毕。

php.ini配置文件的重要参数优化

1)比较重要的安全参数优化如下:
在这里插入图片描述
2)根据具体业务可修改的参数如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值