本文转载自:http://www.softeng.cn/?p=156,本文已获得作者授权,未经作者同意,不可转载。
1、前言
本文适合于已经对Linux操作系统具有基本操作经验,并且能够在Linux或Windows上通过一键搭建工具或者yum命令行进行环境搭建的读者,阅读本文需具有一定的专业知识,本文不建议初学者阅读。
本文所描述的是在标准的CentOS 7.2 64位操作系统下,安装Nginx 1.12.2 + PHP 7.1.11 + MySQL 5.7.20环境。采用源码编译安装的方式,虽然较直接使用yum命令安装较为复杂,但是源码安装可以自定义指定安装路径,可以自定义配置安装配套的库和插件,这样服务器运维人员将更清楚自己服务器的情况,从而,在日后的环境、插件的升级和更新操作中,将变得更加简便和容易。
2、准备安装工具
2.1、安装make
2.2、安装g++
2.3、创建安装目录
本文是在阿里云服务器上安装,所以在服务器根目录下创建alidata目录,然后在alidata目录里面分别创建server目录、webapps目录和package目录,其中server目录存放所有的服务器软件(本文中所涉及到的nginx、php、mysql等),webapps目录存放所有部署的代码及程序,package目录用来存放安装过程中需要用到的编译后的库文件。
需以root权限,依次执行以下命令
这里需要说明,上述的server目录,是指环境安装完成后,运行程序所在的目录,并非nginx等程序的源码存放目录,为了方便,本文将下载到的这些运行环境程序的源码统一存放于/root目录下,读者可根据自身情况及喜好,将运行环境程序源码存放于任意不是/alidata/server的目录下。
3、安装Nginx
3.1、下载并解压pcre
官网:http://www.pcre.org/
依次执行以下命令
3.2、下载并解压zlib
官网:http://zlib.net/
依次执行以下命令
3.3、下载并解压openssl
官网:https://www.openssl.org/
依次执行以下命令
3.4、为nginx添加用户及组
nginx的工作进程需要以某一个用户的权限进行运行,为了服务器安全,一般指定一个普通用户权限的账号做为nginx的运行角色,根据个人习惯,这里使用www用户做为nginx工作进程的用户,后续安装的PHP也以www用户做为工作进程用户,依次执行以下命令以创建用户及用户组
3.5、下载并安装nginx
官网:http://nginx.org/
依次执行以下命令
以上命令完成下载和解压操作,接下来进行安装操作
其中,./configure是对安装进行配置;
–prefix表示nginx要安装到哪个路径下,这里指定刚才新建好的/alidata/server目录下的nginx-1.12.2;
–sbin-path表示nginx的可执行文件存放路径
–conf-path表示nginx的主配置文件存放路径,nginx允许使用不同的配置文件启动,通过命令行中的-c选项
–pid-path表示nginx.pid文件的存放路径,将存储的主进程的进程号。安装完成后,可以随时改变的文件名 , 在nginx.conf配置文件中使用 PID指令。默认情况下,文件名 为prefix/logs/nginx.pid
–error-log-path表示nginx的主错误、警告、和诊断文件存放路径
–http-log-path表示nginx的主请求的HTTP服务器的日志文件的存放路径
–user表示nginx工作进程的用户
–group表示nginx工作进程的用户组
–with-select_module或–without-select_module表示启用或禁用构建一个模块来允许服务器使用select()方法
–with-poll_module或–without-poll_module表示启用或禁用构建一个模块来允许服务器使用poll()方法
–with-http_ssl_module表示使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的
–with-pcre表示pcre的源码路径,因为解压后的pcre是放在root目录下的,所以是/root/pcre-8.41;
–with-zlib表示zlib的源码路径,这里因为解压后的zlib是放在root目录下的,所以是/root/zlib-1.2.11
–with-openssl表示openssl库的源码路径
配置成功后,依次执行make和make install命令,即可安装Nginx,安装成功后,可以看到在/alidata/server目录下,多出了一个nginx-1.12.2,里面即是nginx的实际运行程序。
3.6、设置nginx配置文件
本文配置的nginx支持多域名,每个域名的配置文件单独放在/alidata/server/nginx-1.12.2/conf/vhosts路径下,使用vim命令打开nginx.conf文件,对其内容进行修改
上述配置中,引用了/alidata/server/nginx-1.12.2/conf/vhosts/目录下所有后缀名是.conf的配置文件,现在进入该目录编写一个默认配置文件default.conf,其内容是
其中引入了一个/alidata/server/nginx-1.12.2/conf/rewrite/default.conf文件,这个文件是用来编写rewrite规则的配置文件,用来实现伪静态,其内容是
3.7、启动nginx
以本文为例,启动nginx需要执行以下命令
启动后,使用命令
查看进程,若能够看到相关进程,则证明启动成功。查询进程时,可以看到进程是以www用户身份执行的
3.8、加入系统环境变量
使用vim命令打开/etc/profile文件,在文件最末尾加上如下代码
保存修改后,使用source命令重新加载配置文件,命令如下
执行上述命令后,可使用
命令查看环境变量中是否已经加入了相关的路径
3.9、加入系统服务
使用vim命令在/etc/init.d/目录下创建一个nginx文件,命令如下
文件内容如下
其中,需要注意几个变量,分别是PATH、NAME、DAEMON、CONFIGFILE、PIDFILE、SCRIPTNAME,其中,PATH设置为nginx的安装路径,DAEMON设置为nginx启动脚本的路径,CONFIGFILE是nginx.conf文件的路径,PIDFILE是进程文件的路径,需要与nginx.conf文件中的配置一致,SCRIPTNAME则是要指向当前文件路径/etc/init.d/nginx
将上述文件保存后,一定要记得给其赋予可执行的权限,具体命令如下
至此,我们已将nginx加入了系统服务,由于本文描述的实在CentOS 7环境下安装,所以与CentOS 6不同的是,不再使用类似于
这样的命令来开启或者关闭服务,而是使用如下命令开启和关闭服务
若此时无法执行以上命令,首先要确认之前打开的nginx进程已被杀死,其次可以尝试先执行
命令,然后再执行上述三个命令。
3.10、设置nginx开机自启动
经过上面的操作,nginx已被添加为系统服务,所以可以将其设置为开机自启动,这样就可以避免每次服务器重启之后需要手动开启nginx的操作,具体命令如下
或者
4、安装php
4.1、通过yum命令安装php需要的常用库
依次执行以下命令
4.2、下载并安装php
官网:http://php.net/
依次执行以下命令
以上命令完成下载和解压操作,接下来进行安装操作
4.3、设置php配置文件
将官方提供的配置模板拷贝到配置参数中所指定的目录中
然后可以根据自己服务器的需求,对php.ini文件的内容进行修改
4.4、设置php-fpm配置文件
依次执行以下命令
使用vim命令对php-fpm.conf的内容进行如下修改
使用vim命令对www.conf的内容进行如下修改
其他配置可根据自己的情况进行相应修改
4.5、启动php-fpm
完成以上配置后,即可启动php-fpm,执行以下命令
启动后,使用
命令查看进程,若能够看到相关进程,则证明启动成功。查询进程时,可以看到进程是以www用户身份执行的
4.6、加入系统环境变量
使用vim命令打开/etc/profile文件,在文件最末尾加上如下代码
保存修改后,使用source命令重新加载配置文件,命令如下
执行上述命令后,可使用
命令查看环境变量中是否已经加入了相关的路径
4.7、加入系统服务
使用vim命令在/etc/init.d/目录下创建一个php-fpm文件,命令如下
文件内容如下
其中,php_command表示php-fpm可执行脚本的路径,php_config表示php-fpm的配置文件路径,php_pid表示php-fpm进程文件的路径
4.8、设置php-fpm开机自启动
经过上面的操作,php-fpm已被添加为系统服务,所以可以将其设置为开机自启动,这样就可以避免每次服务器重启之后需要手动开启php-fpm的操作,具体命令如下
或者
5、安装MySQL
5.1、下载并安装cmake
官网:https://cmake.org/
依次执行以下命令
以上命令完成下载和解压操作,接下来进行安装操作
5.2、下载并安装ncurses
官网:http://invisible-island.net/ncurses/
依次执行以下命令
以上命令完成下载和解压操作,接下来进行安装操作
5.3、安装libaio库
执行以下命令
安装libaio和libaio-devel这两个库
5.4、为MySQL添加用户及组
为了保证操作系统的安全,这里为mysql工作进程创建专用的用户
5.5、下载并安装MySQL
官网:https://www.mysql.com
依次执行以下命令
这里使用的是mysql官方提供的解压缩版的安装方式,不需要进行make操作。将mysql文件夹移动到安装路径后,需要修改mysql安装文件夹的权限,执行以下命令
后续如果在该目录及其子目录下创建了任何文件和文件夹,均需要再次执行该命令,以确保mysqld进程对该文件夹具有完全的读写权限
5.6、设置mysql配置文件
mysql的配置文件是放在/etc/目录下的,名字是my.cnf,具体配置如下
这里需要注意,配置文件最后一行引入了新的配置文件,下面列出my.cnf.d目录下名为mysql-clients.cnf的配置文件内容
在my.cnf配置文件中,需要注意几个配置,其中basedir指的是mysql的安装目录,datadir指的是mysql数据文件的存储目录,其他几项配置项,如果大家感兴趣可以自行查看官方解释。还需要特别说明的一个问题是,所有在配置文件中出现的路径、文件均需要具有可读写的权限,前面为MySQL创建了用户及组,所以上述配置文件中涉及到的路径和文件,均需要将其所有者及组指定为mysql用户,这样MySQL服务才能正常启动。
完成以上配置后,需要将mysqld的启动脚本放入/etc/init.d/路径中,执行以下命令
拷贝完成后,使用vim命令,修改/etc/init.d/mysqld中的basedir和datadir,确保其值与my.cnf文件中的内容相同
5.7、初始化MySQL
因本文采用的是MySQL 5.7.20版本,所以不能使用mysql_install_db命令,而是需要使用mysqld –initialize命令对数据库进行初始化,具体命令如下
若前面配置文件中的各配置项均正确,各路径、文件均存在并可读写,改命令将提示执行成功,并能够在/root/目录下生成一个.mysql_secret文件,使用cat命令可查看其内容,其是mysql中本地root用户的初始密码。这里需要特别说明一下,本文作者使用mysql自动生成初始密码没有登录成功,然后通过安全启动脚本对mysql的root用户密码进行修改后,才能够正常登录和使用,所以这一步目前无法得到确认,大家可根据自己的实际情况处理。
5.8、使用安全模式启动MySQL
在mysql安装目录的bin目录下,使用以下命令启动mysql
启动后,使用初始化所得的root密码登录mysql,查看是否可以正常操作,命令如下
5.9、设置MySQL服务开机自启
依次执行以下命令
5.10、启动MySQL服务
前文使用的是安全模式启动,现在,需要让MySQL服务正常启动,首先,通过命令
查找到通过mysqld_safe命令启动的进程,使用kill命令将其全部杀掉,然后使用
命令,启动MySQL服务,接下来,就请使用root用户登录,然后进行创建用户,创建数据库,赋权等操作,这部分属于MySQL的基本操作,本文不再赘述。
6、配置Nginx+PHP+MySQL
与Apache服务器不同的是,Nginx本身并不解释、运行PHP代码,Nginx只是将用户端发来的HTTP请求进行转发,真正解释运行PHP代码的是php-fpm进程,所以,这里只需要将Nginx收到的http请求转发给php-fpm即可。
根据本文前序步骤,已经完成了Nginx和PHP的安装和配置,接下来,只需要在Nginx的配置文件中加入转发至php-fpm的配置即可。
6.1、配置Nginx+PHP
本文中对Nginx进行了多域名配置,每个域名只需要在/alidata/server/nginx-1.12.2/conf/vhosts目录下有一个自己的配置文件即可,所以重点就在这个配置文件里,现在假定我们需要查看当前服务器的php信息,因为本文没有涉及到域名解析及配置的相关信息,所以这里就以IP访问为例进行配置讲解,首先,需要在我们的web代码根路径/alidata/webapps下创建一个info.php文件,执行以下命令
文件内容是一段非常简单的php代码
保存文件后,对Nginx的配置文件进行修改,前文已经在/alidata/server/nginx-1.12.2/conf/vhosts目录下创建了default.conf配置文件,现在对这个文件的内容进行修改,修改后的内容如下
可以看到,与之前的配置文件相比,主要是index配置项后,多了关于php的配置内容,以及location相关配置中,多了对于php的内容,保存以上配置文件,使用
命令,重新加载配置文件后,通过浏览器访问http://服务器的IP/info.php即可看到上文中php代码的运行效果,具体如下图所示
至此,即完成了Nginx和PHP的配置,这里需要说明,上述的配置只是最简单的配置,若项目不是运行在web根目录下的,那么配置文件也需要对应的进行修改,若项目是采用CodeIgniter或Laravel等其他框架技术开发的,那么也需要对配置文件进行相应修改,这部分内容大家可自行百度,有很多相关的博客。
6.2、关于MySQL配置的说明
正如前文所说,Nginx的工作主要是转发请求,所以MySQL的配置也仅仅需要在PHP中安装相关扩展,只要通过PHP代码可以访问到MySQL即可,不需要再进行其他特殊的配置。
所以,到这里也就完成了Nginx+PHP+MySQL的环境安装和配置,如果各位还有什么问题和建议,欢迎留言交流。