LNMP 架构的搭建——源码编译(Mysql、Nginx、PHP)

一、基础概念

LNMP架构介绍

  • LNMP = Linux+Nginx+Mysql+PHP
  • LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx中的PHP是以fastcgi的方式结合Nginx的,可以理解为Nginx代理了PHP的fastcgi。
  • LNMP和LAMP唯一不同是指提供web服务的是Nginx,在Apache中,PHP是作为一个模块存在的。而在Nginx中,PHP是作为一个独立服务存在的,这个服务叫做php-fpm。
  • Nginx直接处理静态请求,动态请求会转发给php-fpm.

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的形式传送给浏览器。
  • 浏览器再进行解析与渲染然后进行呈现。
    在这里插入图片描述

主机环境:rhel6.5 selinux and iptables disabled

二、Mysql 数据库的源码编译

1.获得软件包资源(当前最主流的是5.7.17),进行解压
在这里插入图片描述

[root@server1 lnmp]# tar zxf mysql-boost-5.7.17.tar.gz 
[root@server6 lnmp]# ls			#会发现生成mysql-5.7.17目录

在这里插入图片描述
2.安装mysql源码编译需要的工具

[root@server1 lnmp]# yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y

3.安装编译前需要的软件(解决软件包的依赖性)

[root@server1 mysql-5.7.17]# yum install gcc gcc-c++ ncurses-devel -y

注意:如果mysql编译的时候出错的话,需要先进入解压的目录下,执行以下命令

首先,make clean
rm -rf CMakeCache.txt(之后再重新编译)

4.进行编译(确保在解压的目录下)

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \		#安装目录
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \				#数据库存放目录
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \ 	#Unix socket 文件路径
-DWITH_MYISAM_STORAGE_ENGINE=1 \							#安装 myisam 存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \							#安装 innodb 存储引擎
-DDEFAULT_CHARSET=utf8 \									#使用 utf8 字符
-DDEFAULT_COLLATION=utf8_general_ci \						#校验字符
-DEXTRA_CHARSETS=all \										#安装所有扩展字符集
-DWITH_BOOST=boost/boost_1_59_0/							#不装的话会报错

在这里插入图片描述
注意:编译完成后会发现CMake Warning at cmake/bison.cmake:20 (MESSAGE):警告;如果追求完美可以安装:[root@server1 mysql-5.7.17]# yum install bison -y(他会在安装的时候重新读取)

5.进行安装(请耐心等待,时间较长)

[root@server1 mysql-5.7.17]# make && make install
mysql 基础设置

1.查看安装完成对应生成的文件
在这里插入图片描述
2.将mysql.server拷贝成一个脚本

[root@server1 support-files]# pwd
/root/lnmp/mysql-5.7.17/support-files
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld

在这里插入图片描述
3.进入到/etc下,可以查看my.cnf的内容(默认的mysql配置)
在这里插入图片描述

4.备份一份默认配置文件

[root@server1 etc]# cp my.cnf my.cnf.bak

5.将my-default.cnf复制一份到/etc/下,覆盖my.cnf(根据你的主机内存复制 mysql 配置文件)

[root@server1 etc]# cd -
/root/lnmp/mysql-5.7.17/support-files
[root@server1 support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? yes

6.编辑配置文件

[root@server1 support-files]# vim /etc/my.cnf
 18 basedir = /usr/local/lnmp/mysql
 19 datadir = /usr/local/lnmp/mysql/data
 20 # port = .....
 21 # server_id = .....
 22 socket = /usr/local/lnmp/mysql/data/mysql.sock

7.编辑完配置文件后,可以看到没有mysql这个用户(当用yum安装的时候会发现起始id是27)

[root@server1 support-files]# id mysql
id: mysql: No such user
[root@server1 support-files]# groupadd -g 27 mysql	#也可以自己定义id号
[root@server1 support-files]# useradd -u 27 -g 27 mysql

8.更改用户和组

[root@server1 support-files]# chown mysql.mysql /usr/local/lnmp/mysql/ -R

9.修改全局变量

[root@server1 support-files]# vim ~/.bash_profile
10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
[root@server1 support-files]# source ~/.bash_profile

在这里插入图片描述
10.生成初始默认密码,给启动脚本添加权限,启动mysql

#按提示完成 mysql 安全设置,生产环境推荐使用
[root@server1 support-files]# mysqld --user=mysql --initialize	
[root@server1 support-files]# chmod +x /etc/init.d/mysqld
[root@server1 support-files]# /etc/init.d/mysqld start

在这里插入图片描述
11.用初始密码进行登陆,当查看库信息的时候会报错

[root@server1 support-files]# mysql -uroot -p",iUw;arjP7d."

在这里插入图片描述

12.修改密码,重新尝试

[root@server1 support-files]# mysql_secure_installation	#此处密码设置为Westos+001(自定义:大小写和特殊字符)

注意:除了输入原密码和现密码之外其余回车
在这里插入图片描述

三、Nginx 的源码编译

因为之前进行过编译介绍,此处不再赘述,步骤详情请见此片博文
https://blog.csdn.net/weixin_44209804/article/details/89389465

四、PHP 的源码编译

1.获得软件包资源,并进行解压
在这里插入图片描述

[root@server1 lnmp]# tar jxf php-5.6.35.tar.bz2		#可以得到一个目录

在这里插入图片描述

2.进入到解压获得的目录,进行编译

[root@server1 lnmp]# cd php-5.6.35
[root@server1 php-5.6.35]# ls	#当拿到源码不会时,可以读里面README的文档或者./configure --help
[root@server6 php-5.6.35]# ./configure --prefix=/usr/local/lnmp/php	#php安装位置
--with-config-file-path=/usr/local/lnmp/php/etc	#php配置文件所在位置 
--with-openssl 	#支持openssl加密
--with-snmp 
--with-gd 
--with-zlib 
--with-curl 
--with-libxml-dir #支持limxml函数
--with-png-dir --with-jpeg-dir --with-freetype-dir #png处理图片的格式
--with-gmp 
--with-gettext 
--with-pear --enable-mysqlnd 
--with-mysql=mysqlnd 
--with-mysqli=mysqlnd 
--with-pdo-mysql=mysqlnd --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm #支持与mysql数据库之间建立联系(enable-fpm表示开启fpm模式(nginx等服务所用的)
--with-fpm-user=nginx 	#对php服务的限制通过nginx的用户来实现
--with-fpm-group=nginx 	#php服务以nginx用户组的身份来运行
--with-mcrypt 			#提供了对多种块算法的支持,只要用来实现加密等算法
--with-mhash			#加密算法

注意,在编译时必须有nginx用户
在这里插入图片描述
在这里插入图片描述

注意:会出现configure: error: xml2-config not found. Please check your libxml2 installation. 报错

[root@server1 php-5.6.35]# yum install libxml2-devel libcurl-devel -y
再次进行编译

在这里插入图片描述

注意:会出现configure: error: jpeglib.h not found.的报错

[root@server1 php-5.6.35]# yum whatprovides */jpeglib.h	#查找含有此文件的包
[root@server1 php-5.6.35]# yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64 -y
再次进行编译

在这里插入图片描述

注意:会出现configure: error: png.h not found.的报错

[root@server1 php-5.6.35]# yum whatprovides */png.h
[root@server1 php-5.6.35]# yum install libpng-devel-1.2.49-1.el6_2.x86_64 -y
再次进行编译

在这里插入图片描述

注意:出现configure: error: freetype-config not found.的报错

[root@server1 php-5.6.35]# yum install freetype-devel -y
再次进行编译

在这里插入图片描述

注意:出现configure: error: Unable to locate gmp.h的报错

[root@server1 php-5.6.35]# yum whatprovides */gmp.h
[root@server1 php-5.6.35]# yum install gmp-devel-4.3.1-7.el6_2.2.x86_64 -y
再次进行编译

在这里插入图片描述
注意:出现configure: error: mcrypt.h not found. Please reinstall libmcrypt.的报错(这个资源可以从官网下载)
在这里插入图片描述

[root@server1 lnmp]# yum install re2c-0.13.5-1.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm libmcrypt-devel-2.5.8-9.el6.x86_64.rpm -y
再次进入解压的目录下进行编译

在这里插入图片描述

[root@server1 php-5.6.35]# yum install net-snmp-devel -y
再次进行编译

在这里插入图片描述

此时编译成功

3.进行安装

[root@server1 php-5.6.35]# make && make install

在这里插入图片描述
注意:此时安装成功

  • php的简单配置(让nginx可以识别php动态页面)

1.查看mysql的状态(开启),编辑php配置文件(配置pid)、更改时区

[root@server1 etc]# pwd
/usr/local/lnmp/php/etc
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf	#拷贝一份模板作为配置文件
[root@server1 etc]# vim php-fpm.conf
25 pid = run/php-fpm.pid
149 user = nginx	#保证用户和组都是nginx
150 group = nginx
[root@server1 php-5.6.35]# pwd
/root/lnmp/php-5.6.35
[root@server1 php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini	#拷贝一份配置文件
[root@server1 php-5.6.35]# vim /usr/local/lnmp/php/etc/php.ini
936 date.timezone = Asia/Shanghai

2.复制php启动脚本到系统启动脚本的默认目录下(ps aux 可以发现当php 启动时会开启一个主进程,两个子进程)

[root@server1 fpm]# pwd
/root/lnmp/php-5.6.35/sapi/fpm
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm 
[root@server1 fpm]# /etc/init.d/php-fpm start	#启动
Starting php-fpm  done

在这里插入图片描述

3.更改nginx的配置文件

[root@server1 nginx]# pwd
/usr/local/lnmp/nginx
[root@server1 nginx]# cd conf/
[root@server1 conf]# vim nginx.conf
 43         location / {
 44             root   html;
 45             index  index.php index.html index.htm;
 46         }
 65         location ~ \.php$ {
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;
 68             fastcgi_index  index.php;
 69             #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 70             include        fastcgi.conf;	#可以启动fpm
 71         }
 [root@server1 conf]# nginx -t

4.在nginx的默认发布页面目录下添加php页面,重新加载nginx配置

[root@server1 html]# pwd
/usr/local/lnmp/nginx/html
[root@server1 html]# ls
50x.html  index.html
[root@server1 html]# vim index.php
[root@server1 html]# cat index.php 
<?php
phpinfo()
?>
[root@server1 html]# nginx -s reload

浏览器输入172.25.254.1
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44209804/article/details/89390005