WEB平台架构之:LAMP(Linux+Apache+MySQL+PHP)
WEB平臺架構之:LAMP(Linux+Apache+MySQL+PHP)
?
?從業界來看,最主流的web平臺架構就當屬LAMP了。LAMP架構可以說是一切web平臺的基礎架構,所有一切的所謂大型架構無非就是通過一些負載均衡技術,集群技術,緩存技術等結合LAMP平臺
組合而成以便來滿足現實生產環境中的需求。因此很有必要聊一聊LAMP平臺架構的搭建。本文會對LAMP平臺相對性的聊一聊其搭建過程,根據個人的知識知無不說,更多的技術將會陸續整理成博客文章。我的要求沒那么多,笨蛋的技術,只求看文章的人,都能白手起家,構建平臺。
環境說明:
?OS:CentOS6.5x65
?hostname:test1.lxm.com
?ip:10.0.10.11
?software:/root/soft
??apr-1.5.0.tar.gz
??apr-util-1.5.3.tar.gz
??httpd-2.4.6.tar.gz
??mysql-5.5.38.tar.gz
??php-5.5.16.tar.bz2
??libmcrypt-2.5.7.tar.gz
??mhash-0.9.9.tar.gz
??pcre-8.35.tar.gz
??openssl-1.0.1i.tar.gz
??xcache-3.1.0.tar.gz
??imagick-3.1.2.tgz
??ImageMagick-6.8.0-4.tar.gz
??
??
??
?software installation path:/usr/local
?
注:本實驗環境為單機環境,所有的操作都是在一臺機器上完成,這也是早期的單機架構。所謂分布式架構無非就是將這些在一臺上提供的服務分成多臺單獨提供服務,然后通過各自的接口整合起來共同運作而已。?
?其次本實驗中,關閉了iptables和selinux,如果你的環境中沒有關閉,請自行關閉,以便造成不必要的錯誤(而你又不會排錯,哈哈)
?
?
一:httpd服務搭建
?安裝httpd軟件,通常會一并安裝apr-util apr pcre 和openssl。其中apr-util apr 這兩個提供了httpd的運行環境,說白了是httpd程序運行的虛擬機環境,可以類比tomcat的jvm環境。
因此針對httpd軟件的升級通常也要考慮到apr運行環境的升級.pcre 提供正則表達式的功能,openssl提供https的功能,這兩個在LNMP中已經提及。
注:各位不要指望我把原理說得頭頭是道啊,某個軟件的詳細原理請各位自行看官方文檔。。。。。。我只是提出各位需要知道的重點內容。。。。
?
1.安裝apr
#cd /root/soft
#tar -zxvf apr-1.5.0.tar.gz
#cd apr-1.5.0
#mkdir /usr/local/apr
#./configure --prefix=/usr/local/apr/
?configure 如果成功會出現下面的內容:
configure: creating ./config.status
config.status: creating Makefile
config.status: creating include/apr.h
config.status: creating build/apr_rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating apr-1-config
config.status: creating apr.pc
config.status: creating test/Makefile
config.status: creating test/internal/Makefile
config.status: creating include/arch/unix/apr_private.h
config.status: executing libtool commands
rm: cannot remove `libtoolT': No such file or directory
config.status: executing default commands
?矣,這個地方發現好像有個錯誤:rm: cannot remove `libtoolT': No such file or directory ..這個錯誤真實個詬病,有兩種解決方法,一是忽略它,而是打開configure文件,
將其中$RM $cfgfile 這一行注釋掉,然后重新configure即可。
#make && make install
#make clean
如果上面的步驟,沒有出現什么錯誤,則表示apr已經安裝成功。。。
2.安裝apr-util
#cd /root/soft
#tar -zxvf apr-util-1.5.3.tar.gz
#cd apr-util-1.5.3
#mkdir /usr/local/apr-util
#./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr/
#make && make install
#make clean
執行上面的命令,如果沒有什么錯誤產生,則表示apr-util安裝成功..
3.安裝pcre
#cd /root/soft/
#tar -zxvf pcre-8.35.tar.gz
#cd pcre-8.35
#mkdir /usr/local/pcre
#./configure --prefix=/usr/local/pcre/
#make && make install
#make clean
執行上面的步驟,如果沒有什么錯誤產生,則表示pcre已經安裝成功...
不過我要給各位看下configure之后給出的信息:
pcre-8.35 configuration summary:
??? Install prefix .................. : /usr/local/pcre
??? C preprocessor .................. : gcc -E
??? C compiler ...................... : gcc
??? C++ preprocessor ................ : g++ -E
??? C++ compiler .................... : g++
??? Linker .......................... : /usr/bin/ld -m elf_x86_64
??? C preprocessor flags ............ :
??? C compiler flags ................ : -g -O2 -fvisibility=hidden
??? C++ compiler flags .............. : -O2 -fvisibility=hidden -fvisibility-inlines-hidden
??? Linker flags .................... :
??? Extra libraries ................. :
??? Build 8 bit pcre library ........ : yes
??? Build 16 bit pcre library ....... : no
??? Build 32 bit pcre library ....... : no
??? Build C++ library ............... : yes
??? Enable JIT compiling support .... : no
??? Enable UTF-8/16/32 support ...... : no
??? Unicode properties .............. : no
??? Newline char/sequence ........... : lf
??? \R matches only ANYCRLF ......... : no
??? EBCDIC coding ................... : no
??? EBCDIC code for NL .............. : n/a
??? Rebuild char tables ............. : no
??? Use stack recursion ............. : yes
??? POSIX mem threshold ............. : 10
??? Internal link size .............. : 2
??? Nested parentheses limit ........ : 250
??? Match limit ..................... : 10000000
??? Match limit recursion ........... : MATCH_LIMIT
??? Build shared libs ............... : yes
??? Build static libs ............... : yes
??? Use JIT in pcregrep ............. : no
??? Buffer size for pcregrep ........ : 20480
??? Link pcregrep with libz ......... : no
??? Link pcregrep with libbz2 ....... : no
??? Link pcretest with libedit ...... : no
??? Link pcretest with libreadline .. : no
??? Valgrind support ................ : no
??? Code coverage ................... : no
?
上面就是configure之后給出的信息,在這里可以看出有很多pcre的功能都是no,沒有開啟的狀態,如果你需要更強的正則功能,你可以考慮開啟某些功能。。。。但通常情況下,默認就夠了。
?
4.安裝openssl
#cd /root/soft
#tar -zxvf openssl-1.0.1i.tar.gz
#cd openssl-1.0.1i
#mkdir /usr/local/openssl
#./config -fPIC --prefix=/usr/local/openssl enable-shared?? //注意:這里是config 不是configure
#make && make install
#make clean
執行上面的步驟,如果沒有什么錯誤產生,表示openssl已經安裝成功。。。。。
5.安裝httpd
#cd /root/soft
#tar -zxvf httpd-2.4.6.tar.gz
#cd httpd-2.4.6
# CFLAGS="-m64 -O3" CXXFLAGS="-m64 -O3"? ./configure --prefix=/usr/local/apache24? --enable-rewrite --enable-shared=max? --enable-so? --enable-cache --enable-file-cache --enable-static-support? --enable-forward --enable-modules=all --enable-vhost-alias? --enable-mods-shared=all --enable-include --enable-headers --enable-deflate --enable-mpms-shared=all --with-mpm=prefork --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre/ --enable-expires --enable-ssl --with-ssl=/usr/local/openssl
#make && make install
#make clean
如果上面沒什么錯誤,就表示httpd已經安裝成功。。。。其次httpd的編譯參數也有很多,但是大多數功能已經包括。對于其編譯參數找個時間聊一聊。。。。
在新版的httpd軟件中,平時大家安裝時很可能會報下面的錯誤:
/usr/bin/ld: /usr/local/openssl/lib/libssl.a(s3_srvr.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/local/openssl/lib/libssl.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[4]: *** [mod_ssl.la] Error 1
make[4]: Leaving directory `/root/soft/httpd-2.4.6/modules/ssl'
make[3]: *** [shared-build-recursive] Error 1
make[3]: Leaving directory `/root/soft/httpd-2.4.6/modules/ssl'
make[2]: *** [shared-build-recursive] Error 1
make[2]: Leaving directory `/root/soft/httpd-2.4.6/modules'
make[1]: *** [shared-build-recursive] Error 1
make[1]: Leaving directory `/root/soft/httpd-2.4.6'
make: *** [all-recursive] Error 1
從上面的信息可見,包了ssl的錯誤,扒拉扒拉一大推,就是說找不到符號連接,讓我們用-fPIC重新編譯一下openssl.所以一開始編譯時,就要使用我上面的編譯參數
注意注意:到這里我突然有個想法,這裝來裝去是不是有人會問,為什么要編譯安裝啊,為什么要選擇這個版本啊? 我只想說,你想怎么裝怎么裝,只要你能用起來就行,至于版本的選擇,
你要想用低版本不升級我無所謂。。。。
注意:這里的編譯參數中pcre 和openssl都是安裝的目錄,而不是源碼目錄,這個和nginx是有大大的區別的。。。
測試:
?軟件安裝成功后,就要測試一下,httpd是否能夠提供正常的web服務。。。
[root@test1 /]# cd /usr/local/apache24/bin/
[root@test1 bin]# ./apachectl -k start? //啟動httpd服務
AH00557: httpd: apr_sockaddr_info_get() failed for test1.lxm.com
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message?
啊,第一次啟動,怎么了?不少人被嚇住了!看報錯信息,說apr沒有獲得為test1.lxm.com的sockaddr的地址信息,然后又報了一個說不能夠決定服務器的域名。此時查看一下httpd進程是否啟動:
[root@test1 bin]# ps aux | grep httpd
root????? 2547? 0.0? 0.4? 76680? 2064 ???????? Ss?? 14:54?? 0:00 /usr/local/apache24/bin/httpd -k start
daemon??? 2548? 0.0? 0.2? 76680? 1404 ???????? S??? 14:54?? 0:00 /usr/local/apache24/bin/httpd -k start
daemon??? 2549? 0.0? 0.2? 76680? 1404 ???????? S??? 14:54?? 0:00 /usr/local/apache24/bin/httpd -k start
daemon??? 2550? 0.0? 0.2? 76680? 1404 ???????? S??? 14:54?? 0:00 /usr/local/apache24/bin/httpd -k start
daemon??? 2551? 0.0? 0.2? 76680? 1404 ???????? S??? 14:54?? 0:00 /usr/local/apache24/bin/httpd -k start
daemon??? 2552? 0.0? 0.2? 76680? 1404 ???????? S??? 14:54?? 0:00 /usr/local/apache24/bin/httpd -k start
root????? 2556? 0.0? 0.1 103244?? 848 pts/0??? S+?? 14:54?? 0:00 grep httpd
[root@test1 bin]#
通過上面的信息,可知httpd進程還成功啟動了。到此,就要考慮為什么會出現這個錯誤呢?首先我們知道sockaddr其實就是socket地址,而test1.lxm.com是我的主機名,在sockaddr地址通信中主機名肯定是要解析成ip地址的,在看下面的一條報錯,說沒有找到域名,可以使用配置文件中的ServerName來設置,而在httpd.conf配置文件中默認ServerName選項是被注釋掉的。此時就要考慮會不會是在apache2.4版本中,因為沒有設置默認的域名而導致報錯呢?想到這,趕緊去修改httpd.conf配置文件
#vim /usr/local/apache24/conf/httpd.conf
#ServerName www.example.com:80
ServerName 10.0.10.11:80
修改上面的信息后,再次啟動測試:
[root@test1 bin]# pkill httpd
[root@test1 bin]#./apachectl -k start? //發現此時不報錯了。。
[root@test1 bin]# ps aux | grep httpd
root????? 2522? 0.0? 0.3? 72456? 1916 ???????? Ss?? 14:51?? 0:00 /usr/local/apache24/bin/httpd -k start
daemon??? 2523? 0.0? 0.2? 72456? 1372 ???????? S??? 14:51?? 0:00 /usr/local/apache24/bin/httpd -k start
daemon??? 2524? 0.0? 0.2? 72456? 1372 ???????? S??? 14:51?? 0:00 /usr/local/apache24/bin/httpd -k start
daemon??? 2525? 0.0? 0.2? 72456? 1372 ???????? S??? 14:51?? 0:00 /usr/local/apache24/bin/httpd -k start
daemon??? 2526? 0.0? 0.2? 72456? 1372 ???????? S??? 14:51?? 0:00 /usr/local/apache24/bin/httpd -k start
daemon??? 2527? 0.0? 0.2? 72456? 1372 ???????? S??? 14:51?? 0:00 /usr/local/apache24/bin/httpd -k start
root????? 2529? 0.0? 0.1 103244?? 848 pts/0??? S+?? 14:51?? 0:00 grep httpd
[root@test1 bin]#
通過上面的再次測試,發現錯誤已經解決,就是因為httpd進程在啟動時沒有提供默認的套接字信息,因而此時apr就會去使用主機名來當作域名,但是如果出現了該錯誤,說明/etc/hosts文件中肯定沒有綁定主機名的解析,所以報錯了. 由此可知另外一種解決辦法就是修改/etc/hosts文件,綁定主機名到ip地址的解析。
到此,一個完整的排錯就結束了。。沒那么復雜吧。。。
服務啟動之后,就要測試提供服務的能力了:
[root@test1 htdocs]# ls
index.html
[root@test1 htdocs]# pwd
/usr/local/apache24/htdocs
[root@test1 htdocs]# links --dump http://10.0.10.11
?????????????????????????????????? It works!
[root@test1 htdocs]#
由上面的信息可知,apache的測試頁面已經能夠正常顯示。因此一個httpd服務就安裝搭建完成。。。
?
二:MySQL服務搭建
1.安裝MySQL
#yum -y install zlib-devel openssl-devel ncurses-devel bison//因為下面編譯mysql用到了這幾個開發文件,所以必須安裝好
#cd /root/soft/
#tar -zxvf mysql-5.5.38.tar.gz
#cd mysql-5.5.38
#mkdir /usr/local/mysql
#useradd -s /sbin/nologin mysql -M
#cmake
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/data/mysqldata (注:這里在企業環境中,通常會用一個單獨的目錄來存放mysql的數據文件,如果業務小可以不用,默認放在/var/lib/mysql下面)
-DSYSCONFDIR=/etc
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock???
-DENABLED_LOCAL_INFILE=1
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0
-DMYSQL_TCP_PORT=3306?
-DEXTRA_CHARSETS=all?
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci???
-DWITH_EXTRA_CHARSETS:STRING=all?
-DMYSQL_USER=mysql?
-DWITH_DEBUG=0
#make
#make install
#make clean
#chown -R mysql.mysql /usr/local/mysql
#chown -R mysql.mysql /data/mysqldata
#cd /usr/local/mysql/scripts
#mysql_install_db --datadir=/data/mysqldata --basedir=/usr/local/mysql --user=mysql
#cd ../support-files
#cp my-large.cnf /etc/rc.d/my.cnf??? //這個配置文件只是為了應付初始化安裝的,生產環境中肯定還是要其他配置的。。。。
#cp -p mysql.server /etc/rc.d/init.d/mysqld
#chown -R root.mysql /usr/local/mysql
#service mysqld start
#mysqladmin -u root passwod "lxm"?? //設置MySQL root用戶的密碼
[root@test1 mysql]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.? Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.38-log Source distribution
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
由上面的信息可知,使用root用戶輸入密碼后可以登錄,表示mysql已經安裝成功。。。。
2.MySQL安全初始化
?這里的MySQL安全初始化并不是講什么大是大非,而是MySQL在安全完成后,某人有幾個空密碼的賬戶,需要隨手將其關閉。。。
?默認情況下,除了安裝時用mysqladmin設置的密碼,其他所有的用戶名都是空密碼,統統干掉。。。。
[root@test1 mysql]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.? Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.38-log Source distribution
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use mysql;
Database changed
mysql> delete from user where Password = '';
Query OK, 5 rows affected (0.00 sec)
由上面的信息,可知已經干掉。。。。是不是感覺安全了一點點。。。。
注:這里要特別強調一下的是mysql的用戶名到底指的是什么,在mysql中一個完整的用戶是 'hostname'@'username'的組合,而不是單獨分開的字段,那都不是mysql的用戶名。。。。
?
三:PHP服務搭建
1.安裝PHP
安裝必須的軟件包:
#yum -y install ncurses-devel? net-snmp-devel? bzip2 bzip2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel libxml2 libxml2-devel libxslt libxslt-devel zlib zlib-devel expat expat-devel openssl openssl-devel gd php-gd libjpeg libjpeg-devel libtool libtool-ltdl libtool-ltdl-devel
安裝libmcrypt和mhash? //這兩個東西都是為php提供加密算法相關的庫文件的
#cd /root/soft
#tar -zxvf libmcrypt-2.5.7.tar.gz
#cd libmcrypt-2.5.7
#mkdir /usr/local/libmcrypt
#./configure --prefix=/usr/local/libmcrypt
#make && make install
#make clean
#cd /root/soft
#tar -zxvf mhash-0.9.9.tar.gz
#cd mhash-0.9.9.9? // 這里注意下解壓出來的文件名,其實上面的應該是0.9.9.9 我把它給改了。。
#mkdir /usr/local/mhash
#./configure --prefix=/usr/local/mhash
#make && make install
#make clean
安裝php:
#cd /root/soft/
#tar -zxvf? php-5.5.16.tar.gz
#cd php-5.5.16
#mkdir /usr/local/php55
#CFLAGS="-m64 -O3" CXXFLAGS="-m64 -O3" ./configure --prefix=/usr/local/php55/? --with-apxs2=/usr/local/apache24/bin/apxs --with-libxml-dir=/usr/include/libxml2/ --with-config-file-path=/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-gd --enable-gd-native-ttf --with-zlib --with-mcrypt=/usr/local/libmcrypt/ --with-mhash=/usr/local/mhash/ --with-pdo-mysql=mysqlnd? --enable-shmop --enable-soap --enable-sockets --enable-wddx --enable-zip --with-xmlrpc --enable-mbstring --with-zlib-dir=/usr/lib --with-bz2 --with-curl --enable-exif --enable-ftp --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-freetype-dir=/usr/lib --with-pcre-dir --enable-bcmath --with-config-file-scan-dir=/etc/php.d/ --with-openssl
如果沒有錯誤,將會顯示下面的內容:
Generating files
configure: creating ./config.status
creating main/internal_functions.c
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
|??????????????????????? *** WARNING ***???????????????????????????? |
|??????????????????????????????????????????????????????????????????? |
| You have built PHP for Apache's current non-threaded MPM.????????? |
| If you change Apache to use a threaded MPM you must reconfigure??? |
| PHP with --enable-maintainer-zts?????????????????????????????????? |
+--------------------------------------------------------------------+
| License:?????????????????????????????????????????????????????????? |
| This software is subject to the PHP License, available in this???? |
| distribution in the file LICENSE.? By continuing this installation |
| process, you are bound by the terms of this license agreement.???? |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.??????????????????????????? |
+--------------------------------------------------------------------+
Thank you for using PHP.
config.status: creating php5.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands
注:這里似乎和nginx的有點不同啊,這里出了一個警告信息,意思是說你內建了php到apache非線程的工作模型當中,如果要支持apache的線程模型即需要使用--enable-maintainer-zts。這個跟apache的工作模型有關,apache有兩種典型的模型prefork和worker模型,如果你要支持worker模型,請添加--enable-maintainer-zts選項。。。。有人會問 你為什么不一開始說明?無非是
要是使你加深印象,沒經歷過的你永遠都記不住。。。。。
#make && make install
如果沒有錯誤將顯示下面的內容:
Installing shared extensions:???? /usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/
Installing PHP CLI binary:??????? /usr/local/php55/bin/
Installing PHP CLI man page:????? /usr/local/php55/php/man/man1/
Installing PHP FPM binary:??????? /usr/local/php55/sbin/
Installing PHP FPM config:??????? /usr/local/php55/etc/
Installing PHP FPM man page:????? /usr/local/php55/php/man/man8/
Installing PHP FPM status page:????? /usr/local/php55/php/fpm/
Installing PHP CGI binary:??????? /usr/local/php55/bin/
Installing PHP CGI man page:????? /usr/local/php55/php/man/man1/
Installing build environment:???? /usr/local/php55/lib/php/build/
Installing header files:????????? /usr/local/php55/include/php/
Installing helper programs:?????? /usr/local/php55/bin/
? program: phpize
? program: php-config
Installing man pages:???????????? /usr/local/php55/php/man/man1/
? page: phpize.1
? page: php-config.1
Installing PEAR environment:????? /usr/local/php55/lib/php/
[PEAR] Archive_Tar??? - installed: 1.3.12
[PEAR] Console_Getopt - installed: 1.3.1
[PEAR] Structures_Graph- installed: 1.0.4
[PEAR] XML_Util?????? - installed: 1.2.3
[PEAR] PEAR?????????? - installed: 1.9.5
Wrote PEAR system config file at: /usr/local/php55/etc/pear.conf
You may want to add: /usr/local/php55/lib/php to your php.ini include_path
/root/soft/php-5.5.16/build/shtool install -c ext/phar/phar.phar /usr/local/php55/bin
ln -s -f /usr/local/php55/bin/phar.phar /usr/local/php55/bin/phar
Installing PDO headers:????????? /usr/local/php55/include/php/ext/pdo/
#make clean
#cp php.ini-production /etc/php.ini
注意:這里編譯php直接整合到了apache中,而不是以單獨的形式存在,因此使用了--with-apxs2選項,而沒有使用--enable-fpm ,這兩個選項是不能共存的。為什么整合進apache中,因為如
果要動靜分離,完全可以是用nginx配置php,nginx的處理靜態文件的性能要比apache優越的多的多。。。而LAMP是一個古典型的架構,穩定。。
#cd /usr/local/php55/bin
#./php -m | less? //查看php的模塊,如果有抱不能加載的模塊,請刪除/etc/php.d/目錄下的所有內容,至于為什么請看我的LNMP中的介紹....后期會在單獨的php介紹中在挑出來。。。
?
2.PHP初始化工作
?對于PHP的初始化工作,一個典型的就是時區的設置,如果你不設置在某些頁面訪問時會在你的頁面頭部報一個大大的警告信息,你的日志中也會不停的提示這個警告信息,說你時區有問題
啊,要設置啊。。。
修改php.ini文件:
;date.timezone =
date.timezone = PRC
找到上面的指令選項,將時區設置為PRC 或者設置為你所在的標準時區,像中國大陸 就可以設置為Asia/Shanghai,但是這個跟系統的時區又有關系了,所以你在安裝系統的時候,選擇時區時就
需要選項Asia/Shanghai.關于時區的介紹,請看linux系統基礎分析。。。。
3.擴展常見的PHP模塊
?PHP有內建模塊也有擴展模塊,內建模塊在編譯的時候可以使用不同的選項來進行開啟,將其編譯進php中,而擴展模塊也是動態加載。接下來聊幾個常見的擴展模塊,讓你知道怎么樣給php
添加模塊.
?php源碼中自帶了很多模塊的編譯文件,如果編譯完php后,發現有的沒有編譯進去,又需要使用,此時可以將其編譯成動態模塊,然后動態加載。。php源碼所帶的模塊都在ext目錄下,
例如我這里的都在/root/soft/php-5.5.16/ext目錄下。
/root/soft/php-5.5.16/ext
[root@test1 ext]# ls
bcmath????? dba???????????????? fileinfo? iconv????? mbstring? odbc?????? pdo_firebird? phar??????? shmop????? sqlite3??? tokenizer? zip
bz2???????? dom???????????????? filter??? imap?????? mcrypt??? opcache??? pdo_mysql???? posix?????? simplexml? standard?? wddx?????? zlib
calendar??? enchant???????????? ftp?????? interbase? mssql???? openssl??? pdo_oci?????? pspell????? skeleton?? sybase_ct? xml
com_dotnet? ereg??????????????? gd??????? intl?????? mysql???? pcntl????? pdo_odbc????? readline??? snmp?????? sysvmsg??? xmlreader
ctype?????? exif??????????????? gettext?? json?????? mysqli??? pcre?????? pdo_pgsql???? recode????? soap?????? sysvsem??? xmlrpc
curl??????? ext_skel??????????? gmp?????? ldap?????? mysqlnd?? pdo??????? pdo_sqlite??? reflection? sockets??? sysvshm??? xmlwriter
date??????? ext_skel_win32.php? hash????? libxml???? oci8????? pdo_dblib? pgsql???????? session???? spl??????? tidy?????? xsl
[root@test1 ext]#
這里我不講怎么動態的添加這些模塊,因為方法跟我接下來要講的添加擴展模塊的方法是一樣的。。。。
1)安裝ImageMagick+imagick代替gd渲染圖片
?imagick是一個PHP的擴展,用ImageMagick提供的API來進行圖片的創建與修改,不過這些操作已經包裝到擴展imagick中去了,最終調用的是ImageMagick提供的API
?ImageMagick是一套軟件系列,主要用于圖片的創建、編輯以及轉換等,詳細的解釋見ImageMagick的官方網站http://www.p_w_picpathmagick.org/,ImageMagick比GD的性能要高很多,
如果是在處 理大量的圖片時更加能體現ImageMagick的性能。
由于安裝imagick擴展時需要依賴ImageMagick的函數庫,因此必須要先安裝ImageMagick
安裝ImageMagick
#cd /root/soft
#tar -jxvf ImageMagick-6.8.0-4.tar.bz2
#cd ImageMagick-6.8.0-4
#mkdir /usr/local/p_w_picpathmagick
#chmod -R 775 p_w_picpathmagick
#./configure --prefix=/usr/local/p_w_picpathmagick
configure完成后會出現下面的信息:
????????????????? Option??????????????????????? Value
-------------------------------------------------------------------------------
Shared libraries? --enable-shared=yes??yes
Static libraries? --enable-static=yes??yes
Module support??? --with-modules=no??no
GNU ld??????????? --with-gnu-ld=yes??yes
Quantum depth???? --with-quantum-depth=16?16
High Dynamic Range Imagery
????????????????? --enable-hdri=no??no
Delegate Configuration:
BZLIB???????????? --with-bzlib=yes??yes
Autotrace???????? --with-autotrace=no??no
Dejavu fonts????? --with-dejavu-font-dir=default?none
DJVU????????????? --with-djvu=yes??no
DPS?????????????? --with-dps=yes??no
FFTW????????????? --with-fftw=yes??no
FlashPIX????????? --with-fpx=yes??no
FontConfig??????? --with-fontconfig=yes??no
FreeType????????? --with-freetype=yes??yes
GhostPCL????????? None????pcl6 (unknown)
GhostXPS????????? None????gxps (unknown)
Ghostscript?????? None????gs (unknown)
Ghostscript fonts --with-gs-font-dir=default?none
Ghostscript lib?? --with-gslib=no??no
Graphviz????????? --with-gvc=no??
JBIG????????????? --with-jbig=yes??no
JPEG v1?????????? --with-jpeg=yes??yes
JPEG-2000???????? --with-jp2=yes??no
LCMS v1?????????? --with-lcms=yes??no
LCMS v2?????????? --with-lcms2=yes??no
LQR?????????????? --with-lqr=yes??no
LTDL????????????? --with-ltdl=yes??no
LZMA????????????? --with-lzma=yes??no
Magick++????????? --with-magick-plus-plus=yes?yes
OpenEXR?????????? --with-openexr=yes??no
PERL????????????? --with-perl=no??no
PANGO???????????? --with-pango=yes??no
PNG?????????????? --with-png=yes??yes
RSVG????????????? --with-rsvg=no??no
TIFF????????????? --with-tiff=yes??no
WEBP????????????? --with-webp=yes??no
Windows fonts???? --with-windows-font-dir=?none
WMF?????????????? --with-wmf=no???no
X11?????????????? --with-x=???no
XML?????????????? --with-xml=yes??yes
ZLIB????????????? --with-zlib=yes??yes
從上面的信息可以看到支持那些格式的文件和圖片,如果沒有你需要的請自行安裝。。。。
#make && make install
#make clean
安裝imagick
#cd /root/soft
#tar -zxvf imagick-3.1.2.tgz
#cd imagick-3.1.2
#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php55/bin/php-config --with-imagick=/usr/local/p_w_picpathmagick
#make
#make install
執行make install后,會將p_w_picpathmagick的動態庫和相關的頭文件安裝到php下對應的目錄中:
Installing shared extensions:???? /usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/
Installing header files:????????? /usr/local/php55/include/php/
#make clean
[root@test1 imagick-3.1.2]# cd /usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/
[root@test1 no-debug-non-zts-20121212]# ls
imagick.so? opcache.so
[root@test1 no-debug-non-zts-20121212]#
由上面的信息,可知確實將模塊安裝到了該路徑下。
整合imagick到php中
創建/etc/php.d/imagick.ini文件,內容如下:
[root@test1 no-debug-non-zts-20121212]# cat /etc/php.d/imagick.ini
extension=/usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/imagick.so?? //指定動態模塊的路徑
[root@test1 no-debug-non-zts-20121212]#
檢測模塊是否成功加載:
[root@test1 no-debug-non-zts-20121212]# cd /usr/local/php55/bin/
[root@test1 bin]# ./php -m | grep imagick
imagick
[root@test1 bin]#
由上面的測試可知,已經成功加載。。。。
到此,一個完整的添加php模塊的過程就結束了。。。所有的php動態模塊的添加都是這個步驟。。。
2)整合Zend Opcache
?從php5.5之后,zend optimizer+的功能已經集成到php的內核里面了,不在需要重新編譯安裝模塊,而在早起的php版本中,都還需要安裝zendopcache之類的東東。。現在已經不需要的。。
[root@test1 php55]# cd /usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/
[root@test1 no-debug-non-zts-20121212]# ls
imagick.so? opcache.so
[root@test1 no-debug-non-zts-20121212]#
由上面的信息可知opcache已經被集成了,php安裝好之后就已經安裝了,但是默認并沒有加載,請看:
[root@test1 bin]# /usr/local/php55/bin/php -m | grep -i Zend
[Zend Modules]
[root@test1 bin]#
查看zend模塊,沒有任何的信息。。。。
加載并配置opcache:
#vim /etc/php.d/opcache.ini //內容如下
[opcache]
zend_extension ="/usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/opcache.so"
opcache.memory_consumption=128
opcache.optimization_level=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4096
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable=1
opcache.enable_cli=1?
?
檢查:
[root@test1 bin]# /usr/local/php55/bin/php -m | grep -i Zend
Zend OPcache
[Zend Modules]
Zend OPcache
[root@test1 bin]#
[root@test1 bin]# /usr/local/php55/bin/php -v
PHP 5.5.16 (cli) (built: Aug 28 2014 16:49:16)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
??? with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
[root@test1 bin]#
由上面的信息,可以看出zend opcache已經生效了。。
說明:
?在php5.5的版本中,zend engine已經被集成到php中,安裝完php之后你可以使用php -v來查看,或者使用php.info的測試頁來查看,而早期的版本,你還需要單獨安裝zend engine。
?zend engine 是用來優化php代碼的執行,將php的代碼先分析編譯轉換成二進制的opcode代碼,然后zend直接去執行opcode,大大提高了執行的速度。。
?
3)Xcache
?Xcache的功能是用來緩存opcode,加速PHP的執行速度,可以簡單的說為是PHP的加速器。。。。
php5.4以上的版本必須使用XCache2.0以上才能支持
安裝:
#tar -jxvf xcache-3.1.0.tar.gz
#cd? xcache-3.1.0.tar.gz
#/usr/local/php55/bin/phpize???
#./configure --enable-xcache --with-php-config=/usr/local/php55/bin/php-config
#make && make install
Installing shared extensions:???? /usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/
#make clean
注意:在安裝xcache的時候,一定要注意版本的問題,php的版本越高,需要的xcache的版本就要高,否則會出現zend 不支持的錯誤,例如:make: *** [processor.out.c] Error 1
整合xcache到php;
[root@test1 xcache-3.1.0]# ls
acinclude.m4??? config.log???? gen_structinfo.awk? Makefile??????????? mod_coverager???? run-tests.php???? xcache.ini
aclocal.m4????? config.m4????? htdocs????????????? Makefile.frag?????? mod_decoder?????? run-xcachetest??? xcache.la
AUTHORS???????? config.nice??? include???????????? Makefile.frag.deps? mod_disassembler? structinfo.m4???? xcache.lo
autom4te.cache? config.status? includes.c????????? Makefile.fragments? mod_encoder?????? tests???????????? xcache-test.ini
bin???????????? config.sub???? includes.i????????? Makefile.global???? mod_optimizer???? THANKS??????????? xcache-zh-gb2312.ini
build?????????? configure????? INSTALL???????????? Makefile.objects??? modules?????????? util????????????? xc_processor.c.h
ChangeLog?????? configure.in?? install-sh????????? missing???????????? NEWS????????????? xcache??????????? xc_processor.h
config.guess??? config.w32???? lib???????????????? mkinstalldirs?????? processor???????? xcache.c
config.h??????? COPYING??????? libtool???????????? mod_assembler?????? processor.out.c?? xcache_globals.h
config.h.in???? devel????????? ltmain.sh?????????? mod_cacher????????? README??????????? xcache.h
[root@test1 xcache-3.1.0]# cp xcache.ini /etc/php.d/
[root@test1 xcache-3.1.0]# vim /etc/php.d/xcache.ini
將:
extension = xcache.so
修改為:
extension = /usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/xcache.so
[root@test1 xcache-3.1.0]# /usr/local/php55/bin/php -m | grep -i -A6 "Zend"
Zend OPcache
zip
zlib
[Zend Modules]
XCache
XCache Cacher
Zend OPcache
[root@test1 xcache-3.1.0]# /usr/local/php55/bin/php -v
PHP 5.5.16 (cli) (built: Aug 28 2014 16:49:16)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
??? with XCache v3.1.0, Copyright (c) 2005-2013, by mOo
??? with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
??? with XCache Cacher v3.1.0, Copyright (c) 2005-2013, by mOo
[root@test1 xcache-3.1.0]#
由上面的信息可知xcache整合成功。。。。。
到此,基本上php常見的幾個擴展模塊,都已經做了整合。。。。。
?
四:LAMP平臺整合??
1.httpd整合php
?httpd整合php的方法有三種:
1)常見方法一
#vim /usr/local/apache24/conf/httpd.conf
加載php5模塊:
找到AddType選項的位置,增加兩行內容:
找到DirectoryIndex,添加php文件的索引文件:
?
?
2)常見方法二
#vim /usr/local/apache24/conf/httpd.conf
加載php5模塊:
添加php5 AddHandler:
?
找到DirectoryIndex,添加php文件的索引文件:
?
3)fastcgi的方式,但是由于該文檔中編譯安裝時使用的是--with-apxs2而不是--enable-fpm,所以無法測試該方法。其次,如果php使用fastcgi的方式來管理,建議和nginx聯合使用。。
選擇上面的任意一種方式整合httpd和php,然后在/usr/local/apache24/htdocs目錄中創建一個index.php的測試頁,重啟httpd服務,訪問測試頁,如果能看到測試頁,則整合成功,否則看日志排錯。
index.php測試頁內容:
<?php
phpinfo();
?>
注意:這個測試頁一定要記住啊。。。。
此外,介紹一個指定php.ini文件的知識點:PHPIniDir? 在配置文件中使用該選項可以指定php.ini文件在任何的位置。。
example:
PHPIniDir "/usr/local/apache24/conf/php.ini"
?
2.php整合MySQL測試
?關于php整合mysql的測試,在LNMP架構中已經有所介紹,這里不在細說,直接上測試代碼:
#vim /usr/local/apache24/htdocs/index.php
修改內容如下:
<?php
$links=mysql_connect('localhost','root','lxm');
if ($links)
??? echo "yes";
else
??? echo "no";
?>
#vim /etc/php.ini
mysql.default_socket = /tmp/mysqld.sock????
注:修改mysql的socket位置是因為編譯時使用了mysqlnd,查找時默認查找的是/var/lib/mysql/mysqld.sock。所以必須修改,否則會報mysql_connect函數找不到。。
#/usr/local/apache24/bin/apachectl -k restart
測試;
[root@test1 bin]# links --dump http://10.0.10.11/index.php
?? yes
[root@test1 bin]#
可見測試成功,,到此一個完整的LAMP平臺就基本搭建完成了。。。。
附:
?源碼編譯的httpd默認沒有LSB格式的啟動腳步,如果需要到網上down一個,或者使用rpm包提供的httpd啟動腳步,修改一下。此外有需要軟件包的,可以跟我要。。。。。
到此,LAMP平臺架構就聊到這里,更多技術請看下回分解。。。。。
??
?笨蛋的技術------不怕你不會!!!!
??
轉載于:https://blog.51cto.com/mingyang/1546449
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的WEB平台架构之:LAMP(Linux+Apache+MySQL+PHP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FFmpeg - 音频解码过程
- 下一篇: SEO之基础篇(一)