第20章 使用LNMP架构部署动态网站环境
本章節(jié)將從Linux系統(tǒng)的軟件安裝方式講起,帶領(lǐng)讀者分辨RPM軟件包與源碼安裝的區(qū)別、并能夠理解它們的優(yōu)缺點。
Nginx是一款相當(dāng)優(yōu)秀的用于部署動態(tài)網(wǎng)站的服務(wù)程序,Nginx具有不錯的穩(wěn)定性、豐富的功能以及占用較少的系統(tǒng)資源等獨特特性。
通過部署Linux+Nginx+MYSQL+PHP這四種開源軟件,便擁有了一個免費、高效、擴展性強、資源消耗低的LNMP動態(tài)網(wǎng)站架構(gòu)了。
本章目錄結(jié)構(gòu)
- 20.1 源碼安裝程序
- 20.2 部署LNMP架構(gòu)
- 20.2.1 配置Mysql服務(wù)
- 20.2.2 配置Nginx服務(wù)
- 20.2.3 配置php服務(wù)
- 20.3 選購服務(wù)器主機
- 20.4 搭建discuz論壇
20.1 源碼安裝程序
在前面的章節(jié)中提到過在紅帽軟件包管理器(RPM)公布之前要想在Linux系統(tǒng)中安裝軟件只能采取“源碼包”的方式安裝服務(wù)程序,但是源碼安裝程序真是一件非常困難,耗費耐心的事情,不僅需要運維人員掌握更多的知識、高超的技能、甚至要很有耐心才能安裝好一個程序,并且在安裝、升級、卸載時還要考慮到其他程序、庫的依賴關(guān)系,所以我們在前面的課程中都依賴于YUM倉庫或RPM來安裝服務(wù)程序,但這樣也會有一些弊端。
?
很多軟件產(chǎn)品只會以源碼包的方式發(fā)布,如果只會用RPM命令就只能去互聯(lián)網(wǎng)大海洋中慢慢尋找到由第三方組織或黑客們編寫的RPM軟件包后才能安裝程序了,并且源碼程序的可移植性非常好,可以針對不同的系統(tǒng)架構(gòu)而正確運行,但RPM軟件包則必需嚴(yán)格符合限制使用的平臺和架構(gòu)后才能順利安裝,所以建議即便在工作中可以很舒服的用Yum倉庫來安裝服務(wù)程序,源碼安裝的流程也一定要記清:
第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步:準(zhǔn)備編譯工作:
在開始安裝服務(wù)程序之前,需要執(zhí)行configure腳本,他會自動的對當(dāng)前系統(tǒng)進行一系列的評估,如源文件、軟件依賴性庫、編譯器、匯編器、連接器檢查等等,如果有需求,還可以使用--prefix參數(shù)來指定程序的安裝路徑(很實用),而當(dāng)腳本檢查系統(tǒng)環(huán)境符合要求后,則會在當(dāng)前目錄下生成一個Makefile文件。
[root@linuxprobe ~]# ./configure --prefix=/usr/local/program
第4步:生成安裝程序:
剛剛生成的Makefile文件會保存有系統(tǒng)環(huán)境依賴關(guān)系和安裝規(guī)則,接下來需要使用make命令來根據(jù)MakeFile文件提供的規(guī)則使用合適的SHELL來編譯所有依賴的源碼,然后make命令會生成一個最終可執(zhí)行的安裝程序。
[root@linuxprobe ~]# make
第5步:安裝服務(wù)程序:
如果在configure腳本階段中沒有使用--prefix參數(shù),那么程序一般會被默認(rèn)安裝到/usr/local/bin目錄中。
[root@linuxprobe ~]# make install
第6步:清理臨時文件(可選):
[root@linuxprobe ~]# make clean
卸載服務(wù)程序的命令(請不要隨便執(zhí)行!!!):
[root@linuxprobe ~]# make uninstall
其實讀者可能最納悶的是漫長的configure與make步驟,RPM包為什么就可以那么有效率的安裝,而不需要檢測系統(tǒng)環(huán)境呢?
其實原因很簡單,RPM軟件包是根據(jù)特定系統(tǒng)和平臺而指定的,經(jīng)常一種程序會提供很多RPM包的格式(如i386/x86_64等等),用戶需要找到適合當(dāng)前自己系統(tǒng)的RPM包后才能順利的安裝,而源碼包的程序作者肯定希望自己的軟件能夠被安裝到更多的系統(tǒng)中,被更多的用戶使用,所以就必需要用configure腳本來檢查用戶當(dāng)前系統(tǒng)的情況,最終制定出一份可行的安裝方案。
出現(xiàn)問題?大膽提問!
因讀者們硬件不同或操作錯誤都可能導(dǎo)致實驗配置出錯,請耐心再仔細(xì)看看操作步驟吧,不要氣餒~
Linux技術(shù)交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群。
*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學(xué)》的讀者,答疑更有針對性,不定期免費領(lǐng)取定制禮品。
20.2 部署LNMP架構(gòu)
LNMP(即Linux+Nginx+MYSQL+PHP)是目前非常熱門的動態(tài)網(wǎng)站部署架構(gòu),一般是指:
Linux:如RHEL、Centos、Debian、Fedora、Ubuntu等系統(tǒng)。
Nginx:高性能、低消耗的HTTP與反向代理服務(wù)程序。
MYSQL:熱門常用的數(shù)據(jù)庫管理軟件。
PHP:一種能夠在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語言。
通過將這四種開源軟件部署在一起,便成為了一個免費、高效、擴展性強、資源消耗低的動態(tài)網(wǎng)站環(huán)境了。
設(shè)置防火墻允許數(shù)據(jù)庫與網(wǎng)站服務(wù)策略:
[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
安裝編譯工具及庫文件(需要安裝的程序比較多,請復(fù)制全!):
[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服務(wù)
在前面的章節(jié)中我們學(xué)習(xí)了MariaDB數(shù)據(jù)庫管理系統(tǒng),那么這次實驗就學(xué)習(xí)下如何使用Mysql來管理數(shù)據(jù)庫吧。
創(chuàng)建用于執(zhí)行mysql服務(wù)程序的帳號:
[root@linuxprobe cmake-2.8.11.2]# cd .. [root@linuxprobe src]# useradd mysql -s /sbin/nologin
創(chuàng)建數(shù)據(jù)庫程序和文件的目錄,并設(shè)置目錄的所屬與所組:
[root@linuxprobe src]# mkdir -p /usr/local/mysql/var [root@linuxprobe src]# chown -Rf mysql:mysql /usr/local/mysql
安裝Mysql服務(wù)程序(解壓與編譯過程已省略):
[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
刪除系統(tǒng)默認(rèn)的配置文件:
[root@linuxprobe mysql-5.6.19]# rm -rf /etc/my.cnf
生成系統(tǒng)數(shù)據(jù)庫(生成信息已省略):
[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
創(chuàng)建配置文件的軟連接文件:
[root@linuxprobe mysql]# ln -s my.cnf /etc/my.cnf
將mysqld服務(wù)程序添加到開機啟動項:
[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為數(shù)據(jù)庫存放目錄。 basedir=/usr/local/mysql datadir=/usr/local/mysql/var
重啟mysqld服務(wù)程序:
[root@localhost mysql]# service mysqld start Starting MySQL. SUCCESS!
把mysql服務(wù)程序命令目錄添加到環(huán)境變量中(永久生效):
[root@linuxprobe mysql]# vim /etc/profile //在配置文件的最下面追加: export PATH=$PATH:/usr/local/mysql/bin [root@linuxprobe mysql]# source /etc/profile
將mysqld服務(wù)程序的庫文件鏈接到默認(rèn)的位置:
[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服務(wù)程序:
[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用戶設(shè)置的數(shù)據(jù)庫密碼。 Re-enter new password: 重復(fù)再輸入一次密碼。 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數(shù)據(jù)庫并取消對其的訪問權(quán)限)- 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(刷新授權(quán)表,讓初始化后的設(shè)定立即生效)... 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服務(wù)
Nginx是一款相當(dāng)優(yōu)秀的用于部署動態(tài)網(wǎng)站的服務(wù)程序,Nginx最初是為俄羅斯門戶站點而設(shè)計的網(wǎng)站服務(wù)軟件,作為一款輕量級的網(wǎng)站服務(wù)軟件,因其穩(wěn)定性和豐富的功能而深受信賴,但最最最被認(rèn)可的是低系統(tǒng)資源、占用內(nèi)存少且并發(fā)能力強,目前國內(nèi)如新浪、網(wǎng)易、騰訊等門戶站均在使用,市場占有份額一直保持在15-16%左右(2015年最新數(shù)據(jù))。
Nginx程序的穩(wěn)定性來自于它采用了分階段的資源分配技術(shù),使得CPU與內(nèi)存占用率會非常低,所以使用Nginx程序部署動態(tài)網(wǎng)站環(huán)境不僅十分的穩(wěn)定、高效,而且消耗更少的系統(tǒng)資源,豐富的模塊功能也幾乎與Apache程序數(shù)量相同,現(xiàn)在已經(jīng)完全的支持了proxy、rewrite、mod_fcgi、ssl、vhosts等常用模塊。而且還支持了熱部署技術(shù),即能夠可以7*24不間斷提供服務(wù),即便運行數(shù)月也無須重啟,而且還可以在不暫停服務(wù)的情況下直接對Nginx服務(wù)程序進行升級。
安裝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服務(wù)程序(解壓與編譯過程已省略):
[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服務(wù)程序命令目錄添加到環(huán)境變量中(永久生效):
[root@linuxprobe pcre-8.35]# vim /etc/profile //將配置文件最下面的參數(shù)追加參數(shù)為: export PATH=$PATH:/usr/local/mysql/bin:/usr/local/openssl/bin [root@linuxprobe pcre-8.35]# source /etc/profile
安裝zlib數(shù)據(jù)壓縮函數(shù)庫(解壓與編譯過程已省略):
[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
創(chuàng)建用于執(zhí)行nginx服務(wù)的用戶:
[root@linuxprobe zlib-1.2.8]# cd .. [root@linuxprobe src]# useradd www -s /sbin/nologin
安裝nginx服務(wù)程序(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
創(chuàng)建nginx程序腳本(將下面的參數(shù)直接復(fù)制進去即可):
[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服務(wù)程序并添加到開機啟動項:
[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服務(wù)是否順利運行:
20.2.3 配置php服務(wù)
安裝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標(biāo)簽圖像文件格式(解壓與編譯過程已省略):
[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格式)函數(shù)庫(解壓與編譯過程已省略):
[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格式)函數(shù)庫(解壓與編譯過程已省略):
[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圖片生成函數(shù)庫(解壓與編譯過程已省略):
[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
將函數(shù)庫文件放至合適的位置:
[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服務(wù)程序(命令比較長,請一定要復(fù)制完整!!!):
[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
復(fù)制php服務(wù)程序的配置文件到安裝目錄:
[root@linuxprobe php-5.5.14]# cp php.ini-production /usr/local/php/etc/php.ini
刪除默認(rèn)的php配置文件:
[root@linuxprobe php-5.5.14]# rm -rf /etc/php.ini
創(chuàng)建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服務(wù)程序的配置文件:
[root@linuxprobe php-5.5.14]# vim /usr/local/php/etc/php-fpm.conf //將第25行參數(shù)前面的分號去掉。 pid = run/php-fpm.pid //修改第148和149行,將user與group修改為www。 user = www group = www
添加php-fpm服務(wù)程序到開機啟動項:
[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
為了保障網(wǎng)站的安全性,禁用掉不安全的功能:
[root@linuxprobe php-5.5.14]# vim /usr/local/php/etc/php.ini //修改第305行的disable_functions參數(shù),追加參數(shù)為: 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服務(wù)程序支持php:
[root@linuxprobe php-5.5.14]# vim /usr/local/nginx/conf/nginx.conf
//將第2行前面的#號去掉并修改為user www www ;
//將第45行參數(shù)修改為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服務(wù)程序:
[root@linuxprobe php-5.5.14]# systemctl restart nginx [root@linuxprobe php-5.5.14]# systemctl restart php-fpm
20.3 選購服務(wù)器主機
網(wǎng)站是由域名、網(wǎng)頁源程序和主機空間組成的,其中主機空間則是用于存放網(wǎng)頁源代碼并能夠?qū)⒕W(wǎng)頁內(nèi)容展示給用戶,雖然本小節(jié)與Apache服務(wù)沒有直接關(guān)系,但如果您想要在互聯(lián)網(wǎng)中搭建網(wǎng)站并被順利訪問,主機空間一定不能選錯。 常見的主機空間包括虛擬主機、VPS、云服務(wù)器與獨立服務(wù)器:
虛擬主機:在一臺服務(wù)器中分出一定的磁盤空間供用戶放置網(wǎng)站、存放數(shù)據(jù)等,僅提供基礎(chǔ)的網(wǎng)站訪問、數(shù)據(jù)存放與傳輸流量功能,能夠極大的降低用戶費用,也幾乎不需要管理員維護除網(wǎng)站數(shù)據(jù)以外的服務(wù),適合小型網(wǎng)站。
VPS(Virtual Private Server):在一臺服務(wù)器中利用OpenVZ、Xen或KVM等虛擬化技術(shù)模擬出多個“主機”,每個主機都有獨立的IP地址、操作系統(tǒng),實現(xiàn)不同VPS之間磁盤空間、內(nèi)存、CPU資源、進程與系統(tǒng)配置間的完全隔離,管理員可自由使用分配到的主機中的所有資源,所以需要有一定的維護系統(tǒng)的能力,適合小型網(wǎng)站。
云服務(wù)器(ECS):是一種整合了計算、存儲、網(wǎng)絡(luò),能夠做到彈性伸縮的計算服務(wù),其使用起來與VPS幾乎一樣,但差別是云服務(wù)器建立在一組集群服務(wù)器中,每個服務(wù)器都會保存一個主機的鏡像(備份),大大的提升了安全穩(wěn)定性,另外還具備了靈活性與擴展性,用戶只需按使用量付費的即可,適合大中小型網(wǎng)站。
獨立服務(wù)器:這臺服務(wù)器僅提供給您使用,詳細(xì)來講又可以區(qū)分為租用方式與托管方式。
租用方式:用戶只需將硬件配置要求告知IDC服務(wù)商,服務(wù)器硬件設(shè)備由機房負(fù)責(zé)維護,運維管理員一般需要自行安裝相應(yīng)的軟件并部署網(wǎng)站服務(wù),租期可以為月、季、年,減輕了用戶初期對硬件設(shè)備的投入,適合大中型網(wǎng)站。 托管方式:用戶需要自行購置服務(wù)器后交給IDC服務(wù)供應(yīng)商的機房進行管理(繳納管理服務(wù)費用),用戶對服務(wù)器硬件配置有完全的控制權(quán),自主性強,但需要自行維護、修理服務(wù)器硬件設(shè)備,適合大中型網(wǎng)站。另外有必要提醒讀者,選擇主機空間供應(yīng)商時請一定要注意看口碑,綜合分析再決定購買,某些供應(yīng)商會有限制功能、強制添加廣告、隱藏扣費或強制扣費等惡劣行為,一定一定不要上當(dāng)!
20.4 搭建discuz論壇
將discuz論壇數(shù)據(jù)放至網(wǎng)站目錄(解壓過程已省略):
[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步,接受許可協(xié)議:
第2步,檢查部署環(huán)境:
第3步,選擇全新安裝discuzX論壇:
第4步,填寫數(shù)據(jù)庫與論壇管理員信息:
第5步,等待安裝完畢:
第6步,discuz論壇順利安裝完畢:
第7步,訪問論壇主頁面:
轉(zhuǎn)載于:https://www.cnblogs.com/linux130/p/5789580.html
總結(jié)
以上是生活随笔為你收集整理的第20章 使用LNMP架构部署动态网站环境的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 种植满口牙,总价大约需要多少钱?
- 下一篇: HDFS文件读写流程