Linux應該這麼學第20章使用 LNMP 架構部署動態網站環境(centos7.4)

tjjingpan發表於2018-11-07

本章講解了如下內容:
➢ 原始碼包程式;
➢ LNMP 動態網站架構;
➢ 搭建 Discuz!論壇;
➢ 選購伺服器主機。
LNMP 動態網站部署架構是一套由 Linux + Nginx + MySQL + PHP 組成的動態網站系統
解決方案,具有免費、高效、擴充套件性強且資源消耗低等優良特性。本章首先對比了使用原始碼包
安裝服務程式與使用 RPM 軟體包安裝服務程式的區別,然後講解了如何手工編譯原始碼包並安
裝各個服務程式,以及如何使用 Discuz! X3.2 版本論壇系統驗證架構環境。
本章是本書的最後一章內容,劉遄老師不僅希望各位讀者在學完本書之後,能夠順利找到滿
意的高薪工作,也希望您能利用書中所學知識搭建自己的部落格或論壇系統,並以此為平臺,將自
己工作中積攢的 Linux 經驗以及技巧分享給更多人,為美好的開源世界貢獻自己的力量。

20.1 原始碼包程式

本書第 1 章中曾經講到,在 RPM(紅帽軟體包管理器)技術出現之前,Linux 系統運維
人員只能通過原始碼包的方式來安裝各種服務程式,這是一件非常繁瑣且極易消耗時間與耐心
的事情;而且在安裝、升級、解除安裝程式時還要考慮到與其他程式或函式庫的相互依賴關係,這
就要求運維人員不僅要掌握更多的 Linux 系統理論知識以及高超的實操技能,還需要有極好
的耐心才能安裝好一個原始碼軟體包。考慮到本書的讀者都是剛入門或準備入門的運維新人,
因為本書在前面的章節中一直都是採用 Yum 軟體倉庫的方式來安裝服務程式。但是,現在依
然有很多軟體程式只有原始碼包的形式,如果我們只會使用 Yum 軟體倉庫的方式來安裝程式,
則面對這些只有原始碼包的軟體程式時,將充滿無力感,要麼需要等到第三方組織將這些軟體
程式編寫成 RPM 軟體包之後再行使用,要麼就只能尋找相關軟體程式的替代品了(而且替代
軟體還必須具備 RPM 軟體包的形式)。由此可見,如果運維人員只會使用 Yum 軟體倉庫來安
裝服務程式,將會形成知識短板,對日後的運維工作帶來不利。
本著不能讓自己的讀者在運維工作中吃虧的想法,劉遄老師接下來會詳細講解如何使用
原始碼包的方式來安裝服務程式。
其實,使用原始碼包來安裝服務程式具有兩個優勢。
➢ 原始碼包的可移植性非常好,幾乎可以在任何 Linux 系統中安裝使用,而 RPM 軟體包
是針對特定系統和架構編寫的指令集,必須嚴格地符合執行環境才能順利安裝(即只
會去“生硬地”安裝服務程式)。
➢ 使用原始碼包安裝服務程式時會有一個編譯過程,因此可以更好地適應安裝主機的系統
環境,執行效率和優化程度都會強於使用 RPM 軟體包安裝的服務程式。也就是說,
可以將採用原始碼包安裝服務程式的方式看作是針對系統的“量體裁衣”。
一般來講,在安裝軟體時,如果能通過 Yum 軟體倉庫來安裝,就用 Yum 方式;反之則
去尋找合適的 RPM 軟體包來安裝;如果是在沒有資源可用,那就只能使用原始碼包來安裝了。
使用原始碼包安裝服務程式的過程看似複雜,其實在歸納彙總後只需要 4~5 個步驟即可完
成安裝。劉遄老師接下來會對每一個步驟進行詳解。

第一步:下載及解壓原始碼包檔案。為了方便在網路中傳輸,原始碼包檔案通常會在歸檔後使用
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 軟體包。
劉遄老師會在本書的進階篇中講到,其實 RPM 軟體包就是把軟體的原始碼包和一個針對特定系
統、架構、環境編寫的安裝規定打包成一起的指令集,因此為了讓使用者都能使用這個軟體包
來安裝程式,通常一個軟體程式會發布多種格式的 RPM 軟體包(例如 i386、x86_64 等架構)
來讓使用者選擇。而原始碼包的軟體作者肯定希望自己的軟體能夠被安裝到更多的系統上面,能
夠被更多的使用者所瞭解、使用,因此便會在編譯階段(configure)來檢查使用者當前系統的情況,
然後制定出一份可行的安裝方案,所以會佔用很多的系統資源,需要更長的等待時間。

20.2 LNMP 動態網站架構

linux:CentOS Linux release 7.4.1708 (Core)

nginx:1.6.0

mysql:5.6.19

php:5.5.14

LNMP 動態網站部署架構是一套由 Linux + Nginx + MySQL + PHP 組成的動態網站系統
解決方案(其 logo 見圖 20-1)。LNMP 中的字母 L 是 Linux 系統的意思,不僅可以是 RHEL、
CentOS、Fedora,還可以是 Debian、Ubuntu 等系統。本書的配套站點 https://www.linuxprobe.com
就是基於 LNMP 部署出來的,目前的執行一直很穩定,訪問速度也很快。

第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã

圖20-2 Nginx與Apache著名LOGO

在使用原始碼包安裝服務程式之前,首先要讓安裝主機具備編譯程式原始碼的環境,他需要
具備 C 語言、C++語言、Perl 語言的編譯器,以及各種常見的編譯支援函式庫程式。因此請先
配置妥當 Yum 軟體倉庫,然後把下面列出的這些軟體包都統統安裝上: 

yum install  apr* autoconf automake bison bzip2 bzip2* compat* cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetypedevel gcc gcc-c++ gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng-devel libjpeg* libsepoldevel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* 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

劉遄老師已經把安裝 LNMP 動態網站部署架構所需的 16 個軟體原始碼包和 1 個用於檢查
效果的論壇網站系統軟體包上傳到與本書配套的站點伺服器上。大家可以在 Windows 系統中
下載後通過 ssh 服務傳送到打算部署 LNMP 動態網站架構的 Linux 伺服器中,也可以直接在
Linux 伺服器中使用 wget 命令下載這些原始碼包檔案。根據第 6 章講解的 FHS 協議,建議把要
安裝的軟體包存放在/usr/local/src 目錄中:

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

本書在第 18 章講解過 MySQL 和 MariaDB 資料庫管理系統之間的因緣和特性,也狠狠
地誇獎了 MariaDB 資料庫,但是 MySQL 資料庫當前依然是生產環境中最常使用的關係型數
據庫管理系統之一,坐擁極大的市場份額,並且已經通過十幾年不斷的發展向業界證明了自
身的穩定性和安全性。另外,雖然第 18 章已經講解了基本的資料庫管理知識,但是為了進一
步幫助大家夯實基礎,本章依然在這裡整合了 MySQL 資料庫內容,使大家在溫故的同時可以
知新。
在使用 Yum 軟體倉庫安裝服務程式時,系統會自動根據 RPM 軟體包中的指令集完整軟
件配置等工作。但是一旦選擇使用原始碼包的方式來安裝,這一切就需要自己來完成了。針對
MySQL 資料庫來講,我們需要在系統中建立一個名為 mysql 的使用者,專門用於負責執行
MySQL 資料庫。請記得要把這類賬戶的 Bash 終端設定成 nologin 直譯器,避免黑客通過該用
戶登入到伺服器中,從而提高系統安全性。

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

建立一個用於儲存 MySQL 資料庫程式和資料庫檔案的目錄,並把該目錄的所有者和所
屬組身份修改為 mysql。其中,/usr/local/mysql 是用於儲存 MySQL 資料庫服務程式的目錄,
/usr/local/mysql/var 則是用於儲存真實資料庫檔案的目錄。

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

接下來解壓、編譯、安裝 MySQL 資料庫服務程式。在編譯資料庫時使用的是 cmake 命
令,其中,-DCMAKE_INSTALL_PREFIX 引數用於定義資料庫服務程式的儲存目錄,-
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 目錄中,以便通過 service 命令來管理 MySQL 資料庫服務程式。
記得把資料庫指令碼檔案的許可權修改成 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@localhost mysql]# vi /etc/rc.d/init.d/mysqld
      1 #!/bin/sh
      2 # Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
      3 # This file is public domain and comes with NO WARRANTY of any kind
      4 
      5 # MySQL daemon start/stop script.
      6 
      7 # Usually this is put in /etc/init.d (at least on machines SYSV R4 based
      8 # systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.
      9 # When this is done the mysql server will be started when the machine is
     10 # started and shut down when the systems goes down.
     11 
     12 # Comments to support chkconfig on RedHat Linux
     13 # chkconfig: 2345 64 36
     14 # description: A very fast and reliable SQL database engine.
     15 
     16 # Comments to support LSB init script conventions
     17 ### BEGIN INIT INFO
     18 # Provides: mysql
     19 # Required-Start: $local_fs $network $remote_fs
     20 # Should-Start: ypbind nscd ldap ntpd xntpd
     21 # Required-Stop: $local_fs $network $remote_fs
     22 # Default-Start:  2 3 4 5
     23 # Default-Stop: 0 1 6
     24 # Short-Description: start and stop MySQL
     25 # Description: MySQL is a very fast and reliable SQL database engine.
     26 ### END INIT INFO
     27 
     28 # If you install MySQL on some other places than /usr/local/mysql, then you
     29 # have to do one of the following things for this script to work:
     30 #
     31 # - Run this script from within the MySQL installation directory
     32 # - Create a /etc/my.cnf file with the following information:
     33 #   [mysqld]
     34 #   basedir=<path-to-mysql-installation-directory>
     35 # - Add the above to any other configuration file (for example ~/.my.ini)
     36 #   and copy my_print_defaults to /usr/bin
     37 # - Add the path to the mysql-installation-directory to the basedir variable
     38 #   below.
     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 
     49 # Default value, in seconds, afterwhich the script should timeout waiting
"/etc/rc.d/init.d/mysqld" 390L, 10915C written

配置好指令碼檔案後便可以用 service 命令啟動 mysqld 資料庫服務了。mysqld 是 MySQL
資料庫程式的服務名稱,注意不要寫錯。順帶再使用 chkconfig 命令把 mysqld 服務程式加入
到開機啟動項中。

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

MySQL 資料庫程式自帶了許多命令,但是 Bash 終端的 PATH 變數並不會包含這些命令
所存放的目錄,因此我們也無法順利地對 MySQL 資料庫進行初始化,也就不能使用 MySQL
資料庫自帶的命令了。想要把命令所儲存的目錄永久性地定義到 PATH 變數中,需要編輯
/etc/profile 檔案並寫入追加的命令目錄,這樣當物理裝置在下一次重啟時就會永久生效了。如
果不想通過重啟裝置的方式來生效,也可以使用 source 命令載入一下/ect/profile 檔案,此時新
的 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@localhost 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: 
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
 ... 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
 - 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 服務程式的穩定性源自於採用了分階段的資源分配技術,降低了 CPU 與記憶體的佔
用率,所以使用 Nginx 程式部署的動態網站環境不僅十分穩定、高效,而且消耗的系統資源也
很少。此外,Nginx 具備的模組數量與 Apache 具備的模組數量幾乎相同,而且現在已經完全支
持 proxy、rewrite、mod_fcgi、ssl、vhosts 等常用模組。更重要的是,Nginx 還支援熱部署技術,
可以 7×24 不間斷提供服務,還可以在不暫停服務的情況下直接對 Nginx 服務程式進行升級。
坦白來講,雖然 Nginx 程式的程式碼質量非常高,程式碼很規範,技術成熟,模組擴充套件也很
容易,但依然存在不少問題,比如是由俄羅斯人開發的,所以在資料文件方面還並不完善,中
文資料的質量更是魚龍混雜。但是 Nginx 服務程式在近年來增長勢頭迅猛,相信會在輕量級
Web 伺服器市場具有不錯的未來。
在正式安裝 Nginx 服務程式之前,我們還需要為其解決相關的軟體依賴關係,例如用於提
供 Perl 語言相容的正規表示式庫的軟體包 pcre,就是 Nginx 服務程式用於實現偽靜態功能必不
可少的依賴包。下面來解壓、編譯、生成、安裝 Nginx 服務程式的原始碼檔案:

[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@localhost src]# useradd www -s /sbin/nologin

在使用命令編譯 Nginx 服務程式時,需要設定特別多的引數,其中,--prefix 引數用於定
義服務程式稍後安裝到的位置,--user 與--group 引數用於指定執行 Nginx 服務程式的使用者名稱
和使用者組。在使用引數呼叫 openssl、zlib、pcre 軟體包時,請寫出軟體原始碼包的解壓路徑,而
不是程式的安裝路徑:

./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

要想啟動 Nginx 服務程式以及將其加入到開機啟動項中,也需要有指令碼檔案。可惜的是,
在安裝完 Nginx 軟體包之後預設並沒有為使用者提供指令碼檔案,因此劉遄老師給各位讀者準備
了一份可用的啟動指令碼檔案,大家只需在/etc/rc.d/init.d 目錄中建立指令碼檔案並直接複製下面
的指令碼內容即可(相信各位讀者在掌握了第 4 章的內容之後,應該可以順利看懂這個指令碼文
件)。

#!/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 引數重啟 Nginx 服務程式,最後再使用 chkconfig 命令將 Nginx
服務程式新增至開機啟動項中。大功告成!

[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-
2 所示。

圖 20-2 Nginx 服務程式的預設頁面

 20.2.3 配置 PHP 服務

PHP(Hypertxt Preprocessor,超文字前處理器)是一種通用的開源指令碼語言,發明於 1995
年,它吸取了 C 語言、Java 語言及 Perl 語言的很多優點,具有開源、免費、快捷、跨平臺性
強、效率高等優良特性,是目前 Web 開發領域最常用的語言之一。本書的配套站點就是基於
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 --enableshared
[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 目錄中,以便系統能夠順利調取到函式檔案:

此時終於把編譯php服務原始碼包的相關軟體包都已經安裝部署妥當了。在開始編譯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服務程式目錄中相應的配置檔案複製過來:

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 
………………省略部分輸出資訊………………

配置妥當後便可把用於管理php服務的指令碼檔案複製到/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命令),則會降低網站被入侵的難度,入侵人員甚至可以拿到整臺Web伺服器的管理許可權。因此我們需要編輯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服務。

[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

至此,LNMP動態網站環境架構的配置實驗全部結束。

Nginx訪問PHP檔案的File not found錯誤處理,兩種情況

這個錯誤很常見,原有有下面兩種幾種

php-fpm找不到SCRIPT_FILENAME裡執行的php檔案

php-fpm不能訪問所執行的php,也就是許可權問題

第一種情況
更改配置檔案nginx.conf 
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 
替換成下面

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

然後重新載入nginx配置檔案 
/etc/init.d/nginx reload

第二種情況
兩種解決方法: 
第一種,就是把你root資料夾設為其他使用者允許 
第二種,找到你的php-fpm的配置檔案,找到下面這段,把apache替換成你要的使用者組

; RPM: apache Choosed to be able to access some dir as httpd 
user = www
; RPM: Keep a group allowed to write in log dir. 
group = www

為了檢驗LNMP動態網站環境是否配置妥當,可以使用在上面部署Discuz!系統,然後檢視結果。如果能夠在LNMP動態網站環境中成功安裝使用Discuz!論壇系統,也就意味著這套架構是可用的。Discuz! X3.2是國內最常見的社群論壇系統,在經過十多年的研發後已經成為了全球成熟度最高、覆蓋率最廣的論壇網站系統之一。

Discuz! X3.2軟體包的字尾是.zip格式,因此應當使用專用的unzip命令來進行解壓。解壓後會在當前目錄中出現一個名為upload的檔案目錄,這裡面儲存的就是Discuz!論壇的系統程式。我們把Nginx服務程式網站根目錄的內容清空後,就可以把這些這個目錄中的檔案都複製進去了。記得把Nginx服務程式的網站根目錄的所有者和所屬組修改為本地的www使用者(已在20.2.2小節建立),併為其賦予755許可權以便於能夠讀、寫、執行該論壇系統內的檔案。

第1步:接受Discuz!安裝嚮導的許可協議。在把Discuz!論壇系統程式(即剛才upload目錄中的內容)複製Nginx服務網站根目錄後便可重新整理瀏覽器頁面,這將自動跳轉到Discuz! X3.2論壇系統的安裝介面,此處需單擊“我同意”按鈕,進入下一步的安裝過程中,如圖20-4所示。

第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã

圖20-4  接受Discuz! X3.2論壇系統的安裝許可 

第2步:檢查Discuz! X3.2論壇系統的安裝環境及目錄許可權。我們部署的LNMP動態網站環境版本和軟體都與Discuz!論壇的要求相符合,如果圖20-5框中的目錄狀態為不可寫,請自行檢查目錄的所有者和所屬組是否為www使用者,以及是否對目錄設定了755許可權,然後單擊“下一步”按鈕。 

第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã

圖20-5  檢查Discuz! X3.2論壇系統的安裝環境及目錄許可權

第3步:選擇“全新安裝Discuz! X(含UCenter Server)”。UCenter Server是站點的管理平臺,能夠在多個站點之間同步會員賬戶及密碼資訊,單擊“下一步”按鈕,如圖20-6所示。

第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã 圖20-6  選擇全新安裝Discuz!論壇及UCenter Server

第4步:填寫伺服器的資料庫資訊與論壇系統管理員資訊。網站系統使用由伺服器本地(localhost)提供的資料庫服務,資料名稱與資料表字首可由使用者自行填寫,其中資料庫的使用者名稱和密碼則為用於登入MySQL資料庫的資訊(以初始化MySQL服務程式時填寫的資訊為準)。論壇系統的管理員賬戶為今後登入、管理Discuz!論壇時使用的驗證資訊,其中賬戶可以設定得簡單好記一些,但是要將密碼設定得儘可能複雜一下。在資訊填寫正確後單擊“下一步”按鈕,如圖20-7所示。

第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã

圖20-7  填寫伺服器的資料庫資訊與論壇系統管理員資訊

 第5步:等待Discuz! X3.2論壇系統安裝完畢,如圖20-8所示。這個安裝過程是非常快速的,大概只需要30秒左右,然後就可看到論壇安裝完成的歡迎介面了。由於虛擬機器主機可能並沒有連線到網際網路,因此該介面中可能無法正常顯示Discuz!論壇系統的廣告資訊。在接入了網際網路的伺服器上成功安裝完Discuz! X3.2論壇系統之後,其介面如圖20-9所示。隨後單擊“您的論壇已完成安裝,點此訪問”按鈕,即可訪問到論壇首頁,如圖20-10所示。

第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã

圖20-8  等待Discuz! X3.2論壇系統安裝完畢

第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã 圖20-9  成功安裝Discuz! X3.2論壇系統後的歡迎介面

第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã第20ç«  使ç¨LNMPæ¶æé¨ç½²å¨æç½ç«ç¯å¢ã

圖20-10  Discuz! X3.2論壇系統的首頁介面

 

20.4 選購伺服器主機

我們日常訪問的網站是由域名、網站源程式和主機共同組成的,其中,主機則是用於存放網頁原始碼並能夠把網頁內容展示給使用者的伺服器。在本書即將結束之際,劉遄老師再囉嗦幾句有關伺服器主機的知識以及選購技巧,這些技巧都是在近幾年做網站時總結出來的,希望能對大家有所幫助。

虛擬主機:在一臺伺服器中劃分一定的磁碟空間供使用者放置網站資訊、存放資料等;僅提供基礎的網站訪問、資料存放與傳輸功能;能夠極大地降低使用者費用,也幾乎不需要使用者來維護網站以外的服務;適合小型網站。

VPS(Virtual Private Server,虛擬專用伺服器):在一臺伺服器中利用OpenVZ、Xen或KVM等虛擬化技術模擬出多臺“主機”(即VPS),每個主機都有獨立的IP地址、作業系統;不同VPS之間的磁碟空間、記憶體、CPU、程式與系統配置完全隔離,使用者可自由使用分配到的主機中的所有資源,為此需要具備一定的維護系統的能力;適合小型網站。

ECS(Elastic Compute Service,雲伺服器):是一種整合了計算、儲存、網路,能夠做到彈性伸縮的計算服務;使用起來與VPS幾乎一樣,差別是雲伺服器是建立在一組叢集伺服器中,每個伺服器都會儲存一個主機的映象(備份),從而大大提升了安全性和穩定性;另外還具備靈活性與擴充套件性;使用者只需按使用量付費即可;適合大中小型網站。

獨立伺服器:這臺伺服器僅提供給使用者一個人使用,其使用方式分為租用方式與託管方式。租用方式是使用者將伺服器的硬體配置要求告知IDC服務商,按照月、季、年為單位來租用它們的硬體裝置。這些硬體裝置由IDC服務商的機房負責維護,使用者一般需要自行安裝相應的軟體並部署網站服務,這減輕了使用者在硬體裝置上的投入,適合大中型網站。託管方式則是使用者需要自行購置伺服器硬體裝置,並將其交給IDC服務供應商進行管理(需要繳納管理服務費)。使用者對伺服器硬體配置有完全的控制權,自主性強,但需要自行維護、修理伺服器硬體裝置,適合大中型網站。

另外需要提醒讀者的是,在選擇伺服器主機供應商時請一定要注意檢視口碑,並在綜合分析後再決定購買。某些供應商會有限制功能、強制新增廣告、隱藏扣費或強制扣費等惡劣行為,請各位讀者一定擦亮眼睛,不要上當!

相關文章