LNMP架构祥解——php、nginx、mysql源码编译的过程(也就是搭建LNMP架构的过程)

news/2025/2/26 1:22:29

前言

本文将介绍LNMP架构中PHP、Nginx、Mysql的源码编译过程
在我们使用的Linux系统中,可以从yum源中获得mysql、php,为什么要进行如此漫长复杂的过程进行编译呢?
这是因为官方为我们提供的mysql、php等其功能有限,我们自行编译,是为了定制化,可以在编译过程中添加需要的功能模块

yum安装和自己编译安装的区别
如果是yum安装,它会把所有的模块都安装进去,不管你用不用都会给你安装
如果是自己动手编译,安装服务的时候需要安装什么就编译什么模块,公司一般是这样做
需要什么服务就安装什么,这样系统就比较干净

mysql源码编译时要求虚拟机的硬盘大小不能小于20G,否则后边的编译过程可能会出问题
而且会很漫长,为了提升速度我们增加CPU核数和内存大小
我先查看一下我做实验的的主机是否满足条件
在这里插入图片描述

实验环境

rhel6.5版本的虚拟机+7.3版本的真机

主机信息主机功能
虚拟机server1(172.25.8.1)用来搭建lnmp架构
真机(172.25.8.250)用来测试

注意:实验过程中用到的yum源尽量和主机版本一致,有可能出现不兼容的问题

  • (1)在真机上面创建一个干净的快照server1
    在这里插入图片描述
  • (2)打开硬件管理中心,创建好快照
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (3)用真机连接server1
    在这里插入图片描述
    声明:实验过程中用到的所有安装包均是在官网下载的,都下载到了我的真机上面
./configure表示检测一下环境
make表示编译
make install表示安装

1.源码编译安装php详细说明

  • (1)从真机给虚拟机server1传一个php的安装包
    在这里插入图片描述
  • (2)在server1上面查看安装包,并且解压,然后进入解压后的目录查看
    在这里插入图片描述
  • (3)建立一个lnmp架构的目录
    在这里插入图片描述
  • (4)进入编译后的目录,开始检测安装的环境,看东西够不够

在这里插入图片描述
在这里插入图片描述
出现错误
在这里插入图片描述
解决错误
在这里插入图片描述
在这里插入图片描述
再检测
在这里插入图片描述
又出现错误
在这里插入图片描述
解决错误
在这里插入图片描述

检测出现错误
在这里插入图片描述
解决错误
在这里插入图片描述
检测出现错误
在这里插入图片描述
在这里插入图片描述
解决错误
在这里插入图片描述
检测出现错误
在这里插入图片描述
解决错误
在这里插入图片描述
检测出现错误
在这里插入图片描述
在这里插入图片描述
解决错误
在这里插入图片描述

检测出现错误
在这里插入图片描述
在这里插入图片描述
解决错误
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

检测出现错误,并且解决
在这里插入图片描述
在这里插入图片描述
到这里就检测成功了,说明可以开始编译和安装了

  • (5)开始编译和安装
    在这里插入图片描述
  • (6)编译的时候指定了php的用户是nginx用户,因此要建立nginx用户

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

  • (7)配置php
cd /usr/local/lnmp/php/进入php目录
ls查看
cd etc/
cp  php-fpm.conf.default  php-fpm.conf复制一份配置文件模版
vim php-fpm.conf编辑fastcgi的进程管理文件

在这里插入图片描述

注意用户和组都是nginx
搜user group把用户和组全部改为nginx用户
开启pid=run/php-fpm.pid开启进程pid

在这里插入图片描述

在这里插入图片描述

cp php.ini-production /usr/local/lnmp/php/etc/php.ini
cd /usr/local/lnmp/php/etc/
ls
vim php.ini 配置php的主配置文件
将date.timezone改为Asia/Shanghai

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

cd sapi/
ls
cd fpm/
vim init.d.php-fpm
cp init.d.php-fpm  /etc/init.d/php-fpm 建立php的启动脚本
chmod +x /etc/init.d/php-fpm 给脚本一个权限
/etc/init.d/php-fpm start  开启php服务
netstat -tnlp 默认php服务开启9000端口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里为止,php的源码编译、安装、配置都已经完成

2.源码编译安装nginx的详细说明

  • (1)从真机给server1传一个1.16.0版本的nginx安装包
    在这里插入图片描述
  • (2)在server1上面解压并且进入解压后的目录
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (3)检测编译安装的环境是否满足
    在这里插入图片描述
    检测出现错误
    在这里插入图片描述
    解决错误
    在这里插入图片描述
    再次检测就成功了
    在这里插入图片描述
  • (4)编译和安装
    在这里插入图片描述
  • (5)配置nginx服务
编辑nginx服务的配置文件
cd /usr/local/lnmp/nginx/conf
vim nginx.conf
加入index.php(现在要做lnmp(把php和nginx关联起来))
开启php模块:注释掉fastcgi_param,把文件写为 fastcgi.conf

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

ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin把nginx服务的启动脚本做软连接,方便管理nginx服务
输入nginx可以tab补全
nginx -t检测配置文件的语法是否存在错误
nginx 开启nginx服务

在这里插入图片描述
在这里插入图片描述
查看nginx服务开启的端口,默认是80端口
在这里插入图片描述

编写nginx服务的默认发布页面(已经将默认发布页面改为index.php了)
pwd
cd /usr/local/lnmp/nginx/html
vim index.php
<?php
phpinfo()
?>

在这里插入图片描述
在这里插入图片描述
重新加载服务,使设置生效
在这里插入图片描述

  • (6)测试
在真机的浏览器里面测试:
在浏览器输入:172.25.8.1就可以看到php的页面了(此时nginx和php已经关联起来了)

在这里插入图片描述
到这里nginx的编译、安装、配置已经进行完毕,接下来进行mysql
在进行mysql的编译安装之前,为了加快安装mysql的速度,我们来调整一下cpu和内存的大小

先关闭server1虚拟机
在这里插入图片描述
在真机中打开硬件管理中心
在这里插入图片描述
将内存设置为2048M
在这里插入图片描述
将CPU设置为2核的
在这里插入图片描述
用真机再次连接server1
在这里插入图片描述

3.源码编译安装mysql的详细说明

  • (1)从真机给虚拟机server1传一个mysql的安装包
    在这里插入图片描述
  • (2)解压并且进入解压后的目录
    在这里插入图片描述
  • (3)发现这个使用cmake
    在这里插入图片描述
  • (4)安装cmake
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (5)检测环境
    在这里插入图片描述
    出现错误
    在这里插入图片描述
    解决错误
    在这里插入图片描述
    先删掉刚刚检测生成的文件再进行编译
    在这里插入图片描述
    出现问题,解决
    在这里插入图片描述

先删掉刚刚检测生成的文件再进行编译
在这里插入图片描述
出现问题,解决
在这里插入图片描述

先删掉刚刚检测生成的文件再进行编译
在这里插入图片描述
在这里插入图片描述检测成功

  • (6)安装,这个特别慢
    在这里插入图片描述
    在这里插入图片描述
  • (7)配置mysql
    进入lnmp目录,可以看到生成了mysql目录
    在这里插入图片描述
    进入mysql目录查看
    在这里插入图片描述
    进入mysql的解压目录,查找mysql服务的启动脚本
    在这里插入图片描述
    在这里插入图片描述
    生成mysql的启动脚本,给权限
    先备份一下mysql服务的配置文件,再复制一份模版
    在这里插入图片描述
    编辑mysql的配置文件
    在这里插入图片描述
    写入基本信息:主目录、数据目录、套节字文件的目录
    在这里插入图片描述
    建立mysql用户
    在这里插入图片描述
    将mysql主目录的权限变为mysql,只有这样才可以生成它的数据目录
    在这里插入图片描述
    编辑环境文件
    在这里插入图片描述
    加入mysql命令
    在这里插入图片描述
    source使其生效,可以看出有mysql命令了
    在这里插入图片描述
    生成data目录的同时回给一个数据库的初始密码
    在这里插入图片描述
    在这里插入图片描述
    可以看到生成了data目录
    在这里插入图片描述
    生成data目录之后将权限改回来,只把data目录的权限给mysql
    在这里插入图片描述开启mysql服务
    在这里插入图片描述
    利用初始密码登录数据库
    发现只有改了密码之后才可以查看数据库
    在这里插入图片描述
    初始化数据库,改数据库的的密码(给root的)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    再次登录数据库,可以查看了
    在这里插入图片描述
    可以看到数据目录下生成了套节字文件
    在这里插入图片描述
    在这里插入图片描述
    最后将php、nginx、mysql服务全部开启
    在这里插入图片描述编译和安装mysql的过程中都发生了什么
    进入解压目录之后
    开始编译,会指定编译目录,编译之后会在解压目录下面生成makefile和objs这两个目录
    编译完之后开始安装,安装之后会在/usr/local/lnmp/生成mysql目录

整个实验步骤如下,仅供大家参考

(1)先poweroff先关闭虚拟机
(2)virt-manager 在真机是给虚拟机加内存为2048M和cpu2个
(3)先在www.mysql.com的官网上面查看mysql的包、编译说明、官方文档等等(这个要学会看)
(4)在真机给虚拟机传一个mysql-boost的包,已经下载好的
(5)在虚拟机上面:tar zxf mysql 解压mysql的包
cd mysql/进入解压目录
ls查看,发现mysql编译需要使用cmake(类似gcc编译器)
(6)从真机给虚拟机传一个cmake的安装包
(7)在虚拟机上面yum install -y cmake安装cmake编译器
现在有cmake命令了,开始使用命令编译(编译需要的模块参考官方文档)
(8)在真机中evience rhel6 lanmp.pdf查看编译需要的模块(官网没有找到)
(9)开始编译
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/
参考文档里面没有最后一个,编译的时候报错,在最后把提示的这个加上
每次编译完之后都会生成这个文件:CMakeCache.txt
出现错误,解决
yum install -y ncurses-devel
每次重新编译之前:rm -rf CMakeCache.txt
再编译,又报错
yum install -y gcc-c++
rm -rf CMakeCache.txt
再编译,又报错
yum install -y bison
rm -rf CMakeCache.txt
再编译,这次好了
(10)make && make install(开始安装,这个特别慢)
(11)配置mysql
cd mysql/进入解压目录
cd /usr/local/lnmp
cd mysql/进入解压目录
cd support-files/
cp mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
cp /etc/my.cnf /etc/my.cnf.bak备份
cp my-default.cnf /etc/my.cnf
vim /etc/my.cnf
basedir=mysql的主目录
datadir=mysql的数据目录
socket=mysql的套节字文件目录
group -g 27 mysql建立mysql用户
useradd -u 27 -g 27 mysql
id mysql
chown mysql.mysql /usr/local/lnmp/mysql -R
cd /usr/local/lnmp/mysql
vim ~/.bash_profile
加入:/usr/local/lnmp/mysql/bin
source ~/.bash_profile
mysql tab看有没有数据库
mysqld --user=mysql --initialize生成data目录
chown root /usr/local/lnmp/mysql -R
chown mysql /usr/local/lnmp/mysql/data -R
/etc/init.d/mysqld start开启数据库服务
mysql -uroot -p按照自动生成的密码登录一次,发现查看数据库没有权限,需要安全初始化
mysql_secure_installation数据库安全初始化
mysql -uroot -predhat登录数据库
show database;查看
exit
cd /usr/local/lnmp/mysql
cd data/
netstat -tlnp查看
nginx开启nginx服务
/etc/init.d/php-fpm start开启php服务
netstat -tlnp查看服务开启的情况
看nginx的80端口、php的9000端口、mysql的3306端口是否都开启

这三部分现在都准备好了,接下来就可以利用lnmp架构实现客户访问服务器从前到后的整个流程了


http://www.niftyadmin.cn/n/2928388.html

相关文章

利用lnmp架构搭建一个可用论坛,将php、nginx、mysql三者联系起来

php、nginx、mysql现在都配置好了&#xff0c;接下来我将以搭建论坛并且客户使用论坛为例&#xff0c;演示整个过程 lnmp架构的整个访问过程如下 用户从前端页面开始访问&#xff1a; 先到达nginx&#xff0c;由nginx判断是静态资源还是动态页面请求 如果是静态资源&#xff0…

LNMP架构之静态缓存(nginx+php+mysql+memcache)——MemCache对PHP页面的缓存加速优化

1.什么是memcache&#xff1f; memcache是一套分布式的高速缓存系统&#xff0c;由LiveJournal的Brad Fitzpatrick开发&#xff0c;但目前被许多网站使用以提升网站的访问速度 尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 &#xff0c;这是一套开放…

LNMP架构——OpenResty实现缓存前移(到达Nginx前端层面)

前言 我们都知道Nginx有很多的特性和好处&#xff0c;但是在Nginx上开发成了一个难题&#xff0c;Nginx模块需要用C开发&#xff0c;而且必须符合一系列复杂的规则&#xff0c;最重要的用C开发模块必须要熟悉Nginx的源代码&#xff0c;使得开发者对其望而生畏。为了开发人员方便…

在linux上面合并多个windows文件乱码的问题

在linux上面单独打开每个被合并txt文件都是正确显示的。但是cat *.txt > 1.txt 打开就是乱码。 原因是1.txt虽然是utf-8编码&#xff0c;但是显示是用latin1显示的。解决办法&#xff1a; iconv -f utf-8 -t utf-8 1.txt > 2.txt 就好了。 另外&#xff0c;文件里面如果…

LNMP架构——nginx+jsp+tomcat完成客户端的动态请求

首先&#xff0c;我先给大家画一张图&#xff0c;来理一下lnmp架构工作的整个过程 上一个实验其实我们通过php请求的是nginx服务器上的资源&#xff0c;还是静态资源 现在我们想实现动态获取&#xff0c;利用jsp动态获取tomcat服务器上面的资源 1.什么是tomcat&#xff1f; …

lnmp——nginx+tomcat动态实现的tomcat服务器之间负载均衡

之前我们已经实现了客户端访问nginx服务器的时候&#xff0c;通过jsp动态获取tomcat服务器上面的资源 接下来实现nginx做反向代理tomcat做web服务器实现两个web&#xff08;tomcat1和tomcat2&#xff09;之间的负载均衡 并且客户端可以在浏览器动态注册信息&#xff0c;web1和w…

有道云笔记最新软件下载官方版

2019独角兽企业重金招聘Python工程师标准>>> 有道笔记是网易有道全新推出的云笔记软件&#xff0c;旨在以云存储技术帮助用户建立一个可以轻松访问、安全存储的云笔记空间&#xff0c;解决个人资料和信息跨平台跨地点的管理问题。有道云笔记目前支持安卓手机版&…

lnmp——nginx+sticky粘制模块实现tomcat负载均衡中的会话保持( nginx会话保持之sticky模块)

接下来再使用粘制位sticky来实现会话保持 1.什么是会话保持&#xff08;Session Persistence&#xff09;&#xff1f; 在一段时间内将同一客户的某一类型请求绑定至 同一台服务器上&#xff0c;使得这一时间段中该客户端所有该类型请求均由同一服务器进行处理 让一个用户的访…