第20章 使用LNMP架构部署动态网站环境

章节概述:

本章节将从Linux系统的软件安装方式讲起,带领读者分辨RPM软件包与源码安装的区别、并能够理解它们的优缺点。

Nginx是一款相当优秀的用于部署动态网站的服务程序,Nginx具有不错的稳定性、丰富的功能以及占用较少的系统资源等独特特性。

通过部署Linux+Nginx+MYSQL+PHP这四种开源软件,便拥有了一个免费、高效、扩展性强、资源消耗低的LNMP动态网站架构了。

本章目录结构

  • 20.1 源码安装程序
  • 20.2 部署LNMP架构
    • 20.2.1 配置Mysql服务
    • 20.2.2 配置Nginx服务
    • 20.2.3 配置php服务
  • 20.3 选购服务器主机
  • 20.4 搭建discuz论坛
20.1 源码安装程序

在前面的章节中提到过在红帽软件包管理器(RPM)公布之前要想在Linux系统中安装软件只能采取“源码包”的方式安装服务程序,但是源码安装程序真是一件非常困难,耗费耐心的事情,不仅需要运维人员掌握更多的知识、高超的技能、甚至要很有耐心才能安装好一个程序,并且在安装、升级、卸载时还要考虑到其他程序、库的依赖关系,所以我们在前面的课程中都依赖于YUM仓库或RPM来安装服务程序,但这样也会有一些弊端。

很多软件产品只会以源码包的方式发布,如果只会用RPM命令就只能去互联网大海洋中慢慢寻找到由第三方组织或黑客们编写的RPM软件包后才能安装程序了,并且源码程序的可移植性非常好,可以针对不同的系统架构而正确运行,但RPM软件包则必需严格符合限制使用的平台和架构后才能顺利安装,所以建议即便在工作中可以很舒服的用Yum仓库来安装服务程序,源码安装的流程也一定要记清:
第1步,解压文件:

源码包通常会使用tar工具归档然后用gzip或bzip2进行压缩,后缀格式会分别为.tar.gz与tar.bz2 ,解压方法:

[[email protected] ~]# tar xzvf FileName.tar.gz

[[email protected] ~]# tar jxvf FileName.tar.bz2

第2步,切换到解压后的目录:

[[email protected] ~]# cd FileDirectory

第3步:准备编译工作:

在开始安装服务程序之前,需要执行configure脚本,他会自动的对当前系统进行一系列的评估,如源文件、软件依赖性库、编译器、汇编器、连接器检查等等,如果有需求,还可以使用--prefix参数来指定程序的安装路径(很实用),而当脚本检查系统环境符合要求后,则会在当前目录下生成一个Makefile文件。

[[email protected] ~]# ./configure --prefix=/usr/local/program

第4步:生成安装程序:

刚刚生成的Makefile文件会保存有系统环境依赖关系和安装规则,接下来需要使用make命令来根据MakeFile文件提供的规则使用合适的SHELL来编译所有依赖的源码,然后make命令会生成一个最终可执行的安装程序。

[[email protected] ~]# make

第5步:安装服务程序:

如果在configure脚本阶段中没有使用--prefix参数,那么程序一般会被默认安装到/usr/local/bin目录中。

[[email protected] ~]# make install

第6步:清理临时文件(可选):

[[email protected] ~]# make clean

卸载服务程序的命令(请不要随便执行!!!):

[[email protected] ~]# make uninstall

其实读者可能最纳闷的是漫长的configure与make步骤,RPM包为什么就可以那么有效率的安装,而不需要检测系统环境呢?
其实原因很简单,RPM软件包是根据特定系统和平台而指定的,经常一种程序会提供很多RPM包的格式(如i386/x86_64等等),用户需要找到适合当前自己系统的RPM包后才能顺利的安装,而源码包的程序作者肯定希望自己的软件能够被安装到更多的系统中,被更多的用户使用,所以就必需要用configure脚本来检查用户当前系统的情况,最终制定出一份可行的安装方案。
出现问题?大胆提问!

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

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

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

20.2 部署LNMP架构

LNMP(即Linux+Nginx+MYSQL+PHP)是目前非常热门的动态网站部署架构,一般是指:

Linux:如RHEL、Centos、Debian、Fedora、Ubuntu等系统。

Nginx:高性能、低消耗的HTTP与反向代理服务程序。

MYSQL:热门常用的数据库管理软件。

PHP:一种能够在服务器端执行的嵌入HTML文档的脚本语言。

通过将这四种开源软件部署在一起,便成为了一个免费、高效、扩展性强、资源消耗低的动态网站环境了。

设置防火墙允许数据库与网站服务策略:

[[email protected] ~]# iptables -F
[[email protected] ~]# firewall-cmd --permanent --add-service=mysql
success
[[email protected] ~]# firewall-cmd --permanent --add-service=http
success
[[email protected] ~]# firewall-cmd --reload
success

下载所有需要使用的软件包到/usr/local/src目录(17个文件):

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

安装编译工具及库文件(需要安装的程序比较多,请复制全!):

[[email protected] ~]# 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
 gettext-devel               x86_64       0.18.2.1-4.el7            rhel7       315 k
 kernel-headers              x86_64       3.10.0-123.el7            rhel7       1.4 M
 keyutils-libs-devel         x86_64       1.5.8-3.el7               rhel7        37 k
 krb5-devel                  x86_64       1.11.3-49.el7             rhel7       611 k
 libXpm-devel                x86_64       3.5.10-5.1.el7            rhel7        36 k
 libcom_err-devel            x86_64       1.42.9-4.el7              rhel7        30 k
 libcurl-devel               x86_64       7.29.0-19.el7             rhel7       296 k
 libjpeg-turbo-devel         x86_64       1.2.90-5.el7              rhel7        99 k
 libpng-devel                x86_64       2:1.5.13-5.el7            rhel7       122 k
 libselinux-devel            x86_64       2.2.2-6.el7               rhel7       174 k
 libsepol-devel              x86_64       2.1.9-3.el7               rhel7        71 k
 libstdc++-devel             x86_64       4.8.2-16.el7              rhel7       1.5 M
 libtiff-devel               x86_64       4.0.3-14.el7              rhel7       471 k
 libtool                     x86_64       2.4.2-20.el7              rhel7       588 k
 libtool-ltdl-devel          x86_64       2.4.2-20.el7              rhel7       167 k
 libxml2-devel               x86_64       2.9.1-5.el7               rhel7       1.0 M
 mpfr                        x86_64       3.1.1-4.el7               rhel7       203 k
 nasm                        x86_64       2.10.07-7.el7             rhel7       402 k
 ncurses-devel               x86_64       5.9-13.20130511.el7       rhel7       713 k
 ncurses-term                noarch       5.9-13.20130511.el7       rhel7       543 k
 ntp                         x86_64       4.2.6p5-18.el7            rhel7       539 k
 openssl-devel               x86_64       1:1.0.1e-34.el7           rhel7       1.2 M
 patch                       x86_64       2.7.1-8.el7               rhel7       110 k
 pcre-devel                  x86_64       8.32-12.el7               rhel7       477 k
 php-common                  x86_64       5.4.16-21.el7             rhel7       559 k
 php-gd                      x86_64       5.4.16-21.el7             rhel7       122 k
 t1lib                       x86_64       5.1.2-14.el7              rhel7       166 k
 telnet                      x86_64       1:0.17-59.el7             rhel7        63 k
 zlib-devel                  x86_64       1.2.7-13.el7              rhel7        49 k
Installing for dependencies:
 cyrus-sasl-devel            x86_64       2.1.26-17.el7             rhel7       309 k
 expat-devel                 x86_64       2.1.0-8.el7               rhel7        56 k
 gettext-common-devel        noarch       0.18.2.1-4.el7            rhel7       368 k
 git                         x86_64       1.8.3.1-4.el7             rhel7       4.3 M
 glibc-devel                 x86_64       2.17-55.el7               rhel7       1.0 M
 glibc-headers               x86_64       2.17-55.el7               rhel7       650 k
 libX11-devel                x86_64       1.6.0-2.1.el7             rhel7       979 k
 libXau-devel                x86_64       1.0.8-2.1.el7             rhel7        14 k
 libdb-devel                 x86_64       5.3.21-17.el7             rhel7        38 k
 libmpc                      x86_64       1.0.1-3.el7               rhel7        51 k
 libverto-devel              x86_64       0.2.5-4.el7               rhel7        12 k
 libxcb-devel                x86_64       1.9-5.el7                 rhel7       1.0 M
 libzip                      x86_64       0.10.1-8.el7              rhel7        49 k
 m4                          x86_64       1.4.16-9.el7              rhel7       256 k
 openldap-devel              x86_64       2.4.39-3.el7              rhel7       796 k
 perl-Data-Dumper            x86_64       2.145-3.el7               rhel7        47 k
 perl-Error                  noarch       1:0.17020-2.el7           rhel7        32 k
 perl-Git                    noarch       1.8.3.1-4.el7             rhel7        52 k
 perl-TermReadKey            x86_64       2.30-20.el7               rhel7        31 k
 perl-Test-Harness           noarch       3.28-2.el7                rhel7       302 k
 perl-Thread-Queue           noarch       3.02-2.el7                rhel7        17 k
 xorg-x11-proto-devel        noarch       7.7-8.el7.1               rhel7       281 k
 xz-devel                    x86_64       5.1.2-8alpha.el7          rhel7        44 k
………………省略部分安装过程………………
Complete!

安装cmake编译工具(解压与编译过程已省略):

[[email protected] ~]# cd /usr/local/src
[[email protected] 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
[[email protected] src]# tar xzvf cmake-2.8.11.2.tar.gz
[[email protected] src]# cd cmake-2.8.11.2/
[[email protected] cmake-2.8.11.2]# ./configure
[[email protected] cmake-2.8.11.2]# make
[[email protected] cmake-2.8.11.2]# make install
20.2.1 配置Mysql服务

在前面的章节中我们学习了MariaDB数据库管理系统,那么这次实验就学习下如何使用Mysql来管理数据库吧。
创建用于执行mysql服务程序的帐号:

[[email protected] cmake-2.8.11.2]# cd ..
[[email protected] src]# useradd mysql -s /sbin/nologin

创建数据库程序和文件的目录,并设置目录的所属与所组:

[[email protected] src]# mkdir -p /usr/local/mysql/var
[[email protected] src]# chown -Rf mysql:mysql /usr/local/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

删除系统默认的配置文件:

[[email protected] 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

创建配置文件的软连接文件:

[[email protected] mysql]# ln -s my.cnf /etc/my.cnf

将mysqld服务程序添加到开机启动项:

[[email protected] mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
[[email protected] mysql]# chmod 755 /etc/rc.d/init.d/mysqld
[[email protected] mysql]# chkconfig mysqld on

编辑启动项的配置文件:

[[email protected] mysql]# vim /etc/rc.d/init.d/mysqld
//分别修改第46与47行,basedir为程序安装路径,datadir为数据库存放目录。
basedir=/usr/local/mysql
datadir=/usr/local/mysql/var

重启mysqld服务程序:

[[email protected] mysql]# service mysqld start
Starting MySQL. SUCCESS!

把mysql服务程序命令目录添加到环境变量中(永久生效):

[[email protected] mysql]# vim /etc/profile
//在配置文件的最下面追加:
export PATH=$PATH:/usr/local/mysql/bin
[[email protected] mysql]# source /etc/profile

将mysqld服务程序的库文件链接到默认的位置:

[[email protected] mysql]# mkdir /var/lib/mysql
[[email protected] mysql]# ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
[[email protected] mysql]# ln -s /usr/local/mysql/include/mysql /usr/include/mysql
[[email protected] mysql]# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

初始化mysqld服务程序:

[[email protected] 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
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是一款相当优秀的用于部署动态网站的服务程序,Nginx最初是为俄罗斯门户站点而设计的网站服务软件,作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而深受信赖,但最最最被认可的是低系统资源、占用内存少并发能力强,目前国内如新浪、网易、腾讯等门户站均在使用,市场占有份额一直保持在15-16%左右(2015年最新数据)。

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

坦白来讲,虽然Nginx程序的代码质量非常高,代码很规范,技术成熟,模块扩展也很容易,但Nginx依然存在不少问题,比如Nginx是由俄罗斯人创建的,所以在资料文档方面还并不完善,中文教材的质量更是鱼龙混杂,但Nginx近年来增长势头迅猛,预测未来应该能够在轻量级HTTP服务器市场有不错的未来。

安装PCRE(Perl兼容的正则表达式库,解压与编译过程已省略):

[[email protected] ~]# cd /usr/local/src
[[email protected] src]# mkdir /usr/local/pcre
[[email protected] src]# tar xzvf pcre-8.35.tar.gz
[[email protected] src]# cd pcre-8.35
[[email protected] pcre-8.35]# ./configure --prefix=/usr/local/pcre
[[email protected] pcre-8.35]# make
[[email protected] pcre-8.35]# make install

安装openssl服务程序(解压与编译过程已省略):

[[email protected] pcre-8.35]# cd /usr/local/src
[[email protected] src]# mkdir /usr/local/openssl
[[email protected] src]# tar xzvf openssl-1.0.1h.tar.gz
[[email protected] src]# cd openssl-1.0.1h
[[email protected] openssl-1.0.1h]# ./config --prefix=/usr/local/openssl
[[email protected] openssl-1.0.1h]# make
[[email protected] openssl-1.0.1h]# make install

把openssl服务程序命令目录添加到环境变量中(永久生效):

[[email protected] pcre-8.35]# vim /etc/profile
//将配置文件最下面的参数追加参数为:
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/openssl/bin
[[email protected] pcre-8.35]# source /etc/profile

安装zlib数据压缩函数库(解压与编译过程已省略):

[[email protected] pcre-8.35]# cd /usr/local/src
[[email protected] src]# mkdir /usr/local/zlib
[[email protected] src]# tar xzvf zlib-1.2.8.tar.gz
[[email protected] src]# cd zlib-1.2.8
[[email protected] zlib-1.2.8]# ./configure --prefix=/usr/local/zlib
[[email protected] zlib-1.2.8]# make
[[email protected] zlib-1.2.8]# make install

创建用于执行nginx服务的用户:

[[email protected] zlib-1.2.8]# cd ..
[[email protected] src]# useradd www -s /sbin/nologin

安装nginx服务程序(openssl,zlib,pcre要写成源码解压路径!!!):

[[email protected] src]# tar xzvf nginx-1.6.0.tar.gz
[[email protected] src]# cd nginx-1.6.0/
[[email protected] 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
[[email protected] nginx-1.6.0]# make
[[email protected] nginx-1.6.0]# make install

创建nginx程序脚本(将下面的参数直接复制进去即可):

[[email protected] 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
[[email protected] nginx-1.6.0]# chmod 755 /etc/rc.d/init.d/nginx

重启nginx服务程序并添加到开机启动项:

[[email protected] nginx-1.6.0]# /etc/rc.d/init.d/nginx restart
Restarting nginx (via systemctl):                          [  OK  ]
[[email protected] nginx-1.6.0]# chkconfig nginx on

此时可以通过访问IP来判断nginx服务是否顺利运行:

20.2.3 配置php服务

安装yasm汇编器(解压与编译过程已省略):

[[email protected] nginx-1.6.0]# cd /usr/local/src
[[email protected] src]# tar zxvf yasm-1.2.0.tar.gz
[[email protected] src]# cd yasm-1.2.0
[[email protected] yasm-1.2.0]# ./configure
[[email protected] yasm-1.2.0]# make
[[email protected] yasm-1.2.0]# make install

安装libmcrypt加密算法扩展库(解压与编译过程已省略):

[[email protected] yasm-1.2.0]# cd /usr/local/src
[[email protected] src]# tar zxvf libmcrypt-2.5.8.tar.gz
[[email protected] src]# cd libmcrypt-2.5.8
[[email protected] libmcrypt-2.5.8]# ./configure
[[email protected] libmcrypt-2.5.8]# make
[[email protected] libmcrypt-2.5.8]# make install

安装libvpx视频编码器(解压与编译过程已省略):

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

安装Tiff标签图像文件格式(解压与编译过程已省略):

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

安装libpng图片(png格式)函数库(解压与编译过程已省略):

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

安装freetype字体引擎(解压与编译过程已省略):

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

安装jpeg图片(jpeg格式)函数库(解压与编译过程已省略):

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

安装libgd图像处理程序(解压与编译过程已省略):

[[email protected] jpeg-9a]# cd /usr/local/src
[[email protected] src]# tar zxvf libgd-2.1.0.tar.gz
[[email protected] src]# cd libgd-2.1.0
[[email protected] 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
[[email protected] libgd-2.1.0]# make
[[email protected] libgd-2.1.0]# make install

安装t1lib图片生成函数库(解压与编译过程已省略):

[[email protected] cd libgd-2.1.0]# cd /usr/local/src
[[email protected] src]# tar zxvf t1lib-5.1.2.tar.gz
[[email protected] src]# cd t1lib-5.1.2
[[email protected] t1lib-5.1.2]# ./configure --prefix=/usr/local/t1lib --enable-shared
[[email protected] t1lib-5.1.2]# make
[[email protected] t1lib-5.1.2]# make install

将函数库文件放至合适的位置:

[[email protected] t1lib-5.1.2]# cd /usr/local/src
[[email protected] src]# ln -s /usr/lib64/libltdl.so /usr/lib/libltdl.so
[[email protected] src]# cp -frp /usr/lib64/libXpm.so* /usr/lib/

安装php服务程序(命令比较长,请一定要复制完整!!!):

[[email protected] src]# tar -zvxf php-5.5.14.tar.gz
[[email protected] src]# cd php-5.5.14
[[email protected] php-5.5.14]# export LD_LIBRARY_PATH=/usr/local/libgd/lib
[[email protected] 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
[[email protected] php-5.5.14]# make
[[email protected] php-5.5.14]# make install

复制php服务程序的配置文件到安装目录:

[[email protected] php-5.5.14]# cp php.ini-production /usr/local/php/etc/php.ini

删除默认的php配置文件:

[[email protected] php-5.5.14]# rm -rf /etc/php.ini

创建php配置文件的软连接到/etc/目录中:

[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
[root@linuxprobe php-5.5.14]# ln -s /usr/local/php/etc/php.ini /etc/php.ini

编辑php服务程序的配置文件:

[[email protected] php-5.5.14]# vim /usr/local/php/etc/php-fpm.conf
//将第25行参数前面的分号去掉。
pid = run/php-fpm.pid
//修改第148和149行,将user与group修改为www。
user = www
group = www

添加php-fpm服务程序到开机启动项:

[[email protected] php-5.5.14]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[[email protected] php-5.5.14]# chmod +x /etc/rc.d/init.d/php-fpm
[[email protected] php-5.5.14]# chkconfig php-fpm on

为了保障网站的安全性,禁用掉不安全的功能:

[[email protected] php-5.5.14]# vim /usr/local/php/etc/php.ini
//修改第305行的disable_functions参数,追加参数为:
disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_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

配置nginx服务程序支持php:

[[email protected] php-5.5.14]# vim /usr/local/nginx/conf/nginx.conf
//将第2行前面的#号去掉并修改为user www www ;
//将第45行参数修改为index index.html index.htm index.php;
//将第65-71行前面的#号去掉,修改为:
location ~ \.php$ {
  root           html;
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include        fastcgi_params;
  }

重启nginx与php-fpm服务程序:

[[email protected] php-5.5.14]# systemctl restart nginx
[[email protected] php-5.5.14]# systemctl restart php-fpm
20.3 选购服务器主机

网站是由域名、网页源程序和主机空间组成的,其中主机空间则是用于存放网页源代码并能够将网页内容展示给用户,虽然本小节与Apache服务没有直接关系,但如果您想要在互联网中搭建网站并被顺利访问,主机空间一定不能选错。 常见的主机空间包括虚拟主机VPS云服务器与独立服务器:

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

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

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

独立服务器:这台服务器仅提供给您使用,详细来讲又可以区分为租用方式托管方式

租用方式:用户只需将硬件配置要求告知IDC服务商,服务器硬件设备由机房负责维护,运维管理员一般需要自行安装相应的软件并部署网站服务,租期可以为月、季、年,减轻了用户初期对硬件设备的投入,适合大中型网站。

托管方式:用户需要自行购置服务器后交给IDC服务供应商的机房进行管理(缴纳管理服务费用),用户对服务器硬件配置有完全的控制权,自主性强,但需要自行维护、修理服务器硬件设备,适合大中型网站。

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

20.4 搭建discuz论坛

将discuz论坛数据放至网站目录(解压过程已省略):

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

第1步,接受许可协议:

第2步,检查部署环境:

第3步,选择全新安装discuzX论坛:

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

第5步,等待安装完毕:

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

第7步,访问论坛主页面:

时间: 2024-10-10 18:30:17

第20章 使用LNMP架构部署动态网站环境的相关文章

20 使用LNMP架构部署动态网站环境

20 使用LNMP架构部署动态网站环境 20.1 源码包程序 源码包的可移植性非常好,几乎可以在任何Linux系统中安装使用,而RPM软件包是针对特定系统和架构编写的指令集,必须严格地符合执行环境才能顺利安装(即只会去"生硬地"安装服务程序). 使用源码包安装服务程序时会有一个编译过程,因此可以更好地适应安装主机的系统环境,运行效率和优化程度都会强于使用RPM软件包安装的服务程序.也就是说,可以将采用源码包安装服务程序的方式看作是针对系统的"量体裁衣". 第1步:下

编译LNMP部署动态网站环境

title: 编译LNMP部署动态网站环境 date: 2018-11-08 13:59:59 tags: Linux 服务配置 categories: Linux 服务配置 copyright: true --- LNMP动态网站部署架构是由一套 Linux+Nginx+MySQL+PHP 组成的动态网站系统解决方案. 以下配置环境为:Linux=RHEL7 --> Nginx=1.13 --> MySQL=5.6 --> PHP=7.0 无错误版. 安装编译环境 在使用源码包安装服务

nginx详解反向代理、负载均衡、LNMP架构上线动态网站

nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了.Igor Sysoev在建立的项目时,使用基于BSD许可. nginx和apache区别 Nginx 轻量级,采用 C 进行编写,同样的 web 服务,会占用更

编译LAMP部署动态网站环境

title: 编译LAMP部署动态网站环境 date: 2018-11-08 19:08:41 tags: Linux 服务配置 categories: Linux 服务配置 copyright: true --- LAMP动态网站部署架构是由一套 Linux+Apache+MySQL+PHP 组成的动态网站系统解决方案. 以下配置环境为:Linux=RHEL7 --> Apache=2.4.33 --> MySQL=5.5 --> PHP=7.0 无错误版. 安装准备环境 ◆安装gcc

LNMP架构上线动态网站

第一步,一键安装所需程序 yum install -y nginx php php-mysql php-fpm mariadb-server 第二步,修改Nginx配置文件/etc/nginx/nginx.conf 重启Nginx和php-fpm systemctl restart nginx (注意:Nginx和Apache所使用的的端口都是80,若启动失败可能是Apache已经在使用80端口,可以停用Apache再启动  或者是修改Nginx的监听端口,然后启动) systemctl res

Lnmp架构部署动态网络环境

下面将接着上篇,继续介绍Lnmp架构部署动态网络环境 Lnmp 架构大致通过以下可以部署动态网站环境:Lnmp=linux/windows/unix +apache/nginx+mysql/pgsql/oracle+php/jsp/xml本章节将从 Linux 系统的软件安装方式讲起,带领读者分辨 RPM 软件包与源码安装的区别.并能够理解它们的优缺点.Nginx 是一款相当优秀的用于部署动态网站的服务程序,Nginx 具有不错的稳定性.丰富的功能以及占用较少的系统资源等独特特性.通过部署 Li

Linux中什么是动态网站环境及如何部署

Linux中什么是动态网站环境及如何部署 当谈论起网站时,我们可能听说过静态和动态这两个词,但却不知道它们的含义,或者从字面意思了解一些却不知道它们的区别. 这一切可以追溯到网站和网络应用程序,Web应用程序是一个网站,但很多网站不是Web应用程序,例如微博是一个网站也是一个应用程序,但像有的公司的官网是网站但不是网络应用程序.同时,也会经常听到称为网站的是静态网站,称为网络应用的是动态网站. 接下来,我们分别介绍静态网站和动态网站的区别. 静态站点是最基本的网站类型,也是最容易创建的. 它不需

LNMP架构部署——可跟做

简述:LNMP平台就是Linux,Nginx,MySQL,PHP的组合架构,需要Linux服务器,Nginx网站服务器.MySQL数据库,PHP解析环境详情 Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统. Nginx是一个高性能的HTTP和反向代理服务器.轻量级.拥有高并发的处理能力 Mysql是一个小型关系型数据库管理系统. PHP是一种在服务器端执行的嵌入HTML文档的脚本语言. 实验走起1.在Linux上使用远程共享获取来自Windows共享的源码包 [[ema

HTTP服务基础 、 网页内容访问 、 安全Web服务 、 部署动态网站-day09

############################################################################################检测两台虚拟机:1.ip地址 #ifconfig | head -22.检测dns是否可以解析#vim /etc/resolv.conf                  //dns配置文件#nslookup desktop0.example.com      //dns检测3.检测yum是否可以使用#yum cl