Linux就該這麼學 | 第20章 部署 LNMP 架構環境

第20章:使用 LNMP 架構部署動態網站環境

本章首先對比了使用源碼包安裝服務程序與使用 RPM 軟件包安裝服務程序的區別,然後講解了如何手工編譯源碼包並安裝各個服務程序,以及如何使用 Discuz! X3.2 版本論壇系統驗證架構環境。

一、使用源碼包的方式安裝軟件

1、爲什麼要學習使用源碼包來安裝軟件?

在 RPM(紅帽軟件包管理器)技術出現之前,Linux 系統運維人員只能通過源碼包的方式來安裝各種服務程序,這是一件非常繁瑣且極易消耗時間與耐心的事情;而且在安裝、升級、卸載程序時還要考慮到與其他程序或函數庫的相互依賴關係,這就要求運維人員不僅要掌握更多的 Linux 系統理論知識以及高超的實操技能,還需要有極好的耐心才能安裝好一個源碼軟件包。

但是,現在依然有很多軟件程序只有源碼包的形式,如果我們只會使用 Yum 軟件倉庫的方式來安裝程序,則面對這些只有源碼包的軟件程序時,將充滿無力感。因此,運維人員學會使用源包來安裝軟件,是必須的。

2、使用源碼包安裝軟件有哪些優勢?

  • 優勢1:源碼包的可移植性非常好,幾乎可以在任何 Linux 系統中安裝使用,而 RPM 軟件包是針對特定系統和架構編寫的指令集,必須嚴格地符合執行環境才能順利安裝(即只會去“生硬地”安裝服務程序)。
  • 優勢2:使用源碼包安裝服務程序時會有一個編譯過程,因此可以更好地適應安裝主機的系統環境,運行效率和優化程度都會強於使用 RPM 軟件包安裝的服務程序。也就是說,可以將採用源碼包安裝服務程序的方式看作是針對系統的“量體裁衣”。

3、Linux中軟件安裝的基本原則

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

4、使用源碼包安裝軟件的基本步驟

1)第1步:下載及解壓源碼包文件。

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

tar  xzvf  FileName.tar.gz
cd  FileName

2)第2步:編譯源碼包代碼。

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

./configure  --prefix=/usr/local/program      // 自定義安裝目錄

3)第3步:生成二進制安裝程序。

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

make

4)第4步:運行二進制的服務程序安裝包。

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

make  install

5)清理源碼包臨時文件。

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

make  clean

5、爲什麼使用源碼包安裝軟件時,比使用RPM安裝軟件需要更長的時間呢?

使用源碼包安裝軟件時,源碼包的編譯工作(configure)與生成二進制文件的工作(make)都會使用較長的時間,而採用 RPM 軟件包安裝軟件就特別有效率。

源碼包的軟件作者肯定希望自己的軟件能夠被安裝到更多的系統上面,能夠被更多的用戶所瞭解並使用。因此在源碼包的編譯階段(configure),會檢查用戶當前系統的架構模式,然後制定出一份可行的安裝方案。所以使用源碼包安裝軟件時,會佔用更多的系統資源,需要更長的等待時間。

然而,RPM 軟件包就是把軟件的源碼包和一個針對特定系統、架構、環境編寫的安裝策略,預先打包成了一個的指令集。因此爲了讓用戶都能使用這個軟件包來安裝程序,通常一個軟件程序會發布多種格式的 RPM 軟件包(例如 i386、x86_64 等架構)來讓用戶選擇。鑑於 RPM軟件包已經預先針對特定 OS 系統進行了打包,所以使用 RPM 方式安裝軟件會更快。

6、如何配置源碼包的編譯環境?

在使用源碼包安裝軟件之前,首先要讓Linux主機具備編譯源碼包的能力和環境,這就需要具備 C 語言、C++語言、Perl 語言的編譯器,以及各種常見的編譯支持函數庫程序。

把 Yum倉庫配置完成後,就開始安裝這些編譯器環境必須的程序和庫。

yum install -y apr* autoconf automake bison 
bzip2 bzip2* compat* cpp curl curl-devel fontconfig fontconfig-devel 
freetype freetype* freetype-devel gcc gcc-c++ gd gettext 
gettext-devel glibc kernel kernel-headers keyutils
keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng-devel 
libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* 
libgomp libxml2 libxml2-devel libXpm* libtifflibtiff* make 
mpfr ncurses* ntp openssl openssl-devel patch pcre-devel 
perl php-common php-gd policycoreutils telnet t1lib t1lib* nasm nasm* wget zlib-devel

二、部署 LNMP 動態網站架構

1、什麼是 LNMP 架構?

LNMP 動態網站部署架構是一套由 Linux + Nginx + MySQL + PHP 組成的動態網站系統解決方案,具有免費、高效、擴展性強且資源消耗低等優良特性。

LNMP 中的字母 L 是 Linux 系統的意思,不僅可以是 RHEL、CentOS、Fedora,還可以是 Debian、Ubuntu 等系統。

2、下載部署 LNMP 架構所需要的16個源碼包和1個工具包

可以在Windows電腦上預先下載這些源碼包,然後再使用 SSH 服務將它們從 Windows 電腦上傳遞至 Linux服務端;或者使用 wget 命令,在 Linux服務端直接下載這些源碼包。

這16個源碼包+1個工具包,分別是:discuz、freetype、jpegsrc、libgd、libmcrypt、libpng、libvpx、mysql、nginx、openssl、php、pcre、t1lib、tiff、yasm、zlib、cmake。

下載資源包示例:
cd  /usr/local/src
wget  http://www.xxx.com/resource/mysql-5.6.19.tar.gz

基於 FHS 協議的規定,我們可以把這17個源碼包放在 /usr/local/src 目錄中,然後分別對它們進行解壓縮、編譯、生成二進制程序並執行程序安裝。

3、使用源碼包方式安裝 cmake 編譯工具

cmake 是 Linux 系統中一款常用的編譯工具。要想通過源碼包安裝服務程序,就一定要嚴格遵守上述所總結的安裝步驟——下載及解壓源碼包文件、編譯源碼包代碼、生成二進制安裝程序、運行二進制的服務程序安裝包

1)使用源碼包安裝 cmake

cd  /usr/local/src
ls
// 1-解壓縮
tar  xzvf  cmake-2.8.11.2.tar.gz
cd  cmake-2.8.11.2/
// 2-編譯並指定cmake安裝目錄(後續將使用該目錄作爲cmake的環境變量)
./configure  --prefix=/usr/local/program
// 3-生成二進制程序包
make
// 4-執行安裝
make  install
// 5-清理源碼包
make  clean

2)配置 cmake 程序的 PATH 環境變量,以讓系統找到 cmake 程序的所在位置。

查看cmake 的安裝目錄:
cd  /usr/local/program
cd  bin
ls
配置 PATH 環境變量:
vim  /etc/profile
讓 PATH 環境變量立即生效:
source  /etc/profile

3、配置 MySQL 服務

1)創建一個名爲 mysql 的用戶,專門用於負責運行 MySQL 數據庫。(請記得要把用戶的 Bash 終端設置成 nologin 解釋器,避免黑客通過該用戶登錄到服務器中,從而提高系統安全性。)

useradd  mysql  -s  /sbin/nologin

2)創建一個用於保存 MySQL 數據庫程序和數據庫文件的目錄,並把該目錄的所有者和所屬組身份修改爲 mysql 用戶。

其中,/usr/local/mysql 是用於保存 MySQL 數據庫服務程序的目錄,/usr/local/mysql/var 則是用於保存真實數據庫文件的目錄。

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

3)解壓、編譯、安裝 MySQL 數據庫服務程序。

使用 cmake 命令編譯MySQL源碼包,其中,-DCMAKE_INSTALL_PREFIX 參數用於定義數據庫服務程序的保存目錄,-DMYSQL_DATADIR 參數用於定義真實數據庫文件的目錄,-DSYSCONFDIR 則是定義MySQL 數據庫配置文件的保存目錄。

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

編譯MySQL源碼包,並指定MySQL的安裝目錄和數據存儲目錄:
cmake  .  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/var -DSYSCONFDIR=/etc
make
make  install

4)把MySQL加入到 PATH 環境變量中去。

vim  /etc/profile
讓環境變量立即生效:
source  /etc/profile

5)生成 MySQL 系統數據庫文件和服務配置文件。

爲了讓 MySQL 數據庫程序正常運轉起來,需要先刪除/etc 目錄中的默認配置文件。

然後在 MySQL 數據庫程序的保存目錄 scripts 內找到一個名爲mysql_install_db 的腳本程序,執行這個腳本程序並使用 --user 參數指定 MySQL 服務的對應賬號名稱(在前面步驟已經創建),使用--basedir 參數指定 MySQL 服務程序的保存目錄,使用--datadir 參數指定 MySQL 真實數據庫的文件保存目錄,這樣即可生成系統數據庫文件,也會生成出新的 MySQL 服務配置文件。

rm  -rf  /etc/my.cnf
cd  /usr/local/mysql
./scripts/mysql_install_db  --user=mysql  --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/var

6)把上一步中所生成的服務配置文件鏈接到 /etc 中,然後把程序目錄中的開機程序文件複製到/etc/rc.d/init.d 目錄中,以便通過 service 命令來管理 MySQL 數據庫服務程序。

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

7)鏈接MySQL服務程序所需要用到的程序文件和函數庫文件。

當前我們是使用源碼包的方式安裝 MySQL 數據庫,因此還需要以手動的方式把MySQL服務運行所必須的程序文件和函數庫文件鏈接過來。

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

8)編輯上一步中的 MySQL 服務配置文件,然後重啓 MySQL 服務。

vim  /etc/rc.d/init.d/mysqld
service  mysqld  start
chkconfig  mysqld  on

9)對 MySQL 數據庫進行初始化

mysql_secure_installation

4、配置 Nginx 服務

1)什麼是 Nginx ?它有哪些優勢?

Nginx 是一款相當優秀的用於部署動態網站的輕量級服務程序,它最初是爲俄羅斯門戶站點而開發的,因其穩定性、功能豐富、佔用內存少且併發能力強而備受用戶的信賴。

Nginx 服務程序的穩定性源自於採用了分階段的資源分配技術,降低了 CPU 與內存的佔用率,所以使用 Nginx 程序部署的動態網站環境不僅十分穩定、高效,而且消耗的系統資源也很少。

此外,Nginx 具備的模塊數量與 Apache 具備的模塊數量幾乎相同,而且現在已經完全支持 proxy、rewrite、mod_fcgi、ssl、vhosts 等常用模塊。

更重要的是,Nginx 還支持熱部署技術,可以 7×24 不間斷提供服務,還可以在不暫停服務的情況下直接對 Nginx 服務程序進行升級。

2)在正式安裝 Nginx 服務程序之前,先安裝 Nginx所必需的軟件依賴程序。

安裝 pcre 程序:它用於提供 Perl 語言兼容的正則表達式庫,它是 Nginx 服務程序用於實現僞靜態功能必不可少的依賴包。

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

安裝 openssl程序:它用於爲網站提供加密證書服務的程序文件,在安裝該程序時需要自定義服務程序的安裝目錄,以便於稍後調用它們的時候更可控。

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

把 openssl 添加到 PATH 環境變量中去:
vim  /etc/profile
source  /etc/profile

安裝 zlib程序:它爲壓縮功能提供了相關的函數庫文件。

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

3)創建一個用於執行 Nginx服務程序的賬戶,用戶名可自定義,比如 geekwww。

useradd  geekwww  -s  /sbin/nologin

4)使用 Nginx 源碼包來安裝 Nginx 服務。

其中,--prefix 參數用於定義服務程序稍後安裝到的位置,--user 與--group 參數用於指定執行 Nginx 服務程序的用戶名和用戶組。

cd  /usr/local/src
tar  xzvf nginx-1.6.0.tar.gz
cd  nginx-1.6.0/
編譯 Nginx 源碼包:
./configure  
    --prefix=/usr/local/nginx 
    --without-http_memcached_module 
    --user=www  --group=www 
    --with-http_stub_status_module 
    --with�http_ssl_module 
    --with-http_gzip_static_module 
    --with-openssl=/usr/local/src/openssl-1.0.1h 
    --with-zlib=/usr/local/src/zlib-1.2.8 
    --with-pcre=/usr/local/src/pcre-8.35
make
make  install

注:編譯 Nginx 源碼包時,參數中所調用 openssl、zlib、pcre 軟件包時,指定的是軟件源碼包的解壓路徑,而不是程序的安裝路徑。

5)編寫 Nginx 服務的配置文件,用於將其添加到開機啓動項中去。

要想啓動 Nginx 服務程序以及將其加入到開機啓動項中,也需要有腳本文件。可惜的是,使用源碼包方式安裝 Nginx 服務,默認沒有提供這樣的腳本文件。

這就需要我們手動編寫 Nginx 服務的主配置文件,並其放置到 /etc/rc.d/init.d 目錄中。腳本編寫參考如下:

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

保存上述我們自己編寫的 Nginx 服務配置文件,併爲其賦予 755 權限。然後以絕對路徑的方式執行這個腳本,通過 restart 參數重啓 Nginx 服務程序,最後再使用 chkconfig 命令將 Nginx 服務程序添加至開機啓動項中。

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

6)測試 Nginx 是否安裝並啓動成功?在瀏覽器中輸入服務器的 IP 地址來查看 Nginx 的默認歡迎頁面。

5、配置 PHP 服務

1)關於 PHP 語言

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

2)關於 PHP 的安裝

使用源碼包的方式編譯安裝 PHP 語言環境其實並不複雜,難點在於解決 PHP 的程序包和其他軟件的依賴關係。

爲此需要先安裝部署將近十個用於搭建網站頁面的軟件程序包,然後才能正式安裝 PHP 程序。

3)安裝 PHP 所需要的系列軟件依賴

安裝 yasm程序:它是一款常用的開源彙編器。

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

安裝 libmcrypt程序: 它的用於加密算法的擴展庫程序。

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

安裝 libvpx程序:它是用於提供視頻編碼器的服務程序。

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

安裝 tiff程序:它是用於提供標籤圖像文件格式的服務程序。

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

安裝 libpng程序:它是用於提供 png 圖片格式支持函數庫的服務程序。

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

安裝 freetype程序:它是用於提供字體支持引擎的服務程序。

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

安裝 jpeg 程序:它是用於提供 jpeg 圖片格式支持函數庫的服務程序。

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

安裝 libgd程序:它是用於提供圖形處理的服務程序。(在編譯 libgd 源碼包時,請記得寫入 jpeg、libpng、freetype、tiff、libvpx 等服務程序在系統中的安裝路徑,即在上面安裝過程中使用--prefix 參數指定的目錄路徑。)

cd  /usr/local/src/
wget  http://www.xxx.com/source/libgd-2.1.0.tar.gz
tar  zxvf  libgd-2.1.0.tar.gz
cd  libgd-2.1.0
./configure  --prefix=/usr/local/libgd   
    --enable�shared 
    --with-jpeg=/usr/local/jpeg 
    --with-png=/usr/local/libpng 
    --with-freetype=/usr/local/freetype 
    --with-fontconfig=/usr/local/freetype 
    --with-xpm=/usr/ 
    --with-tiff=/usr/local/tiff 
    --with-vpx=/usr/local/libvpx
make
make  install

安裝 t1lib程序:它是用於提供圖片生成函數庫的服務程序。(t1lib 程序安裝完成後,要把/usr/lib64 目錄中的函數文件鏈接到/usr/lib 目錄中,以便系統能夠順利地調取到該函數文件。)

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

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

4)使用源碼包的方式安裝 PHP

注意1:在編譯 php源碼包之前,先定義一個名爲 LD_LIBRARY_PATH 的全局環境變量,該環境變量的作用是幫助系統找到指定的動態鏈接庫文件,這些文件是編譯 php 服務源碼包的必須元素之一。

注意2:編譯php 服務源碼包時,除了定義要安裝到的目錄以外,還需要依次定義配置 php 服務程序配置文件的保存目錄、MySQL 數據庫服務程序所在目錄、MySQL 數據庫服務程序配置文件所在目錄,以及 libpng、jpeg、freetype、libvpx、zlib、t1lib 等服務程序的安裝目錄路徑,並通過參數啓動 php 服務程序的系列默認功能。

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

定義環境變量:
export  LD_LIBRARY_PATH=/usr/local/libgd/lib

編譯 PHP源碼:
./configure   --prefix=/usr/local/php 
    --with-config-file-path=/usr/local/php/etc 
    --with-mysql=/usr/local/mysql 
    --with-mysqli=/usr/local/mysql/bin/mysql_config 
    --with-mysql-sock=/tmp/mysql.sock 
    --with-pdo-mysql=/usr/local/mysql 
    --with-gd 
    --with-png-dir=/usr/local/libpng 
    --with-jpeg-dir=/usr/local/jpeg 
    --with-freetype-dir=/usr/local/freetype 
    --with-xpm-dir=/usr/ 
    --with-vpx-dir=/usr/local/libvpx/ 
    --with-zlib-dir=/usr/local/zlib 
    --with-t1lib=/usr/local/t1lib
    --with-iconv 
    --enable-libxml 
    --enable-xml 
    --enable-bcmath 
    --enable-shmop 
    --enable�sysvsem 
    --enable-inline-optimization 
    --enable-opcache 
    --enable-mbregex 
    --enable-fpm 
    --enable-mbstring 
    --enable-ftp 
    --enable-gd-native-ttf 
    --with-openssl 
    --enable�pcntl 
    --enable-sockets 
    --with-xmlrpc 
    --enable-zip 
    --enable-soap 
    --without-pear 
    --with-gettext 
    --enable-session 
    --with-mcrypt 
    --with-curl 
    --enable-ctype

生成二進制程序包並執行安裝:
make
make  install

5)刪除 PHP 默認的配置文件。

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

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

6)開始配置 PHP 服務。

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

vim  /usr/local/php/etc/php-fpm.conf

php 服務程序的配置參數直接會影響到 Web 服務服務的運行環境,因此我們需要把禁用掉一些默認被開啓了的不必要的且高危的功能,以降低網站被入侵的難度,修改 php.ini 配置文件參考如下:

vim  /usr/local/php/etc/php.ini

7)把PHP添加到開機啓動項中。

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

6、部署 LNMP 架構環境的最後一步

最後,我們還需要編輯 Nginx 服務的主配置文件,配置信息參考如下:

vim  /usr/local/nginx/conf/nginx.conf

Nginx 配置完成後,重啓 Nginx 和 PHP服務。至此,整個 LNMP 架構環境就部署完成了。

systemctl  restart  nginx
systemctl  restart  php-fpm

三、搭建 Discuz! 論壇(測試 LNMP 架構環境)

1、實驗目標

爲了測試上述 LNMP 動態網站環境是否配置妥當,我們可以在其上面部署 Discuz!系統,然後查看結果。如果能夠在 LNMP 動態網站環境中成功安裝並使用 Discuz!論壇系統,則意味着這套 LNMP 架構環境的部署是成功的。

2、Discuz! 是什麼?

Discuz! X3.2 是國內最常見的社區論壇系統,在經過十多年的研發後已經成爲了全球成熟度最高、覆蓋率最廣的論壇網站系統之一。

3、部署 Discuz! 的程序代碼

解壓 Discuz! X3.2 軟件包後,會在當前目錄中出現一個名爲 upload 的文件目錄,這裏面即保存着 Discuz!論壇的系統程序。

我們先把 Nginx 服務程序網站根目錄的內容清空,然後把這個 upload 目錄中的文件都複製進去,同時把 Nginx 服務程序的網站根目錄的所有者和所屬組修改爲本地的 geekwww 用戶,併爲其賦予 755 權限以便於能夠讀、寫、執行該論壇系統內的文件。

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

解壓 .zip 壓縮包:
unzip  Discuz_X3.2_SC_GBK.zip

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

把 Discuz 程序代碼複製到 Nginx 服務的網站根目錄中去:
mv  upload/*   /usr/local/nginx/html/
chown  -Rf  geekwww:geekwww   /usr/local/nginx/html
chmod  -Rf  755   /usr/local/nginx/html

4、基於 LNMP 架構環境,開始安裝並使用 Discuz! 系統

1)接受 Discuz!安裝嚮導的許可協議。

Discuz! 系統部署完成後,在瀏覽器中刷新頁面,即可跳轉至 Discuz! 系統的安裝界面,選擇“我同意”安裝。

2)檢查 Discuz! X3.2 論壇系統的安裝環境及目錄權限。

3)選擇“全新安裝 Discuz! X(含 UCenter Server)”。

4)填寫服務器的數據庫信息與論壇系統管理員信息。

網站系統使用由服務器本地(localhost)提供的數據庫服務,數據名稱與數據表前綴可由用戶自行填寫,其中數據庫的用戶名和密碼則爲用於登錄 MySQL 數據庫的信息(以初始化 MySQL 服務程序時填寫的信息爲準)。

5)Discuz!安裝完成,查看其歡迎界面。此時,則驗證了 LNMP 架構環境的部署是成功的。

四、選購服務器主機

網站是由域名、網站源程序和主機共同組成的,其中,主機則是用於存放網頁源代碼並能夠把網頁內容展示給用戶的服務器。

下面將介紹幾點關於服務器主機選購的建議:

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

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

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

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

本章複習題


END 2019-01-24

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章