LNMP源码编译(MySQL,PHP,NGINX)

主要概念:

1.LNMP=Linux+NGINX+MySQL+PHP
Nginx是一个高性能的http和反向代理服务器
MySQL是一个小型关系型数据管理系统
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言
这四个都是免费开源的软件,组合起来就是一个免费高效扩展性强的网站服务系统

2.LNMP的工作流程
client —>浏览器—>nginx —>静态的直接返回给client,动态的 —>php —>数据库中找资源
3.LNMP架构代表的就是Linux系统下NGINX+MySQL+PHP这种网站服务器的架构。NGINX中的PHP是以fastcgi的方式结合nginx的,可以理解为Nginx代理了PHP的fastcgi
4.工作方式:
(1)首先,浏览器发送http request请求到服务器(Nginx)
(2)服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序)
(3)PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。
(4)PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM
(5)PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx
(6)服务器再通过Http response的形式传送给浏览器。

5 . LNMP和LAMP的区别:
LNMP和LAMP唯一不同是指提供web服务的是Nginx,
在Apache中,PHP是作为一个模块存在的。而在Nginx中,PHP是作为一个独立服务存在的,这个服务叫做php-fpm。
Nginx直接处理静态请求,动态请求会转发给php-fpm
6. LNMP的特点:
7. Nginx的性能稳定,功能丰富,处理静态文件速度快且消耗的系统资源较少,支持比Apache更多的并发连接数,效率更高

注:CGI 通用网关接口
在解析的过程中不能响应请求
fattcgi将两者分开,解析的同时也能响应请求
fastcgi_pass相当于一个反向代理 将请求交给php,让php处理动态的请求
mysql_connect连接数据库管理系统
mysql_select查询数据
memcachad缓存 每一级都可加缓存
实验环境:

主机名 IP 服务
server1 172.25.68.1 mysqld,php,nginx

一、给虚拟机扩容:
mysql源码编译时要求虚拟机的硬盘大小不能小于20G,否则后边的编译过程会出问题,为了提升速度我们再增加CPU核数和内存大小

1.开机之前先打开虚拟机图形管理器,将cpu核数增加,扩大内存为2048,添加一个硬盘
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.开机后查看,出现新增的硬盘,/dev/sdb

[root@server1 ~]# fdisk -l

在这里插入图片描述
在这里插入图片描述
3.更改新增磁盘的标签以及分区

[root@server1 ~]# fdisk /dev/sdb

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.修改后可以看到这个磁盘变成了一和lvm类型的设备

[root@server1 ~]# fdisk -l

在这里插入图片描述
5.将新增的磁盘扩充到磁盘的逻辑卷dev/mapper/VolGroup中

[root@server1 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@server1 ~]# vgextend VolGroup /dev/sdb1
  Volume group "VolGroup" successfully extended
[root@server1 ~]# lvextend -L 30G /dev/mapper/VolGroup-lv_root 
  Extending logical volume lv_root to 30.00 GiB
  Insufficient free space: 5494 extents needed, but only 5118 available
[root@server1 ~]# lvextend -l +5118 /dev/mapper/VolGroup-lv_root 
  Extending logical volume lv_root to 28.53 GiB
  Logical volume lv_root successfully resized

在这里插入图片描述
在这里插入图片描述
6.再次查看磁盘的大小发生变化

[root@server1 ~]# fdisk -l
Disk /dev/mapper/VolGroup-lv_root: 30.6 GB, 30635196416 bytes

在这里插入图片描述
在这里插入图片描述
7.查看挂载情况,没有变化

[root@server1 ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  8.5G  1.1G  7.0G  13% /
tmpfs                         939M     0  939M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot

在这里插入图片描述
8.重新加载后查看发生变化,扩容成功

[root@server1 ~]# resize2fs /dev/mapper/VolGroup-lv_root 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/VolGroup-lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/mapper/VolGroup-lv_root to 7479296 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-lv_root is now 7479296 blocks long.
[root@server1 ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   29G  1.1G   26G   4% /
tmpfs                         939M     0  939M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot

在这里插入图片描述
二、安装mysql

1.下载一个安装包,解压

[root@server1 ~]# ls
bansys      mysql-boost-5.7.17.tar.gz       varnish-libs-3.0.5-1.el6.x86_64.rpm
bansys.zip  varnish-3.0.5-1.el6.x86_64.rpm
[root@server1 ~]# tar zxf mysql-boost-5.7.17.tar.gz 
[root@server1 ~]# ls
bansys      mysql-5.7.17               varnish-3.0.5-1.el6.x86_64.rpm
bansys.zip  mysql-boost-5.7.17.tar.gz  varnish-libs-3.0.5-1.el6.x86_64.rpm
[root@server1 ~]# cd mysql-5.7.17/

在这里插入图片描述
2.新建一个目录,作为mysql的目录

[root@server1 mysql-5.7.17]# mkdir /usr/local/lnmp/

在这里插入图片描述
3.安装cmake软件(c++编译)

[root@server1 mysql-5.7.17]# yum install cmake -y

在这里插入图片描述
cmake跨平台工具时用来编译mysql源码的,用于设置mysql的编译参数,如安装目录,数据存放目录,字符编码,排序规则等

4.编译(这个过程中会出现很多问题,一个一个解决)
<1>第一次编译:报错cmake版本太低

[root@server1 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 \  #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                           #安装所有扩展字符集

在这里插入图片描述
下载一个更高版本的cmake安装包,安装软件

[root@server1 ~]# ls
bansys                           mysql-boost-5.7.17.tar.gz
bansys.zip                       varnish-3.0.5-1.el6.x86_64.rpm
cmake-2.8.12.2-4.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm
mysql-5.7.17
[root@server1 ~]# yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y

在这里插入图片描述
<2>第二次编译:报错缺少一个参数

[root@server1 ~]# cd mysql-5.7.17/
[root@server1 mysql-5.7.17]# ls
[root@server1 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 

在这里插入图片描述
在这里插入图片描述
<3>第三次:添加参数再次编译,报错没有安装ncurses-devel

[root@server1 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/

在这里插入图片描述
在这里插入图片描述
安装依赖性

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

在这里插入图片描述
<4>第四次:报错一出缓存文件

在这里插入图片描述
在这里插入图片描述
删除编译缓存文件,再次编译

[root@server1 mysql-5.7.17]# ls
[root@server1 mysql-5.7.17]# rm -fr CMakeCache.txt 
[root@server1 mysql-5.7.17]# ls

在这里插入图片描述
<5>第五次编译:报错c++的依赖性没有安装
在这里插入图片描述
在这里插入图片描述
安装gcc gcc-c++

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

在这里插入图片描述
<6>第六次:删除缓存文件再次编译,报错bison没有安装

[root@server1 mysql-5.7.17]# rm -fr CMakeCache.txt 
[root@server1 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/

在这里插入图片描述
在这里插入图片描述
安装bison
在这里插入图片描述
<7>第七次编译:删除缓存文件,再次编译,编译成功
在这里插入图片描述
在这里插入图片描述
5.安装
在这里插入图片描述

6.安装包
在这里插入图片描述
在这里插入图片描述
7.安装之后可以看到/usr/local/lnmp目录下生成了mysql目录,而mysql目录下有一些子目录和文件

[root@server1 mysql-5.7.17]# cd /usr/local/lnmp
[root@server1 lnmp]# ls
mysql
[root@server1 lnmp]# cd mysql/
[root@server1 mysql]# ls
bin  COPYING  docs  include  lib  man  mysql-test  README  share  support-files

在这里插入图片描述
8.将mysql的配置文件复制到etc下
备份/etc/my.cnf文件为/etc/my.cnf.bak

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

在这里插入图片描述
mysql的默认配置文件在support-files目录下,将mysql配置文件赋值为/etc/my.cnf文件

[root@server1 etc]# cd -
/usr/local/lnmp/mysql
[root@server1 mysql]# cd support-files/
[root@server1 support-files]# ls
magic  my-default.cnf  mysqld_multi.server  mysql-log-rotate  mysql.server
[root@server1 support-files]# vim my-default.cnf 
[root@server1 support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y
[root@server1 support-files]# 

在这里插入图片描述
9.编辑mysql的配置文件,内容如下:

basedir = /usr/local/lnmp/mysql
datadir = /usr/local/lnmp/mysql/data
# port = .....
# server_id = .....
socket = /usr/local/lnmp/mysql/data/mysql.sock

在这里插入图片描述

[root@server1 ~]# vim /etc/my.cnf
[root@server1 ~]# 

在这里插入图片描述
10.创建mysql组和用户

[root@server1 ~]# groupadd -g 27 mysql
[root@server1 ~]# useradd -u 27 -g 27 mysql
[root@server1 ~]# id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)
[root@server1 ~]# 

在这里插入图片描述
11.新建一个data目录作为数据存放目录,修改目录的属性,让mysql用户对这个目录有操作的权限

[root@server1 mysql]# mkdir data
[root@server1 mysql]# ll

[root@server1 mysql]# chgrp mysql /usr/local/lnmp/mysql -R
[root@server1 mysql]# chown mysql /usr/local/lnmp/mysql/data/ -R
[root@server1 mysql]# ll

在这里插入图片描述
在这里插入图片描述
12.将编译生成的mysql二进制命令放进系统环境变量的文件中,保证可以直接使用二进制命令(配置完之后mysql命令可以自动补齐)

[root@server1 mysql]# vim ~/.bash_profile 
[root@server1 mysql]# 
[root@server1 mysql]# source ~/.bash_profile 
[root@server1 mysql]# 

在这里插入图片描述
在这里插入图片描述
13.将编辑生成的mysql启动脚本复制到系统服务的目录中,保证脚本有可执行权限

[root@server1 mysql]# cd support-files/
[root@server1 support-files]# ls
magic  my-default.cnf  mysqld_multi.server  mysql-log-rotate  mysql.server
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld
[root@server1 support-files]# ll /etc/init.d/mysqld
-rwxr-xr-x 1 root root 10916 Apr 26 22:47 /etc/init.d/mysqld
[root@server1 support-files]# cd

在这里插入图片描述
14.将mysql初始化,这时data目录下不能有任何文件,如果有的话删除

[root@server1 ~]# mysqld --user=mysql --initialize

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

[root@server1 data]# cd
[root@server1 ~]# /etc/init.d/mysqld  start
Starting MySQL.Logging to '/usr/local/lnmp/mysql/data/server1.err'.
.. SUCCESS! 

在这里插入图片描述
15.初始化文成后会生成一个临时密码,用这个密码登陆数据库,查看数据失败,这是因为没有进行安全初始化

[root@server1 ~]# mysql -p

在这里插入图片描述
16.对mysql进行安全初始化,按照提示进行即可

[root@server1 ~]# mysql_secure_installation 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
17.再次进入数据库查看,可以查看

[root@server1 ~]# mysql -uroot -p
Enter password: 

在这里插入图片描述
三、源码安装php
1.下载一个php的安装包,解压
在这里插入图片描述
2.安装编译php源码时需要的依赖性
在这里插入图片描述
3.进行编译
编译时出错,提示需要libmcrypt的依赖性,下载一个libmcrypt的安安装包,安庄后再次编译,编译成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编译完是这样的
在这里插入图片描述
4.安装
make && make install
在这里插入图片描述
在这里插入图片描述
5.安装成功后会看到/usr/local/lnmp下会出先一个php目录
在这里插入图片描述
6.切换到这个目录下,编辑php的默认配置文件
在这里插入图片描述

25  pid = run/php-fpm.pid  ##pid行去掉注释
149 user = nginx
150 group = niginx      ##保证用户和组都是nginx

在这里插入图片描述
在这里插入图片描述
7.将源码包中的php。ini文件复制到安装后的目录中
编辑这个文件
在这里插入图片描述
更改时区
在这里插入图片描述
8.将php的启动文件复制到系统启动脚本的默认目录下
在这里插入图片描述
在这里插入图片描述
9.创建nginx用户
在这里插入图片描述
10.启动php服务,启动成功后可以查看到他使用的端口
在这里插入图片描述
在这里插入图片描述
四、源码安装NGINX
1.解压安装包

[root@server1 ~]# tar zxf nginx-1.14.0.tar.gz 
[root@server1 ~]# ls

2.切换到解压出的目录,修改下面文件的内容
(1)去掉版本号

[root@server1 nginx-1.14.0]# vim src/core/nginx.h
[root@server1 nginx-1.14.0]# 
#define NGINX_VER          "nginx/"

在这里插入图片描述
在这里插入图片描述
(2)去掉debug日志(debug日志的级别很低,会产生很多数据,一般不需要开启)

[root@server1 nginx-1.14.0]# vim auto/cc/gcc 

171 # debug
172 # CFLAGS="$CFLAGS -g"

在这里插入图片描述
在这里插入图片描述
3.创建编译环境,添加需要的模块
第一次编译:报错需要安装pcre库

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

在这里插入图片描述
在这里插入图片描述
解决依赖性

[root@server1 nginx-1.14.0]# yum install pcre-devel -y

在这里插入图片描述
再次编译:编译成功

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

在这里插入图片描述
在这里插入图片描述
4.安装

[root@server1 nginx-1.14.0]# make && make install

在这里插入图片描述
在这里插入图片描述
安装后在/usr/local/lnmp目录下会产生一个nginx子目录
在这里插入图片描述
5.配置nginx服务

[root@server1 nginx-1.14.0]# cd /usr/local/lnmp/
[root@server1 lnmp]# ls
mysql  nginx  php
[root@server1 lnmp]# cd nginx/
[root@server1 nginx]# ls
conf  html  logs  sbin
[root@server1 nginx]# cd conf/
[root@server1 conf]# ls
fastcgi.conf            koi-win             scgi_params
fastcgi.conf.default    mime.types          scgi_params.default
fastcgi_params          mime.types.default  uwsgi_params
fastcgi_params.default  nginx.conf          uwsgi_params.default
koi-utf                 nginx.conf.default  win-utf
[root@server1 conf]# vim nginx.conf

在这里插入图片描述

  2 user  nginx nginx;
  3 worker_processes  2;

 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;
 71         }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
切换到nginx/sbin目录下可以进行语法检测,检查配置文件中有没有语法问题

[root@server1 conf]# cd ..
[root@server1 nginx]# ls
conf  html  logs  sbin
[root@server1 nginx]# cd sbin/
[root@server1 sbin]# ls
nginx
[root@server1 sbin]# ./nginx -t
nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful
[root@server1 sbin]# 

在这里插入图片描述
-v查看版本号

[root@server1 sbin]# ./nginx -v
nginx version: nginx/

在这里插入图片描述
-V查看编译环境

[root@server1 sbin]# ./nginx -V
nginx version: nginx/
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/lnmp/nginx --with-threads --with-file-aio 
--with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx

在这里插入图片描述
6.创建一个软连接可以直接使用nginx命令

[root@server1 sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx  /usr/local/sbin/
[root@server1 sbin]# 
[root@server1 sbin]# nginx -t
nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful

在这里插入图片描述
7.打开服务查看端口号

[root@server1 sbin]# nginx
[root@server1 sbin]# netstat -tnlp

在这里插入图片描述
打开服务后可以看到多出了几个子目录

[root@server1 sbin]# cd ..
[root@server1 nginx]# ls
client_body_temp  fastcgi_temp  logs        sbin       uwsgi_temp
conf              html          proxy_temp  scgi_temp

在这里插入图片描述
8.打开浏览器,访问测试
出现nginx的页面
在这里插入图片描述
9.编辑一个php文件,浏览器访问测试

[root@server1 sbin]# cd ..
[root@server1 nginx]# ls
client_body_temp  fastcgi_temp  logs        sbin       uwsgi_temp
conf              html          proxy_temp  scgi_temp
[root@server1 nginx]# cd html/
[root@server1 html]# ls
50x.html  index.html
[root@server1 html]# vim index.php
[root@server1 html]# ls
50x.html  index.html  index.php

在这里插入图片描述

<?php
phpinfo()
?>

在这里插入图片描述
浏览器中刷新后出现php页面,说明nginx和php结合成功

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44224894/article/details/89578176