Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)

通过Centos6.9-minimal x86_64版本编译安装LNMP环境

一、运行环境及软件版本

我的Centos虚拟机是运行在VMware12上的,宿主机是win7。

在进行搭建LNMP环境之前,我先执行下边四个命令来更新系统、安装开发环境包、安装vim和wget(为了方便,我通过xshell连接我的虚拟机进行操作)

#yum update

Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第1张图片
……
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第2张图片

#yum groupinstall "development tools"     该命令是批量安装软件   了解更多:https://www.linuxidc.com/Linux/2016-04/130081.htm

Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第3张图片
…..
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第4张图片
这里写图片描述

# yum install vim  

#yum install wget

软件版本:Nginx-1.12.0 php-7.1.4 mysql-5.7.18

二、安装步骤
1,下载软件包

#wget http://nginx.org/download/nginx-1.12.0.tar.gz -O /usr/local/src/nginx-1.12.0.tar.gz

#wget http://am1.php.net/distributions/php-7.1.4.tar.gz -O /usr/local/src/php-7.1.4.tar.gz

#wget http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.7/mysql-boost-5.7.18.tar.gz -O /usr/local/src/mysql-boost-5.7.18.tar.gz

也可以通过其它方式下载好再上传到虚拟机上的方式。这里之所以选择mysql-boost-5.7.18.tar.gz这个安装包是因为mysql5.7编译安装需要用到boost,所以干脆选择了带boost的版本。我也不太明白boost是个啥。
这里写图片描述
2,编译安装Ngnix

解压:#tar -zxv -f /usr/local/src/nginx-1.12.0.tar.gz -C /usr/local/src/

进入解压目录:#cd /usr/local/src/nginx-1.12.0

通过 #./configure --help | less 命令查看编译选项,按 q 退出。

我这里只会安装 –with-http_ssl_module 、 –with-http_stub_status_module 、 –with-http_auth_request_module 、 –with-http_perl_module 、 –with-mail 、 –with-stream 、 –with-pcre 这几个模块。
安装模块需要环境的支持,考虑到我之前已经安装了development tools,应该没问题的。如果缺的话,报错了再补。
然后,需要创建nginx运行账号和nginx安装目录,命令如下:

#useradd nginx -s /sbin/nologin -M
#mkdir /usr/local/nginx-1.12.0

可以通过 cat /etc/passwd 和 ls /usr/local 查看创建的账号和目录。
接下来执行预编译脚本,如下:

#./configure \
--prefix=/usr/local/nginx-1.12.0 \
--user=nginx \
--group=nginx \
--with-select_module \
--with-poll_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-http_perl_module \
--with-mail \
--with-stream \
--with-pcre

然后报错了:
这里写图片描述
看来是缺少pcre支持,补上。执行下 边的命令进行安装

#yum install pcre-devel pcre-static

安装完成之后,再执行一遍下边的命令

#./configure \
--prefix=/usr/local/nginx-1.12.0 \
--user=nginx \
--group=nginx \
--with-select_module \
--with-poll_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-http_perl_module \
--with-mail \
--with-stream \
--with-pcre

报了下边这个错误
这里写图片描述
原因是缺少penssl-devel openssl-perl openssl-static 执行下边命令将其补上

#yum install openssl-devel openssl-perl openssl-static 

安装完成之后,再执行那个编译的命令
然后又报错了。。。。。。
这里写图片描述
再执行下边这个命令

#yum install perl-ExtUtils-Embed

安装完成之后,再继续执行那个编译命令
这一次就安装成功啦!
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第5张图片
下边就可以编译安装了,分别执行make和makeinstall
等执行完毕,用

#ls /usr/local/nginx-1.12.0 命令可以看到安装目录下有文件生成,接下来执行nginx命令查看是否成功安装。
执行
#/usr/local/nginx-1.12.0/sbin/nginx -t

结果如下:
这里写图片描述
说明安装成功。接着执行

#/usr/local/nginx-1.12.0/sbin/nginx

就可以启动nginx服务。
执行

#curl http://localhost

可以看到如下结果:
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第6张图片
默认的主页html文件内容被获取了,说明服务确实成功启动。
为了不影响接下来的操作,执行

#/usr/local/nginx-1.12.0/sbin/nginx -s quit

关闭nginx服务 。
接下来安装PHP。
2,编译安装PHP

先解压:tar -zxv -f /usr/local/src/php-7.1.4.tar.gz -C /usr/local/src/
创建安装目录:mkdir /usr/local/php-7.1.4 

进入解压出来的那个目录:cd /usr/local/src/php-7.1.4 ,可以通过执行预编译脚本 ./configure –help | less 来查看有哪些安装选项。可以看到php的安装选项众多,扩展数量多也是php的强大之处。考虑到常用的功能和特性,还有php可以在安装后安装扩展,现在还是尽可能少的选择安装选项吧。
执行下边的命令进行编译:

#./configure \
--prefix=/usr/local/php-7.1.4 \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-mysqli \
--with-pdo-mysql \
--with-zlib \
--with-gd \
--with-curl \
--with-mcrypt \
--enable-mbstring \
--enable-soap \
--enable-zip \
--enable-ftp \
--with-openssl

报错了,如下:
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第7张图片
是libxmls的缺少造成的。那么执行

#yum install libxml2 libxml2-devel libxml2-static

然后接着 执行上述的预编译脚本。
又报错了:
这里写图片描述

这次是libcurl,补上 #yum install libcurl libcurl-devel

然后接着 执行上述的预编译脚本。
又报错:
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第8张图片
这次是和GD库又关,因为是和图像处理有关的扩展,所以jpeg、png、gif等图像开发环境是必要的。
但是我想尽可能少安装,所以先试试#yum install gd gd-devel然后执行预编译脚本。
gd库的检测通过了,但是出现了新的错误:
这里写图片描述
这次是mcrypt库的问题,问题是CentOS6.9的yum库已经不支持mcrypt的安装,改用gcrypt了
在php的官方文档上边找相关的安装方法。根据PHP官方文档:
这些函数需要使用 » mcrypt 库。 请从 » http://mcrypt.sourceforge.net/ 下载 libmcrypt-x.x.tar.gz, 并按以下指导完成安装。从 PHP 5.0.0 开始,你需要使用 libcrypt 2.5.6 或更高版本。PHP 5.2 的 Windows 二进制发行版中已经包含了本库。 PHP 5.3 的 Windows 二进制发行版中开始使用 MCrypt 静态库, 所以不再需要 DLL。如果使用 libmcrypt 2.4.x 或更高版本链接编译 PHP,支持以下附加的分组加密算法: CAST,LOKI97,RIJNDAEL,SAFERPLUS,SERPENT, 以及以下流密码:ENIGMA(加密), PANAMA,RC4 和 WAKE。 如果使用 libmcrypt 2.4.x 或更高版本,那么还支持 nOFB 密码模式。
可以知道php所需要的mcrypt库的下载地址和安装方法,照做就可以了。
先下载
我这里是在网上下载到windows上边,然后上传到了我的虚拟机上的/usr/local/src/目录下 下载网址:https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/

然后解压 #tar -zxv -f /usr/local/src/libmcrypt-2.5.8.tar.gz -C /usr/local/src/ ,
创建安装目录 #mkdir /usr/local/libmcrypt-2.5.8 ,
进入解压生成的目录 #cd /usr/local/src/libmcrypt-2.5.8 ,
执行预编译脚本 #./configure --prefix=/usr/local/libmcrypt-2.5.8 ,
编译和安装 #make && make install 。

到此,libmcrypt的安装就完成了。接着进入php安装包解压生成的目录。这里需要修改一下php的预编译脚本的编译选项,如下:

#./configure \
--prefix=/usr/local/php-7.1.4 \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-mysqli \
--with-pdo-mysql \
--with-zlib \
--with-gd \
--with-curl \
--with-mcrypt=/usr/local/libmcrypt-2.5.8 \
--enable-mbstring \
--enable-soap \
--enable-zip \
--enable-ftp \
--with-openssl

然后就没有报错了
接着只要依次执行# make#make install就可以了,当然也可以放在一起执行# make && make install

根据预编译选项 –prefix 和帮助信息,得知php.ini文件应该放在[PREFIX]/lib目录下。那么我们就在该目录下生成一个配置文件吧: #cp /usr/local/src/php-7.1.4/php.ini-development /usr/local/php-7.1.4/lib/php.ini
然后是php-fpm。首先#cp /usr/local/php-7.1.4/etc/php-fpm.conf.default /usr/local/php-7.1.4/etc/php-fpm.conf,还需要#cp /usr/local/php-7.1.4/etc/php-fpm.d/www.conf.default /usr/local/php-7.1.4/etc/php-fpm.d/www.conf
还需要配置一下nginx并启动,执行

#vim /usr/local/nginx-1.12.0/conf/nginx.conf

Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第9张图片
将65行至71行的注释去掉,并将69行的内容按上图改动,接着保存退出。
生成一个测试用的php脚本#vim /usr/local/nginx-1.12.0/html/index.php
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第10张图片
注意文件位置:
启动nginx服务:#/usr/local/nginx-1.12.0/sbin/nginx
或者在启动前检查一下配置文件是否出错: #/usr/local/nginx-1.12.0/sbin/nginx -t
启动php-fpm:#/usr/local/php-7.1.4/sbin/php-fpm
关闭iptables:#service iptables stop
然后在宿主机的浏览器内输入 http://自己的虚拟机ip/index.php 。前面的ip地址因人而异,可以
通过 ifconfig 命令查看。显示如下页面说明成功了:
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第11张图片
可以通过 #ps -aux | grep "php-fpm" 命令查看php-fpm的主进程号,然后通过 #kill -quit 进程号 来关闭服务。
4,编译安装Mysql

5.7版本的MySQL编译和初始化都挺麻烦的,尤其是要自定义安装路径和选项。通过文档的2.9 Installing MySQL from Source这一章节可以知道,cmake工具在编译时是必要的。
此外,还需要安装boost。如果安装的是development source tree这一版本,还需要安装git和bison。
那么先准备安装环境吧。执行 #yum install cmake 来安装cmake。我也不知道development source tree是什么,但是为了以防万一还是把git和bison也装上吧: #yum install bison git
解压安装包:#tar -zxv -f /usr/local/src/mysql-boost-5.7.18.tar.gz -C /usr/local/src/
通过 #ls /usr/local/src/mysql-5.7.18/命令可以看到解压生成的目录中附带了boost。
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第12张图片
首先要创建MySQL服务运行时的账户#useradd mysql -s /sbin/nologin -M
然后创建安装目录#mkdir /usr/local/mysql-5.7.18
接着进入解压生成的目录 #cd /usr/local/src/mysql-5.7.18/
可以通过 ls 命令查看目录下的文件。还可以通过 #cmake . -LAH | less 来查看帮助和安装选项。
发现通过上述命令获取的帮助信息不好懂且没有调理,还是得看文档2.9.4 MySQL Source-
Configuration Options。研究了一下,编译选项如下:

#cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.18 \
-DWITH_BOOST=/usr/local/src/mysql-5.7.18/boost

报错了
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第13张图片
查了一下,好像是缺ncurses组件。那就补上吧:#yum install ncurses ncurses-devel ncurses-libs ncurses-static。之后再次执行预编译。
再次执行却以更快的速度报一样的错,
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第14张图片
仔细一看原来少执行了一步操作: remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel. 。好吧,删掉目录下的CMakeCache.txt文件 #rm CMakeCache.txt,然后再次执行。
这次顺利预编译完了:
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第15张图片
接下来依次执行 makemake install 就行了。编过程译很慢,可以先去做一些别的事情了
编译过程中报了一些错,其实是一些warning
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第16张图片
终于编译完了
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第17张图片
然后是执行#make install
执行过程没有出现问题
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第18张图片
考虑到之前编译MySQL的过程中好像报了boost相关的warning,决定还是老老实实的安装boost吧。
首先下载安装包:

wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.18.tar.gz -O /usr/local/src/mysql-5.7.18.tar.gz
wget http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.7/mysql-5.7.18.tar.gz -O /usr/local/src/mysql-5.7.18.tar.gz

这次换不带boost的MySQL版本,然后按文档里说的,boost必须是1.59版本。
解压boost #tar -zxv -f /usr/local/src/boost_1_59_0.tar.gz -C /usr/local/src/
创建安装目录 #mkdir /usr/local/boost-1.59.0
进入解压生成的目录 #cd /usr/local/src/boost-1_59_0 。
执行预编译脚本 #./bootstrap.sh –prefix=/usr/local/boost-1.59.0
然后执行 #./b2
这一步必较久,等着吧。
报了一些看不懂的错误,查了一下还要安装依赖什么的,那就装上吧

yum install gcc gcc-c++ bzip2 bzip2-libs bzip2-devel python python-devel

删掉解压的目录前面的步骤再执行一次。接着执行 #./b2 install 就ok了。
接下来重新编译安装MySQL。
删除之前的安装生成文件#rm -rf /usr/local/mysql-5.7.18/*
解压新的安装文件 #tar -zxv -f /usr/local/src/mysql-5.7.18.tar.gz -C /usr/local/src/
进入解压生成的目录#cd /usr/local/src/mysql-5.7.18
执行预编译命令 #cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.18 -DWITH_BOOST=/usr/local/boost-1.59.0
报错了:
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第19张图片
想想应该是预编译时boost的包含路径有问题,应该包含安装生成文件里的include目录。那么,依次执行 #rm CMakeCache.txt#cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.18 -DWITH_BOOST=/usr/local/boost-1.59.0/include
结果ok。接下来执行makemake install就可以了。
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第20张图片
接下来就是初始化了。
按照文档,要先修改安装目录和文件所属组和所属用户

#chgrp -R mysql /usr/local/mysql-5.7.18

报错:
这里写图片描述
添加用户组即可:#groupadd mysql
然后再添加用户:#useradd -g mysql mysql

#chown -R mysql /usr/local/mysql-5.7.18

接下来创建一个放数据库文件、socket文件、pid文件和配置文件的目录,就放在/var目录下好了

#mkdir /var/local/mysql-5.7.18
#mkdir /var/local/mysql-5.7.18/data
#mkdir /var/local/mysql-5.7.18/run
#mkdir /var/local/mysql-5.7.18/log
#mkdir /var/local/mysql-5.7.18/etc
生成一个配置文件 vim /var/local/mysql-5.7.18/etc/my.cnf ,内容为:

[client]
port=3306
socket=/var/local/mysql-5.7.18/run/mysql.sock
[mysql]
no-auto-rehash
[mysqld]
basedir=/usr/local/mysql-5.7.18
datadir=/var/local/mysql-5.7.18/data
user=mysql
port=3306
socket=/var/local/mysql-5.7.18/run/mysql.sock
pid-file=/var/local/mysql-5.7.18/run/mysql.pid

网上抄来的,似懂非懂。
把上述目录和文件都修改所属

#chgrp -R mysql /var/local/mysql-5.7.18 
#chown -R mysql /var/local/mysql-5.7.18 

然后执行初始化命令:

#/usr/local/mysql-5.7.18/bin/mysqld \
--defaults-file=/var/local/mysql-5.7.18/etc/my.cnf \
--initialize \
--character_set_server=utf8 \
--collation_server=utf8_general_ci

虽然报了一些看不懂的警告,但是初始化好像是成功了,还生成了随机密码:
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第21张图片
接下来试着启动服务
#/usr/local/mysql-5.7.18/bin/mysqld --defaults-file=/var/local/mysql-5.7.18/etc/my.cnf &,按 Ctrl + C 退出控制台占用,执行#/usr/local/mysql-5.7.18/bin/mysql --defaults-file=/var/local/mysql-5.7.18/etc/my.cnf -u root -p,之后要输入密码。后面的密码来自之前初始化后成功的提示的最后一行。
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第22张图片
5.7版本规定进入MySQL后并不能执行任何操作,必须先改密码 ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘new_password’; 。且密码必须大于8位,包含字符数字字母。

接下来可以执行 exit 退出。再接着可以执行 #/usr/local/mysql-5.7.18/bin/mysqladmin –defaults-file=/var/local/mysql-5.7.18/etc/my.cnf shutdown -u root -p 后输入密码来结束服务。
至此,MySQL5.7.18终于装好了。

5,测试Nginx、PHP和MySQL协同工作

接下来就是让这三个软件协同工作,成为一个可以跑php代码的环境。
首先启动所有服务:

启动nginx:#/usr/local/nginx-1.12.0/sbin/nginx
启动php-fpm:#/usr/local/php-7.1.4/sbin/php-fpm
启动mysql:#/usr/local/mysql-5.7.18/bin/mysqld --defaults-file=/var/local/mysql-5.7.18/etc/my.cnf &
连接mysql:#/usr/local/mysql-5.7.18/bin/mysql --defaults-file=/var/local/mysql-5.7.18/etc/my.cnf -u root -p

在数据库中创建一个test数据库。

>CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci; 

记得关闭iptables服务 #service iptables stop
创建一个测试用的PHP脚本 #vim /usr/local/nginx-1.12.0/html/mysql.php
其内容为:


echo "hello world";
echo "
"
; echo "MySQLi
"
; $mysqli=new mysqli("127.0.0.1","root",'!@#123qwe',"test"); if($mysqli->connect_error){ echo "数据库连接失败!"; }else{ echo "数据库连接成功!"; } echo "
"
; echo "PDO
"
; try{ $dbc=new PDO("mysql:host=127.0.0.1;dbname=test","root","!@#123qwe"); }catch(PDOExtension $e){ echo "数据库连接失败:".$e->getMessage(); } echo "数据库连接成功!"; ?>

然后访问这个脚本 http://虚拟机ip/mysql.php ,结果如下:
Centos6.9-minimal搭建LNMP(Nginx-1.12.0+php-7.1.4+mysql-5.7.18)环境(呕心沥血)_第23张图片
这样,整个LNMP环境就搭好了。
参考:https://www.iyunv.com/thread-385771-1-1.html

你可能感兴趣的:(PHP,Linux,数据库)