前言
本文将介绍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架构实现客户访问服务器从前到后的整个流程了