首页 > 服务器 > Apache > 源码编译安装 httpd2.4+MariaDB5.5+php5.4(LAMP)
2014
11-19

源码编译安装 httpd2.4+MariaDB5.5+php5.4(LAMP)

操作环境:
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

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
wKioL1Psre7hvO4BAAIMvmbhGhk516
wKiom1PsrNeTMLdSAAGJA6pQRkc608

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
点击安装

安装完成后输入地址访问博客。

wKiom1PsrbDB6j6oAAEUaYIIuK8609

这时候图片是显示不出来的,图片是静态的,需要放到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

四.接下来安装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
wKioL1Psr_ixF9T3AALvP4suqEg197

7.)出来一大推权限问题,回到php主机,给上面这些文件可写权限。

# pwd
/var/www/php/Discuz/upload
# chmod -R go+w config/
# chmod -R go+w data/
# chmod -R go+w uc_*

再次刷新页面。

wKiom1PsrzrjkGeNAAIRXc5R8gU981

输入对应的ip,帐号密码等。
wKiom1Psr2Gx6heVAAH9_08mlHg182

8.)这时候还是图片出不来,需要再次将readme upload utility拷贝到httpd主机。

# scp -r readme/ upload/ utility/172.16.32.11:/var/www/php/Discuz/

再次刷新下页面,就正常了。

wKiom1Psr-Gz-EyDAARLY3w8vTA873

五.开始安装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
wKiom1PssHTDBayrAAPr_F0McTc026

六.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

将http主机https.crt复制出来安装,再次访问https://pmp.zhang.com。

wKiom1PssYqj2vDPAANlZBjKvaE010

谷歌浏览器说是这个证书不是合法的,变成一把灰色的锁,换成火狐的浏览器就可以以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

这个情况是因为http主机找不到图片,而不是反向代理错误,将php主机的静态图片复制到httpd主机相对应的目录就好了。
本文出自 “你对谁都微笑” 博客,请务必保留此出处http://54276311.blog.51cto.com/9130197/1540156
来自:51CTO

最后编辑日期:
作者:uuling
这个作者貌似有点懒,什么都没有留下。