Linux就該這么學》最新正式版已出版上市,同學們可在線上京東網當當網淘寶網亞馬遜等電商平臺購買。

*亦可就近在新華書店購買*

章節概述:

LNMP動態網站部署架構是一套由Linux + Nginx + MySQL + PHP組成的動態網站系統解決方案,具有免費、高效、擴展性強且資源消耗低等優良特性。本章首先對比了使用源碼包安裝服務程序與使用RPM軟件包安裝服務程序的區別,然后講解了如何手工編譯源碼包并安裝各個服務程序,以及如何使用Discuz! X3.2版本論壇系統驗證架構環境。

本章是本書的最后一章內容,劉遄老師不僅希望各位讀者在學完本書之后,能夠順利找到滿意的高薪工作,也希望您能利用書中所學知識搭建自己的博客或論壇系統,并以此為平臺,將自己工作中積攢的Linux經驗以及技巧分享給更多人,為美好的開源世界貢獻自己的力量。See you later!

20.1 源碼包程序

本書第1章中曾經講到,在RPM(紅帽軟件包管理器)技術出現之前,Linux系統運維人員只能通過源碼包的方式來安裝各種服務程序,這是一件非常繁瑣且極易消耗時間與耐心的事情;而且在安裝、升級、卸載程序時還要考慮到與其他程序或函數庫的相互依賴關系,這就要求運維人員不僅要掌握更多的Linux系統理論知識以及高超的實操技能,還需要有極好的耐心才能安裝好一個源碼軟件包。考慮到本書的讀者都是剛入門或準備入門的運維新人,因為本書在前面的章節中一直都是采用Yum軟件倉庫的方式來安裝服務程序。但是,現在依然有很多軟件程序只有源碼包的形式,如果我們只會使用Yum軟件倉庫的方式來安裝程序,則面對這些只有源碼包的軟件程序時,將充滿無力感,要么需要等到第三方組織將這些軟件程序編寫成RPM軟件包之后再行使用,要么就只能尋找相關軟件程序的替代品了(而且替代軟件還必須具備RPM軟件包的形式)。由此可見,如果運維人員只會使用Yum軟件倉庫來安裝服務程序,將會形成知識短板,對日后的運維工作帶來不利。

本著不能讓自己的讀者在運維工作中吃虧的想法,劉遄老師接下來會詳細講解如何使用源碼包的方式來安裝服務程序。

其實,使用源碼包來安裝服務程序具有兩個優勢。

源碼包的可移植性非常好,幾乎可以在任何Linux系統中安裝使用,而RPM軟件包是針對特定系統和架構編寫的指令集,必須嚴格地符合執行環境才能順利安裝(即只會去“生硬地”安裝服務程序)。

使用源碼包安裝服務程序時會有一個編譯過程,因此可以更好地適應安裝主機的系統環境,運行效率和優化程度都會強于使用RPM軟件包安裝的服務程序。也就是說,可以將采用源碼包安裝服務程序的方式看作是針對系統的“量體裁衣”。

一般來講,在安裝軟件時,如果能通過Yum軟件倉庫來安裝,就用Yum方式;反之則去尋找合適的RPM軟件包來安裝;如果是在沒有資源可用,那就只能使用源碼包來安裝了。

使用源碼包安裝服務程序的過程看似復雜,其實在歸納匯總后只需要4~5個步驟即可完成安裝。劉遄老師接下來會對每一個步驟進行詳解。

需要提前說明的是,在使用源碼包安裝程序時,會輸出大量的過程信息,這些信息的意義并不大,因此本章會省略這部分輸出信息而不作特殊備注,請大家在具體操作時以實際為準。

第1步:下載及解壓源碼包文件。為了方便在網絡中傳輸,源碼包文件通常會在歸檔后使用gzip或bzip2等格式進行壓縮,因此一般會具有.tar.gz與.tar.bz2的后綴。要想使用源碼包安裝服務程序,必須先把里面的內容解壓出來,然后再切換到源碼包文件的目錄中:

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

[[email protected] ~]# cd?FileDirectory

第2步:編譯源碼包代碼。在正式使用源碼包安裝服務程序之前,還需要使用編譯腳本針對當前系統進行一系列的評估工作,包括對源碼包文件、軟件之間及函數庫之間的依賴關系、編譯器、匯編器及連接器進行檢查。我們還可以根據需要來追加--prefix參數,以指定稍后源碼包程序的安裝路徑,從而對服務程序的安裝過程更加可控。當編譯工作結束后,如果系統環境符合安裝要求,一般會自動在當前目錄下生成一個Makefile安裝文件。

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

第3步:生成二進制安裝程序。剛剛生成的Makefile文件中會保存有關系統環境、軟件依賴關系和安裝規則等內容,接下來便可以使用make命令來根據Makefile文件內容提供的合適規則編譯生成出真正可供用戶安裝服務程序的二進制可執行文件了。

[[email protected] ~]# make

第4步:運行二進制的服務程序安裝包。由于不需要再檢查系統環境,也不需要再編譯代碼,因此運行二進制的服務程序安裝包應該是速度最快的步驟。如果在源碼包編譯階段使用了--prefix參數,那么此時服務程序就會被安裝到那個目錄,如果沒有自行使用參數定義目錄的話,一般會被默認安裝到/usr/local/bin目錄中。

[[email protected] ~]# make install

第5步:清理源碼包臨時文件。由于在安裝服務程序的過程中進行了代碼編譯的工作,因此在安裝后目錄中會遺留下很多臨時垃圾文件,本著盡量不要浪費磁盤存儲空間的原則,可以使用make clean命令對臨時文件進行徹底的清理工作。

[[email protected] ~]# make clean

估計有讀者會有疑問,為什么通常是安裝一個服務程序,源碼包的編譯工作(configure)與生成二進制文件的工作(make)會使用這么長的時間,而采用RPM軟件包安裝就特別有效率呢?其實原因很簡單,在RHCA認證的RH401考試中,會要求考生寫一個RPM軟件包。劉遄老師會在本書的進階篇中講到,其實RPM軟件包就是把軟件的源碼包和一個針對特定系統、架構、環境編寫的安裝規定打包成一起的指令集,因此為了讓用戶都能使用這個軟件包來安裝程序,通常一個軟件程序會發布多種格式的RPM軟件包(例如i386、x86_64等架構)來讓用戶選擇。而源碼包的軟件作者肯定希望自己的軟件能夠被安裝到更多的系統上面,能夠被更多的用戶所了解、使用,因此便會在編譯階段(configure)來檢查用戶當前系統的情況,然后制定出一份可行的安裝方案,所以會占用很多的系統資源,需要更長的等待時間。

出現問題?大膽提問!

因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~

Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群

*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。

20.2 LNMP動態網站架構

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

lnmp架構圖片

圖20-1? LNMP動態網站部署架構的Logo

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

[[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
………………省略部分安裝過程………………
Complete!

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

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

CMake是Linux系統中一款常用的編譯工具。要想通過源碼包安裝服務程序,就一定要嚴格遵守上面總結的安裝步驟—下載及解壓源碼包文件、編譯源碼包代碼、生成二進制安裝程序、運行二進制的服務程序安裝包。接下來在解壓、編譯各個軟件包源碼程序時,都會生成大量的輸出信息,下文中將其省略,請讀者以實際操作為準。

[[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服務

本書在第18章講解過MySQL和MariaDB數據庫管理系統之間的因緣和特性,也狠狠地夸獎了MariaDB數據庫,但是MySQL數據庫當前依然是生產環境中最常使用的關系型數據庫管理系統之一,坐擁極大的市場份額,并且已經通過十幾年不斷的發展向業界證明了自身的穩定性和安全性。另外,雖然第18章已經講解了基本的數據庫管理知識,但是為了進一步幫助大家夯實基礎,本章依然在這里整合了MySQL數據庫內容,使大家在溫故的同時可以知新。

在使用Yum軟件倉庫安裝服務程序時,系統會自動根據RPM軟件包中的指令集完整軟件配置等工作。但是一旦選擇使用源碼包的方式來安裝,這一切就需要自己來完成了。針對MySQL數據庫來講,我們需要在系統中創建一個名為mysql的用戶,專門用于負責運行MySQL數據庫。請記得要把這類賬戶的Bash終端設置成nologin解釋器,避免黑客通過該用戶登錄到服務器中,從而提高系統安全性。

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

創建一個用于保存MySQL數據庫程序和數據庫文件的目錄,并把該目錄的所有者和所屬組身份修改為mysql。其中,/usr/local/mysql是用于保存MySQL數據庫服務程序的目錄,/usr/local/mysql/var則是用于保存真實數據庫文件的目錄。

[[email protected] src]# mkdir -p /usr/local/mysql/var
[[email protected] 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服務配置文件。

[[email protected] mysql-5.6.19]# rm -rf /etc/my.cnf
[[email protected] mysql-5.6.19]# cd /usr/local/mysql
[[email protected] 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以便于讓用戶有執行該腳本的權限:

[[email protected] mysql]# ln -s my.cnf /etc/my.cnf 
[[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

編輯剛復制的MySQL數據庫腳本文件,把第46、47行的basedir與datadir參數分別修改為MySQL數據庫程序的保存目錄和真實數據庫的文件內容。

[[email protected] 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服務程序加入到開機啟動項中。

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

MySQL數據庫程序自帶了許多命令,但是Bash終端的PATH變量并不會包含這些命令所存放的目錄,因此我們也無法順利地對MySQL數據庫進行初始化,也就不能使用MySQL數據庫自帶的命令了。想要把命令所保存的目錄永久性地定義到PATH變量中,需要編輯/etc/profile文件并寫入追加的命令目錄,這樣當物理設備在下一次重啟時就會永久生效了。如果不想通過重啟設備的方式來生效,也可以使用source命令加載一下/ect/profile文件,此時新的PATH變量也可以立即生效了。

[[email protected] 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
[[email protected] mysql]# source /etc/profile

MySQL數據庫服務程序還會調用到一些程序文件和函數庫文件。由于當前是通過源碼包方式安裝MySQL數據庫,因此現在也必須以手動方式把這些文件鏈接過來。

[[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 /tmp/mysql.sock /var/lib/mysql/mysql.sock
[[email protected] mysql]# ln -s /usr/local/mysql/include/mysql /usr/include/mysql

現在,MySQL數據庫服務程序已經啟動,調用的各個函數文件已經就位,PATH環境變量中也加入了MySQL數據庫命令的所在目錄。接下來準備對MySQL數據庫進行初始化,這個初始化的配置過程與MariaDB數據庫是一樣的,只是最后變成了Thanks for using MySQL!

[[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?(要為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是一款相當優秀的用于部署動態網站的輕量級服務程序,它最初是為俄羅斯門戶站點而開發的,因其穩定性、功能豐富、占用內存少且并發能力強而備受用戶的信賴。目前國內諸如新浪、網易、騰訊等門戶站點均已使用了此服務。

Nginx服務程序的穩定性源自于采用了分階段的資源分配技術,降低了CPU與內存的占用率,所以使用Nginx程序部署的動態網站環境不僅十分穩定、高效,而且消耗的系統資源也很少。此外,Nginx具備的模塊數量與Apache具備的模塊數量幾乎相同,而且現在已經完全支持proxy、rewrite、mod_fcgi、ssl、vhosts等常用模塊。更重要的是,Nginx還支持熱部署技術,可以7×24不間斷提供服務,還可以在不暫停服務的情況下直接對Nginx服務程序進行升級。

Nginx與Apache

圖20-2 Nginx與Apache著名LOGO

坦白來講,雖然Nginx程序的代碼質量非常高,代碼很規范,技術成熟,模塊擴展也很容易,但依然存在不少問題,比如是由俄羅斯人開發的,所以在資料文檔方面還并不完善,中文資料的質量更是魚龍混雜。但是Nginx服務程序在近年來增長勢頭迅猛,相信會在輕量級Web服務器市場具有不錯的未來。

在正式安裝Nginx服務程序之前,我們還需要為其解決相關的軟件依賴關系,例如用于提供Perl語言兼容的正則表達式庫的軟件包pcre,就是Nginx服務程序用于實現偽靜態功能必不可少的依賴包。下面來解壓、編譯、生成、安裝Nginx服務程序的源碼文件:

[[email protected] ~]# cd /usr/local/src
[[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]# 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軟件包安裝后默認會在/usr/local/openssl/bin目錄中提供很多的可用命令,我們需要像前面的操作那樣,將這個目錄添加到PATH環境變量中,并寫入到配置文件中,最后執行source命令以便讓新的PATH環境變量內容可以立即生效:

[[email protected] 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
[[email protected] pcre-8.35]# source /etc/profile

zlib軟件包是用于提供壓縮功能的函數庫文件。其實Nginx服務程序調用的這些服務程序無需深入了解,只要大致了解其作用就已經足夠了:

[[email protected] pcre-8.35]# cd /usr/local/src
[[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服務程序時,需要設置特別多的參數,其中,--prefix參數用于定義服務程序稍后安裝到的位置,--user與--group參數用于指定執行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服務程序以及將其加入到開機啟動項中,也需要有腳本文件。可惜的是,在安裝完Nginx軟件包之后默認并沒有為用戶提供腳本文件,因此劉遄老師給各位讀者準備了一份可用的啟動腳本文件,大家只需在/etc/rc.d/init.d目錄中創建腳本文件并直接復制下面的腳本內容即可(相信各位讀者在掌握了第4章的內容之后,應該可以順利看懂這個腳本文件)。

[[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

保存腳本文件后記得為其賦予755權限,以便能夠執行這個腳本。然后以絕對路徑的方式執行這個腳本,通過restart參數重啟Nginx服務程序,最后再使用chkconfig命令將Nginx服務程序添加至開機啟動項中。大功告成!

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

Nginx服務程序在啟動后就可以在瀏覽器中輸入服務器的IP地址來查看到默認網頁了。相較于Apache服務程序的紅色默認頁面,Nginx服務程序的默認頁面顯得更加簡潔,如圖20-2所示。

嘗試訪問網頁

圖20-3 ?Nginx服務程序的默認頁面

20.2.3 配置php服務

PHP(Hypertxt Preprocessor,超文本預處理器)是一種通用的開源腳本語言,發明于1995年,它吸取了C語言、Java語言及Perl語言的很多優點,具有開源、免費、快捷、跨平臺性強、效率高等優良特性,是目前Web開發領域最常用的語言之一。本書的配套站點就是基于PHP語言編寫的。

使用源碼包的方式編譯安裝PHP語言環境其實并不復雜,難點在于解決PHP的程序包和其他軟件的依賴關系。為此需要先安裝部署將近十個用于搭建網站頁面的軟件程序包,然后才能正式安裝PHP程序。

yasm源碼包是一款常見的開源匯編器,其解壓、編譯、安裝過程中生成的輸出信息均已省略:

[[email protected] nginx-1.6.0]# cd ..
[[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 ..
[[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源碼包是用于提供視頻編碼器的服務程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略。相信會有很多粗心的讀者順手使用了tar命令的xzvf參數,但如果仔細觀察就會發現libvpx源碼包的后綴是.tar.bz2,即表示使用bzip2格式進行的壓縮,因此正確的解壓參數應該是xjvf:

[[email protected] libmcrypt-2.5.8]# cd ..
[[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 ..
[[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 ..
[[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 ..
[[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 ..
[[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源碼包是用于提供圖形處理的服務程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略。在編譯libgd源碼包時,請記得寫入的是jpeg、libpng、freetype、tiff、libvpx等服務程序在系統中的安裝路徑,即在上面安裝過程中使用--prefix參數指定的目錄路徑:

[[email protected] jpeg-9a]# cd ..
[[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源碼包是用于提供圖片生成函數庫的服務程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略。安裝后把/usr/lib64目錄中的函數文件鏈接到/usr/lib目錄中,以便系統能夠順利調取到函數文件:

[[email protected] cd libgd-2.1.0]# cd ..
[[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]# ln -s /usr/lib64/libltdl.so /usr/lib/libltdl.so 
[[email protected] t1lib-5.1.2]# cp -frp /usr/lib64/libXpm.so* /usr/lib/

此時終于把編譯php服務源碼包的相關軟件包都已經安裝部署妥當了。在開始編譯php源碼包之前,先定義一個名為LD_LIBRARY_PATH的全局環境變量,該環境變量的作用是幫助系統找到指定的動態鏈接庫文件,這些文件是編譯php服務源碼包的必須元素之一。編譯php服務源碼包時,除了定義要安裝到的目錄以外,還需要依次定義配置php服務程序配置文件的保存目錄、MySQL數據庫服務程序所在目錄、MySQL數據庫服務程序配置文件所在目錄,以及libpng、jpeg、freetype、libvpx、zlib、t1lib等服務程序的安裝目錄路徑,并通過參數啟動php服務程序的諸多默認功能:

[[email protected] t1lib-5.1.2]# cd ..
[[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源碼包程序安裝完成后,需要刪除當前默認的配置文件,然后將php服務程序目錄中相應的配置文件復制過來:

[[email protected] php-5.5.14]# rm -rf /etc/php.ini
[[email protected] php-5.5.14]# ln -s /usr/local/php/etc/php.ini /etc/php.ini
[[email protected] php-5.5.14]# cp php.ini-production /usr/local/php/etc/php.ini
[[email protected] php-5.5.14]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[[email protected] 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賬戶和用戶組名稱:

[[email protected] 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服務程序加入到開機啟動項中:

[[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 755 /etc/rc.d/init.d/php-fpm
[[email protected] php-5.5.14]# chkconfig php-fpm on

由于php服務程序的配置參數直接會影響到Web服務服務的運行環境,因此,如果默認開啟了一些不必要且高危的功能(如允許用戶在網頁中執行Linux命令),則會降低網站被入侵的難度,入侵人員甚至可以拿到整臺Web服務器的管理權限。因此我們需要編輯php.ini配置文件,在305行的disable_functions參數后面追加上要禁止的功能。下面的禁用功能名單是劉遄老師依據網站運行的經驗而定制的,不見得適合每個生產環境,建議大家在此基礎上根據自身工作需求酌情刪減:

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

[[email protected] 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 
………………省略部分輸出信息………………
[[email protected] php-5.5.14]# systemctl restart nginx
[[email protected] php-5.5.14]# systemctl restart php-fpm

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

20.3 搭建Discuz論壇

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

Discuz! X3.2軟件包的后綴是.zip格式,因此應當使用專用的unzip命令來進行解壓。解壓后會在當前目錄中出現一個名為upload的文件目錄,這里面保存的就是Discuz!論壇的系統程序。我們把Nginx服務程序網站根目錄的內容清空后,就可以把這些這個目錄中的文件都復制進去了。記得把Nginx服務程序的網站根目錄的所有者和所屬組修改為本地的www用戶(已在20.2.2小節創建),并為其賦予755權限以便于能夠讀、寫、執行該論壇系統內的文件。

[[email protected] php-5.5.14 ]# 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步:接受Discuz!安裝向導的許可協議。在把Discuz!論壇系統程序(即剛才upload目錄中的內容)復制Nginx服務網站根目錄后便可刷新瀏覽器頁面,這將自動跳轉到Discuz! X3.2論壇系統的安裝界面,此處需單擊“我同意”按鈕,進入下一步的安裝過程中,如圖20-4所示。

第1步:接受許可協議

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

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

第2步:檢查部署環境

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

第3步:選擇“全新安裝Discuz! X(含UCenter Server)”。UCenter Server是站點的管理平臺,能夠在多個站點之間同步會員賬戶及密碼信息,單擊“下一步”按鈕,如圖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!論壇系統的廣告信息。在接入了互聯網的服務器上成功安裝完Discuz! X3.2論壇系統之后,其界面如圖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 選購服務器主機

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

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

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

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

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

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

出現問題?大膽提問!

因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~

Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群

*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。

本章節的復習作業(答案就在問題的下一行哦,用鼠標選中即可看到的~)

1.使用源碼包安裝服務程序的最大優點和缺點是什么?

答:使用源碼包安裝服務程序的最大優勢是,服務程序的可移植性好,而且能更好地提升服務程序的運行效率;缺點是源碼包程序的安裝、管理、卸載和維護都比較麻煩。

2.使用源碼包的方式來安裝軟件服務的大致步驟是什么?

答:基本分為4個步驟,分別為下載及解壓源碼包文件、編譯源碼包代碼、生成二進制安裝程序、運行二進制的服務程序安裝包。

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.較之于Apache服務程序,Nginx最顯著的優勢是什么?

答:Nginx服務程序比較穩定,原因是采用了的資源分配技術,降低了CPU與內存的占用率,所以使用Nginx程序部署的動態網站環境不僅十分穩定、高效,而且消耗的系統資源也很少。

6.如何禁止php服務程序中不安全的功能?

答:編輯php服務程序的配置文件(/usr/local/php/etc/php.ini),把要禁用的功能追加到disable_functions參數之后即可。

7.?對于處于創業階段的小站長群體來說,適合購買哪種服務器類型呢?

答:劉遄老師建議他們選擇云服務器類型,不但費用便宜(每個月費用不超過100元人民幣),而且性能也十分強勁。

本文原創地址:http://www.52437949.com/chapter-20.html編輯:劉遄,審核員:暫無