LNMP架构的搭建-源码编译(Linux、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的形式传送给浏览器。
  • 浏览器再进行解析与渲染然后进行呈现。

二、Mysql数据库的源码编译

  1. 得到mysql数据库的源码包,并进行解压
[root@server1 ~]# tar zxf mysql-boost-5.7.17.tar.gz
[root@server6 lnmp]# ls			#会发现生成mysql-5.7.17目录

在这里插入图片描述

  1. 安装mysql源码编译需要的工具cmake(支持编译C++语言)
[root@server1 lnmp]# yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y
[root@server1 mysql-5.7.17]# yum install gcc gcc-c++ ncurses-devel -y  ####安装编译前需要的软件(解决软件包的依赖性)

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

注意:如果mysql编译的时候出错的话,需要先进入解压的目录下,执行以下命令
首先,make clean
rm -rf CMakeCache.txt(之后再重新编译)

  1. 进行编译(确保在解压的目录下)
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

(在安装的时候重新读取)
在这里插入图片描述
4.进行安装
mysql编译时间较长;
make之前可以把其他虚拟机关掉,然后把内存加大点(加内存时可以在真机free -m,查看真机内存大小,6g的内存给虚拟机分里g即可);
增加加cpu的核数,修改为2即可。

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

1.查看安装完成对应生成的文件
在这里插入图片描述
2.将编译完成的mysql启动脚本复制到系统启动服务的默认目录中

[root@server1 support-files]# pwd
/root/lnmp/mysql-5.7.17/support-files
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld
[root@server1 init.d]# chmod +x mysqld    ##添加权限
[root@server1 init.d]# cd
[root@server1 ~]# /etc/init.d/mysqld   ##命令可以补齐则成功

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

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

5.进入源码编译目录,再进入mysql安装的位置,将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.编辑my.cnf

[root@server1 support-files]# vim /etc/my.cnf
basedir = /usr/local/lnmp/mysql    # mysql的安装目录
datadir = /usr/local/lnmp/mysql/data    # mysql数据存放位置
socket = /usr/local/lnmp/mysql/data/mysql.sock    # mysql与外界联系的套接字文件位置

7.创建mysql组和mysql用户

[root@server1 ~]# groupadd -g 27 mysql
[root@server1 ~]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql
[root@server1 support-files]# chown mysql.mysql /usr/local/lnmp/mysql/ -R  ##更改用户和租

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

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

9.将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令(修改环境变量)

[root@server1 mysql]# vim ~/.bash_profile 
10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
[root@server1 mysql]# source ~/.bash_profile           加载.bash_profile文件

##也可以在root的path中,使用软链接添加进来。(ln -s /usr/local/lnmp/mysql/bin/* /usr/local/sbin/)

[root@server1 mysql]# mysql  ##此时mysql命令生成,但是还不能进入

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

注意:如果这条命令执行不成功,则进入data目录下,将里面的东西都删掉,再次执行则成功

11.开启mysql,查看是否可以登陆进入MySQL

[root@server1 data]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/usr/local/lnmp/mysql/data/server1.err'.
. SUCCESS! 成功
[root@server1 support-files]# mysql -uroot -p"生成的初始化密码"
##此时进入无法查看库信息
可能会出现的报错

显示:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/usr/local/lnmpmysql/data/mysql.sock’
(1)可能是mysql.sock目录位置没有写对,可能在编译的时候就编写错误,也可能在 my.conf 文件中的socket:指定位置没有写对
(2)有可能是3306端口被占用了
解决方式:

netstat -anp | grep 3306 ##查看占用3306端口的pid
kill -9 pid(占用)
/etc/init.d/mysqld stop ##把mysql服务关掉
然后把data目录下的东西都删掉 :rm -fr *
/etc/init.d/mysqld start ##再打开mysql服务
mysqld --user=mysql --initialize ##再次生成初始化密码
mysql -uroot -p新密码 ##再次登录则可以成功进入

12.mysql安全初始化

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

注意:除了输入原密码和现密码之外其余回车

SHOW DATABASES;可以查看数据库

三、php源码编译

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

[root@server1 ~]#  tar jxf php-5.6.35.tar.bz2

2.解决依赖性

[root@server1 lnmp]# cd php-5.6.35
[root@server1 ~]# yum install -y libmcrypt-2.5.8-9.el6.x86_64.rpm
[root@server1 ~]# yum install -y libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
以上两个包要在官网上下载
[root@server1 php-5.6.35]# yum install libxml2-devel -y
[root@server1 php-5.6.35]# yum install openssl-devel -y
[root@server1 php-5.6.35]# yum install libcurl-devel -y
[root@server1 php-5.6.35]# yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64 -y
[root@server1 php-5.6.35]# yum install 2:libpng-devel-1.2.49-1.el6_2.x86_64 -y
[root@server1 php-5.6.35]# yum install freetype-devel -y
[root@server1 php-5.6.35]# yum install gmp-devel-4.3.1-7.el6_2.2.x86_64 -y
[root@server1 php-5.6.35]# yum install net-snmp-devel -y

3.进入解压目录进行编译

[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			#加密算法

4.进行安装

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

5.创建nginx用户

[root@server1 ~]# useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
做php服务的简单配置(配置pid和时区,让nginx可以识别php动态页面)

1.查看mysql的状态(开启)

[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

在这里插入图片描述

四、nginx源码编译(上一章)

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

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

2.去掉nginx的版本号

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

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

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

4.创造预编译环境

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

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

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

6.再次编译,则成功
编译汇编

[root@server1 nginx-1.14.0]# make && make install
更改nginx的配置文件

1.配置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
 [root@server1 nginx-1.14.0]# nginx  ##打开nginx
[root@server1 nginx-1.14.0]# netstat -tnlp     ##查看端口为80

2.在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.5.1/index.php
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值