LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

概念解析

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.

LAMP的工作原理

浏览器发送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的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。

mysql源码编译

1.得到mysql数据库的源码包,并进行解压,然后查看目录mysql-5.7.17下的内容

[[email protected] ~]# ls
[[email protected] ~]# tar zxf mysql-boost-5.7.17.tar.gz 
[[email protected] ~]# cd mysql-5.7.17/
[[email protected] mysql-5.7.17]# ls

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

2.创建一个目录(用于将之后编译的的MYSQL,PHP,nginx都放在一起)

[[email protected] mysql-5.7.17]# mkdir /usr/local/lnmp/

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
3.安装源码编译工具cmake(支持编译C++语言)

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

[[email protected] ~]# yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
4.解决依赖性
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
5.进入解压目录创造预编译环境

[[email protected] mysql-5.7.17]# 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
               -DWITH_MYISAM_STORAGE_ENGINE=1
               -DWITH_INNOBASE_STORAGE_ENGINE=1 
               -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci 
               -DEXTRA_CHARSETS=all -DWITH_BOOST=boost/boost_1_59_0/

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
编译成功画面
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
如果编译失败,可以重新进行编译,但要先删除缓存

[[email protected] mysql-5.7.17]# rm -rf CMakeCache.txt

6.扩容磁盘(磁盘大小要在20G以上)
使用fdisk -l查看磁盘的大小
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
添加一块虚拟硬盘,并建立分区
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
将新增磁盘扩充到需要扩充的磁盘的物理卷组
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

扩大逻辑卷VolGroup-lv_root为20G
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
但是查看挂载的文件系统的大小并没有发生改变,同步文件系统并再次查看,发现根目录下的文件系统的大小也已经成功改变,说明磁盘扩容成功
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
再添加一块,重复操作,达到20G以上
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

7.安装

[[email protected] ~]# cd mysql-5.7.17/
[[email protected] mysql-5.7.17]# make 

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

[[email protected] mysql-5.7.17]# make install

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
8.进入源码编译目录,再进入mysql安装的位置,将编译完成的默认配置文件放置/etc/my.cnf并编译此文件

[[email protected] ~]# cd /etc/
[[email protected] etc]# cp my.cnf my.cnf.bak
[[email protected] etc]# cd
[[email protected] ~]# cd mysql-5.7.17/support-files/
[[email protected] support-files]# cp my-default.cnf /etc/my.cnf	#根据你的主机内存复制 mysql 配置文件
[[email protected] ~]# vim /etc/my.cnf

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
/etc/my.cnf中的内容

18 basedir = /usr/local/lnmp/mysql								# mysql的安装目录
19 datadir = /usr/local/lnmp/mysql/data						# mysql数据存放位置
22 socket = /usr/local/lnmp/mysql/data/mysql.sock		# mysql与外界联系的套接字文件位置

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
9.创建组和用户mysql(利用mysql用户对mysql服务进行限制,将mysql服务的工作可以局限在mysql用户的家目录中)

[[email protected] ~]# groupadd -g 27 mysql
[[email protected] ~]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql
[[email protected] ~]# id mysql

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

10.将编译完成的mysql启动脚本复制到系统启动服务的默认目录中

[[email protected] support-files]# cp mysql.server /etc/init.d/mysqld	#将脚本复制到系统启动服务中
[[email protected] support-files]# cd /etc/init.d
[[email protected] init.d]# chmod +x mysqld 	##添加权限
[[email protected] init.d]# /etc/init.d/mysqld ^C	#命令可以补齐则说明成功

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
11.创建data目录

将mysql目录下的所有文件的所有组都改为mysql,只有data目录的所有人是mysql
因为mysql服务将要往这个目录中写数据,保证其有执行权限

[[email protected] mysql]# mkdir data
[[email protected] mysql]# ll	#修改权限前
[[email protected] mysql]# chgrp mysql /usr/local/lnmp/mysql -R
[[email protected] mysql]# chown mysql /usr/local/lnmp/mysql/data -R
[[email protected] mysql]# ll	#修改权限后

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
12.将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令(完成后mysql命令可以生成)

[[email protected] mysql]# vim ~/.bash_profile

PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin

[[email protected] mysql]# source ~/.bash_profile	#使之生效

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
13.执行mysql的配置初始化文件(注意/usr/local/lnmp/mysql/data下不能有任何文件,如果有,必须将其全部删除才可成功执行配置初始化文件)

[[email protected] ~]# cd /usr/local/lnmp/mysql/
[[email protected] mysql]# cd data
[[email protected] data]# ls	#查看时没有任何文件或目录
[[email protected] data]# mysqld --user=mysql --initialize
[[email protected] data]# ls	#执行文件后生成了文件和目录

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
14.开启mysqld

[[email protected] data]# /etc/init.d/mysqld start

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
15.尝试进入mysql数据库并查看,发现无法查看

[[email protected] data]# mysql -uroot -p					3#输入初始密码

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

16.无法正常查看的原因是因为没有设置安全初始化,所以下面将设置安全初始化
新密码设置为redhat

[[email protected] mysql]# mysql_secure_installatio

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

17,测试 再次进入mysql数据库并查看,发现可以成功查看

[[email protected] mysql]# mysql -uroot -predhat

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
18 查看服务,端口是3306

[[email protected] mysql]# netstat -ntlp

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

php源码编译

1.将得到的php源码包进行解压

[[email protected] ~]#  tar jxf php-5.6.35.tar.bz2

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
2.解决依赖性

[[email protected] ~]# yum install -y libmcrypt-2.5.8-9.el6.x86_64.rpm
[[email protected] ~]# yum install -y libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
以上两个包要在官网上下载

[[email protected] php-5.6.35]# yum install libxml2-devel -y
[[email protected] php-5.6.35]# yum install openssl-devel -y
[[email protected] php-5.6.35]# yum install libcurl-devel -y

[[email protected] php-5.6.35]# yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64 -y
[[email protected] php-5.6.35]# yum install 2:libpng-devel-1.2.49-1.el6_2.x86_64 -y
[[email protected] php-5.6.35]# yum install freetype-devel -y
[[email protected] php-5.6.35]# yum install gmp-devel-4.3.1-7.el6_2.2.x86_64 -y
[[email protected] php-5.6.35]# yum install net-snmp-devel -y

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
3.进入解压目录创造预编译环境

 ./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          #支持 libxml 函数
--with-png-dir --with-jpeg-dir --with-freetype-dir     # php处理图片的格式
--with-gmp 
--with-gettext 
--with-pear 
--enable-mysqlnd 
--with-mysql=mysqlnd 
--with-mysqli=mysqlnd 
--with-pdo-mysql=mysqlnd           # 支持与mysql数据库之间建立联系
--enable-inline-optimization 
--enable-soap 
--enable-ftp 
--enable-sockets 
--enable-mbstring 
--enable-fpm                    # 开启fpm模式(nginx等服务用的)
--with-fpm-user=nginx          # 对PHP服务的限制通过nginx用户来实现          
--with-fpm-group=nginx        # PHP以nginx用户组身份运行
--with-mcrypt                 # 提供了对多种块算法的支持 主要用来实现加密等算法
--with-mhash              # 加密算法

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

4.编译和安装

[[email protected] php-5.6.35]# make && make install

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
成功
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

5.创建nginx用户

[[email protected] php-5.6.35]# useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
[[email protected] php-5.6.35]# id nginx

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

6.做php服务的简单配置(配置pid和时区)

[[email protected] etc]# cd /usr/local/lnmp/php/etc/
[[email protected] etc]# ls
pear.conf  php-fpm.conf.default
[[email protected] etc]# cp php-fpm.conf.default php-fpm.conf
[[email protected] etc]# vim php-fpm.conf
 25 pid = run/php-fpm.pid   ##去掉注释
149 user = nginx     ##保证用户和组都是ngnix
150 group = nginx

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

[[email protected] ~]# cd php-5.6.35
[[email protected] php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[[email protected] php-5.6.35]# cd /usr/local/lnmp/php/etc/
[[email protected] etc]# vim php.ini 
date.timezone =Asia/Shanghai    ##修改时区

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
7.将php启动的脚本复制到系统启动脚本的默认目录下,并测试php是否可以启动

[[email protected] ~]# cd php-5.6.35
[[email protected] php-5.6.35]# cd sapi/fpm/
[[email protected] fpm]# cp init.d.php-fpm /etc/init.d/php-fpm         # init.d.php-fpm是编译完成的启动脚本
[[email protected] fpm]# chmod +x /etc/init.d/php-fpm        #给脚本加上可执行权限
[[email protected] fpm]# /etc/init.d/php-fpm start
Starting php-fpm  done

[[email protected] fpm]# netstat -tlnp          # 查看php服务的监听端口(9000)

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

nginx的源码编译

1.得到nginx的源码包并解压

[[email protected] ~]# tar zxf nginx-1.14.0.tar.gz

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

2.去掉nginx的版本号

[[email protected] ~]# cd nginx-1.14.0
[[email protected] nginx-1.14.0]# vim src/core/nginx.h 
14 #define NGINX_VER          "nginx/" 

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

3.关闭debug日至(因为debug的日志非常多,企业中一般不需要开启)

[[email protected] nginx-1.14.0]# vim auto/cc/gcc 
171 # debug
172 #CFLAGS="$CFLAGS -g"     ##添加注释

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

4.解决源编译中的依赖性问题

[[email protected] nginx-1.14.0]# yum install pcre-devel gcc zlib-devel -y

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

5.创造预编译环境

[[email protected] nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --user=nginx --group=nginx

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
成功
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

6.安装

[[email protected] nginx-1.14.0]# make && make install

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

成功
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

  1. 配置nginx服务
[[email protected] nginx-1.14.0]# cd /usr/local/lnmp/nginx/conf/
[[email protected] conf]# vim nginx.conf

 43         location / {
 44             root   html;
 45             index  index.php index.html index.htm;   ##添加index.php(放在最前面)
 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;  ##修改
 71         }

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

8.创建一个软连接,可以直接调用命令

[[email protected] sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/    ##创建一个软连接

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

9.检测nginx服务是否可用并打开nginx服务

[[email protected] sbin]# nginx -t  ##语法检测
[[email protected] nginx-1.14.0]# nginx  ##打开nginx
[[email protected] nginx-1.14.0]# netstat -tnlp     ##查看端口为80

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

10.浏览器中输入172.25.79.1 显示nginx页面

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
11.访问测试

[[email protected] ~]# cd /usr/local/lnmp/nginx/html/
[[email protected] html]# ls
50x.html  index.html
[[email protected] html]# vim index.php   ##编写默认页面
<?php
phpinfo()
?>

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
测试:
浏览器中输入172.25.79.1/index.php,出现以下界面则,表示nginx和PHP结合成功
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)