1. 程式人生 > >8、源碼安裝

8、源碼安裝

emctl 技術 core location 並發 報錯 ron sleep 指令集

第8章源碼安裝

章節概述:

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

本章目錄結構

  • 8.1 源碼包程序
  • 8.2 LNMP動態網站架構
    • 8.2.1 配置Mysql服務
    • 8.2.2 配置Nginx服務
    • 8.2.3 配置php服務
  • 8.3 搭建Discuz論壇
8.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的後綴。要想使用源碼包安裝服務程序,必須先把裏面的內容解壓出來,然後再切換到源碼包文件的目錄中:

下載:wget

[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)來檢查用戶當前系統的情況,然後制定出一份可行的安裝方案,所以會占用很多的系統資源,需要更長的等待時間。

8.2 LNMP動態網站架構

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

技術分享圖片

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

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

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

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

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

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

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

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

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

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

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

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

接下來解壓、編譯、安裝MySQL數據庫服務程序。在編譯數據庫時使用的是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@linuxprobe mysql]# vim /etc/rc.d/init.d/mysqld 
………………省略部分輸出信息………………
 39 #
 40 # If you want to affect other MySQL variables, you should make your changes
 41 # in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.
 42 
 43 # If you change base dir, you must also change datadir. These may get
 44 # overwritten by settings in the MySQL configuration files.
 45 
 46 basedir=/usr/local/mysql
 47 datadir=/usr/local/mysql/var
 48 
………………省略部分輸出信息………………

配置好腳本文件後便可以用service命令啟動mysqld數據庫服務了。mysqld是MySQL數據庫程序的服務名稱,註意不要寫錯。順帶再使用chkconfig命令把mysqld服務程序加入到開機啟動項中。

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

MySQL數據庫程序自帶了許多命令,但是Bash終端的PATH變量並不會包含這些命令所存放的目錄,因此我們也無法順利地對MySQL數據庫進行初始化,也就不能使用MySQL數據庫自帶的命令了。想要把命令所保存的目錄永久性地定義到PATH變量中,需要編輯/etc/profile文件並寫入追加的命令目錄,這樣當物理設備在下一次重啟時就會永久生效了。如果不想通過重啟設備的方式來生效,也可以使用source命令加載一下/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@linuxprobe mysql]# mysql_secure_installation 
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we‘ll need the current
password for the root user.  If you‘ve just installed MySQL, and
you haven‘t set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): 此處只需按下回車鍵
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] y (要為root管理員設置數據庫的密碼)
New password: 輸入要為root管理員設置的數據庫密碼
Re-enter new password: 再輸入一次密碼
Password updated successfully!
Reloading privilege tables..
 ... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y (刪除匿名賬戶)
 ... Success!
Normally, root should only be allowed to connect from ‘localhost‘.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y (禁止root管理員從遠程登錄)
 ... Success!
By default, MySQL comes with a database named ‘test‘ that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y (刪除test數據庫並取消對其的訪問權限)
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y (刷新授權表,讓初始化後的設定立即生效)
 ... Success!
All done!  If you‘ve completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
Cleaning up...
8.2.2 配置Nginx服務

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

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

技術分享圖片

圖20-2 Nginx與Apache著名LOGO

坦白來講,雖然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@linuxprobe zlib-1.2.8]# cd ..
[root@linuxprobe src]# useradd www -s /sbin/nologin

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

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

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

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

保存腳本文件後記得為其賦予755權限,以便能夠執行這個腳本。然後以絕對路徑的方式執行這個腳本,通過restart參數重啟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-3 Nginx服務程序的默認頁面

8.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 --enable-shared
[root@linuxprobe libpng-1.6.12]# make
[root@linuxprobe libpng-1.6.12]# make install

freetype源碼包是用於提供字體支持引擎的服務程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略:

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

jpeg源碼包是用於提供jpeg圖片格式支持函數庫的服務程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略:

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

libgd源碼包是用於提供圖形處理的服務程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略。在編譯libgd源碼包時,請記得寫入的是jpeg、libpng、freetype、tiff、libvpx等服務程序在系統中的安裝路徑,即在上面安裝過程中使用--prefix參數指定的目錄路徑:

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

t1lib源碼包是用於提供圖片生成函數庫的服務程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略。安裝後把/usr/lib64目錄中的函數文件鏈接到/usr/lib目錄中,以便系統能夠順利調取到函數文件:

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

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

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

在php源碼包程序安裝完成後,需要刪除當前默認的配置文件,然後將php服務程序目錄中相應的配置文件復制過來:

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

php-fpm.conf是php服務程序重要的配置文件之一,我們需要啟用該配置文件中第25行左右的pid文件保存目錄,然後分別將第148和149行的user與group參數分別修改為www賬戶和用戶組名稱:

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

配置妥當後便可把用於管理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動態網站環境架構的配置實驗全部結束。

8.3 搭建Discuz論壇

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

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

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

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

技術分享圖片

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

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

技術分享圖片

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

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

技術分享圖片

圖20-6 選擇全新安裝Discuz!論壇及UCenter Server

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

技術分享圖片

圖20-7 填寫服務器的數據庫信息與論壇系統管理員信息

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

技術分享圖片

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

技術分享圖片

圖20-9 成功安裝Discuz! X3.2論壇系統後的歡迎界面

技術分享圖片

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

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

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元人民幣),而且性能也十分強勁。

本文原創地址:https://www.linuxprobe.com/chapter-20.html

8、源碼安裝