00:00/00:00

本章节已编写及校对完毕,现有奖征集建议、若您发现本章中有错别字或补充欢迎联系刘遄老师QQ:5604241。
章节概述:

LNMP动态网站部署架构是一套由Linux系统+Nginx网站服务+Mysql数据库管理系统+PHP脚本语言组成的动态网站系统解决方案,具有免费、高效、扩展性强且资源消耗低等等优良特性。本章节将从对比使用源码包与RPM软件包安装服务程序的区别开始引入主题,通过源码包实践进行手工编译、安装各个服务程序并使用Discuz X3.2版本论坛系统检验架构环境。

本章节作为《Linux就该这么学》基础篇书籍最后一节课程,刘遄老师不仅希望同学们能够在今后工作中找到满意的高薪工作,同时也希望您在学会课程后搭建出属于自己的博客或论坛系统,能够把自己所学的Linux技术干货分享给更多人,愿开源世界美好的脚步更快一些。See you later!

20.1 源码包程序

刘遄老师在书籍第1章节中提到过运维人员在RPM红帽软件包管理器技术出现之前只能够通过源码包的方式来安装服务程序,这是一件非常繁琐、耗费大量时间和耐心的事情,而且运维人员还需要在安装、升级、卸载程序时考虑到与其他程序与函数库的相互依赖关系,因此要求运维人员不仅需要掌握更多的Linux系统理论知识以及高超的实操技能, 还要有很好的耐心才能安装好一个源码软件包,考虑到《Linux就该这么学》基础篇的读者都是刚刚入门的运维新手,因此在前面的课程中一直都是在用Yum软件仓库的方式安装着服务程序。但是现在依然有很多的软件程序只会以源码包的形式提供给使用者,如果同学们只会用Yum软件仓库或者要想找到可用的RPM软件包程序就只能在互联网大海洋中苦苦的寻找了,需要等到第三方组织或黑客们编写成RPM软件包之后再使用,很明显如果在学习过程中只会用Yum软件仓库的方式来安装软件包就会在不经意间出现了知识短板,刘遄老师可不想让自己的学生在今后工作中吃亏。
opensource

其实使用源码包方式安装服务程序也有两点不错的优势,首先是源码包程序的可移植性非常好,几乎可以在任何的Linux系统环境下安装使用,而RPM软件包因为是针对特定系统和架构编写的指令集,因此必须严格的符合执行环境后才能顺利安装。另外使用源码包安装程序的话会经过有“编译过程”,因此可以更好的适应服务器的系统环境,运行效率及优化程度都是相对高一些的,不像RPM软件包一样只是“生硬的”去安装程序。源码包安装服务程序就像是给咱们的系统量体裁衣定制了一套西服正装一样合身,而不是在网上买了一件大小看似合适的衣服,穿上身体显得十分不协调的感觉。

终归说回来,刘遄老师给同学们在安装软件时的建议其实很简单,能够通过Yum软件仓库安装程序的时候就用Yum方式,如果没有可用Yum软件仓库的话就去找合适的RPM软件包来安装,如果实在没有资源可使用的时候,那么就用源代码来安装程序吧~源码包安装程序的过程看似复杂,其实总结后大致只有4-5个步骤即可完成程序安装,刘遄老师接下来会对每个步骤进行逐一详细说明,另外使用源码包安装程序时会输出大量的过程信息,这些信息意义并不大,更没有必要写入到书籍中来(大约会占用几十页纸),因此本章节中默认会省略部分的输出信息而不做特殊备注,请操作实验时以实际为准。

第1步:下载及解压源码包文件,源码包文件为了方便在网络中传输通常会归档后使用gzip或bzip2等格式进行压缩,因此比较常见的源码包文件的后缀是.tar.gz与.tar.bz2,要想使用源码包安装服务程序就必须先把里面的内容解压出来,然后再切换到源码包文件的目录中来:

[root@linuxprobe ~]# tar xzvf FileName.tar.gz

[root@linuxprobe ~]# cd FileDirectory

第2步:编译源码包代码,在正式使用源码包安装服务程序之前,还需要使用编译脚本对当前系统进行一系列的评估工作,包括对源码包文件、软件之间及函数库之间的依赖关系、编译器、汇编器及连接器的检查工作等等,如有需要还可以追加上--prefix参数来指定稍后源码包程序的安装路径,让咱们对服务程序的安装过程更加可控,而当编译工作结束后,如果系统环境符合安装要求一般会自动在当前目录下生成一个Makefile安装文件。

[root@linuxprobe ~]# ./configure --prefix=/usr/local/program

第3步:生成二进制安装程序,刚刚生成的Makefile文件中会保存有系统环境、软件依赖关系和安装规则等等内容,接下来便可以使用make命令来根据Makefile文件内容提供的合适规则编译生成出真正可供用户安装服务程序的二进制可执行文件啦。

[root@linuxprobe ~]# make

第4步:运行二进制的服务程序安装包,由于不需要再对系统环境进行检查,也不需要再对代码进行编译,因此运行二进制的服务程序安装包应该是速度最快的步骤。如果您刚刚在源码包编译阶段使用--prefix参数,那么此时服务程序就会被安装到那个目录啦,而如果没有自行使用参数定义目录的话,一般会被默认安装到/usr/local/bin目录中。

[root@linuxprobe ~]# make install

第5步:清理源码包临时文件,由于服务程序在安装过程中进行了代码编译的工作,因此在安装后目录中会遗留下很多垃圾临时文件,如果您希望尽可能避免磁盘存储空间不必要浪费的话可以通过make clean命令来对临时文件进行彻底的清理工作。

[root@linuxprobe ~]# make clean

同学们此时可能会比较疑惑为什么同样是在安装一个服务程序,源码包的编译工作(configure)与生成二进制文件工作(make)会使用如此长的时间,而RPM软件包安装就特别有效率呢?其实这个原因也简单,在红帽架构师(RHCA)认证的RH401代码考试中就会要求去写一个RPM软件包,刘遄老师会在《Linux就该这么学》书籍的进阶篇中给大家讲到,其实RPM软件包就是把软件的源码包和一个针对特定系统、架构、环境编写的安装规定打包成一起的指令集,因此为了让用户都能使用这个软件包来安装程序,通常一个软件程序就会发布多种格式的RPM软件包(例如i386、x86_64等架构)来让使用者选择。而源码包的软件作者肯定希望自己的软件能够被安装到更多的系统上面,能够被更多的用户所了解、使用,因此便会在编译工作(configure)来检查用户当前系统的情况,然后制定出一份可行的安装方案,所以会占用很多的系统资源和更长的等待时间。
出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

20.2 LNMP动态网站架构

LNMP动态网站部署架构是一套由Linux系统+Nginx网站服务+Mysql数据库管理系统+PHP脚本语言组成的动态网站系统解决方案,LNMP中的L是Linux系统的意思,不仅可以是RHEL、Centos、Fedora,还可以是Debian、Ubuntu等等系统。咱们《Linux就该这么学》在线书籍阅读网http://www.linuxprobe.com/就是基于这套LNMP环境部署出来的,目前运行的一直很稳定,访问起来的速度也是很快的吧,哈哈。

lnmp架构图片

图20-1 LNMP动态网站部署架构LOGO

使用源码包安装服务程序前首先要让服务器具备编译程序源码的环境,其中包括C语言、C++语言、Perl语言的编译器,以及各种常见的编译支持函数库程序,因此请先配置妥当Yum软件仓库,然后把下面刘遄老师总结的软件包统统安装上吧:

[root@linuxprobe ~]# yum install -y apr* autoconf automake bison bzip2 bzip2* compat* cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libtiff libtiff* make mpfr ncurses* ntp openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils telnet t1lib t1lib* nasm nasm* wget zlib-devel
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
………………省略部分安装过程………………
Installing:
 apr                         x86_64       1.4.8-3.el7               rhel7       103 k
 apr-devel                   x86_64       1.4.8-3.el7               rhel7       188 k
 apr-util                    x86_64       1.5.2-6.el7               rhel7        92 k
 apr-util-devel              x86_64       1.5.2-6.el7               rhel7        76 k
 autoconf                    noarch       2.69-11.el7               rhel7       701 k
 automake                    noarch       1.13.4-3.el7              rhel7       679 k
 bison                       x86_64       2.7-4.el7                 rhel7       578 k
 bzip2-devel                 x86_64       1.0.6-12.el7              rhel7       218 k
 compat-dapl                 x86_64       1:1.2.19-3.el7            rhel7       109 k
 compat-db-headers           noarch       4.7.25-27.el7             rhel7        48 k
 compat-db47                 x86_64       4.7.25-27.el7             rhel7       795 k
 compat-gcc-44               x86_64       4.4.7-8.el7               rhel7        10 M
 compat-gcc-44-c++           x86_64       4.4.7-8.el7               rhel7       6.3 M
 compat-glibc                x86_64       1:2.12-4.el7              rhel7       1.2 M
 compat-glibc-headers        x86_64       1:2.12-4.el7              rhel7       452 k
 compat-libcap1              x86_64       1.10-7.el7                rhel7        19 k
 compat-libf2c-34            x86_64       3.4.6-32.el7              rhel7       155 k
 compat-libgfortran-41       x86_64       4.1.2-44.el7              rhel7       142 k
 compat-libtiff3             x86_64       3.9.4-11.el7              rhel7       135 k
 compat-openldap             x86_64       1:2.3.43-5.el7            rhel7       174 k
 cpp                         x86_64       4.8.2-16.el7              rhel7       5.9 M
 fontconfig-devel            x86_64       2.10.95-7.el7             rhel7       128 k
 freetype-devel              x86_64       2.4.11-9.el7              rhel7       355 k
 gcc                         x86_64       4.8.2-16.el7              rhel7        16 M
 gcc-c++                     x86_64       4.8.2-16.el7              rhel7       7.1 M
………………省略部分安装过程………………
Complete!

刘遄老师已经把安装LNMP动态网站部署架构所需的16个软件源码包和1个用于检查效果的论坛网站系统软件包上传至了咱们书籍的下载服务器中,同学们可以在Windows系统中下载后通过ssh服务传送至服务器中,也可以直接在Linux服务器中使用wget命令下载到这些源码包文件,根据第六章学习到的FHS协议,建议把个人要安装的软件包存放在/usr/local/src目录中:

[root@linuxprobe ~]# cd /usr/local/src
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/cmake-2.8.11.2.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/Discuz_X3.2_SC_GBK.zip
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/freetype-2.5.3.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/jpegsrc.v9a.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/libgd-2.1.0.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/libmcrypt-2.5.8.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/libpng-1.6.12.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/libvpx-v1.3.0.tar.bz2
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/mysql-5.6.19.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/nginx-1.6.0.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/openssl-1.0.1h.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/php-5.5.14.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/pcre-8.35.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/t1lib-5.1.2.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/tiff-4.0.3.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/yasm-1.2.0.tar.gz
[root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/zlib-1.2.8.tar.gz
[root@linuxprobe src]# ls
zlib-1.2.8.tar.gz       libmcrypt-2.5.8.tar.gz  pcre-8.35.tar.gz
cmake-2.8.11.2.tar.gz   libpng-1.6.12.tar.gz    php-5.5.14.tar.gz
Discuz_X3.2_SC_GBK.zip  libvpx-v1.3.0.tar.bz2   t1lib-5.1.2.tar.gz
freetype-2.5.3.tar.gz   mysql-5.6.19.tar.gz     tiff-4.0.3.tar.gz
jpegsrc.v9a.tar.gz      nginx-1.6.0.tar.gz      yasm-1.2.0.tar.gz
libgd-2.1.0.tar.gz      openssl-1.0.1h.tar.gz

CMake是一款Linux系统中的常用编译工具,要想通过源码包安装服务程序就一定要严格遵守上面总结的安装步骤——下载解压、编译代码、生成二进制文件、运行安装程序。在接下来解压、编译各个软件包源码程序的时候都会有大量的输出信息,刘遄老师就会默认省略不写了,请读者以实际操作为准。

[root@linuxprobe src]# tar xzvf cmake-2.8.11.2.tar.gz
[root@linuxprobe src]# cd cmake-2.8.11.2/
[root@linuxprobe cmake-2.8.11.2]# ./configure
[root@linuxprobe cmake-2.8.11.2]# make 
[root@linuxprobe cmake-2.8.11.2]# make install
20.2.1 配置Mysql服务

咱们在《Linux就该这么学》的第18章节聊过Mysql和MariaDB数据库之间的关系和特性,也狠狠的夸了一次MariaDB数据库,但Mysql数据库当前依然是生产环境中最常使用的关系型数据库管理系统之一,坐拥着极大的市场使用率份额,并且已经通过自身十几年不断的发展向业界证明了Mysql数据库的稳定性和安全性,刘遄老师担心同学们虽然已经在第18章中学习过对数据库的基本管理方法,但还是实际使用过Mysql数据库会在今后工作中吃亏,因此决定在本章节中整合了Mysql数据库知识。

在前面章节使用Yum软件仓库来安装服务程序时,系统会自动根据RPM软件包中的指令集完成配置软件信息等等工作,但一旦选择了用源码包的方式来安装服务程序,这一切就都需要自己手工完成了。例如需要先在系统中创建一个名为mysql的用户,他是专门用于负责运行Mysql数据库的用户,请记得把这类帐户的Bash终端都顺手设置成nologin,避免黑客通过该用户登陆到服务器中,提高系统安全性。

[root@linuxprobe cmake-2.8.11.2]# cd ..
[root@linuxprobe src]# useradd mysql -s /sbin/nologin

创建一个用于保存Mysql数据库程序和数据库文件的目录,并把该目录的所有者和所有组身份修改为mysql,其中/usr/local/mysql是用于保存mysql数据库服务程序的目录,而/usr/local/mysql/var则是用于保存真实数据库文件的目录。

[root@linuxprobe src]# mkdir -p /usr/local/mysql/var
[root@linuxprobe src]# chown -Rf mysql:mysql /usr/local/mysql

接下来解压、编译、安装Mysql数据库服务程序,咱们在编译Mysql数据库的时候使用的是cmake命令,-DCMAKE_INSTALL_PREFIX参数用于定义Mysql数据库服务程序的保存目录,-DMYSQL_DATADIR参数用于定义真实数据库文件的目录,而-DSYSCONFDIR则是定义Mysql数据库配置文件所保存的目录,由于Mysql数据库服务程序的体积比较大,因此编译的过程是比较漫长的,在此期间可以稍微休息一下啦。

[root@linuxprobe src]# tar xzvf mysql-5.6.19.tar.gz
[root@linuxprobe src]# cd mysql-5.6.19/
[root@linuxprobe mysql-5.6.19]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/var -DSYSCONFDIR=/etc
[root@linuxprobe mysql-5.6.19]# make
[root@linuxprobe mysql-5.6.19]# make install

为了让Mysql数据库程序正常的运转起来,需要先删除掉在/etc目录中的默认配置文件,然后在Mysql数据库程序目录的scripts文件夹内可以找到一个名为mysql_install_db的脚本程序,使用这条命令的--user参数指定mysql服务的对应帐号名称(在前面步骤已经创建),--basedir参数指定mysql服务程序的保存目录,以及用--datadir参数指定mysql真实数据库的文件保存目录,这样即可生成出系统数据库文件啦,也会生成出新的mysql服务配置文件。

[root@linuxprobe mysql-5.6.19]# rm -rf /etc/my.cnf
[root@linuxprobe mysql-5.6.19]# cd /usr/local/mysql
[root@linuxprobe mysql]# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var

把系统新生成的Mysql数据库配置文件做一个链接文件到/etc目录中,然后把程序目录中的开机程序文件复制到/etc/rc.d/init.d目录中,这样做的目的是为了让Mysql数据库服务程序能够通过service命令来进行管理啦,记得把权限修改成755以便于让用户有执行该脚本的权限:

[root@linuxprobe mysql]# ln -s my.cnf /etc/my.cnf 
[root@linuxprobe mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@linuxprobe mysql]# chmod 755 /etc/rc.d/init.d/mysqld

编辑刚刚复制来的Mysql数据库脚本文件,把大约46、47行的basedir与datadir参数分别修改为Mysql数据库程序保存目录和真实数据库文件内容。

[root@linuxprobe mysql]# vim /etc/rc.d/init.d/mysqld 
………………省略部分输出信息………………
 39 #
 40 # If you want to affect other MySQL variables, you should make your changes
 41 # in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.
 42 
 43 # If you change base dir, you must also change datadir. These may get
 44 # overwritten by settings in the MySQL configuration files.
 45 
 46 basedir=/usr/local/mysql
 47 datadir=/usr/local/mysql/var
 48 
………………省略部分输出信息………………

配置好脚本文件后便可以用service命令启动mysqld数据库服务了,mysqld是Mysql数据库程序的服务名称,留意不要写错就可以,顺手再用chkconfig命令把mysqld服务程序加入到开机启动项中吧。

[root@Linuxprobe mysql]# service mysqld start
Starting MySQL. SUCCESS! 
[root@linuxprobe mysql]# chkconfig mysqld on

Mysql数据库程序有许多自带的命令,可是BASH终端的PATH变量并不会包含这些命令所存放的目录,因此咱们也就不能顺利的对Mysql数据库进行初始化,也不能使用Mysql数据库自带的命令啦。想要把命令所保存的目录永久性的定义到PATH变量中,需要编辑/etc/profile文件并写入追加的命令目录,这样当下一次服务器重启时就会永久生效了,如果不想重启就生效的话可以用source命令加载一下文件,那么新的PATH变量内容也就是立即生效了。

[root@linuxprobe mysql]# vim /etc/profile
………………省略部分输出信息………………
 64 
 65 for i in /etc/profile.d/*.sh ; do
 66 if [ -r "$i" ]; then
 67 if [ "${-#*i}" != "$-" ]; then
 68 . "$i"
 69 else
 70 . "$i" >/dev/null
 71 fi
 72 fi
 73 done
 74 export PATH=$PATH:/usr/local/mysql/bin
 75 unset i
 76 unset -f pathmunge
[root@linuxprobe mysql]# source /etc/profile

Mysql数据库服务程序还有一些需要调用的程序文件和函数库文件,由于当前是通过源码包方式安装的Mysql数据库,因此现在也必须要手动的把这些文件链接过来了。

[root@linuxprobe mysql]# mkdir /var/lib/mysql
[root@linuxprobe mysql]# ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
[root@linuxprobe mysql]# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
[root@linuxprobe mysql]# ln -s /usr/local/mysql/include/mysql /usr/include/mysql

Mysql数据库服务程序已经启动,各个调用的函数文件也已经就位,PATH环境变量中也已经加入了mysql数据库命令的目录,这一切配置妥当后就可以对mysql数据库进行初始化了,初始化配置的过程与MariaDB数据库是一样的,是不是感觉很亲切呢,只是最后变成了Thanks for using MySQL!

[root@linuxprobe mysql]# mysql_secure_installation 
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): 此处只需按下回车键
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] y (要为root用户设置数据库的密码)
New password: 输入要为root用户设置的数据库密码。
Re-enter new password: 重复再输入一次密码。
Password updated successfully!
Reloading privilege tables..
 ... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y (删除匿名帐号)
 ... Success!
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y (禁止root用户从远程登录)
 ... Success!
By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y (删除test数据库并取消对其的访问权限)
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y (刷新授权表,让初始化后的设定立即生效)
 ... Success!
All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
Cleaning up...
20.2.2 配置Nginx服务

Nginx是一款相当优秀的用于部署动态网站的服务程序,它最初是为俄罗斯门户站点而设计的网站服务软件,而作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而深受信赖。其中最最最被认可的是低系统资源、占用内存少并发能力强,目前国内如新浪、网易、腾讯等门户站点均已在使用,市场占有份额已达到20%左右(2017年最新数据),并且在不断的增长。
Nginx与Apache

图20-2 Nginx与Apache著名LOGO

Nginx程序的稳定性来自于它采用了分阶段的资源分配技术,使得CPU与内存占用率会非常低,所以使用Nginx程序部署动态网站环境不仅十分的稳定、高效,而且消耗更少的系统资源。Nginx丰富的模块功能也几乎与Apache程序数量相同,现在已经完全的支持了proxy、rewrite、mod_fcgi、ssl、vhosts等常用模块。而且还支持了热部署技术,即能够可以7*24不间断提供服务,即便运行数月也无须重启,还可以在不暂停服务的情况下直接对Nginx服务程序进行升级。

坦白来讲,虽然Nginx程序的代码质量非常高,代码很规范,技术成熟,模块扩展也很容易,但Nginx依然存在不少问题,比如Nginx是由俄罗斯人创建的,所以在资料文档方面还并不完善,中文教材的质量更是鱼龙混杂。但Nginx服务程序近年来迅猛的增长势头,刘遄老师预测未来应该能够在轻量级HTTP服务器市场有不错的未来。
在正式安装Nginx服务程序前,咱们还需要为其解决掉相关的软件依赖关系,例如用于提供Perl语言兼容的正则表达式库的软件包pcre,快来解压、编译、生成、安装它的服务源码文件吧:

[root@linuxprobe ~]# cd /usr/local/src
[root@linuxprobe src]# tar xzvf pcre-8.35.tar.gz 
[root@linuxprobe src]# cd pcre-8.35
[root@linuxprobe pcre-8.35]# ./configure --prefix=/usr/local/pcre
[root@linuxprobe pcre-8.35]# make
[root@linuxprobe pcre-8.35]# make install 

openssl软件包是用于提供网站加密证书服务的程序文件,安装这些文件时需要自定义下服务程序的安装目录,以便于稍后调用它们的时候更可控。

[root@linuxprobe pcre-8.35]# cd /usr/local/src
[root@linuxprobe src]# tar xzvf openssl-1.0.1h.tar.gz
[root@linuxprobe src]# cd openssl-1.0.1h
[root@linuxprobe openssl-1.0.1h]# ./config --prefix=/usr/local/openssl
[root@linuxprobe openssl-1.0.1h]# make
[root@linuxprobe openssl-1.0.1h]# make install 

openssl软件包安装后默认会在/usr/local/openssl/bin目录中提供很多的可用命令,咱们需要像刚刚那样把这个目录添加到PATH环境变量中,并写入到配置文件里,最后执行一下source命令以便让新的PATH环境变量内容可以立即生效:

[root@linuxprobe pcre-8.35]# vim /etc/profile
………………省略部分输出信息………………
 64 
 65 for i in /etc/profile.d/*.sh ; do
 66 if [ -r "$i" ]; then
 67 if [ "${-#*i}" != "$-" ]; then
 68 . "$i"
 69 else
 70 . "$i" >/dev/null
 71 fi
 72 fi
 73 done
 74 export PATH=$PATH:/usr/local/mysql/bin:/usr/local/openssl/bin
 75 unset i
 76 unset -f pathmunge
[root@linuxprobe pcre-8.35]# source /etc/profile

zlib软件包是用于提供压缩功能的函数库文件,其实对这些与Nginx服务程序有调用关系的服务程序同学们不需要深入了解,只要大致了解其作用就已经足够了:

[root@linuxprobe pcre-8.35]# cd /usr/local/src
[root@linuxprobe src]# tar xzvf zlib-1.2.8.tar.gz 
[root@linuxprobe src]# cd zlib-1.2.8
[root@linuxprobe zlib-1.2.8]# ./configure --prefix=/usr/local/zlib
[root@linuxprobe zlib-1.2.8]# make
[root@linuxprobe zlib-1.2.8]# make install

依赖关系的软件包安装部署好之后,创建一个用于执行nginx服务程序的用户吧,账户名称可以自定义,但一定要记住,下面需要调用:

[root@linuxprobe zlib-1.2.8]# cd ..
[root@linuxprobe src]# useradd www -s /sbin/nologin

编译Nginx服务程序命令需要设置的参数特别的多,其中--prefix参数用于定义nginx服务程序稍后安装到的位置,--user与--group参数用于指定执行nginx服务程序的用户名和用户组。使用参数调用openssl、zlib、pcre软件包时请写软件源码包的解压路径,而不是程序的安装路径:

[root@linuxprobe src]# tar xzvf nginx-1.6.0.tar.gz 
[root@linuxprobe src]# cd nginx-1.6.0/
[root@linuxprobe nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-openssl=/usr/local/src/openssl-1.0.1h --with-zlib=/usr/local/src/zlib-1.2.8 --with-pcre=/usr/local/src/pcre-8.35
[root@linuxprobe nginx-1.6.0]# make
[root@linuxprobe nginx-1.6.0]# make install

nginx服务程序要想启动以及加入到开机启动项中也需要有脚本文件,但很可惜默认nginx软件包安装后并没有为用户提供,因此刘遄老师给同学们准备了一份可用的启动脚本文件,在/etc/rc.d/init.d目录中创建脚本文件并直接复制下面的脚本内容即可(已经有了第4章SHELL脚本的学习经历,这个脚本应该是可以大致看懂的吧)。

[root@linuxprobe nginx-1.6.0]# vim /etc/rc.d/init.d/nginx
#!/bin/bash
# nginx - this script starts and stops the nginx daemon
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
        if [ -z "`grep $user /etc/passwd`" ]; then
                useradd -M -s /bin/nologin $user
        fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
        if [ `echo $opt | grep '.*-temp-path'` ]; then
                value=`echo $opt | cut -d "=" -f 2`
                if [ ! -d "$value" ]; then
                        # echo "creating" $value
                        mkdir -p $value && chown -R $user $value
                fi
        fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
#configtest || return $?
stop
sleep 1
start
}
reload() {
#configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
        rh_status_q && exit 0
        $1
        ;;
stop)
        rh_status_q || exit 0
        $1
        ;;
restart|configtest)
$1
;;
reload)
        rh_status_q || exit 7
        $1
        ;;
force-reload)
        force_reload
        ;;
status)
        rh_status
        ;;
condrestart|try-restart)
        rh_status_q || exit 0
        ;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac

保存脚本文件后记得给予755权限,以便能够来执行这个脚本哦~然后以路径的方式执行这个脚本并给予restart重启该服务的参数执行,并使用chkconfig命令将其添加至开机启动项中,大功告成啦。

[root@linuxprobe nginx-1.6.0]# chmod 755 /etc/rc.d/init.d/nginx
[root@linuxprobe nginx-1.6.0]# /etc/rc.d/init.d/nginx restart
Restarting nginx (via systemctl):                          [  OK  ]
[root@linuxprobe nginx-1.6.0]# chkconfig nginx on

Nginx服务程序启动后就可以在浏览器中输入服务器本地网卡IP地址查看到默认网页啦,相比于Apache服务程序的那种红色的默认页面,Nginx服务程序显得更加的简洁吧,如图20-3所示:
尝试访问网页

图20-3 Nginx服务程序默认页面

20.2.3 配置php服务

PHP超文本预处理器是一种通用的开源脚本语言,起始于1995年,它吸取了如C语言、Java语言及Perl语言很多的优点,具有开源、免费、快捷、跨平台性强、效率高等等优良特性,是目前Web开发领域最常用的语言之一,咱们的《Linux就该这么学》书籍在线学习站点系统就是基于PHP语言环境编写及运行的。而使用源码编译安装PHP语言环境其实并不复杂,难点在于解决PHP语言程序包和其他软件的依赖关系上,需要先安装部署将近十个用于搭建网站页面的软件程序包,然后才能正式安装PHP语言程序。

yasm源码包是一款常见的开源汇编器,解压、编译、安装过程输出信息已省略:

[root@linuxprobe nginx-1.6.0]# cd ..
[root@linuxprobe src]# tar zxvf yasm-1.2.0.tar.gz
[root@linuxprobe src]# cd yasm-1.2.0
[root@linuxprobe yasm-1.2.0]# ./configure
[root@linuxprobe yasm-1.2.0]# make
[root@linuxprobe yasm-1.2.0]# make install

libmcrypt源码包是用于加密算法的扩展库程序,解压、编译、安装过程输出信息已省略:

[root@linuxprobe yasm-1.2.0]# cd ..
[root@linuxprobe src]# tar zxvf libmcrypt-2.5.8.tar.gz
[root@linuxprobe src]# cd libmcrypt-2.5.8
[root@linuxprobe libmcrypt-2.5.8]# ./configure
[root@linuxprobe libmcrypt-2.5.8]# make
[root@linuxprobe libmcrypt-2.5.8]# make install

libvpx源码包是用于提供视频编码器的服务程序,解压、编译、安装过程输出信息已省略,肯定有很多不细心的同学顺手就用了tar命令的xzvf参数,但仔细看一下就会发现libvpx源码包的后缀是.tar.bz2,也就是用bzip2格式进行的压缩,因此解压的正确参数应该是xjvf哦~:

[root@linuxprobe libmcrypt-2.5.8]# cd ..
[root@linuxprobe src]# tar xjvf libvpx-v1.3.0.tar.bz2
[root@linuxprobe src]# cd libvpx-v1.3.0
[root@linuxprobe libvpx-v1.3.0]# ./configure --prefix=/usr/local/libvpx --enable-shared --enable-vp9
[root@linuxprobe libvpx-v1.3.0]# make
[root@linuxprobe libvpx-v1.3.0]# make install

tiff源码包是用于提供标签图像文件格式的服务程序,解压、编译、安装过程输出信息已省略:

[root@linuxprobe libvpx-v1.3.0]# cd ..
[root@linuxprobe src]# tar zxvf tiff-4.0.3.tar.gz
[root@linuxprobe src]# cd tiff-4.0.3
[root@linuxprobe tiff-4.0.3]# ./configure --prefix=/usr/local/tiff --enable-shared
[root@linuxprobe tiff-4.0.3]# make
[root@linuxprobe tiff-4.0.3]# make install

libpng源码包是用于提供png图片格式支持函数库的服务程序,解压、编译、安装过程输出信息已省略:

[root@linuxprobe tiff-4.0.3]# cd ..
[root@linuxprobe src]# tar zxvf libpng-1.6.12.tar.gz
[root@linuxprobe src]# cd libpng-1.6.12
[root@linuxprobe libpng-1.6.12]# ./configure --prefix=/usr/local/libpng --enable-shared
[root@linuxprobe libpng-1.6.12]# make
[root@linuxprobe libpng-1.6.12]# make install

freetype源码包是用于提供字体支持引擎的服务程序,解压、编译、安装过程输出信息已省略:

[root@linuxprobe libpng-1.6.12]# cd ..
[root@linuxprobe src]# tar zxvf freetype-2.5.3.tar.gz
[root@linuxprobe src]# cd freetype-2.5.3
[root@linuxprobe freetype-2.5.3]# ./configure --prefix=/usr/local/freetype --enable-shared
[root@linuxprobe freetype-2.5.3]# make
[root@linuxprobe freetype-2.5.3]# make install

jpeg源码包是用于提供jpeg图片格式支持函数库的服务程序,解压、编译、安装过程输出信息已省略:

[root@linuxprobe freetype-2.5.3]# cd ..
[root@linuxprobe src]# tar zxvf jpegsrc.v9a.tar.gz
[root@linuxprobe src]# cd jpeg-9a
[root@linuxprobe jpeg-9a]# ./configure --prefix=/usr/local/jpeg --enable-shared
[root@linuxprobe jpeg-9a]# make
[root@linuxprobe jpeg-9a]# make install

libgd源码包是用于提供图形处理的服务程序,解压、编译、安装过程输出信息已省略,而在编译libgd源码包的时候请记得写入的是jpeg、libpng、freetype、tiff、libvpx等服务程序在系统中的安装路径,即在上面安装过程中使用--prefix参数指定的目录路径:

[root@linuxprobe jpeg-9a]# cd ..
[root@linuxprobe src]# tar zxvf libgd-2.1.0.tar.gz
[root@linuxprobe src]# cd libgd-2.1.0
[root@linuxprobe libgd-2.1.0]# ./configure --prefix=/usr/local/libgd --enable-shared --with-jpeg=/usr/local/jpeg --with-png=/usr/local/libpng --with-freetype=/usr/local/freetype --with-fontconfig=/usr/local/freetype --with-xpm=/usr/ --with-tiff=/usr/local/tiff --with-vpx=/usr/local/libvpx
[root@linuxprobe libgd-2.1.0]# make
[root@linuxprobe libgd-2.1.0]# make install

t1lib源码包是用于提供图片生成函数库的服务程序,解压、编译、安装过程输出信息已省略,安装后把/usr/lib64目录中的函数文件做一个连接到/usr/lib目录中,以便系统能够顺利调取到函数文件:

[root@linuxprobe cd libgd-2.1.0]# cd ..
[root@linuxprobe src]# tar zxvf t1lib-5.1.2.tar.gz
[root@linuxprobe src]# cd t1lib-5.1.2
[root@linuxprobe t1lib-5.1.2]# ./configure --prefix=/usr/local/t1lib --enable-shared
[root@linuxprobe t1lib-5.1.2]# make
[root@linuxprobe t1lib-5.1.2]# make install
[root@linuxprobe t1lib-5.1.2]# ln -s /usr/lib64/libltdl.so /usr/lib/libltdl.so 
[root@linuxprobe t1lib-5.1.2]# cp -frp /usr/lib64/libXpm.so* /usr/lib/

此时终于把编译php服务源码包的相关软件包都已经安装部署妥当了,在开始编译源码包前先定义一个名称为LD_LIBRARY_PATH的全局环境变量,该环境变量的作用是帮助系统找到指定的动态链接库文件,是编译php服务源码包的必须元素之一。编译php服务源码包时除了定义要安装到的目录以外,还需要依次定义配置Php服务配置文件保存目录、Mysql数据库服务程序所在目录、Mysql数据库服务程序配置文件所在目录以及libpng、jpeg、freetype、libvpx、zlib、t1lib等等服务程序的安装目录路径,并通过参数启动php服务程序的诸多默认功能:

[root@linuxprobe t1lib-5.1.2]# cd ..
[root@linuxprobe src]# tar -zvxf php-5.5.14.tar.gz
[root@linuxprobe src]# cd php-5.5.14
[root@linuxprobe php-5.5.14]# export LD_LIBRARY_PATH=/usr/local/libgd/lib
[root@linuxprobe php-5.5.14]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-pdo-mysql=/usr/local/mysql --with-gd --with-png-dir=/usr/local/libpng --with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype --with-xpm-dir=/usr/ --with-vpx-dir=/usr/local/libvpx/ --with-zlib-dir=/usr/local/zlib --with-t1lib=/usr/local/t1lib --with-iconv --enable-libxml --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-opcache --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl --enable-ctype 
[root@linuxprobe php-5.5.14]# make
[root@linuxprobe php-5.5.14]# make install

在等待php源码包程序安装完成后,需要删除掉当前默认的配置文件,然后从php服务程序目录中复制对应的配置文件过来:

[root@linuxprobe php-5.5.14]# rm -rf /etc/php.ini
[root@linuxprobe php-5.5.14]# ln -s /usr/local/php/etc/php.ini /etc/php.ini
[root@linuxprobe php-5.5.14]# cp php.ini-production /usr/local/php/etc/php.ini
[root@linuxprobe php-5.5.14]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@linuxprobe php-5.5.14]# ln -s /usr/local/php/etc/php-fpm.conf /etc/php-fpm.conf

php-fpm.conf是php服务程序的重要配置文件之一,咱们需要将其配置内容中约25行左右的pid文件保存路径启用,并在约148-149行的user与group参数分别修改为www帐户和用户组名称:

[root@linuxprobe php-5.5.14]# vim /usr/local/php/etc/php-fpm.conf
1 ;;;;;;;;;;;;;;;;;;;;;
2 ; FPM Configuration ;
3 ;;;;;;;;;;;;;;;;;;;;;
4 
5 ; All relative paths in this configuration file are relative to PHP's instal l
6 ; prefix (/usr/local/php). This prefix can be dynamically changed by using t he
7 ; '-p' argument from the command line.
8 
9 ; Include one or more files. If glob(3) exists, it is used to include a bunc h of
10 ; files from a glob(3) pattern. This directive can be used everywhere in the
11 ; file.
12 ; Relative path can also be used. They will be prefixed by:
13 ; - the global prefix if it's been set (-p argument)
14 ; - /usr/local/php otherwise
15 ;include=etc/fpm.d/*.conf
16 
17 ;;;;;;;;;;;;;;;;;;
18 ; Global Options ;
19 ;;;;;;;;;;;;;;;;;;
20 
21 [global]
22 ; Pid file
23 ; Note: the default prefix is /usr/local/php/var
24 ; Default Value: none
25 pid = run/php-fpm.pid
26 
………………省略部分输出信息………………
145 ; Unix user/group of processes
146 ; Note: The user is mandatory. If the group is not set, the default user's g roup
147 ; will be used.
148 user = www
149 group = www
150 
………………省略部分输出信息………………

配置妥当后便可把服务管理脚本文件复制到/etc/rc.d/init.d中啦,为了能够有执行脚本请记得要给予755权限,最后把php-fpm服务程序加入到开机启动项中:

[root@linuxprobe php-5.5.14]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@linuxprobe php-5.5.14]# chmod 755 /etc/rc.d/init.d/php-fpm
[root@linuxprobe php-5.5.14]# chkconfig php-fpm on

由于php服务程序的配置参数直接会影响到Web网站服务的运行环境,如果默认开启了例如允许用户在网页中执行Linux命令等等不必要且高危的功能,进而会降低了骇客入侵网站的难度,甚至加大了骇客提权到整台服务器的管理权限的几率。因此需要编辑php.ini配置文件,在约305左右的disable_functions参数后面追加上要禁止的功能名称吧,下面的禁用功能名单是刘遄老师依据运营网站经验而定制的,也许并不能适合每个生产环境,同学们可以在此基础上根据自身工作要求而酌情删减:

[root@linuxprobe php-5.5.14]# vim /usr/local/php/etc/php.ini
………………省略部分输出信息………………
300 
301 ; This directive allows you to disable certain functions for security reasons.
302 ; It receives a comma-delimited list of function names. This directive is
303 ; *NOT* affected by whether Safe Mode is turned On or Off.
304 ; http://php.net/disable-functions
305 disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restor e,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,g etservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,po six_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_ getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_ setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
306 
………………省略部分输出信息………………

这样就把php服务程序配置妥当了,最后还需要再编辑一下nginx服务程序的主配置文件,把约第2行的#(井号)去除,后面写上负责运行nginx服务程序的帐户名称用户组名称,把约45行左右的index参数后面写上网站的首页名称。最后是把约第65-71行参数前的#(井号)去除来启动参数,主要是修改约第69行的脚本名称路径参数,其中$document_root变量即为网站资料存储的根目录路径,若没有设置的话nginx服务程序是找不到网站资料的,因此会提示出404页面未找到的报错信息,确认参数信息填写正确后便可重启nginx服务与php-fpm服务,结束了对LNMP动态网站环境架构的配置实验。

[root@linuxprobe php-5.5.14]# vim /usr/local/nginx/conf/nginx.conf
 1 
 2 user www www;
 3 worker_processes 1;
 4 
 5 #error_log logs/error.log;
 6 #error_log logs/error.log notice;
 7 #error_log logs/error.log info;
 8 
 9 #pid logs/nginx.pid;
 10 
 11 
………………省略部分输出信息………………
 40 
 41 #access_log logs/host.access.log main;
 42 
 43 location / {
 44 root html;
 45 index index.html index.htm index.php;
 46 }
 47 
………………省略部分输出信息………………
 62 
 63 #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 64 
 65 location ~ \.php$ {
 66 root html;
 67 fastcgi_pass 127.0.0.1:9000;
 68 fastcgi_index index.php;
 69 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 70 include fastcgi_params;
 71 }
 72 
………………省略部分输出信息………………
[root@linuxprobe php-5.5.14]# systemctl restart nginx
[root@linuxprobe php-5.5.14]# systemctl restart php-fpm
20.3 搭建Discuz论坛

为了能够检验LNMP动态网站环境是否配置妥当,咱们可以使用Discuz系统部署上去试试看,Discuz X3.2是由国内最常见的社区论坛系统,经过十多年的研发过程已经成为了全球成熟度最高、覆盖率最广的论坛网站系统之一。如果能够在部署的LNMP动态网站环境中成功安装使用Discuz论坛系统,也就意味着这套架构是可用的。Discuz X3.2软件包的后缀是.zip格式,因此应当用专用的unzip命令来进行解压操作,解压后会在当前目录中出现一个名为upload的文件目录,这里面保存的就是Discuz论坛的资料程序,咱们把nginx服务程序网站根目录的内容清空后就可以把这些文件都复制进去了,记得把该目录的所有者和所有组修改为www用户,并设置755权限以便于能够读、写、执行该论坛系统内的文件。

[root@linuxprobe php-5.5.14 ]# cd /usr/local/src/
[root@linuxprobe src]# unzip Discuz_X3.2_SC_GBK.zip
[root@linuxprobe src]# rm -rf /usr/local/nginx/html/{index.html,50x.html}*
[root@linuxprobe src]# mv upload/* /usr/local/nginx/html/
[root@linuxprobe src]# chown -Rf www:www /usr/local/nginx/html
[root@linuxprobe src]# chmod -Rf 755 /usr/local/nginx/html

第1步:接受Discuz!安装向导的许可协议,把Discuz论坛系统资料复制到nginx服务网站根目录后便可刷新浏览器页面,自动会跳转到Discuz X3.2论坛系统的安装界面,此处需点击我同意按钮,即可进入到下一步的安装过程中,如图20-4所示。

第1步:接受许可协议

图20-4 接受Discuz X3.2论坛系统的安装许可

第2步:检查Discuz X3.2论坛系统的安装环境及目录权限,咱们部署的LNMP动态网站环境版本和软件都是符合discuz论坛最佳要求的,如果下面红框中的目录状态是不可写,请自行检查目录的属主和属组是否为www用户,以及有无对目录进行设置755权限,然后点击下一步按钮,如图20-5所示。

第2步:检查部署环境

图20-5 检查Discuz X3.2论坛系统的安装环境及目录权限

第3步:选择全新安装Discuz论坛及UCenter Server,Ucenter服务是站点之间的管理平台,不仅能够管理Discuz论坛系统,还能够使得多个不同系统的网站帐户等信息互通,点击下一步按钮,如图20-6所示:

第3步:选择全新安装discuz!X论坛

图20-6 选择全新安装Discuz论坛及UCenter Server

第4步:填写服务器数据库与论坛系统管理员信息,网站系统使用由服务器本地(localhost)提供的数据库服务,数据名称与数据表前缀可由用户自定义填写,其中数据库的用户名和密码则为Mysql数据库的登陆信息,以刚刚初始化Mysql服务程序时填写的信息为准。论坛系统管理员帐号为今后登陆、管理Discuz论坛的验证信息,建议填写较为好记的帐号名称,然后把密码设置的尽可能复杂一些,信息填写正确后即可点击下一步按钮,如图20-7所示。

第4步:填写数据库与论坛管理员信息

图20-7 填写服务器数据库与论坛系统管理员信息

第5步:等待Discuz X3.2论坛系统安装完毕,如图20-8所示,这个安装过程是非常快速的,大概只需要30秒左右,然后就可看到论坛安装完成的欢迎界面了,由于虚拟机主机可能并没有连接互联网,因此该界面中对Discuz论坛系统的插件介绍可能是显示失败的,能够联网的服务器安装成功界面如图20-9所示,随后点击您的论坛已完成安装,点此访问连接即可访问到论坛首页,如图20-10所示。

第5步:等待安装完毕

图20-8 等待Discuz X3.2论坛系统安装完毕

第6步:discuz论坛顺利安装完毕

图20-9 成功安装Discuz X3.2论坛系统欢迎界面

第7步:访问论坛主页面

图20-10 Discuz X3.2论坛系统首页界面

20.4 选购服务器主机

人们日常访问的网站是由域名、网站源程序和主机空间共同组成的,其中主机空间则是用于存放网页源代码并能够把网页内容展示给用户的服务器,既然同学们已经结束了对《Linux就该这么学》基础篇的学习旅程,刘遄老师再最后啰嗦一下这几年做网站总结的服务器主机选购的技巧吧,这样您也可以去搭建出一个属于自己的博客或论坛网站啦,能够把自己所学的Linux技术干货分享给更多人,愿开源世界美好的脚步更快一些。

虚拟主机:在一台服务器中分出一定的磁盘空间供用户放置网站、存放数据等,仅提供基础的网站访问、数据存放与传输流量功能,能够极大的降低用户费用,也几乎不需要管理员维护除网站数据以外的服务,适合小型网站。

VPS(Virtual Private Srver):在一台服务器中利用OpenVZ、Xen或KVM等虚拟化技术模拟出多个“主机”,每个主机都有独立的IP地址、操作系统,实现不同VPS之间磁盘空间、内存、CPU资源、进程与系统配置间的完全隔离,管理员可自由使用分配到的主机中的所有资源,所以需要有一定的维护系统的能力,适合小型网站。

云服务器(ECS):是一种整合了计算、存储、网络,能够做到弹性伸缩的计算服务,其使用起来与VPS几乎一样,但差别是云服务器建立在一组集群服务器中,每个服务器都会保存一个主机的镜像(备份),大大的提升了安全稳定性,另外还具备了灵活性与扩展性,用户只需按使用量付费即可,适合大中小型网站。

独立服务器:这台服务器仅提供给您使用,详细来讲又可以区分为租用方式与托管方式租用方式是用户只需把硬件配置要求告知IDC服务商,服务器硬件设备由机房负责维护,运维管理员一般需要自行安装相应的软件并部署网站服务,租期可以为月、季、年,减轻了用户初期对硬件设备的投入,适合大中型网站。托管方式是用户需要自行购置服务器后交给IDC服务供应商的机房进行管理(缴纳管理服务费用),用户对服务器硬件配置有完全的控制权,自主性强,但需要自行维护、修理服务器硬件设备,适合大中型网站。

另外有必要提醒读者,选择主机空间供应商时请一定要注意看口碑,综合分析再决定购买,某些供应商会有限制功能、强制添加广告、隐藏扣费或强制扣费等恶劣行为,一定一定不要上当!

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

本章节的复习作业(答案就在问题的下一行哦,用鼠标选中即可看到的~)

1:简述使用源码包安装服务程序的最大优势和缺点是什么?

答案:使用源码包安装的最大优势是可移植性强以及更好的提升软件执行效率,缺点是源码包程序的安装、管理、卸载、维护都会更麻烦。

2:使用源码包程序安装软件服务的大致步骤是什么?

答案:基本可分为四个步骤,分别为下载解压、代码编译、生成安装文件以及运行安装文件。

3:LNMP动态网站架构通常是指那些服务程序?

答案:LNMP动态网站部署架构是一套由Linux系统+Nginx网站服务+Mysql数据库管理系统+PHP脚本语言组成的动态网站系统解决方案。

4:简述Mysql数据库服务的/usr/local/mysql与/usr/local/mysql/var目录的作用?

答案:/usr/local/mysql是用于存放Mysql服务程序的目录,而/usr/local/mysql/var是用于存放真实数据库文件的目录。

5:简述Nginx相比Apache服务程序最显著的优势是什么?

答案:Nginx程序的稳定性来自于它采用了分阶段的资源分配技术,使得CPU与内存占用率会非常低,所以使用Nginx程序部署动态网站环境不仅十分的稳定、高效,而且消耗更少的系统资源。

6:如何禁止Php服务程序中不安全的函数功能呢?

答案:编辑PHP配置文件(/usr/local/php/etc/php.ini),把要禁用的功能追加到disable_functions参数之后。

7:您认为创业型小站长群体更适合购买那种服务器类型呢?

答案:刘遄老师推荐创业型小站长选择云服务器类型,每个月费用不超过一百元,性能也是十分强劲的啦~

8:感谢同学们耐心读完了这本《Linux就该这么》基础篇书籍,进阶篇等你们。

答案:么么哒,再见。