天天看點

Nginx實戰基礎篇七 最新源碼包通過腳本部署LAMP搭建Discuz論壇

LAMP是一個縮寫,它指一組通常一起使用來運作動态網站或者伺服器的自由軟體:Linux+Apache+MySQL+php,自從Nginx的出現,Apache的一部分市場佔有率被Nginx獲得,原因是由于Apache的高并發性能不及Nginx.前不久Apache團隊釋出了httpd的2.4版本,性能上做了非常大的提升,為的就是挽回失去的市場佔有率,當然2.4版本剛剛出來不久,需要1-2年的時間才能夠流通.本實驗就是通過安裝2.4版本,mysql用的是mysql-5.5版本進行安裝部署的.接着我們開始進入LAMP搭建。現實生産環境下,不同的業務需求都不相同,是以更多的企業會考慮使用源碼搭建LAMP環境,這樣可以更加靈活使用各個功能參數将性能調制到最佳狀态。當然如果貴公司的環境比較簡單,可以考慮rpm包安裝。

注意:本實驗環境基本上都是從各大官網下載下傳的最新安裝包。 

[root@rhel6u3-4 ~]# uname -r 

2.6.32-279.el6.i686 

[root@rhel6u3-4 ~]# cat /etc/redhat-release  

Red Hat Enterprise Linux Server release 6.3 (Santiago) 

[root@rhel6u3-4 ~]# 

[root@rhel6u3-4 ~]# cd mypackages/ 

[root@rhel6u3-4 mypackages]# ll 

-rwxr-xr-x.  1 root  root    982243 Dec 18 07:24 apr-1.4.6.tar.gz 

-rwxr-xr-x.  1 root  root    774770 Dec 18 07:24 apr-util-1.4.1.tar.gz 

-rw-r--r--.  1 root  root   9489788 Mar  1 19:21 Discuz.zip 

-rwxr-xr-x.  1 root  root   1273059 Dec 18 07:24 gd-2.0.34.tar.gz 

-rwxr-xr-x.  1 root  root   5616185 Dec 18 07:24 httpd-2.4.2.tar.gz 

-rwxr-xr-x.  1 root  root    875425 Dec 18 07:24 libmcrypt-2.5.8.tar.bz2 

-rwxr-xr-x.  1 root  root    655906 Dec 18 07:24 mhash-0.9.9.9.tar.bz2 

-rwxr-xr-x.  1 root  root  24660795 Dec 18 07:25 mysql-5.5.25a.tar.gz 

-rwxr-xr-x.  1 root  root  14060505 Dec 18 07:25 php-5.4.4.tar.gz 

-rwxr-xr-x.  1 root  root    782725 Dec 18 07:25 re2c-0.13.5.tar.gz 

-rwxr-xr-x.  1 root  root    134833 Dec 18 07:25 xcache-2.0.1.tar.gz 

-rw-r--r--.  1 root  root   4323279 Dec 11  2009 phpMyAdmin-2.11.0-all-languages.tar.gz 

[root@rhel6u3-4 mypackages]# 

 <b>二、開始安裝部署</b><b>LAMP</b>

<b>腳本如下</b>

[root@rhel6u3-4 mypackages]# vim packages  \\由于整個環境會涉及比較多的依賴關系包,是以我們先将一些依賴包裝上。(根據不同的環境可能不僅限于這些包)這裡建立了一個安裝依賴包的函數,在腳本中調用即可. 

#Install install LAMP from dependent Packages! 

PKG='gcc-c++ flex bison autoconf  automake libpng-devel libjpeg-devel freetype-devel openjpeg-libs fontconfig-devel libXpm-devel cmake ncurses-devel apr-devel pcre-devel apr-util-devel openssl-devel libxml2-devel curl-devel'  \\可以将所需要的包全部解除安裝裡面進行安裝 

\\以下是個查詢包是否安裝機制,如果沒有安裝則安裝 

for i in $PKG 

   do 

       rpm -q $i &amp;&gt; /dev/null 

       [ $? -ne 0 ] &amp;&amp; UNPKG="$UNPKG $i"  

   done 

       [ -n "$UNPKG" ] &amp;&amp; yum install $UNPKG -y  

echo "Dependent Packages install OK...." 

[root@rhel6u3-4 mypackages]# vim lamp.sh //以下是LAMP搭建腳本 

#!/bin/bash 

#install LAMP from Source Packages 

#Designed by xiaonuo http://dreamfire.blog.51cto.com  www.rsyslog.org   

#If you have any questions,please send e-mail to [email protected]  

#install dependent Package for LAMP, Please submit all source package into the directory ~/mypackages! 

mkdir -p  ~/mypackages 

yum clean all 

yum makecache 

.  ~/mypackages/packages \\調用函數安裝系統依賴包 

\\除了這些redhatCD光牒自帶的包以外,還有一些其他的源碼包。 

#install GD2 \\GD2是一個生成圖檔所使用的依賴包 

cd ~/mypackages/ 

tar xf gd-2.0.34.tar.gz 

cd gd-2.0.34 

./configure --prefix=/usr/local/gd2 

make &amp;&amp; make install 

#install apr \\apr是apache的一個依賴包,雖然系統是自帶這個包,但是版本太低,不适用于apache2.4版本。 

tar xf apr-1.4.6.tar.gz 

cd apr-1.4.6 

./configure --prefix=/usr/local/apr 

#install apr-util 

tar xf apr-util-1.4.1.tar.gz 

cd apr-util-1.4.1 

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ 

# install libmcrypt mhash \\linmcrypt與mhash是php會依賴的一些包 

tar xf libmcrypt-2.5.8.tar.bz2 

cd libmcrypt-2.5.8 

./configure --prefix=/usr/local/libmcrypt 

tar xf mhash-0.9.9.9.tar.bz2 

cd mhash-0.9.9.9 

./configure --prefix=/usr/local/mhash 

#install mysql-5.5.25 and configure mysql! \\Mysql這些選擇的是mysql5.5版本,些版本一改原有的編譯方式,使用cmake代替了原來的configure。 

useradd mysql 

tar xf mysql-5.5.25a.tar.gz 

cd mysql-5.5.25a 

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/var/lib/mysql 

cmake . -LH檢視幫助,類似于./configure –help 

-DCMAKE_INSTALL_PREFIX= 指定安裝主目錄 

-DMYSQL_DATADIR 指定庫檔案存放目錄 

-DMYSQL_UNIX_ADDR 指定socket檔案所在路徑 

-DDEFAULT_CHARSET 指定使用的預設字元編碼 

-DDEFAULT_COLLATION 指定使用的預設字元規則 

-DWITH_EXTRA_CHARSETS 其他字元碼支援 

-DWITH_MYISAM_STORAGE_ENGINE 編譯myisam存儲引擎 

-DWITH_INNOBASE_STORAGE_ENGINE 編譯innodb存儲引擎 

-DWITH_READLINE 增加readline支援,通過 readline,可以友善的在指令行上面移動,增删,複制,粘貼,搜尋。 

-DENABLED_LOCAL_INFILE 讓mysql支援從本地檔案導入資料庫\\ 

cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf 

sed -i '37iuser = mysql' /etc/my.cnf 

mkdir /var/lib/mysql/ 

chown mysql. /var/lib/mysql 

echo "export PATH=$PATH:/usr/local/mysql/bin/" &gt;&gt; ~/.bashrc 

. ~/.bashrc 

/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysql --basedir=/usr/local/mysql --builddir=/usr/local/mysql 

cp ~/mypackages/mysql-5.5.25a/support-files/mysql.server /etc/init.d/mysqld  \\建立啟動腳本 

chmod 755 /etc/init.d/mysqld 

service mysqld start 

chkconfig --add mysqld 

mysqladmin password '123.com'  \\建立root密碼 

#install httpd 

tar xf httpd-2.4.2.tar.gz 

cd httpd-2.4.2 

./configure --prefix=/usr/local/apache2 --enable-cache --enable-cache-disk --enable-so --enable-sed --enable-http --enable-mpms-shared=all --enable-cgid --enable-rewrite --enable-vhost-alias --enable-ssl --with-mpm=event --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ 

/usr/local/apache2/bin/apachectl start 

links -dump 127.0.0.1  \\完成之後記得測試httpd環境是否OK 

echo 'If you see It works!,Congratulation! Please press enter ' 

#read \\如果你不放心,可以設定斷點,先測試網站是否可以通路,如果OK,按回車繼續即可 

## install php 

tar xf php-5.4.4.tar.gz 

cd php-5.4.4 

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-config-file-scan-dir=/usr/local/php/etc/php.d --with-mysqli=/usr/local/mysql/bin/mysql_config --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --with-pdo-mysql=/usr/local/mysql/ --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-mcrypt=/usr/local/libmcrypt/ --with-gd --enable-gd-native-ttf --with-openssl --with-mhash=/usr/local/mhash/ --enable-pcntl --enable-sockets --enable-zip --enable-soap --with-apxs2=/usr/local/apache2/bin/apxs --enable-cgi --disable-cli 

php常見參數介紹 

--with-config-file-path與--with-config-file-scan-dir在指定php配置檔案的路徑 

--with-mysql和--with-mysqli在指定你的mysql的位置和它的相關工具 

--with-iconv-dir,--with-freetype-dir,-with-jpeg-dir,--with-png-dir,--withgd,--with-zlib,--with-libxml-dir這些都是在啟用對某種檔案的支援 

--with-curl和--with-curlwrappers是用于支援curl函數,此函數允許你用不同的協定連接配接和溝通不同的伺服器 

--with-openssl,--with-mhash,--with-mcrypt這都是和加密有關的參數,啟用它們是為了讓php可以更好的支援各種加密。 

"--enable-bcmath" 高精度數學運算元件。 

"--enable-shmop" 和 "--enable-sysvsem" 使得你的PHP系統可以處理相關的IPC函數 。IPC是一個Unix标準通訊機制,它提供了使得在同一台主機不同程序之間可以互相通訊的方法。 

"--enable-inline-optimization" 棧堆指針和優化線程。 

"--enable-pcntl" 多線程優化。 

mkdir /usr/local/php/etc 

cp ~/mypackages/php-5.4.4/php.ini-production /usr/local/php/etc/php.ini 

#install re2c xcache \\XCache是一個開源的opcode和var的緩存器,其工作原理是通過記憶體來緩存php的編譯結果,當使用者讀取php網頁時背景的php編譯器不參加編譯工作,而是将記憶體中的結果直接供使用者讀取,進而減輕頻繁編譯對伺服器造成的壓力。與同類的apc、eaccelerator相比XCache具有覆寫速度快、大流量/高負載的機器上運作穩定、能夠快速跟進php版本。安裝xcache之前先安裝xcache的一個信賴包re2c。之後安裝xcache 

tar xf re2c-0.13.5.tar.gz 

cd re2c-0.13.5 

./configure 

tar xf xcache-2.0.1.tar.gz 

cd xcache-2.0.1 

/usr/local/php/bin/phpize 

./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config --enable-xcache-optimizer --enable-xcache-assembler --enable-xcache-encoder --enable-xcache-decoder 

#Configure Xcache 

cp -r ~/mypackages/xcache-2.0.1/admin/ /usr/local/apache2/htdocs/ 

chmod 755 /usr/local/apache2/htdocs/admin 

chmod a+r /usr/local/apache2/htdocs/admin/* 

mkdir -p  /usr/local/php/etc/php.d 

cp ~/mypackages/xcache-2.0.1/xcache.ini /usr/local/php/etc/php.d/ 

#vim /usr/local/php/etc/php.d/xcache.ini 

XCACHE=$(find /usr/local/php/ -name xcache.so) \\建立一個變量内容為xcache.so的路徑 

sed -i "s%/usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache\.so%$XCACHE%" /usr/local/php/etc/php.d/xcache.ini   

sed -i 's%mOo%admini%' /usr/local/php/etc/php.d/xcache.ini  \\建立使用者名為admini 

sed -i 's%^xcache\.admin\.pass.*%xcache.admin.pass = "cbff36039c3d0212b3e34c23dcde1456"%' /usr/local/php/etc/php.d/xcache.ini \\建立密碼為123.com, xcache.admin.pass 是一個通過md5加密之後的密碼 

cat &gt;&gt; /usr/local/apache2/htdocs/phpinfo.php &lt;&lt;endf \\建立PHP測試 

&lt;?php 

phpinfo(); 

?&gt;; 

endf 

echo "please input http://127.0.0.1/phpinfo.php to IE! if it's ok,please press enter " 

#read\\可設定斷點測試php是否OK 

#vim /usr/local/apache2/conf/httpd.conf \\配置apache與php內建 

sed -i '375iAddType application/x-httpd-php \.php' /usr/local/apache2/conf/httpd.conf \\在375行下面插入一行 

sed -i 's%index\.html%index.html index.php%' /usr/local/apache2/conf/httpd.conf \\寫上index.php首頁 

sed -i  '/httpd-mpm\.conf/s/#//' /usr/local/apache2/conf/httpd.conf  

sed -i  '/httpd-vhosts\.conf/s/#//' /usr/local/apache2/conf/httpd.conf \\開啟虛拟主機 

sed -i  '/httpd-info\.conf/s/#//' /usr/local/apache2/conf/httpd.conf  

sed -i  '/httpd-default\.conf/s/#//' /usr/local/apache2/conf/httpd.conf 

\\注意:以上 4 個擴充配置檔案中的設定需要根據實際需要進行更改。 

mkdir -p /usr/local/apache2/htdocs/bbs \\建立虛拟主機目錄,可更換為其他目錄 

#vim /usr/local/apache2/conf/extra/httpd-vhosts.conf  

cat &gt;/usr/local/apache2/conf/extra/httpd-vhosts.conf &lt;&lt;endf   

NameVirtualHost  *:80 

&lt;VirtualHost *:80&gt;  \\建立虛拟主機1,用于配置通路DZ論壇 

    ServerAdmin [email protected] 

    DocumentRoot "/usr/local/apache2/htdocs/bbs" 

    ServerName bbs.rsyslog.org 

    ErrorLog "logs/bbs.rsyslog.org-error_log" 

    CustomLog "logs/bbs.rsyslog.org-access_log" common 

&lt;/VirtualHost&gt; 

&lt;VirtualHost *:80&gt; \\配置虛拟主機2,用于通路xcache管理頁面以及md5加密生成頁面 

    DocumentRoot "/usr/local/apache2/htdocs/admin" 

    ServerName admin.rsyslog.org 

    ErrorLog "logs/admin.rsyslog.org-error_log" 

    CustomLog "logs/admin.rsyslog.org-access_log" common 

/usr/local/apache2/bin/apachectl stop 

#http://admin.rsyslog.org/index.php  Look xcache status! Need input username and password! 

#http://admin.rsyslog.org/mkpassword.php  Create MD5 password 

#http://bbs.rsyslog.org/install  Install Discuz 

#http://bbs.rsyslog.org  Access Discuz! 

\\以上腳本結束 

請在DNS中添加A記錄 

bbs A   192.168.100.104 

admin   A   192.168.100.104 

<b>實驗結果如下</b><b>:</b>

<a target="_blank" href="http://blog.51cto.com/attachment/201304/123252305.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201304/123304797.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201304/123316296.png"></a>

<b>實驗擴充</b><b></b>

<b></b>

<b>1、   </b><b>安裝</b><b>mysqladmin</b><b>管理</b><b>mysql</b>

[root@rhel6u3-4 admin]# mkdir /usr/local/apache2/htdocs/admin/phpmyadmin 

[root@rhel6u3-4 mypackages]# tar xf phpMyAdmin-2.11.0-all-languages.tar.gz 

[root@rhel6u3-4 mypackages]# cp -rp phpMyAdmin-2.11.0-all-languages/* /usr/local/apache2/htdocs/admin/phpmyadmin/ 

[root@rhel6u3-4 mypackages]# cd /usr/local/apache2/htdocs/admin/phpmyadmin/ 

[root@rhel6u3-4 phpmyadmin]# cp -p config.sample.inc.php config.inc.php 

[root@rhel6u3-4 phpmyadmin]# vim config.inc.php 

$cfg['blowfish_secret'] = 'rsyslog.org'; 

<a target="_blank" href="http://blog.51cto.com/attachment/201304/123405991.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201304/123418868.png"></a>

<b>以上為最簡單的配置</b><b>,</b><b>可以看到</b><b>phpmyadmin</b><b>可以對資料庫進行備份恢複、對表進行填寫修改删除等操作,相對于指令操作而言還是挺友善的。</b><b></b>

<b> </b>

<b>2、   </b><b>優化</b><b>php,</b><b>提高安全性</b><b></b>

注意:以下為php的内部函數部分,可根據公司開發人員或者自身需求而定。

[root@rhel6u3-4 admin]# vim /usr/local/php/etc/php.ini 

disable_functions = phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec, 

proc_open,proc_get_status,error_log,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,sy mlink,leak, popepassthru,stream_socket_server 

<b>3、   </b><b>給論壇導入資料(</b>一個遊戲論壇的資料,呵呵!<b>)</b>

[root@rhel6u3-4 mypackages]# cp dbbackup.sql  /var/lib/mysql/ 

[root@rhel6u3-4 mysql]# mysql -uroot –p 

mysql&gt; use dz_bbs 

mysql&gt; source dbbackup.sql 

<a target="_blank" href="http://blog.51cto.com/attachment/201304/123524186.png"></a>

後面陸續會講 web層的負載均衡,負載均衡層的高可用,資料庫的負載均衡等等

本文轉自淩激冰51CTO部落格,原文連結:http://blog.51cto.com/dreamfire/1168361,如需轉載請自行聯系原作者