源码编译安装LNMP架构环境
先下载nmp三件套
wget http://nginx.org/download/nginx-1.12.0.tar.gz
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.18.tar.gz
wget http://tw1.php.net/get/php-5.6.30.tar.gz/from/this/mirror -O php-5.6.30.tar.gz
编译安装Nginx
1、建立Nginx的程序目录
1 | [root@CentOS7 ~]# mkdir -pv /opt/nginx |
2、 安装依赖包
1 | [root@CentOS7 opt]# yum -y install openssl-devel pcre-devel zlib-devel |
3、创建nginx用户和组
1 | [root@CentOS7 opt]# useradd -U nginx -s /sbin/nologin |
前戏做足,接下来开始编译了,啊啊啊~~~~~
4、进入到nginx源码目录
1 | [root@CentOS7 opt]# cd nginx-1.12.0/ |
输入以下编译命令:
1 | ./configure --prefix=/opt/nginx \ |
敲两下回车
如下输出:
1 | checking for OS |
好,接下来/opt/nginx 目录下已经有文件集目录生成了,运行./sbin/nginx -V看看输出啥,如下:
1 | [root@CentOS7 sbin]# ./nginx -V |
嗦嘎,编译成功!
运行试试,记得配置防火墙规则,如果你要关掉防火墙也可以
[root@CentOS7 html]# systemctl stop firewalld.service
[root@CentOS7 html]# systemctl disable firewalld.service
上边两条命令拿去不谢。
开机ngixn还要启动啊,init脚本得做好咧,如下:
1 | #!/bin/bash |
脚本根据自己的Nginx安装路径设置好,加上可执行权限,放到/etc/init.d/目录下,之后使用下面两行命令开机启动:
1 | [root@CentOS7 init.d]# chkconfig --add nginx |
Nginx的安装配置就到这里啦
源码编译安装MySQL
参考资料
Installing MySQL from Source
https://dev.mysql.com/doc/refman/5.7/en/source-installation.html
How to Get MySQL
https://dev.mysql.com/doc/refman/5.7/en/getting-mysql.html
Building MySQL Server with CMake
https://dev.mysql.com/doc/internals/en/cmake.html
港真,看官方文档很重要,会给你指点迷津,少走弯路~~~~~
开始啦,之前已经下载好源码包mysql-boost-5.7.18.tar.gz ,开始脱(jie)衣(ya)服(suo),开搞!啊啊啊~~~
不过要注意哦,官网文档有这么一段“温馨提示”:
1 | Source Installation System Requirements |
为了照顾英文不好的同学,我简单说几句
1、必须安装cmake,新版的MySQL采用cmak来编译。
2、linux系统中的make版本最少在3.75及以上
3、linux必须有C++编译器
4、必须安装Boost 1.59.0,指定的1.59.0版本,其他的高版本、低版本都不行,就这一个版本
下载boost1.59
[root@CentOS7 opt]# yum remove boost-1.53.0-26.el7.x86_64 #删除系统自带的低版本boost
[root@CentOS7 opt]# wget https://dl.bintray.com/boostorg/release/1.59.0/source/boost_1_59_0.tar.gz #下载新版本的boost
创建mysql用户、用户组及目录
[root@CentOS7 /]# mkdir -pv /opt/mysql5.7/{conf,data}
mkdir: created directory /opt/mysql5.7'
mkdir: created directory
/opt/mysql5.7/conf’
mkdir: created directory `/opt/mysql5.7/data’
[root@CentOS7 /]# groupadd -r mysql && useradd -r -g mysql -s /bin/false -M mysql #增加mysql用户及用户组
安装依赖包保平安
yum install zlib-devel ncurses ncurses-devel bison
进入源码目录编译安装
[root@CentOS7 opt]# cd mysql-5.7.18/
[root@CentOS7 mysql-5.7.18]#
输入以下编译参数:
cmake . -DCMAKE_INSTALL_PREFIX=/opt/mysql5.7 -DMYSQL_DATADIR=/opt/mysql5.7/data -DSYSCONFDIR=/opt/mysql5.7/conf -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/opt/mysql5.7/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=1 -DWITH_BOOST=/opt/tools -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNODB_MEMCACHED=on
敲回车
等一会儿,看到最后一句 – Build files have been written to: /opt/mysql-5.7.18 ,哈哈,OK。
PS:这里有个坑,官方文档说的不是很清楚,boost1.59的压缩包下载下来后,-DWITH_BOOST的设置为压缩包所在的目录就行,也不用解压,例如我的boost1.59的压缩包放在/opt路径下,我这里就设置为-DWITH_BOOST=/opt
下一步就make -j 8 && make install
嘿嘿,我用的是Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
无惊无险,编译完成,接下来就是要做初始化啦
官方MySQL5.7文档里面有这么一段话:
After installing MySQL, you must initialize the data directory, including the tables in the mysql system database.
在安装MySQL,您必须初始化数据目录,包括MySQL系统数据库中的表。
As of MySQL 5.7.6, use the server to initialize the data directory:
自MySQL 5.7.6起,使用MySQL服务器初始化数据目录:
命令例子
shell> bin/mysqld –initialize –user=mysql
Before MySQL 5.7.6, use mysql_install_db:
在MySQL 5.7.6之前,使用mysql_install_db:
命令例子
shell> bin/mysql_install_db –user=mysql
OK,我这里采用的是mysqld –initialize来做初始化,哈哈哈哈哈哈哈~~~~~~~
进入MySQL应用目录
[root@CentOS7 ~]# cd /opt/mysql5.7/
[root@CentOS7 mysql5.7]#
初始化MySQL
1 | [root@CentOS7 mysql5.7]# ./bin/mysqld --initialize --user=mysql --basedir=/opt/mysql5.7 --datadir=/opt/mysql5.7/data |
会自动完成初始化,并生成一个临时的密码,如上。
上边有个报警 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).
我是乖乖仔,照做,删除掉data目录下初始化生成的文件,再来一波:
1 | [root@CentOS7 mysql5.7]# rm -rf data/* |
报警没有了,嘿嘿。
编辑配置文件,添加以下内容
1 | [client] |
拷贝配置文件
cp support-files/my-default.cnf /opt/mysql5.7/conf/my.cnf
拷贝启动脚本
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
编辑启动脚本
主要编辑basedir和datadir这两项
chkconfig –add mysqld
chkconfig mysqld on
[root@CentOS7 opt]# service mysqld start
Starting MySQL. [ 确定 ]
[root@CentOS7 opt]# service mysqld status
MySQL running (104746) [ 确定 ]
1 | [root@CentOS7 opt]# netstat -ntlp |
爽爽爽~~~~~
全局变量
为了直接使用,加到环境变量里,修改/etc/profile文件,在文件末尾添加:
export PATH=/opt/mysql5.7/bin:$PATH
source /etc/profile
设置root用户可以远程访问
1 | [root@CentOS7 data]# mysql -u root -p |
关闭CentOS7的防火墙,再用第三方数据库管理工具连接测试,OK啦。
MySQL5.7 编译安装完毕
源码编译安装PHP5
安装依赖库保平安
yum -y install gd zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel libticonv.x86_64 libticonv-devel.x86_64
具备第三方源的前提下的平安符
yum -y install gd zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel libticonv.x86_64 libticonv-devel.x86_64 php-mcrypt libmcrypt libmcrypt-devel mhash mhash-devel libevent libevent-devel libxml2 libxml2-devel bzip2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel
依赖包的一些点滴
扩展支持(mcrypt、mhash扩展和libevent)
如果想让编译的php支持mcrypt、mhash扩展和libevent,需要安装以下包
libmcrypt
libmcrypt-devel
mhash
mhash-devel
说明:
mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原。
mhash是基于离散数学原理的不可逆向的php加密方式扩展库,其在默认情况下不开启。
mhash的可以用于创建校验数值,消息摘要,消息认证码,以及无需原文的关键信息保存(如密码)等。
centos源不能安装libmcrypt-devel,由于版权的原因没有自带mcrypt的包,不过我在centos7中安装了epel源,哈哈哈。
使用yum命令安装
# yum install php-mcrypt libmcrypt libmcrypt-devel mhash mhash-devel
libevent相关包
libevent是一个异步事件通知库文件,其API提供了在某文件描述上发生某事件时或其超时时执行回调函数的机制
它主要用来替换事件驱动的网络服务器上的event loop机制。目前来说, libevent支持/dev/poll、kqueue、select、poll、epoll及Solaris的event ports。可以根据需要安装libevent,系统一般会自带libevent,但版本有些低。
使用yum命令安装
yum install libevent libevent-devel
支持xml的相关包
bzip2 是一个基于Burrows-Wheeler 变换的无损压缩软件能够高效的完成文件数据的压缩
libcurl主要功能就是用不同的协议连接和沟通不同的服务器,也就是相当封装了的sockPHP
libcurl允许你用不同的协议连接和沟通不同的服务器
yum install libxml2 libxml2-devel bzip2-devel libcurl-devel
图形相关的rpm包
通常对应的错误提示:JIS-mapped Japanese font support in GD
yum install libjpeg-devel libpng-devel freetype-devel
来个一条龙
yum -y install gd zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel libticonv.x86_64 libticonv-devel.x86_64 php-mcrypt libmcrypt libmcrypt-devel mhash mhash-devel libevent libevent-devel libxml2 libxml2-devel bzip2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel
前戏做足,好戏开始,各位同学往下面看,下面哦。。。。。。
[root@CentOS7 php-5.6.30]# tar zxvf php-5.6.30.tar.gz #解压源码包
[root@CentOS7 tools]# cd php-5.6.30/ #进入PHP源码目录
[root@CentOS7 php-5.6.30]#
输下编译命令:
1 | ./configure --prefix=/opt/php \ |
–with-mysqli=/opt/mysql5.7/bin/mysql_config 和–with-mysql=/opt/mysql5.7 这两个参数,我指向了自己编译安装的MySQL5.7.17 目录
最后看到下面这一段话:
1 | Generating files |
然后就是 make -j 8 && make install
就这么完成了编译安装php5.6.30
为php-fpm提供Sysv init脚本,并将其添加至服务列表
1 | [root@CentOS7 ~]# cp /opt/tools/php-5.6.30/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm |
为php-fpm提供配置文件
1 | [root@CentOS7 ~]# cd /opt/php/etc/ |
编辑php-fpm的配置文件
1 | 配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行): |
接下来就可以启动php-fpm了
service php-fpm start
[root@CentOS7 etc]# ps axuf |grep php
1 | [root@CentOS7 etc]# ps axuf |grep php |
整合nginx和php5
1、编辑 /opt/nginx/conf/nginx.conf,启用如下选项:
1 | location ~ \.php$ { |
2、vim /opt/nginx/conf/fastcgi_params,将其内容更改为如下内容:
1 | fastcgi_param GATEWAY_INTERFACE CGI/1.1; |
并在所支持的主页面格式中添加php格式的主页,类似如下:
1 | location / { |
而后重新载入nginx的配置文件:
service nginx reload
3、在/opt/nginx/html新建index.php的测试页面,测试php是否能正常工作:
1 | <?php |
接着就可以通过浏览器访问此测试页面了。
此处有个坑 浏览器访问,不能解析,显示“ File not found.”
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
这一句有问题, /scripts是一个目录名,也就是你站点的根目录,比如说,你访问/index.php这个文件,其实就是访问操作系统中/scripts/index.php这个文件,这个文件是否存在?/scripts 改成 $document_root 就好了,呵呵。