LNMP架构简介及搭建(源码编译Nginx,MYSQL,PHP)

1. 什么是LNMP

LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。

一般来讲,LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。

LNMP = Linux+Nginx+Mysql+PHP

  • Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
  • Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
  • Mysql是一个小型关系型数据库管理系统。
  • PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
  • 这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

Nginx中的PHP是以fastcgi的方式结合Nginx的,可以理解为Nginx代理了PHP的fastcgi。

LNMP和LAMP唯一不同是指提供web服务的是Nginx而不是Apache:在Apache中,PHP是作为一个模块存在的。而在Nginx中,PHP是作为一个独立服务存在的,这个服务叫做php-fpm. ;Nginx直接处理静态请求,动态请求会转发给php-fpm.

2. LNMP的工作原理

  • 浏览器发送http request请求到服务器(Nginx)
  • 服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序)
  • PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。
  • PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM
  • PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx
  • 服务器再通过Http response的形式传送给浏览器。
  • 浏览器再进行解析与渲染然后进行呈现。

3. MYSQL数据库的源码编译

step1 解压安装 mysql:

tar zxf mysql-boost-5.7.28.tar.gz

step2 创建 mysql 用户:

useradd -s /sbin/nologin -M mysql

step3 编译MYSQL:
cmake跨平台工具是用来预编译mysql源码的,用于设置mysql的编译参数。如:安装目录、数据存放目录、字符编码、排序规则等

yum install -y cmake	#编译mysql需要用的包
cd mysql-5.7.28	#进入mysql解压后的目录
#以下命令为编译:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \			#安装位置
> -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \ 	#指定套接字文件位置
> -DEXTRA_CHARSETS=all \ 										#扩展字符集
> -DDEFAULT_CHARSET=utf8 \										#默认字符集
> -DDEFAULT_COLLATION=utf8_general_ci \							#默认字符校对
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \							#安装myisam 存储引擎
> -DWITH_MYISAM_STORAGE_ENGINE=1 \								#安装innodb存储引擎
> -DWITH_MEMORY_STORAGE_ENGINE=1 \								#安装memory存储引擎
> -DWITH_READLINE=1 \											#支持readline库
> -DENABLED_LOCAL_INFILE=1 \									#启用加载本地数据
> -DMYSQL_USER=mysql \											#指定mysql运行用户
> -DMYSQL_TCP_PORT=3306											#指定mysql端口

step4 根据提示解决依赖性问题:

yum install -y gcc gcc-c++ ncurses-devel openssl-devel -y

step5 可能会看到这样的报错:

CMake Error at cmake/boost.cmake:81 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>
This CMake script will look for boost in <directory>. If it is not there,
it will download and unpack it (in that directory) for you.
If you are inside a firewall, you may need to use an http proxy:
export http_proxy=http://example.com:80

解决:

缺少 -DWITH_BOOST=<directory>参数
重新编译时加上下面的参数: 
-DWITH_BOOST=boost/boost_1_59_0/

重新编译时,需要清除原来的对象文件和缓存信息:

make clean
rm -fr CmakeCache.txt

后面编译过程中可能会有一个 warnin:

CMake Warning at cmake/bison.cmake:20 (MESSAGE):
Bison executable not found in PATH
Call Stack (most recent call first):
sql/CMakeLists.txt:514 (INCLUDE)

解决:

yum install -y bison

step6 安装:

make && make install ##如果 make 还有问题,删除原来的目录,重新解压编译(安装过程较长) 

step7 修改权限:

cd /usr/local/lnmp/mysql
mkdir data
chown -R root .
chown -R mysql data
ln -s /usr/local/lnmp/mysql/bin/* /usr/local/bin/

step8 复制配置文件:

cd /usr/local/lnmp/mysql/mysql-test/include
cp default_my.cnf /etc/my.cnf
cd /usr/local/lnmp/mysql/support-files
cp -a mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig mysqld on
systemctl status mysqld

step9 初始化:

mysqld --user=mysql --initialize	#以mysql 用户身份初始化
注意:初始化会生成一个临时密码,用于登录 mysql(要记住此密码)
比如:2019-01-03T09:06:09.448851Z 1 [Note] A temporary password is generated
for root@localhost: r#9VqAoA/au
r#9VqAoA/au就是临时密码

step10 启动mysql:

systemctl start mysqld

step11 进入 mysql:

mysql -uroot -pr#9VqAoA/au: #使用刚才的临时密码(会有报错,所以需要安全初始化)

step12 安全初始化:

mysql_secure_installation	#然后会提示是否启用密码检测插件,直接回车不启用,否则会要求密码有大小写和特殊字符等要求;剩余全部选 y

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mysql安装配置完成

4. PHP源码编译

step1 解压安装包:

tar zxf php-7.4.1.tar.gz

step2 解决依赖性:

yum -y install bzip2

step3 进入解压后的目录,开始编译:

./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc \
--with-mysqli=/usr/local/lnmp/mysql/bin/mysql_config \
--enable-soap \
--enable-mbstring=all \
--enable-sockets \
--with-pdo-mysql=/usr/local/lnmp/mysql \
--enable-gd \
--without-pear \
--enable-fpm

step4 根据编译过程中的报错逐步解决依赖性:
可能会需要安装的包:

yum install -y libxml2-devel
yum install -y libpng-devel
yum install -y oniguruma-*

step5 安装:

make && make install

step6 拷贝更改配置文件:

cd /usr/local/lnmp/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf		#开启17行:pid = run/php-fpm.pid

在这里插入图片描述
step7 拷贝子配置文件:

cd /usr/local/lnmp/php/etc/php-fpm.d
cp www.conf.default www.conf
vim www.conf	#更改23和24行内容如下
user = nginx
group = nginx

在这里插入图片描述

在这里插入图片描述

step8 拷贝更改php主配置文件:

cd php-7.4.1
cp php.ini-production /usr/local/lnmp/php/etc/php.ini
vim /usr/local/lnmp/php/etc/php.ini	#961行修改时区如下
date.timezone = Asia/Shanghai

在这里插入图片描述

step9 拷贝php启动脚本至/etc/init.d/:

cd /root/lnmp/php-7.4.1/sapi/fpm
cp init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm	#添加执行权限

step10 启动php:

/etc/init.d/php-fpm start

注意:
启动报错可能因为没有 nginx 用户,需要手动创建

useradd -u 900 nginx

在这里插入图片描述
php安装配置完成

5. nginx的源码编译

step1 解压安装包

tar zxf nginx-1.16.0.tar.gz

step2 去掉nginx的版本号:

cd /root/lnmp/nginx-1.16.0
vim src/core/nginx.h	

在这里插入图片描述

step3 关闭debug日至:

因为debug的日志非常多,企业中一般不需要开启

vim auto/cc/gcc
做如下修改:
# debug
#CFLAGS="$CFLAGS -g" (将这2行注释调,关闭debug)

在这里插入图片描述

step4 编译安装 nginx:

./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx

step5 根据提示解决依赖性:
此处应该还需要安装pcre-devel:

yum install pcre-devel -y

step6 安装:

make && make install

step7 修改nginx配置文件,开启php模块:

cd /usr/local/lnmp/nginx/conf
vim nginx.conf

在这里插入图片描述
step8 将nginx启动脚本链接到/usr/local/sbin/:

ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/

step9 开启nginx:

nginx -t ##检测语法
nginx

在这里插入图片描述

step10 测试:

尝试访问http://172.25.254.1	##是nginx默认页面

在这里插入图片描述
在nginx默认发布目录添加index.php:

vim /usr/local/lnmp/nginx/html/index.php
写入:
<?php
phpinfo()
?>

在这里插入图片描述
刷新http://172.25.254.1可以看到php的默认页面
在这里插入图片描述

nginx 安装配置完成

发布了175 篇原创文章 · 获赞 11 · 访问量 6037

猜你喜欢

转载自blog.csdn.net/weixin_45775963/article/details/104592027