原始碼編譯安裝 httpd2.4+MariaDB5.5+php5.4(LAMP)

thinkphp發表於2014-08-23

操作環境:
http主機,php主機,MariaDB主機,作業系統CentOS6.5 x86_64
全部安裝包組:Development tools  ServerPlatform Development
httpeth0 IP:172.16.32.11
MariaDBeth0 IP:172.16.32.10
phpeth0 IP:172.16.32.12
httpd2.4新特性:解釋下面安裝用到的幾個
event不再是測試狀態,而是可以直接編譯進去,mpm模組可以動態裝載解除安裝
分了多個配置檔案,https,虛擬主機不在http.conf中配置,而是兩個獨立的配置檔案,但是需要在主配置檔案解開註釋。

一.安裝MariaDB:

1.)準備一個LVM卷,方便資料庫資料遷移。
# pvcreate /dev/sdb1 
 dev_is_mpath: failed to get device for 8:17
  Physicalvolume "/dev/sdb1" successfully created
 
# vgcreate Sql_data_vg /dev/sdb1 
  Volumegroup "Sql_data_vg" successfully created
 
# lvcreate -L 15G -n Sql_data_lv Sql_data_vg
  Logicalvolume "Sql_data_lv" created
 
格式化LV卷
# mke2fs -t ext4 -b 2048 -m 3 -L MySQL/dev/Sql_data_vg/Sql_data_lv
 
新增開機啟動,並掛載
# vim /etc/fstab
LABEL='MySQL'     /MySQL        ext4   defaults   0 0
 
# mount -a
# df -lh
/dev/mapper/Sql_data_vg-Sql_data_lv   15G  78M   15G   1% /MySQL

2.)解壓MariaDB,到/usr/local路徑下。
# tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C/usr/local/

3.)切換到/usr/local,給MariaDB連線到當前路徑定義為mysql。
# cd /usr/local/
# ln -sv mariadb-5.5.36-linux-x86_64/ mysql

4.)給資料庫提供配置檔案,修改datadia路徑。並且給資料庫提供SysV啟動控制指令碼,加入開機啟動
# cd mysql/
 
安裝系統的時候,/etc/路徑下有一個my.cnf的,這裡換個路徑
# mkdir /etc/mysql
# cp support-files/my-large.cnf /etc/mysql/my.cnf
# vim /etc/mysql/my.cnf
datadir = /MySQL/data
 
# cp support-files/mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld

5.)建立mysql組 使用者,修改/usr/local/mysql 和 /MySQL屬主屬組為mysql。
# groupadd -r mysql
# useradd -g mysql -r mysql
# chown -R mysql:mysql /MySQL/
# chown -R mysql:mysql /usr/local/mysql/

6.)開始初始化資料庫,指定使用者資料路徑。
# ./scripts/mysql_install_db --user=mysql--datadir=/MySQL/data
 
7.)啟動資料庫,檢視埠。
# service mysqld start
Starting MySQL.. SUCCESS!
 
# netstat -anlp | grep 3306
tcp       0      0 0.0.0.0:3306        0.0.0.0:*                LISTEN      1856/mysqld

8.)設定MariaDB環境變數。
# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
# source /etc/profile.d/mysql.sh

9.)輸出mysql的標頭檔案至系統標頭檔案路徑/usr/include。
# ln -sv /usr/local/mysql/include  /usr/include/mysql

10.)輸出mysql的庫檔案給系統庫查詢路徑,系統重新
#  echo'/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
# ldconfig

11.)給資料庫設定一個密碼。
# mysqladmin -u root password
New password: 
Confirm new password:

資料庫部分暫時就完成了。

二.開始編譯安裝httpd2.4。
1.)安裝apr apr-util。
# tar xf apr-1.5.0.tar.bz2
# ./configure --prefix=/usr/local/apr-1.5
# make && make install
 
# tar xf apr-util-1.5.3.tar.bz2 
# cd apr-util-1.5.3
# ./configure --prefix=/usr/local/apr-util--with-apr=/usr/local/apr-1.5/
# make && make install

2.)yum安裝代理模組
yum install pcre-devel –y。

3.)開始安裝httpd2.4。
# tar xf httpd-2.4.9.tar.bz2 
# cd httpd-2.4.9
# ./configure --prefix=/usr/local/httpd--sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr-1.5/ --with-apr-util=/usr/local/apr-util/ --enable-modules=all --enable-mpms-shared=all --with-mpm=event
# make && make install

編譯引數註釋
--prefix=        #指定安裝到/usr/local/httpd路徑下
--sysconfdir=    #指定配置檔案安裝到/etc/httpd下
--enable=so      #支援動態裝解除安裝模組
--enable-ssl     #支援https加密傳輸
--enable-cgi     #支援cgi格式指令碼
--with-zlib      #支援zlib壓縮
--with-apr       #指定apr安裝位置
--with-apr-util  #指定apr-util安裝位置
--enable-mpms-shared  #把mpm三種模式以共享模組的方式編譯進去
--enable-mpm     #httpd啟動是預設是開啟event模式
--enable-rewrite #支援反向代理

4.)給http新增SysV啟動控制指令碼,新增開機啟動。
# chmod +x /etc/init.d/httpd
# chkconfig --add httpd
# chkconfig httpd on
# service httpd start

5.)檢視http服務埠,訪問測試頁。
# netstat -anlp | grep 80
tcp       0      0 :::80                  :::*                    LISTEN      347/httpd
 wKioL1PsrAPxJ0shAACQC5vhxWA716.jpg
 httpd部分安裝完成。

三.開始安裝php。
1.)解決php安裝環境依賴關係。
#yum -y groupinstall "Desktop PlatformDevelopment"
# yum -y install bzip2-devel libmcrypt-devel

2.)開始安裝php。
# tar xf php-5.4.8.tar.bz2 
# cd php-5.4.8
#./configure --prefix=/usr/local/php5 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir--with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc--with-config-file-scan-dir=/etc/php.d --with-bz2
# make && make install

編譯引數註釋:
--prefix=/usr/local/php5  #指定php安裝路徑,如果不想使用php,可以之間刪除

--with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
#如果使用PHP5.3以上版本,為了連結MySQL資料庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySQL或MySQL開發包了。mysqlnd從php 5.3開始可用,可以編譯時繫結到它(而不用和具體的MySQL客戶端庫繫結形成依賴),但從PHP 5.4開始它就是預設設定了

--with-openssl             #支援openssl加密php頁面
--enable-mbstring          #啟用多位元組字串支援
--with-freetype-dir        #設定到FreeType 2的安裝路徑
--with-jpeg-dir            #支援jpg圖片
--with-png-dir             #支援png圖片
--with-zlib                #支援zlib壓縮傳輸
--with-libxml-dir=/usr     #指定libxml2安裝目錄
--enable-xml               #支援xml擴充套件
--enable-sockets           #啟用套接字支援
--with-apxs2=/usr/local/apache/bin/apxs    #指定共享的Apache 2.0的處理器模組所在目錄
--with-mcrypt                #支援mcrypt擴充套件
--with-config-file-path=/etc  #指定配置檔案所在目錄
--with-config-file-scan-dir=/etc/php.d         #設定在哪個路徑下掃描配置檔案
--with-bz2                #支援bzip2壓縮格式

3.)為php提供配置檔案。
# cp php.ini-production /etc/php.ini

 4.)為php提供Sys啟動控制指令碼,加入開機啟動。
# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod +x /etc/init.d/php-fpm 
# chkconfig --add php-fpm
# chkconfig php-fpm on

5.)為php-fpm提供配置檔案,編輯php-fpm配置檔案,修改監聽埠,預設是127.0.0.1。
# cp /usr/local/php5/etc/php-fpm.conf.default/usr/local/php5/etc/php-fpm.conf
# vim /usr/local/php5/etc/php-fpm.conf
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pid = /usr/local/php5/var/run/php-fpm.pid
listen = 172.16.32.12:9000

 6.)啟動php-fpm,檢查php埠。
# service php-fpm start
Starting php-fpm done
# netstat -anlp | grep 9000
tcp       0      0 127.0.0.1:9000        0.0.0.0:*            LISTEN      3992/php-fpm

PHP部分配置完成。
三.切換到httpd伺服器,建立虛擬主機,結合php。
1.)在Apache httpd 2.4以後已經專門有一個模組針對FastCGI的實現。
      此模組為mod_proxy_fcgi.so,它其實是作為mod_proxy.so模組的擴充,因此,這兩個模組都要載入
# vim /etc/httpd/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_modulemodules/mod_proxy_fcgi.so

 2.)讓httpd支援php,新增下面兩行,加入index.php。
AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps
<IfModule dir_module>
   DirectoryIndex index.php index.html
</IfModule>

3.)開啟虛擬主機,預設是註釋掉的。
Include/etc/httpd/extra/httpd-vhosts.conf

4.)編輯虛擬主機配置檔案。
#vim /etc/httpd/extra/httpd-vhosts.conf

<VirtualHost *:80>
        ServerNameblog.zhang.com
       DocumentRoot "/var/www/php/wordpress"
       ProxyRequests Off
       ProxyPassMatch ^/(.*\.php)$fcgi://172.16.32.12:9000//var/www/php/wordpress/$1
       <Directory "/var/www/php/wordpress">
               Options none
               AllowOverride none
               Require all granted
       </Directory>
</VirtualHost>

5.)建立/var/www/php/wordpress,分別在httpd主機和php主機上建立。
# mkdir -p /var/www/php/wordpress

6.)在php主機上編輯php測試頁,測試結合是否正常,和支援資料庫。
# vim /var/www/php/wordpress/index.php
<?php
    phpinfo();
?>

7.)重啟httpd,php服務,測試httpd和php結合。
# service httpd restart
# service php-fpm restart


wKiom1PsrNPjgalFAAIEa2-7C8w043.jpg
wKioL1Psre7hvO4BAAIMvmbhGhk516.jpg
wKiom1PsrNeTMLdSAAGJA6pQRkc608.jpg

httpd結合php,並且看到了可以支援資料庫。
四.在資料庫新增庫,授權,新增授權密碼,安裝wordpress。
1.)回到資料庫主機。
# mysql -u root –p
 
MariaDB [(none)]> CREATE DATABASE wpdb;
Query OK, 1 row affected (0.02 sec)
 
MariaDB [(none)]> GRANT ALL ON wpdb.* TO'wpAdmin'@'172.16.%.%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)
 
MariaDB [(none)]>  FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| mysql             |
| performance_schema |
| test              |
| wpdb              |
+--------------------+
5 rows in set (0.01 sec)
 
MariaDB [(none)]>

2.)可以看到wpdb資料庫了,回到php主機。
刪除測試時寫的wordpress。
# rm -rf /var/www/php/wordpress/

3.)解壓wordpress-3.3.1-zh_CN.zip,移動到/var/www/php目錄下。
# unzip wordpress-3.3.1-zh_CN.zip
# mv wordpress /var/www/php/

 4.編輯wordpress配置檔案,加入wpdb,授權帳號,密碼等。
# cd /var/www/php/wordpress/
# cp wp-config-sample.php wp-config.php
 
# vim wp-config.php
/** WordPress 資料庫的名稱 */
define('DB_NAME', 'wpdb');
 
/** MySQL 資料庫使用者名稱 */
define('DB_USER', 'wpAdmin');
 
/** MySQL 資料庫密碼 */
define('DB_PASSWORD', '123456');
 
/** MySQL 主機 */
define('DB_HOST', '172.16.32.10');


訪問bolg.zhang.com,提前已經修改host檔案了。
wKiom1PsrXqDKt3tAAOob9K2VaI641.jpg
點選安裝

安裝完成後輸入地址訪問部落格。
wKiom1PsrbDB6j6oAAEUaYIIuK8609.jpg
這時候圖片是顯示不出來的,圖片是靜態的,需要放到httpd主機上。
5.)刪除httpd主機的/wordpress目錄。
# rm -rf /var/www/php/wordpress/

6.)將php主機wordpress目錄scp到httpd主機。
# scp -r wordpress/ 172.16.32.11:/var/www/php/
 
再次重新整理頁面。
wKiom1PsreahE3mMAAN6qECxp6o249.jpg

四.接下來安裝phpMyAdmin,Discuz。
1.)回到httpd主機,建立想對應的網站根目錄,建立兩個虛擬主機。
# vim /etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:80>
       ServerName pmp.zhang.com
       DocumentRoot "/var/www/php/phpadmin"
       ProxyRequests Off
       ProxyPassMatch ^/(.*\.php)$fcgi://172.16.32.12:9000/var/www/php/phpadmin/$1
       <Directory "/var/www/php/phpadmin">
               Options none
               AllowOverride none
               Require all granted
       </Directory>
</VirtualHost>
 
<VirtualHost *:80>
       ServerName bbs.zhang.com
       DocumentRoot "/var/www/php/Discuz/upload"
       ProxyRequests Off
        ProxyPassMatch ^/(.*\.php)$fcgi://172.16.32.12:9000/var/www/php/Discuz/upload/$1
       <Directory "/var/www/php/Discuz/upload">
               Options none
               AllowOverride none
               Require all granted
       </Directory>
</VirtualHost>

2.)分別在httpd和php主機建立Discuz,phpadmin兩個目錄。
# mkdir /var/www/php/{Discuz,phpadmin} -p

3.)重啟httpd服務,或者重新載入配置檔案。
#service httpd restart

4.)解壓Discuz_X3.2_SC_GBK.zip,將解壓出來的三個目錄移動到/var/www/php/Discuz目錄下。
# unzip Discuz_X3.2_SC_GBK.zip
# mv readme/ upload/ utility/ /var/www/php/Discuz/

5.)在scp一份到httpd主機。
# scp -r readme/ upload/ utility/172.16.32.11:/var/www/php/Discuz/

6.)切換到資料庫主機,新增Discuz帳號,密碼,庫。
# mysql -u root –p
 
MariaDB [(none)]> CREATE DATABASE bbsdb;
Query OK, 1 row affected (0.00 sec)
 
MariaDB [(none)]> GRANT ALL ON bbsdb.* TO'bbsAdmin'@'172.16.%.%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [(none)]>  FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| bbsdb             |
| mysql             |
| performance_schema |
| test              |
| wpdb              |
+--------------------+
6 rows in set (0.00 sec)
 
MariaDB [(none)]>

開啟瀏覽器,輸入對應域名地址。
wKiom1Psrs_CQ1fsAAPYA5SnNHA990.jpgwKioL1Psr_ixF9T3AALvP4suqEg197.jpg

7.)出來一大推許可權問題,回到php主機,給上面這些檔案可寫許可權。
# pwd
/var/www/php/Discuz/upload
# chmod -R go+w config/
# chmod -R go+w data/
# chmod -R go+w uc_*

再次重新整理頁面。
wKiom1PsrzrjkGeNAAIRXc5R8gU981.jpg

輸入對應的ip,帳號密碼等。
wKiom1Psr2Gx6heVAAH9_08mlHg182.jpg

8.)這時候還是圖片出不來,需要再次將readme  upload  utility拷貝到httpd主機。
# scp -r readme/ upload/ utility/172.16.32.11:/var/www/php/Discuz/

再次重新整理下頁面,就正常了。
wKiom1Psr-Gz-EyDAARLY3w8vTA873.jpg

五.開始安裝phpMyadmin。
1.)虛擬主機已經建立完成,phpMyAdmin不需要在資料庫中加入庫,賬戶密碼,用bbs 的就可以。
# tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2 
# mv phpMyAdmin-3.5.1-all-languages /var/www/php/phpadmin
# cp config.sample.inc.php config.inc.php

2.)將預設的localhost修改成資料庫主機的ip。
# vim config.inc.php
$cfg['Servers'][$i]['host'] = '172.16.32.10';

3.)同樣的,將phpMyAdmin解壓出來的資料複製一份到httpd主機。
# scp -r phpadmin/ 172.16.32.11:/var/www/php/

訪問pmp.zhang.com。
輸入論壇的賬戶名,密碼。
wKioL1PssYrg2qywAAFHyn-11E4898.jpg
wKiom1PssHTDBayrAAPr_F0McTc026.jpg

六.phpMyAdmin傳輸是明文的,不是很可靠,現在給轉換成以https加密傳輸訪問。
1.)找到httpd-ssl.conf的配置,預設是註釋掉的。
# vim /etc/httpd/httpd.conf
Include /etc/httpd/extra/httpd-ssl.conf

2.)現在把資料庫的主機改成CA伺服器。
生成金鑰。
# cd /etc/pki/CA/
# (umask 077; openssl genrsa -out private/cakey.pem2048)
Generating RSA private key, 2048 bit long modulus
..+++
.................................................................+++
e is 65537 (0x10001)

3.)自簽證照。
# openssl req -new -x509 -key private/cakey.pem-out cacert.pem -days 365
You are about to be asked to enter information thatwill be incorporated
into your certificate request.
What you are about to enter is what is called aDistinguished Name or a DN.
There are quite a few fields but you can leave someblank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default CompanyLtd]:com
Organizational Unit Name (eg, section) []:mon
Common Name (eg, your name or your server'shostname) []:CA.server.com
Email Address []:

 4.)建立serial index.txt。
# touch serial index.txt
# echo 01 > serial

5.)httpd主機生成金鑰。
# mkdir /etc/httpd/ssl
# cd /etc/pki/CA/
# (umask 077; openssl genrsa -out/etc/httpd/ssl/https.key 2048)
Generating RSA private key, 2048 bit long modulus
...................................................................................................+++
.................................................................................................................................................................................+++
e is 65537 (0x10001)

6.)httpd主機生成證照籤署請求。
# openssl req -new -key /etc/httpd/ssl/https.key-out /etc/httpd/ssl/https.csr
You are about to be asked to enter information thatwill be incorporated
into your certificate request.
What you are about to enter is what is called a DistinguishedName or a DN.
There are quite a few fields but you can leave someblank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default CompanyLtd]:com
Organizational Unit Name (eg, section) []:mon
Common Name (eg, your name or your server'shostname) []:pmp.zhang.com
Email Address []:
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

7.)將https.csr複製到CA主機。
# scp /etc/httpd/ssl/https.csr172.16.32.10:/etc/pki/CA

8.)切換到CA主機簽署證照。
# openssl ca -in https.csr -out https.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
       Serial Number: 1 (0x1)
       Validity
           Not Before: Aug 13 12:36:26 2014 GMT
           Not After : Aug 13 12:36:26 2015 GMT
       Subject:
           countryName               = CN
           stateOrProvinceName       = HA
           organizationName          = com
           organizationalUnitName    = mon
           commonName                =pmp.zhang.com
       X509v3 extensions:
           X509v3 Basic Constraints: 
               CA:FALSE
           Netscape Comment: 
               OpenSSL Generated Certificate
           X509v3 Subject Key Identifier: 
                1A:0F:04:10:B5:4B:5A:36:6C:B1:A4:EF:05:9D:AF:1E:03:CC:A7:73
           X509v3 Authority Key Identifier: 
               keyid:F4:0F:2F:55:EE:90:FF:73:2D:A1:6A:36:94:D8:C0:38:4A:88:C1:B2
 
Certificate is to be certified until Aug 1312:36:26 2015 GMT (365 days)
Sign the certificate? [y/n]:y
 
 
1 out of 1 certificate requests certified, commit?[y/n]y
Write out database with 1 new entries
Data Base Updated

9.)簽署完成後還有將證照傳送到http主機。
# scp https.crt 172.16.32.11:/etc/httpd/ssl

昂。還要切換到http主機…。
10.)開啟ssl模組,開啟ssl配置檔案。
# vim /etc/httpd/httpd.conf
LoadModule socache_shmcb_modulemodules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
Include /etc/httpd/extra/httpd-ssl.conf

11.)編輯httpd-ssl.conf,定義主機,指定金鑰檔案等。
# vim /etc/httpd/extra/httpd-ssl.conf
DocumentRoot "/var/www/php/phpadmin/"
ServerName pmp.zhang.com:443
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$fcgi://172.16.32.12:9000/var/www/php/phpadmin/$1
       <Directory "/var/www/php/phpadmin">
               Options none
               AllowOverride none
               Require all granted
       </Directory>
#Servelocalhost.localdomairAdmin you@example.com
ErrorLog"/usr/local/httpd/logs/error_log"
TransferLog"/usr/local/httpd/logs/access_log"
 
SSLCertificateFile"/etc/http/ssl/https.crt"
SSLCertificateKeyFile"/etc/http/ssl/https.key"

重啟httpd服務。
輸入https://pmp.zhang.com。
wKioL1PssnWw4b4PAAIVG44513A109.jpg

將http主機https.crt複製出來安裝,再次訪問https://pmp.zhang.com。
wKiom1PssYqj2vDPAANlZBjKvaE010.jpg

谷歌瀏覽器說是這個證照不是合法的,變成一把灰色的鎖,換成火狐的瀏覽器就可以以https訪問了,這時候在把沒有加密的虛擬主機裡的那個php.zhang.com那個刪除就可以了。

總結:安裝的步驟比較長,做一步,檢查一步,不然最後出問題排錯容易慌亂。
安裝資料庫的時候,這邊是做的lvm卷,/MySQL/data不要一次性建立,要建立/MySQL,初始化的時候在指定datadir路徑為/MySQL/data,不然啟動資料庫時會報錯。
# rpm -qf /etc/my.cnf 
mysql-libs-5.1.71-1.el6.x86_64
可以看到在沒安裝資料庫之前,在/etc/下就已經有my.cnf了,這是mysql-libs生成的,裡面寫有mysql資料庫日誌等路徑,不建議覆蓋掉。

wKiom1PsuZzxdgykAARxUmf1MIk770.jpg

這個情況是因為http主機找不到圖片,而不是反向代理錯誤,將php主機的靜態圖片複製到httpd主機相對應的目錄就好了。
本文出自 “你對誰都微笑” 部落格,請務必保留此出處http://54276311.blog.51cto.com/9130197/1540156
來自:51CTO
相關閱讀
評論(2)

相關文章