第20章 使用LNMP架构部署动态网站环境
本章節將從Linux系統的軟件安裝方式講起,帶領讀者分辨RPM軟件包與源碼安裝的區別、并能夠理解它們的優缺點。
Nginx是一款相當優秀的用于部署動態網站的服務程序,Nginx具有不錯的穩定性、豐富的功能以及占用較少的系統資源等獨特特性。
通過部署Linux+Nginx+MYSQL+PHP這四種開源軟件,便擁有了一個免費、高效、擴展性強、資源消耗低的LNMP動態網站架構了。
本章目錄結構
- 20.1 源碼安裝程序
- 20.2 部署LNMP架構
- 20.2.1 配置Mysql服務
- 20.2.2 配置Nginx服務
- 20.2.3 配置php服務
- 20.3 選購服務器主機
- 20.4 搭建discuz論壇
20.1 源碼安裝程序
在前面的章節中提到過在紅帽軟件包管理器(RPM)公布之前要想在Linux系統中安裝軟件只能采取“源碼包”的方式安裝服務程序,但是源碼安裝程序真是一件非常困難,耗費耐心的事情,不僅需要運維人員掌握更多的知識、高超的技能、甚至要很有耐心才能安裝好一個程序,并且在安裝、升級、卸載時還要考慮到其他程序、庫的依賴關系,所以我們在前面的課程中都依賴于YUM倉庫或RPM來安裝服務程序,但這樣也會有一些弊端。
?
很多軟件產品只會以源碼包的方式發布,如果只會用RPM命令就只能去互聯網大海洋中慢慢尋找到由第三方組織或黑客們編寫的RPM軟件包后才能安裝程序了,并且源碼程序的可移植性非常好,可以針對不同的系統架構而正確運行,但RPM軟件包則必需嚴格符合限制使用的平臺和架構后才能順利安裝,所以建議即便在工作中可以很舒服的用Yum倉庫來安裝服務程序,源碼安裝的流程也一定要記清:
第1步,解壓文件:
源碼包通常會使用tar工具歸檔然后用gzip或bzip2進行壓縮,后綴格式會分別為.tar.gz與tar.bz2 ,解壓方法:
[root@linuxprobe ~]# tar xzvf FileName.tar.gz
[root@linuxprobe ~]# tar jxvf FileName.tar.bz2
第2步,切換到解壓后的目錄:
[root@linuxprobe ~]# cd FileDirectory
第3步:準備編譯工作:
在開始安裝服務程序之前,需要執行configure腳本,他會自動的對當前系統進行一系列的評估,如源文件、軟件依賴性庫、編譯器、匯編器、連接器檢查等等,如果有需求,還可以使用--prefix參數來指定程序的安裝路徑(很實用),而當腳本檢查系統環境符合要求后,則會在當前目錄下生成一個Makefile文件。
[root@linuxprobe ~]# ./configure --prefix=/usr/local/program
第4步:生成安裝程序:
剛剛生成的Makefile文件會保存有系統環境依賴關系和安裝規則,接下來需要使用make命令來根據MakeFile文件提供的規則使用合適的SHELL來編譯所有依賴的源碼,然后make命令會生成一個最終可執行的安裝程序。
[root@linuxprobe ~]# make
第5步:安裝服務程序:
如果在configure腳本階段中沒有使用--prefix參數,那么程序一般會被默認安裝到/usr/local/bin目錄中。
[root@linuxprobe ~]# make install
第6步:清理臨時文件(可選):
[root@linuxprobe ~]# make clean
卸載服務程序的命令(請不要隨便執行!!!):
[root@linuxprobe ~]# make uninstall
其實讀者可能最納悶的是漫長的configure與make步驟,RPM包為什么就可以那么有效率的安裝,而不需要檢測系統環境呢?
其實原因很簡單,RPM軟件包是根據特定系統和平臺而指定的,經常一種程序會提供很多RPM包的格式(如i386/x86_64等等),用戶需要找到適合當前自己系統的RPM包后才能順利的安裝,而源碼包的程序作者肯定希望自己的軟件能夠被安裝到更多的系統中,被更多的用戶使用,所以就必需要用configure腳本來檢查用戶當前系統的情況,最終制定出一份可行的安裝方案。
出現問題?大膽提問!
因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~
Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群。
*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。
20.2 部署LNMP架構
LNMP(即Linux+Nginx+MYSQL+PHP)是目前非常熱門的動態網站部署架構,一般是指:
Linux:如RHEL、Centos、Debian、Fedora、Ubuntu等系統。
Nginx:高性能、低消耗的HTTP與反向代理服務程序。
MYSQL:熱門常用的數據庫管理軟件。
PHP:一種能夠在服務器端執行的嵌入HTML文檔的腳本語言。
通過將這四種開源軟件部署在一起,便成為了一個免費、高效、擴展性強、資源消耗低的動態網站環境了。
設置防火墻允許數據庫與網站服務策略:
[root@linuxprobe ~]# iptables -F [root@linuxprobe ~]# firewall-cmd --permanent --add-service=mysql success [root@linuxprobe ~]# firewall-cmd --permanent --add-service=http success [root@linuxprobe ~]# firewall-cmd --reload success
下載所有需要使用的軟件包到/usr/local/src目錄(17個文件):
[root@linuxprobe ~]# cd /usr/local/src [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/cmake-2.8.11.2.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/Discuz_X3.2_SC_GBK.zip [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/freetype-2.5.3.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/jpegsrc.v9a.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/libgd-2.1.0.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/libmcrypt-2.5.8.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/libpng-1.6.12.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/libvpx-v1.3.0.tar.bz2 [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/mysql-5.6.19.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/nginx-1.6.0.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/openssl-1.0.1h.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/php-5.5.14.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/pcre-8.35.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/t1lib-5.1.2.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/tiff-4.0.3.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/yasm-1.2.0.tar.gz [root@linuxprobe src]# wget http://down.linuxprobe.com/Tools/zlib-1.2.8.tar.gz
安裝編譯工具及庫文件(需要安裝的程序比較多,請復制全!):
[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 kapr-devel x86_64 1.4.8-3.el7 rhel7 188 kapr-util x86_64 1.5.2-6.el7 rhel7 92 kapr-util-devel x86_64 1.5.2-6.el7 rhel7 76 kautoconf noarch 2.69-11.el7 rhel7 701 kautomake noarch 1.13.4-3.el7 rhel7 679 kbison x86_64 2.7-4.el7 rhel7 578 kbzip2-devel x86_64 1.0.6-12.el7 rhel7 218 kcompat-dapl x86_64 1:1.2.19-3.el7 rhel7 109 kcompat-db-headers noarch 4.7.25-27.el7 rhel7 48 kcompat-db47 x86_64 4.7.25-27.el7 rhel7 795 kcompat-gcc-44 x86_64 4.4.7-8.el7 rhel7 10 Mcompat-gcc-44-c++ x86_64 4.4.7-8.el7 rhel7 6.3 Mcompat-glibc x86_64 1:2.12-4.el7 rhel7 1.2 Mcompat-glibc-headers x86_64 1:2.12-4.el7 rhel7 452 kcompat-libcap1 x86_64 1.10-7.el7 rhel7 19 kcompat-libf2c-34 x86_64 3.4.6-32.el7 rhel7 155 kcompat-libgfortran-41 x86_64 4.1.2-44.el7 rhel7 142 kcompat-libtiff3 x86_64 3.9.4-11.el7 rhel7 135 kcompat-openldap x86_64 1:2.3.43-5.el7 rhel7 174 kcpp x86_64 4.8.2-16.el7 rhel7 5.9 Mfontconfig-devel x86_64 2.10.95-7.el7 rhel7 128 kfreetype-devel x86_64 2.4.11-9.el7 rhel7 355 kgcc x86_64 4.8.2-16.el7 rhel7 16 Mgcc-c++ x86_64 4.8.2-16.el7 rhel7 7.1 Mgettext-devel x86_64 0.18.2.1-4.el7 rhel7 315 kkernel-headers x86_64 3.10.0-123.el7 rhel7 1.4 Mkeyutils-libs-devel x86_64 1.5.8-3.el7 rhel7 37 kkrb5-devel x86_64 1.11.3-49.el7 rhel7 611 klibXpm-devel x86_64 3.5.10-5.1.el7 rhel7 36 klibcom_err-devel x86_64 1.42.9-4.el7 rhel7 30 klibcurl-devel x86_64 7.29.0-19.el7 rhel7 296 klibjpeg-turbo-devel x86_64 1.2.90-5.el7 rhel7 99 klibpng-devel x86_64 2:1.5.13-5.el7 rhel7 122 klibselinux-devel x86_64 2.2.2-6.el7 rhel7 174 klibsepol-devel x86_64 2.1.9-3.el7 rhel7 71 klibstdc++-devel x86_64 4.8.2-16.el7 rhel7 1.5 Mlibtiff-devel x86_64 4.0.3-14.el7 rhel7 471 klibtool x86_64 2.4.2-20.el7 rhel7 588 klibtool-ltdl-devel x86_64 2.4.2-20.el7 rhel7 167 klibxml2-devel x86_64 2.9.1-5.el7 rhel7 1.0 Mmpfr x86_64 3.1.1-4.el7 rhel7 203 knasm x86_64 2.10.07-7.el7 rhel7 402 kncurses-devel x86_64 5.9-13.20130511.el7 rhel7 713 kncurses-term noarch 5.9-13.20130511.el7 rhel7 543 kntp x86_64 4.2.6p5-18.el7 rhel7 539 kopenssl-devel x86_64 1:1.0.1e-34.el7 rhel7 1.2 Mpatch x86_64 2.7.1-8.el7 rhel7 110 kpcre-devel x86_64 8.32-12.el7 rhel7 477 kphp-common x86_64 5.4.16-21.el7 rhel7 559 kphp-gd x86_64 5.4.16-21.el7 rhel7 122 kt1lib x86_64 5.1.2-14.el7 rhel7 166 ktelnet x86_64 1:0.17-59.el7 rhel7 63 kzlib-devel x86_64 1.2.7-13.el7 rhel7 49 k Installing for dependencies:cyrus-sasl-devel x86_64 2.1.26-17.el7 rhel7 309 kexpat-devel x86_64 2.1.0-8.el7 rhel7 56 kgettext-common-devel noarch 0.18.2.1-4.el7 rhel7 368 kgit x86_64 1.8.3.1-4.el7 rhel7 4.3 Mglibc-devel x86_64 2.17-55.el7 rhel7 1.0 Mglibc-headers x86_64 2.17-55.el7 rhel7 650 klibX11-devel x86_64 1.6.0-2.1.el7 rhel7 979 klibXau-devel x86_64 1.0.8-2.1.el7 rhel7 14 klibdb-devel x86_64 5.3.21-17.el7 rhel7 38 klibmpc x86_64 1.0.1-3.el7 rhel7 51 klibverto-devel x86_64 0.2.5-4.el7 rhel7 12 klibxcb-devel x86_64 1.9-5.el7 rhel7 1.0 Mlibzip x86_64 0.10.1-8.el7 rhel7 49 km4 x86_64 1.4.16-9.el7 rhel7 256 kopenldap-devel x86_64 2.4.39-3.el7 rhel7 796 kperl-Data-Dumper x86_64 2.145-3.el7 rhel7 47 kperl-Error noarch 1:0.17020-2.el7 rhel7 32 kperl-Git noarch 1.8.3.1-4.el7 rhel7 52 kperl-TermReadKey x86_64 2.30-20.el7 rhel7 31 kperl-Test-Harness noarch 3.28-2.el7 rhel7 302 kperl-Thread-Queue noarch 3.02-2.el7 rhel7 17 kxorg-x11-proto-devel noarch 7.7-8.el7.1 rhel7 281 kxz-devel x86_64 5.1.2-8alpha.el7 rhel7 44 k ………………省略部分安裝過程……………… Complete!
安裝cmake編譯工具(解壓與編譯過程已省略):
[root@linuxprobe ~]# cd /usr/local/src [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 [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服務
在前面的章節中我們學習了MariaDB數據庫管理系統,那么這次實驗就學習下如何使用Mysql來管理數據庫吧。
創建用于執行mysql服務程序的帳號:
[root@linuxprobe cmake-2.8.11.2]# cd .. [root@linuxprobe src]# useradd mysql -s /sbin/nologin
創建數據庫程序和文件的目錄,并設置目錄的所屬與所組:
[root@linuxprobe src]# mkdir -p /usr/local/mysql/var [root@linuxprobe src]# chown -Rf mysql:mysql /usr/local/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
刪除系統默認的配置文件:
[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
創建配置文件的軟連接文件:
[root@linuxprobe mysql]# ln -s my.cnf /etc/my.cnf
將mysqld服務程序添加到開機啟動項:
[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 [root@linuxprobe mysql]# chkconfig mysqld on
編輯啟動項的配置文件:
[root@linuxprobe mysql]# vim /etc/rc.d/init.d/mysqld //分別修改第46與47行,basedir為程序安裝路徑,datadir為數據庫存放目錄。 basedir=/usr/local/mysql datadir=/usr/local/mysql/var
重啟mysqld服務程序:
[root@localhost mysql]# service mysqld start Starting MySQL. SUCCESS!
把mysql服務程序命令目錄添加到環境變量中(永久生效):
[root@linuxprobe mysql]# vim /etc/profile //在配置文件的最下面追加: export PATH=$PATH:/usr/local/mysql/bin [root@linuxprobe mysql]# source /etc/profile
將mysqld服務程序的庫文件鏈接到默認的位置:
[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 /usr/local/mysql/include/mysql /usr/include/mysql [root@linuxprobe mysql]# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
初始化mysqld服務程序:
[root@linuxprobe mysql]# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQLSERVERS 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: 輸入要為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最初是為俄羅斯門戶站點而設計的網站服務軟件,作為一款輕量級的網站服務軟件,因其穩定性和豐富的功能而深受信賴,但最最最被認可的是低系統資源、占用內存少且并發能力強,目前國內如新浪、網易、騰訊等門戶站均在使用,市場占有份額一直保持在15-16%左右(2015年最新數據)。
Nginx程序的穩定性來自于它采用了分階段的資源分配技術,使得CPU與內存占用率會非常低,所以使用Nginx程序部署動態網站環境不僅十分的穩定、高效,而且消耗更少的系統資源,豐富的模塊功能也幾乎與Apache程序數量相同,現在已經完全的支持了proxy、rewrite、mod_fcgi、ssl、vhosts等常用模塊。而且還支持了熱部署技術,即能夠可以7*24不間斷提供服務,即便運行數月也無須重啟,而且還可以在不暫停服務的情況下直接對Nginx服務程序進行升級。
安裝PCRE(Perl兼容的正則表達式庫,解壓與編譯過程已省略):
[root@linuxprobe ~]# cd /usr/local/src [root@linuxprobe src]# mkdir /usr/local/pcre [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]# mkdir /usr/local/openssl [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服務程序命令目錄添加到環境變量中(永久生效):
[root@linuxprobe pcre-8.35]# vim /etc/profile //將配置文件最下面的參數追加參數為: export PATH=$PATH:/usr/local/mysql/bin:/usr/local/openssl/bin [root@linuxprobe pcre-8.35]# source /etc/profile
安裝zlib數據壓縮函數庫(解壓與編譯過程已省略):
[root@linuxprobe pcre-8.35]# cd /usr/local/src [root@linuxprobe src]# mkdir /usr/local/zlib [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服務程序(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程序腳本(將下面的參數直接復制進去即可):
[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`" ]; thenuseradd -M -s /bin/nologin $userfi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; doif [ `echo $opt | grep '.*-temp-path'` ]; thenvalue=`echo $opt | cut -d "=" -f 2`if [ ! -d "$value" ]; then# echo "creating" $valuemkdir -p $value && chown -R $user $valuefifi
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
[root@linuxprobe nginx-1.6.0]# chmod 755 /etc/rc.d/init.d/nginx
重啟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
此時可以通過訪問IP來判斷nginx服務是否順利運行:
20.2.3 配置php服務
安裝yasm匯編器(解壓與編譯過程已省略):
[root@linuxprobe nginx-1.6.0]# cd /usr/local/src [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 /usr/local/src [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視頻編碼器(解壓與編譯過程已省略):
[root@linuxprobe libmcrypt-2.5.8]# cd /usr/local/src [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 /usr/local/src [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 /usr/local/src [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 /usr/local/src [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 /usr/local/src [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圖像處理程序(解壓與編譯過程已省略):
[root@linuxprobe jpeg-9a]# cd /usr/local/src [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圖片生成函數庫(解壓與編譯過程已省略):
[root@linuxprobe cd libgd-2.1.0]# cd /usr/local/src [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]# cd /usr/local/src [root@linuxprobe src]# ln -s /usr/lib64/libltdl.so /usr/lib/libltdl.so [root@linuxprobe src]# cp -frp /usr/lib64/libXpm.so* /usr/lib/
安裝php服務程序(命令比較長,請一定要復制完整!!!):
[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服務程序的配置文件到安裝目錄:
[root@linuxprobe php-5.5.14]# cp php.ini-production /usr/local/php/etc/php.ini
刪除默認的php配置文件:
[root@linuxprobe php-5.5.14]# rm -rf /etc/php.ini
創建php配置文件的軟連接到/etc/目錄中:
[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
[root@linuxprobe php-5.5.14]# ln -s /usr/local/php/etc/php.ini /etc/php.ini
編輯php服務程序的配置文件:
[root@linuxprobe php-5.5.14]# vim /usr/local/php/etc/php-fpm.conf //將第25行參數前面的分號去掉。 pid = run/php-fpm.pid //修改第148和149行,將user與group修改為www。 user = www group = www
添加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 +x /etc/rc.d/init.d/php-fpm [root@linuxprobe php-5.5.14]# chkconfig php-fpm on
為了保障網站的安全性,禁用掉不安全的功能:
[root@linuxprobe php-5.5.14]# vim /usr/local/php/etc/php.ini //修改第305行的disable_functions參數,追加參數為: disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_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
配置nginx服務程序支持php:
[root@linuxprobe php-5.5.14]# vim /usr/local/nginx/conf/nginx.conf
//將第2行前面的#號去掉并修改為user www www ;
//將第45行參數修改為index index.html index.htm index.php;
//將第65-71行前面的#號去掉,修改為:
location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
重啟nginx與php-fpm服務程序:
[root@linuxprobe php-5.5.14]# systemctl restart nginx [root@linuxprobe php-5.5.14]# systemctl restart php-fpm
20.3 選購服務器主機
網站是由域名、網頁源程序和主機空間組成的,其中主機空間則是用于存放網頁源代碼并能夠將網頁內容展示給用戶,雖然本小節與Apache服務沒有直接關系,但如果您想要在互聯網中搭建網站并被順利訪問,主機空間一定不能選錯。 常見的主機空間包括虛擬主機、VPS、云服務器與獨立服務器:
虛擬主機:在一臺服務器中分出一定的磁盤空間供用戶放置網站、存放數據等,僅提供基礎的網站訪問、數據存放與傳輸流量功能,能夠極大的降低用戶費用,也幾乎不需要管理員維護除網站數據以外的服務,適合小型網站。
VPS(Virtual Private Server):在一臺服務器中利用OpenVZ、Xen或KVM等虛擬化技術模擬出多個“主機”,每個主機都有獨立的IP地址、操作系統,實現不同VPS之間磁盤空間、內存、CPU資源、進程與系統配置間的完全隔離,管理員可自由使用分配到的主機中的所有資源,所以需要有一定的維護系統的能力,適合小型網站。
云服務器(ECS):是一種整合了計算、存儲、網絡,能夠做到彈性伸縮的計算服務,其使用起來與VPS幾乎一樣,但差別是云服務器建立在一組集群服務器中,每個服務器都會保存一個主機的鏡像(備份),大大的提升了安全穩定性,另外還具備了靈活性與擴展性,用戶只需按使用量付費的即可,適合大中小型網站。
獨立服務器:這臺服務器僅提供給您使用,詳細來講又可以區分為租用方式與托管方式。
租用方式:用戶只需將硬件配置要求告知IDC服務商,服務器硬件設備由機房負責維護,運維管理員一般需要自行安裝相應的軟件并部署網站服務,租期可以為月、季、年,減輕了用戶初期對硬件設備的投入,適合大中型網站。 托管方式:用戶需要自行購置服務器后交給IDC服務供應商的機房進行管理(繳納管理服務費用),用戶對服務器硬件配置有完全的控制權,自主性強,但需要自行維護、修理服務器硬件設備,適合大中型網站。另外有必要提醒讀者,選擇主機空間供應商時請一定要注意看口碑,綜合分析再決定購買,某些供應商會有限制功能、強制添加廣告、隱藏扣費或強制扣費等惡劣行為,一定一定不要上當!
20.4 搭建discuz論壇
將discuz論壇數據放至網站目錄(解壓過程已省略):
[root@linuxprobe ~ ]# 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步,接受許可協議:
第2步,檢查部署環境:
第3步,選擇全新安裝discuzX論壇:
第4步,填寫數據庫與論壇管理員信息:
第5步,等待安裝完畢:
第6步,discuz論壇順利安裝完畢:
第7步,訪問論壇主頁面:
轉載于:https://www.cnblogs.com/linux130/p/5789580.html
總結
以上是生活随笔為你收集整理的第20章 使用LNMP架构部署动态网站环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 种植满口牙,总价大约需要多少钱?
- 下一篇: 二字qq网名大全