Linux就该这么学 | 第20章 部署 LNMP 架构环境

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

本章首先对比了使用源码包安装服务程序与使用 RPM 软件包安装服务程序的区别,然后讲解了如何手工编译源码包并安装各个服务程序,以及如何使用 Discuz! X3.2 版本论坛系统验证架构环境。

一、使用源码包的方式安装软件

1、为什么要学习使用源码包来安装软件?

在 RPM(红帽软件包管理器)技术出现之前,Linux 系统运维人员只能通过源码包的方式来安装各种服务程序,这是一件非常繁琐且极易消耗时间与耐心的事情;而且在安装、升级、卸载程序时还要考虑到与其他程序或函数库的相互依赖关系,这就要求运维人员不仅要掌握更多的 Linux 系统理论知识以及高超的实操技能,还需要有极好的耐心才能安装好一个源码软件包。

但是,现在依然有很多软件程序只有源码包的形式,如果我们只会使用 Yum 软件仓库的方式来安装程序,则面对这些只有源码包的软件程序时,将充满无力感。因此,运维人员学会使用源包来安装软件,是必须的。

2、使用源码包安装软件有哪些优势?

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

3、Linux中软件安装的基本原则

一般来讲,在安装软件时,如果能通过 Yum 软件仓库来安装,就用 Yum 方式;反之则去寻找合适的 RPM 软件包来安装;如果是在没有资源可用,那就只能使用源码包来安装了。

4、使用源码包安装软件的基本步骤

1)第1步:下载及解压源码包文件。

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

tar  xzvf  FileName.tar.gz
cd  FileName

2)第2步:编译源码包代码。

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

./configure  --prefix=/usr/local/program      // 自定义安装目录

3)第3步:生成二进制安装程序。

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

make

4)第4步:运行二进制的服务程序安装包。

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

make  install

5)清理源码包临时文件。

由于在安装服务程序的过程中进行了代码编译的工作,因此在安装后目录中会遗留下很多临时垃圾文件,本着尽量不要浪费磁盘存储空间的原则,可以使用 make clean 命令对临时文件进行彻底的清理工作。

make  clean

5、为什么使用源码包安装软件时,比使用RPM安装软件需要更长的时间呢?

使用源码包安装软件时,源码包的编译工作(configure)与生成二进制文件的工作(make)都会使用较长的时间,而采用 RPM 软件包安装软件就特别有效率。

源码包的软件作者肯定希望自己的软件能够被安装到更多的系统上面,能够被更多的用户所了解并使用。因此在源码包的编译阶段(configure),会检查用户当前系统的架构模式,然后制定出一份可行的安装方案。所以使用源码包安装软件时,会占用更多的系统资源,需要更长的等待时间。

然而,RPM 软件包就是把软件的源码包和一个针对特定系统、架构、环境编写的安装策略,预先打包成了一个的指令集。因此为了让用户都能使用这个软件包来安装程序,通常一个软件程序会发布多种格式的 RPM 软件包(例如 i386、x86_64 等架构)来让用户选择。鉴于 RPM软件包已经预先针对特定 OS 系统进行了打包,所以使用 RPM 方式安装软件会更快。

6、如何配置源码包的编译环境?

在使用源码包安装软件之前,首先要让Linux主机具备编译源码包的能力和环境,这就需要具备 C 语言、C++语言、Perl 语言的编译器,以及各种常见的编译支持函数库程序。

把 Yum仓库配置完成后,就开始安装这些编译器环境必须的程序和库。

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* libtifflibtiff* make 
mpfr ncurses* ntp openssl openssl-devel patch pcre-devel 
perl php-common php-gd policycoreutils telnet t1lib t1lib* nasm nasm* wget zlib-devel

二、部署 LNMP 动态网站架构

1、什么是 LNMP 架构?

LNMP 动态网站部署架构是一套由 Linux + Nginx + MySQL + PHP 组成的动态网站系统解决方案,具有免费、高效、扩展性强且资源消耗低等优良特性。

Linux就该这么学 | 第20章 部署 LNMP 架构环境_第1张图片
LNMP

LNMP 中的字母 L 是 Linux 系统的意思,不仅可以是 RHEL、CentOS、Fedora,还可以是 Debian、Ubuntu 等系统。

2、下载部署 LNMP 架构所需要的16个源码包和1个工具包

可以在Windows电脑上预先下载这些源码包,然后再使用 SSH 服务将它们从 Windows 电脑上传递至 Linux服务端;或者使用 wget 命令,在 Linux服务端直接下载这些源码包。

这16个源码包+1个工具包,分别是:discuz、freetype、jpegsrc、libgd、libmcrypt、libpng、libvpx、mysql、nginx、openssl、php、pcre、t1lib、tiff、yasm、zlib、cmake。

下载资源包示例:
cd  /usr/local/src
wget  http://www.xxx.com/resource/mysql-5.6.19.tar.gz
Linux就该这么学 | 第20章 部署 LNMP 架构环境_第2张图片
下载 LNMP 架构所需要的17个基础源码包

基于 FHS 协议的规定,我们可以把这17个源码包放在 /usr/local/src 目录中,然后分别对它们进行解压缩、编译、生成二进制程序并执行程序安装。

3、使用源码包方式安装 cmake 编译工具

cmake 是 Linux 系统中一款常用的编译工具。要想通过源码包安装服务程序,就一定要严格遵守上述所总结的安装步骤——下载及解压源码包文件、编译源码包代码、生成二进制安装程序、运行二进制的服务程序安装包

1)使用源码包安装 cmake

cd  /usr/local/src
ls
// 1-解压缩
tar  xzvf  cmake-2.8.11.2.tar.gz
cd  cmake-2.8.11.2/
// 2-编译并指定cmake安装目录(后续将使用该目录作为cmake的环境变量)
./configure  --prefix=/usr/local/program
// 3-生成二进制程序包
make
// 4-执行安装
make  install
// 5-清理源码包
make  clean

2)配置 cmake 程序的 PATH 环境变量,以让系统找到 cmake 程序的所在位置。

查看cmake 的安装目录:
cd  /usr/local/program
cd  bin
ls
配置 PATH 环境变量:
vim  /etc/profile
让 PATH 环境变量立即生效:
source  /etc/profile
Linux就该这么学 | 第20章 部署 LNMP 架构环境_第3张图片
/etc/profile

3、配置 MySQL 服务

1)创建一个名为 mysql 的用户,专门用于负责运行 MySQL 数据库。(请记得要把用户的 Bash 终端设置成 nologin 解释器,避免黑客通过该用户登录到服务器中,从而提高系统安全性。)

useradd  mysql  -s  /sbin/nologin

2)创建一个用于保存 MySQL 数据库程序和数据库文件的目录,并把该目录的所有者和所属组身份修改为 mysql 用户。

其中,/usr/local/mysql 是用于保存 MySQL 数据库服务程序的目录,/usr/local/mysql/var 则是用于保存真实数据库文件的目录。

mkdir  -p  /usr/local/mysql/var
chown  -Rf  mysql:mysql  /usr/local/mysql

3)解压、编译、安装 MySQL 数据库服务程序。

使用 cmake 命令编译MySQL源码包,其中,-DCMAKE_INSTALL_PREFIX 参数用于定义数据库服务程序的保存目录,-DMYSQL_DATADIR 参数用于定义真实数据库文件的目录,-DSYSCONFDIR 则是定义MySQL 数据库配置文件的保存目录。

tar  xzvf mysql-5.6.19.tar.gz
cd  mysql-5.6.19/

编译MySQL源码包,并指定MySQL的安装目录和数据存储目录:
cmake  .  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/var -DSYSCONFDIR=/etc
make
make  install

4)把MySQL加入到 PATH 环境变量中去。

vim  /etc/profile
让环境变量立即生效:
source  /etc/profile
Linux就该这么学 | 第20章 部署 LNMP 架构环境_第4张图片
/etc/profile

5)生成 MySQL 系统数据库文件和服务配置文件。

为了让 MySQL 数据库程序正常运转起来,需要先删除/etc 目录中的默认配置文件。

然后在 MySQL 数据库程序的保存目录 scripts 内找到一个名为mysql_install_db 的脚本程序,执行这个脚本程序并使用 --user 参数指定 MySQL 服务的对应账号名称(在前面步骤已经创建),使用--basedir 参数指定 MySQL 服务程序的保存目录,使用--datadir 参数指定 MySQL 真实数据库的文件保存目录,这样即可生成系统数据库文件,也会生成出新的 MySQL 服务配置文件。

rm  -rf  /etc/my.cnf
cd  /usr/local/mysql
./scripts/mysql_install_db  --user=mysql  --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/var
Linux就该这么学 | 第20章 部署 LNMP 架构环境_第5张图片
生成 MySQL 系统数据库文件和服务配置文件

6)把上一步中所生成的服务配置文件链接到 /etc 中,然后把程序目录中的开机程序文件复制到/etc/rc.d/init.d 目录中,以便通过 service 命令来管理 MySQL 数据库服务程序。

ln  -s  my.cnf  /etc/my.cnf
cp  ./support-files/mysql.server  /etc/rc.d/init.d/mysqld
chmod  755  /etc/rc.d/init.d/mysqld

7)链接MySQL服务程序所需要用到的程序文件和函数库文件。

当前我们是使用源码包的方式安装 MySQL 数据库,因此还需要以手动的方式把MySQL服务运行所必须的程序文件和函数库文件链接过来。

mkdir  /var/lib/mysql
ln  -s  /usr/local/mysql/lib/mysql   /usr/lib/mysql
ln  -s  /tmp/mysql.sock   /var/lib/mysql/mysql.sock
ln  -s  /usr/local/mysql/include/mysql   /usr/include/mysql

8)编辑上一步中的 MySQL 服务配置文件,然后重启 MySQL 服务。

vim  /etc/rc.d/init.d/mysqld
service  mysqld  start
chkconfig  mysqld  on
Linux就该这么学 | 第20章 部署 LNMP 架构环境_第6张图片
/etc/rc.d/init.d/mysqld

9)对 MySQL 数据库进行初始化

mysql_secure_installation
Linux就该这么学 | 第20章 部署 LNMP 架构环境_第7张图片
mysql_secure_installation

4、配置 Nginx 服务

1)什么是 Nginx ?它有哪些优势?

Nginx 是一款相当优秀的用于部署动态网站的轻量级服务程序,它最初是为俄罗斯门户站点而开发的,因其稳定性、功能丰富、占用内存少且并发能力强而备受用户的信赖。

Nginx 服务程序的稳定性源自于采用了分阶段的资源分配技术,降低了 CPU 与内存的占用率,所以使用 Nginx 程序部署的动态网站环境不仅十分稳定、高效,而且消耗的系统资源也很少。

此外,Nginx 具备的模块数量与 Apache 具备的模块数量几乎相同,而且现在已经完全支持 proxy、rewrite、mod_fcgi、ssl、vhosts 等常用模块。

更重要的是,Nginx 还支持热部署技术,可以 7×24 不间断提供服务,还可以在不暂停服务的情况下直接对 Nginx 服务程序进行升级。

2)在正式安装 Nginx 服务程序之前,先安装 Nginx所必需的软件依赖程序。

安装 pcre 程序:它用于提供 Perl 语言兼容的正则表达式库,它是 Nginx 服务程序用于实现伪静态功能必不可少的依赖包。

cd  /usr/local/src
tar  xzvf  pcre-8.35.tar.gz
cd  pcre-8.35
./configure  --prefix=/usr/local/pcre
make
make  install

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

cd  /usr/local/src
tar  xzvf  openssl-1.0.1h.tar.gz
cd  openssl-1.0.1h
./config  --prefix=/usr/local/openssl
make
make  install

把 openssl 添加到 PATH 环境变量中去:
vim  /etc/profile
source  /etc/profile
Linux就该这么学 | 第20章 部署 LNMP 架构环境_第8张图片
/etc/profile

安装 zlib程序:它为压缩功能提供了相关的函数库文件。

cd  /usr/local/src
tar  xzvf  zlib-1.2.8.tar.gz
cd  zlib-1.2.8
./configure  --prefix=/usr/local/zlib
make
make  install

3)创建一个用于执行 Nginx服务程序的账户,用户名可自定义,比如 geekwww。

useradd  geekwww  -s  /sbin/nologin

4)使用 Nginx 源码包来安装 Nginx 服务。

其中,--prefix 参数用于定义服务程序稍后安装到的位置,--user 与--group 参数用于指定执行 Nginx 服务程序的用户名和用户组。

cd  /usr/local/src
tar  xzvf nginx-1.6.0.tar.gz
cd  nginx-1.6.0/
编译 Nginx 源码包:
./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
make
make  install
Linux就该这么学 | 第20章 部署 LNMP 架构环境_第9张图片
安装 Nginx 程序

注:编译 Nginx 源码包时,参数中所调用 openssl、zlib、pcre 软件包时,指定的是软件源码包的解压路径,而不是程序的安装路径。

5)编写 Nginx 服务的配置文件,用于将其添加到开机启动项中去。

要想启动 Nginx 服务程序以及将其加入到开机启动项中,也需要有脚本文件。可惜的是,使用源码包方式安装 Nginx 服务,默认没有提供这样的脚本文件。

这就需要我们手动编写 Nginx 服务的主配置文件,并其放置到 /etc/rc.d/init.d 目录中。脚本编写参考如下:

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

保存上述我们自己编写的 Nginx 服务配置文件,并为其赋予 755 权限。然后以绝对路径的方式执行这个脚本,通过 restart 参数重启 Nginx 服务程序,最后再使用 chkconfig 命令将 Nginx 服务程序添加至开机启动项中。

chmod  755  /etc/rc.d/init.d/nginx
/etc/rc.d/init.d/nginx  restart
chkconfig  nginx  on

6)测试 Nginx 是否安装并启动成功?在浏览器中输入服务器的 IP 地址来查看 Nginx 的默认欢迎页面。

Linux就该这么学 | 第20章 部署 LNMP 架构环境_第10张图片
Nginx 服务的默认首面

5、配置 PHP 服务

1)关于 PHP 语言

PHP(Hypertxt Preprocessor,超文本预处理器)是一种通用的开源脚本语言,发明于 1995年,它吸取了 C 语言、Java 语言及 Perl 语言的很多优点,具有开源、免费、快捷、跨平台性强、效率高等优良特性,是目前 Web 开发领域最常用的语言之一。

2)关于 PHP 的安装

使用源码包的方式编译安装 PHP 语言环境其实并不复杂,难点在于解决 PHP 的程序包和其他软件的依赖关系。

为此需要先安装部署将近十个用于搭建网站页面的软件程序包,然后才能正式安装 PHP 程序。

3)安装 PHP 所需要的系列软件依赖

安装 yasm程序:它是一款常用的开源汇编器。

cd  /usr/local/src/
wget  http://www.xxx.com/source/yasm-1.2.0.tar.gz
tar  zxvf  yasm-1.2.0.tar.gz
cd  yasm-1.2.0
./configure
make
make  install

安装 libmcrypt程序: 它的用于加密算法的扩展库程序。

cd  /usr/local/src/
wget  http://www.xxx.com/source/libmcrypt-2.5.8.tar.gz
tar  zxvf  libmcrypt-2.5.8.tar.gz
cd  libmcrypt-2.5.8
./configure
make
make  install

安装 libvpx程序:它是用于提供视频编码器的服务程序。

cd  /usr/local/src/
wget  http://www.xxx.com/source/libvpx-v1.3.0.tar.bz2
tar  xjvf  libvpx-v1.3.0.tar.bz2
cd  libvpx-v1.3.0
./configure  --prefix=/usr/local/libvpx  --enable-shared  --enable-vp9
make
make  install

安装 tiff程序:它是用于提供标签图像文件格式的服务程序。

cd  /usr/local/src/
wget  http://www.xxx.com/source/tiff-4.0.3.tar.gz
tar  zxvf  tiff-4.0.3.tar.gz
cd  tiff-4.0.3
./configure  --prefix=/usr/local/tiff  --enable-shared
make
make  install

安装 libpng程序:它是用于提供 png 图片格式支持函数库的服务程序。

cd  /usr/local/src/
wget  http://www.xxx.com/source/libpng-1.6.12.tar.gz
tar  zxvf  libpng-1.6.12.tar.gz
cd  libpng-1.6.12
./configure  --prefix=/usr/local/libpng  --enable-shared
make
make  install

安装 freetype程序:它是用于提供字体支持引擎的服务程序。

cd  /usr/local/src/
wget  http://www.xxx.com/source/freetype-2.5.3.tar.gz
tar  zxvf  freetype-2.5.3.tar.gz
cd  freetype-2.5.3
./configure  --prefix=/usr/local/freetype  --enable-shared
make
make  install

安装 jpeg 程序:它是用于提供 jpeg 图片格式支持函数库的服务程序。

cd  /usr/local/src/
wget  http://www.xxx.com/source/jpegsrc.v9a.tar.gz
tar  zxvf  jpegsrc.v9a.tar.gz
cd  jpegsrc.v9a
./configure  --prefix=/usr/local/jpegsrc  --enable-shared
make
make  install

安装 libgd程序:它是用于提供图形处理的服务程序。(在编译 libgd 源码包时,请记得写入 jpeg、libpng、freetype、tiff、libvpx 等服务程序在系统中的安装路径,即在上面安装过程中使用--prefix 参数指定的目录路径。)

cd  /usr/local/src/
wget  http://www.xxx.com/source/libgd-2.1.0.tar.gz
tar  zxvf  libgd-2.1.0.tar.gz
cd  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
make
make  install

安装 t1lib程序:它是用于提供图片生成函数库的服务程序。(t1lib 程序安装完成后,要把/usr/lib64 目录中的函数文件链接到/usr/lib 目录中,以便系统能够顺利地调取到该函数文件。)

cd  /usr/local/src/
wget  http://www.xxx.com/source/t1lib-5.1.2.tar.gz
tar  zxvf  t1lib-5.1.2.tar.gz
cd  t1lib-5.1.2
./configure  --prefix=/usr/local/t1lib  --enable-shared
make
make  install

ln  -s  /usr/lib64/libltdl.so/   /usr/lib/libltdl.so
cp  -frp  /usr/lib64/libXpm.so*   /usr/lib/

4)使用源码包的方式安装 PHP

注意1:在编译 php源码包之前,先定义一个名为 LD_LIBRARY_PATH 的全局环境变量,该环境变量的作用是帮助系统找到指定的动态链接库文件,这些文件是编译 php 服务源码包的必须元素之一。

注意2:编译php 服务源码包时,除了定义要安装到的目录以外,还需要依次定义配置 php 服务程序配置文件的保存目录、MySQL 数据库服务程序所在目录、MySQL 数据库服务程序配置文件所在目录,以及 libpng、jpeg、freetype、libvpx、zlib、t1lib 等服务程序的安装目录路径,并通过参数启动 php 服务程序的系列默认功能。

cd  /usr/local/src/
wget  http://www.xxx.com/source/php-5.5.14.tar.gz
tar  zxvf  php-5.5.14.tar.gz
cd  php-5.5.14

定义环境变量:
export  LD_LIBRARY_PATH=/usr/local/libgd/lib

编译 PHP源码:
./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

生成二进制程序包并执行安装:
make
make  install

5)删除 PHP 默认的配置文件。

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

rm  -rf  /etc/php.ini
cp  php.ini-production  /usr/local/php/etc/php.ini
ln  -s  /usr/local/php/etc/php.ini  /etc/php.ini
cp  /usr/local/php/etc/php-fpm.conf.default  /usr/local/php/etc/php.fpm.conf
ln  -s  /usr/local/php/etc/php-fpm.conf  /etc/php-fpm.conf

6)开始配置 PHP 服务。

php-fpm.conf 是 php 服务程序重要的配置文件之一,配置如下:

vim  /usr/local/php/etc/php-fpm.conf
Linux就该这么学 | 第20章 部署 LNMP 架构环境_第11张图片
/usr/local/php/etc/php-fpm.conf

php 服务程序的配置参数直接会影响到 Web 服务服务的运行环境,因此我们需要把禁用掉一些默认被开启了的不必要的且高危的功能,以降低网站被入侵的难度,修改 php.ini 配置文件参考如下:

vim  /usr/local/php/etc/php.ini
Linux就该这么学 | 第20章 部署 LNMP 架构环境_第12张图片
/usr/local/php/etc/php.ini

7)把PHP添加到开机启动项中。

cp  /usr/local/php/sapi/fpm/init.d.php-fpm   /etc/rc.d/init.d/php-fpm
chmod  755  /etc/rc.d/init.d/php-fpm
chkconfig  php-fpm  on

6、部署 LNMP 架构环境的最后一步

最后,我们还需要编辑 Nginx 服务的主配置文件,配置信息参考如下:

vim  /usr/local/nginx/conf/nginx.conf
Linux就该这么学 | 第20章 部署 LNMP 架构环境_第13张图片
/usr/local/nginx/conf/nginx.conf

Nginx 配置完成后,重启 Nginx 和 PHP服务。至此,整个 LNMP 架构环境就部署完成了。

systemctl  restart  nginx
systemctl  restart  php-fpm

三、搭建 Discuz! 论坛(测试 LNMP 架构环境)

1、实验目标

为了测试上述 LNMP 动态网站环境是否配置妥当,我们可以在其上面部署 Discuz!系统,然后查看结果。如果能够在 LNMP 动态网站环境中成功安装并使用 Discuz!论坛系统,则意味着这套 LNMP 架构环境的部署是成功的。

2、Discuz! 是什么?

Discuz! X3.2 是国内最常见的社区论坛系统,在经过十多年的研发后已经成为了全球成熟度最高、覆盖率最广的论坛网站系统之一。

3、部署 Discuz! 的程序代码

解压 Discuz! X3.2 软件包后,会在当前目录中出现一个名为 upload 的文件目录,这里面即保存着 Discuz!论坛的系统程序。

我们先把 Nginx 服务程序网站根目录的内容清空,然后把这个 upload 目录中的文件都复制进去,同时把 Nginx 服务程序的网站根目录的所有者和所属组修改为本地的 geekwww 用户,并为其赋予 755 权限以便于能够读、写、执行该论坛系统内的文件。

cd  /usr/local/src
wget  http://www.xxx.com/source/Discuz_X3.2_SC_GBK.zip

解压 .zip 压缩包:
unzip  Discuz_X3.2_SC_GBK.zip

清空 Nginx服务的网站根目录:
rm  -rf  /usr/local/nginx/html/{index.html, 50x.html}*

把 Discuz 程序代码复制到 Nginx 服务的网站根目录中去:
mv  upload/*   /usr/local/nginx/html/
chown  -Rf  geekwww:geekwww   /usr/local/nginx/html
chmod  -Rf  755   /usr/local/nginx/html

4、基于 LNMP 架构环境,开始安装并使用 Discuz! 系统

1)接受 Discuz!安装向导的许可协议。

Discuz! 系统部署完成后,在浏览器中刷新页面,即可跳转至 Discuz! 系统的安装界面,选择“我同意”安装。

Linux就该这么学 | 第20章 部署 LNMP 架构环境_第14张图片
接受 Discuz! X3.2 论坛系统的安装许可

2)检查 Discuz! X3.2 论坛系统的安装环境及目录权限。

3)选择“全新安装 Discuz! X(含 UCenter Server)”。

Linux就该这么学 | 第20章 部署 LNMP 架构环境_第15张图片
选择全新安装 Discuz!论坛及 UCenter Server

4)填写服务器的数据库信息与论坛系统管理员信息。

网站系统使用由服务器本地(localhost)提供的数据库服务,数据名称与数据表前缀可由用户自行填写,其中数据库的用户名和密码则为用于登录 MySQL 数据库的信息(以初始化 MySQL 服务程序时填写的信息为准)。

Linux就该这么学 | 第20章 部署 LNMP 架构环境_第16张图片
填写服务器的数据库信息与论坛系统管理员信息

5)Discuz!安装完成,查看其欢迎界面。此时,则验证了 LNMP 架构环境的部署是成功的。

Linux就该这么学 | 第20章 部署 LNMP 架构环境_第17张图片
成功安装 Discuz! X3.2 论坛系统后的欢迎界面

四、选购服务器主机

网站是由域名、网站源程序和主机共同组成的,其中,主机则是用于存放网页源代码并能够把网页内容展示给用户的服务器。

下面将介绍几点关于服务器主机选购的建议:

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

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

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

  • 独立服务器:这台服务器仅提供给用户一个人使用,其使用方式分为租用方式与托管方式。租用方式是用户将服务器的硬件配置要求告知 IDC 服务商,按照月、季、年为单位来租用它们的硬件设备。这些硬件设备由 IDC 服务商的机房负责维护,用户一般需要自行安装相应的软件并部署网站服务,这减轻了用户在硬件设备上的投入,适合大中型网站。托管方式则是用户需要自行购置服务器硬件设备,并将其交给 IDC 服务供应商进行管理(需要缴纳管理服务费)。用户对服务器硬件配置有完全的控制权,自主性强,但需要自行维护、修理服务器硬件设备,适合大中型网站。

本章复习题

Linux就该这么学 | 第20章 部署 LNMP 架构环境_第18张图片
复习题


END 2019-01-24

你可能感兴趣的:(Linux就该这么学 | 第20章 部署 LNMP 架构环境)