博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)
阅读量:3921 次
发布时间:2019-05-23

本文共 9557 字,大约阅读时间需要 31 分钟。

主机环境:

  • rhel6.5 selinux and iptables disabled

一、知识剖析

  • 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
  1. 创建一个目录(用于将之后编译的的MYSQL,PHP,nginx都放在一起)
[root@server1 ~]# mkdir -p /usr/local/lnmp
  1. 安装源码编译工具cmake(支持编译C++语言)
  • cmake跨平台工具是用来预编译mysql源码的,用于设置mysql的编译参数。如:安装目录、数据存放目录、字符编码、排序规则等
[root@server1 ~]# yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y
  1. 创建预编译环境,可以定制即加上自己所需的安装条件(比如安装位置等等)
[root@server1 mysql-5.7.17]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \      指定mysql的安装位置> -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \     数据库中数据存放的目录> -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \    \链接数据库的SOCKET文件      > -DWITH_MYISAM_STORAGE_ENGINE=1 \      安装MYISAM存储引擎> -DWITH_INNOBASE_STORAGE_ENGINE=1 \    > -DDEFAULT_CHARSET=utf8 \             使用UTF-8字符编码> -DDEFAULT_COLLATION=utf8_general_ci \     校验字符> -DEXTRA_CHARSETS=all \     安装所有扩展字符集

在这里插入图片描述

3.在初次编译后,我们会发现有许多依赖性未安装,一个一个解决依赖项,预编译环境配置完成
在这里插入图片描述

[root@server1 mysql-5.7.17]# yum install gcc gcc-c++ -y
  • 再次编译
    在这里插入图片描述
  • 添加下图划线部分再次编译
    在这里插入图片描述
    在这里插入图片描述
[root@server1 mysql-5.7.17]# yum install ncurses-devel -y
  • 再次编译
    在这里插入图片描述
    会出现警告
    在这里插入图片描述
[root@server1 mysql-5.7.17]# yum install -y bison
  • 再次编译
    在这里插入图片描述
    显示成功:
    在这里插入图片描述
  1. 编译汇编
    注意:
  • mysql编译时间较长
  • make之前可以把其他虚拟机关掉,然后把内存加大点(加内存时可以在真机free -m,查看真机内存大小,6g的内存给虚拟机分里g即可)
  • 增加加cpu的核数,修改为2即可
[root@server1 ~]# cd mysql-5.7.17/[root@server1 mysql-5.7.17]# make[root@server1 mysql-5.7.17]# make install
  • 配置mysql
  1. 将编译完成的mysql启动脚本复制到系统启动服务的默认目录中
[root@server1 ~]# cd mysql-5.7.17/[root@server1 mysql-5.7.17]# cd support-files/    [root@server1 support-files]# cp mysql.server /etc/init.d/mysqld[root@server1 support-files]# cd /etc/init.d/[root@server1 init.d]# chmod +x mysqld    ##添加权限[root@server1 init.d]# cd[root@server1 ~]# /etc/init.d/mysqld   ##命令可以补齐则成功
  1. 进入源码编译目录,再进入mysql安装的位置,将编译完成的默认配置文件放在/etc/my.cnf
[root@server1 ~]# cd /etc[root@server1 etc]# ls my.cnf my.cnf[root@server1 etc]# cp my.cnf my.cnf.bakeup[root@server1 etc]# cd [root@server1 ~]# cd mysql-5.7.17/[root@server1 mysql-5.7.17]# cd support-files/[root@server1 support-files]# cp my-default.cnf /etc/my.cnfcp: overwrite `/etc/my.cnf'? y
  1. 编辑my.cnf
[root@server1 support-files]# vim /etc/my.cnfbasedir = /usr/local/lnmp/mysql    # mysql的安装目录datadir = /usr/local/lnmp/mysql/data    # mysql数据存放位置socket = /usr/local/lnmp/mysql/data/mysql.sock    # mysql与外界联系的套接字文件位置
  1. 对mysql服务进行限制(利用mysql用户),将mysql服务的工作空间局限在mysql用户的家目录中,创建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
  1. 创建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]# lltotal 60drwxr-xr-x  2 root  mysql  4096 Feb 16 15:37 bin-rw-r--r--  1 root  mysql 17987 Nov 28  2016 COPYINGdrwxr-xr-x  2 mysql mysql  4096 Feb 16 16:21 datadrwxr-xr-x  2 root  mysql  4096 Feb 16 15:37 docsdrwxr-xr-x  3 root  mysql  4096 Feb 16 15:37 includedrwxr-xr-x  4 root  mysql  4096 Feb 16 15:37 libdrwxr-xr-x  4 root  mysql  4096 Feb 16 15:37 mandrwxr-xr-x 10 root  mysql  4096 Feb 16 15:38 mysql-test-rw-r--r--  1 root  mysql  2478 Nov 28  2016 READMEdrwxr-xr-x 28 root  mysql  4096 Feb 16 15:38 sharedrwxr-xr-x  2 root  mysql  4096 Feb 16 15:38 support-files
  1. 将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令
[root@server1 mysql]# vim ~/.bash_profile 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命令生成,但是还不能进入
  1. 执行mysql的配置初始化文件
[root@server1 data]# mysqld --user=mysql --initialize

在这里插入图片描述

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

[root@server1 mysql]# cd data[root@server1 data]# lsauto.cnf  ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1  server1.err[root@server1 data]# rm -fr *
  1. 开启mysqld
[root@server1 data]# /etc/init.d/mysqld startStarting MySQL.Logging to '/usr/local/lnmp/mysql/data/server1.err'.. SUCCESS! 成功
  1. 查是否可以登录进入mysql
[root@server1 data]# mysql -uroot -pgtXff9oUJ*/l

注意:如果不能成功进入

显示: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新密码 ##再次登录则可以成功进入
  1. mysql的安全初始化
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 登陆mysql数据库测试
    在这里插入图片描述

三 、PHP源码编译

  1. 得到PHP的源码包并解压
[root@server1 ~]#  tar jxf php-5.6.35.tar.bz2
  1. 解决依赖性
[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
  1. 进入解压目录创造预编译环境
    在这里插入图片描述
./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              # 加密算法
  1. 编译和安装
[root@server1 php-5.6.35]# make && make install
  1. 创建nginx用户
[root@server1 ~]# useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
  1. 做php服务的简单配置(配置pid和时区)
[root@server1 etc]# cd /usr/local/lnmp/php/etc/[root@server1 etc]# lspear.conf  php-fpm.conf.default[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     ##保证用户和组都是ngnix150 group = nginx[root@server1 ~]# cd 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]# cd /usr/local/lnmp/php/etc/[root@server1 etc]# vim php.ini date.timezone =Asia/Shanghai    ##修改时区
  1. 将php启动的脚本复制到系统启动脚本的默认目录下,并测试php是否可以启动
[root@server1 ~]# cd php-5.6.35[root@server1 php-5.6.35]# cd sapi/fpm/[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm         # init.d.php-fpm是编译完成的启动脚本[root@server1 fpm]# chmod +x /etc/init.d/php-fpm        #给脚本加上可执行权限[root@server1 fpm]# /etc/init.d/php-fpm startStarting php-fpm  done[root@server1 fpm]# netstat -tlnp          # 查看php服务的监听端口(9000)

四、nginx的源码编译

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

[root@server1 ~]# tar zxf nginx-1.14.0.tar.gz
  1. 去掉nginx的版本号
[root@server1 ~]# cd nginx-1.14.0[root@server1 nginx-1.14.0]# vim src/core/nginx.h 14 #define NGINX_VER          "nginx/"
  1. 关闭debug日至(因为debug的日志非常多,企业中一般不需要开启)
[root@server1 nginx-1.14.0]# vim auto/cc/gcc 171 # debug172 #CFLAGS="$CFLAGS -g"     ##添加注释
  1. 创造预编译环境
[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
  1. 解决源编译中的依赖性问题
[root@server1 nginx-1.14.0]# yum install pcre-devel gcc zlib-devel -y
  • 再次编译,则成功
  1. 编译汇编
[root@server1 nginx-1.14.0]# make && make install
  1. 配置nginx服务
[root@server1 nginx-1.14.0]# cd /usr/local/lnmp/nginx/conf/[root@server1 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 }
  1. 创建一个软连接,可以直接调用命令
[root@server1 sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/    ##创建一个软连接
  1. 检测nginx服务是否可用并打开nginx服务
[root@server1 sbin]# nginx -t  ##语法检测[root@server1 nginx-1.14.0]# nginx  ##打开nginx[root@server1 nginx-1.14.0]# netstat -tnlp     ##查看端口为80
  1. 浏览器中输入172.25.79.1 显示nginx页面
    在这里插入图片描述
  2. 访问测试
[root@server1 ~]# cd /usr/local/lnmp/nginx/html/[root@server1 html]# ls50x.html  index.html[root@server1 html]# vim index.php   ##编写默认页面
  • 浏览器中输入172.25.79.1/index.php,出现以下界面则,表示nginx和PHP结合成功
    在这里插入图片描述

转载地址:http://nghrn.baihongyu.com/

你可能感兴趣的文章
重载CDialog::PreCreateWindow是无效的
查看>>
vs2012窗口布局恢复
查看>>
WINDOWS下的ANSI字符串和UTF8字符串之间的相互转换
查看>>
第八章 右左法则----复杂指针解析
查看>>
使用CFileFind遍历递归删除文件和文件夹
查看>>
使用opencv 录摄像头数据到文件
查看>>
error C1189:#error:This file requires _WIN32_WINNT to be #defined at least to 0x0403
查看>>
CentOS yum 源的配置与使用
查看>>
error while loading shared libraries: libevent-2.0.so.5 安装好mamcache,启动服务时
查看>>
c++ web编程:写出你的CGI程序
查看>>
linux使用小技巧
查看>>
16 条技巧让你更高效使用 SSH
查看>>
Linux RPM 命令参数使用详解 查看 rpm包依赖性
查看>>
linux shell 脚本实现tcp/upd协议通讯(重定向应用)
查看>>
upstart 分析 and linux启动分析 (非常详细)
查看>>
图片ascii化的方法
查看>>
xargs使用技巧
查看>>
centos 6.4编译busybox报错 "Trying libraries: crypt m"
查看>>
linux 下查看局域网内所有存活主机和MAC进址
查看>>
curl 重启路由
查看>>