LAMP架构
实验环境:RHEL6.0
Server IP192.168.0.1
 
1.需要的源码安装包:
httpd                http://httpd.apache.org/
mysql                http://www.mysql.com/downloads/mysql/#downloads
php                  http://www.php.net/downloads.php
libxml2              ftp://xmlsoft.org/libxml2/
zlib                 http://sourceforge.net/projects/libpng/files/zlib/
Autoconf             http://ftp.gnu.org/gnu/autoconf/
freetype             http://download.savannah.gnu.org/releases/freetype/
eaccelerator.tar.gz  http://eaccelerator.net/
Suhosin              http://www.hardened-php.net/suhosin/download.html

2.关闭SELinuxIptables
 
3.避免远程登录乱码,修改/etc/sysconfig/i18n内,UTF-8——>GB18030
 
4.yum  install  gcc  gcc-c++  make  -y
 
5.卸载默认的MysqlApachePHP
如:
rpm  -qa |gerp mysql
rpm  –e  mysql-5.0.45-7.el5  --nodeps
 
6.按顺序进行源码安装
 
**************************库文件的安装*****************************
1>安装libxml2库文件(PHP5需要的库文件)
# tar zxf libxml2-2.7.2.tar.gz
# cd libxml2-2.7.2
# ./configure --prefix=/usr/local/libxml2
# make&&make install
2>安装libmcrypt库文件(PHP5需要的库文件)
# cd libmcrypt-2.5.8
# ./configure --prefix=/usr/local/libmcrypt
#  make&&make install
3>安装GD2,使得PHP5支持GIFPNGJPEG等图片。
3.1>安装zlib库文件
# cd zlib-1.2.5
# ./configure (指定安装目录,后面安装会提示错误,默认安装在/usr/local/lib/)
# make&&make install
3.2>安装libpng库文件
# cd libpng-1.2.33
# ./configure --prefix=/usr/local/libpng
# make&&make install
3.3>安装jpeg6库文件
# mkdir /usr/local/jpeg6                              //建立jpeg6软件安装目录
# mkdir /usr/local/jpeg6/bin                         //建立存放命令的目录
# mkdir /usr/local/jpeg6/lib                         //创建jpeg6库文件所在目录
# mkdir /usr/local/jpeg6/include                     //头文件存放目录
# mkdir /usr/local/jpeg6/man/man1  -p                //手册目录
# cd jpeg-8/
# ./configure --prefix=/usr/local/jpeg6/  \    
>--enable-shared  \                                  //建立共享库使用的GNUlibtool
>--enable-static                                     //建立静态库使用的GNUlibtool
# make&&make install
3.4>安装freetype库文件
#./configure  --prefix=/usr/local/freetype
#make&&make install
3.5>安装autoconf库文件
#./configure
#make&&make install
3.6>安装gd库文件
#./configure \
>--prefix=/usr/local/gd2/    \
>--with-zlib=/usr/local/lib/    \
>--with-jpeg=/usr/local/jpeg6/  \
>--with-png=/usr/local/libpng/   \
>--with-freetype=/usr/local/freetype/  \
#make&&make install
############################错误问题的解决###########################
安装gd时报错,未发现png.h文件
gd源码中,gd_png.c文件内的#include  png.h
改为:
#include  /usr/local/libpng/include/png.h
然后重新编译安装即可!
#####################################################################
 
*********************************************************************
1.安装Apache服务器
 
#  cd httpd-2.2.23
# ./configure \
> --prefix=/usr/local/apache2/ \
> --sysconfdir=/etc/httpd  \                     //配置文件位置
> --with-z=/usr/local/lib/ \                     //指定zlib库位置
> --with-include-apr \                           //使用捆绑APR/APR-Util的副本
> --enable-so \                                  //以动态共享对象(DSO)编译
> --enable-deflate=shared \                      //缩小传输编码的支持
> --enable-expires=shared \                      //期满头控制
> --enable-rewrite=shared \                      //基于规则的URL操控
> --enable-static-support                        //建立一个静态链接版本的支持
#make&&make install
 
*测试Apache服务器
 
检查配置文件目录:(先配置服务名~)
#/usr/local/apache2/bin/apachectl   start       //启动apache
#/usr/local/apache2/bin/apachectl   stop        //关闭apache
#netstat   -na|grep  80
并进行简单的访问:http://localhost/
添加到自启动目录中
#echo “/usr/local/apache2/bin/apachectl  start” >> /etc/rc.d/rc.local
 
*启动apache
 
#/usr/local/apache2/bin/apachectl  start
#ps  -ALL  |grep httpd
 
*设置Apache
 
配置文件:/etc/httpd/httpd.conf
#cp  /usr/local/apache2/bin/apachectl  /etc/init.d/httpd   (添加到启动项)
 
2.安装MySQL数据库(mysql5和以前版本有些不一样!注意!)
 
首先要确保系统安装make,bison,cmake,gcc-c++,ncurses, ncurses-devel否则会报错!
mysql5.5起,采用cmake编译,稍有改变!
# useradd -M -s /sbin/nologin mysql
# cd mysql-5.5.29
#cmake      .                                  \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/   \
-DMYSQL_DATADIR=/usr/local/mysql/data     \
-DWITH_INNOBASE_STORAGE_ENGINE=1       \
-DSYSCONFDIR=/etc  \  
-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock \
-DMYSQL_USER=mysql  \
-DWITH_DEBUG=0     
#make   
#make install
#cp  /root/source/mysql-5.5.29/packaging/rpm-uln/my.cnf  /etc/my.cnf
cmake的选项参数
########################mysql相关问题的解决##########################
(1)客户端启动mysql时的报错!
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/usr/loc      al/mysql/data/mysql.sock' (111)
解决方法:
# vim /etc/my.cnf
添加客户端的选项:
[client]
socket=/var/lib/mysql/mysql.sock       #注意权限问题!
 (2)根据提示建立pidsock文件,并且注意权限问题!
如:
# chown  mysql.mysql  /var/lib/mysql/mysql.sock  -R
# cd /var/run/mysqld/
# touch  mysqld.pid
#chown mysql.mysql  /var/run/mysqld/mysqld.pid –R
 
(3)启动mysqld_safe时报错!
 Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
解决方法:
安装mysql 的初始授权表
mysql5中,应操作如下:
#/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
(4)初始化数据库报错
#/usr/local/mysql/scripts/mysql_install_db --user=mysql  报错!
FATAL ERROR: Could not find ./bin/my_print_defaults
解决方法:
调整初始化mysql 的命令!
#/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
启动mysqld
#/usr/local/mysql/bin/mysqld_safe --user=mysql --datadir=/usr/local/mysql/      data/  &
启动客户端mysql:
# /usr/local/mysql/bin/mysql --user=mysql
 
5)有时候采用 mysqld_safe可以启动,而采用mysql.server启动时就失败,报错:
ERROR! The server quit without updating PID file (/var/lib/mysql/Server2.example.com.pid).
解决办法:
可能是my.cnf配置错误,指定好dasedirdatadir等相关数据后,可能会恢复正常!
#####################################################################
mysqld加入到/etc/init.d/
# cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
添加环境变量(.bash_profile文件)
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
# source .bash_profile

3.安装PHP模块
# cd php-5.4.11
# ./configure \                                    //执行当前源码目录下的配置命令
> --prefix=/usr/local/php5 \                       //指定PHP5的安装路径
> --with-config-file-path=/etc \                   //指定配置文件的路径(包含php.ini文件的路径)
> --with-apxs2=/usr/local/apache2/bin/apxs \       //指定PHP查找apache2的位置
> --with-mysql=/usr/local/mysql/  \                //指定mysql的安装目录
> --with-libxml-dir=/usr/local/libxml2/  \         //指定libxml2库的位置
> --with-png-dir=/usr/local/libpng/ \              //指定libpng库的位置
> --with-jpeg-dir=/usr/local/jpeg6/ \              //指定jpeg库的位置
> --with-freetype-dir=/usr/local/freetype/ \       //指定freetype库的位置
> --with-gd=/usr/local/gd2/ \                      //指定gd库的位置
> --with-zlib-dir=/usr/local/lib/ \                //指定zlib库的位置
> --with-mcrypt=/usr/local/libmcrypt/ \            //指定libmcrypt库的位置
> --with-mysqli=/usr/local/mysql/bin/mysql_config \ //激活新增加MySQLi功能
> --enable-soap \                                   //变量激活SOAPWeb 服务支持
> --enable-mbstring=all \                           //使多字节字符串支持
> --enable-sockets                                  //变量激活socket通信特性
# vi /usr/local/gd/include/gd_io.h  (针对php5.4bug的修复,参考下面的报错处理)
#make
#make install
# cp php.ini-development  /etc/php.ini             //拷贝配置文件至指定目录
# vim /etc/httpd/httpd.conf
******************************
在合适位置添加:
LoadModule php5_module        modules/libphp5.so
AddType application/x-httpd-php   .php  .php4  .php5  .phtml
 
apache的文件目录/usr/local/apache2/htdocs/中添加php的测试网页test.php
# vim /usr/local/apache2/htdocs/test.php
****************************************
<?php
        phpinfo();
?>
***************************************
测试php的安装情况
 
# /usr/local/apache2/bin/apachectl  start
########################PHP编译安装的问题的解决#####################
1.安装php时报gd相关的错误(gd_ctx.c)
报如下错误
In file included from /kk/php-5.4.0/ext/gd/gd.c:103:
/kk/php-5.4.0/ext/gd/gd_ctx.c: In function ‘_php_p_w_picpath_stream_putc’:
/kk/php-5.4.0/ext/gd/gd_ctx.c:51: 错误:‘struct gdIOCtx’ 没有名为 ‘data’ 的成员
/kk/php-5.4.0/ext/gd/gd_ctx.c: In function ‘_php_p_w_picpath_stream_putbuf’:
/kk/php-5.4.0/ext/gd/gd_ctx.c:58: 错误:‘struct gdIOCtx’ 没有名为 ‘data’ 的成员
/kk/php-5.4.0/ext/gd/gd_ctx.c: In function ‘_php_p_w_picpath_stream_ctxfree’:
/kk/php-5.4.0/ext/gd/gd_ctx.c:67: 错误:‘struct gdIOCtx’ 没有名为 ‘data’ 的成员
/kk/php-5.4.0/ext/gd/gd_ctx.c:68: 错误:‘struct gdIOCtx’ 没有名为 ‘data’ 的成员
/kk/php-5.4.0/ext/gd/gd_ctx.c:69: 错误:‘struct gdIOCtx’ 没有名为 ‘data’ 的成员
/kk/php-5.4.0/ext/gd/gd_ctx.c: In function ‘_php_p_w_picpath_output_ctx’:
/kk/php-5.4.0/ext/gd/gd_ctx.c:153: 错误:‘gdIOCtx’ 没有名为 ‘data’ 的成员
make: *** [ext/gd/gd.lo] 错误 1
好像说这个错误算是php5.4bug,下面对应的两篇文章有对应的说明:
解决方法
# vi /usr/local/gd/include/gd_io.h        //编辑gd安装目录内的gd_io.h
gdIOCtx结构中增加void *data;
格式如下
 typedef struct gdIOCtx
{
  int (*getC) (struct gdIOCtx *);
  int (*getBuf) (struct gdIOCtx *, void *, int);
 
  void (*putC) (struct gdIOCtx *, int);
  int (*putBuf) (struct gdIOCtx *, const void *, int);
 
  /* seek must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek! */
  int (*seek) (struct gdIOCtx *, const int);
 
  long (*tell) (struct gdIOCtx *);
 
  void (*gd_free) (struct gdIOCtx *);
  void (*data);
}
gdIOCtx;
#####################################################################
 
4.安装phpMyAdmin
 
# cp -r phpMyAdmin-3.5.5-all-languages  /usr/local/apache2/htdocs/phpmyadmin
# cd /usr/local/apache2/htdocs/phpmyadmin/libraries
# cp config.sample.inc.php  /usr/local/apache2/htdocs/phpmyadmin/config.inc.php
 
config.inc.php文件进行vi编辑:
  a.查找 $cfg['PmaAbsoluteUri'] 修改为你将上传到空间的phpMyAdmin的网址:
  如:$cfg['PmaAbsoluteUri'] = 'http://192.168.1.11/phpMyAdmin/';
  b.查找 $cfg['Servers'][$i]['host'] = 'localhost';(通常用默认,也有例外,可以不用修改)
  c.查找 $cfg['Servers'][$i]['auth_type'] = 'config';
    在自己的机子里调试用config;如果在网络上的空间用cookie,这里我们既然在前面已经添加了网址,就修改成cookie ,这里建议使用cookie
  d.查找 $cfg['Servers'][$i]['user'] = 'root'; // MySQL usermysql用户名,自己机里用root;)
  e.查找 $cfg['Servers'][$i]['password'] = ''; // MySQL password (mysql用户的密码,自己的服务器一般都是mysql用户root的密码)
  f.查找 $cfg['Servers'][$i]['only_db'] = ''; // If set to a db-name, only(你只有一个数据就设置一下;如果你在本机或想架设服务器,那么建议留空)
g.查找 $cfg['DefaultLang'] = 'zh'; (这里是选择语言,zh代表简体中文的意思,这里不知道填gbk对否)
h.允许空密码登录:      $cfg['Servers'][$i]['nopassword'] = true;
$cfg['Servers'][$i]['AllowNoPassword'] = true;
 
报错: #2002 无法登录 MySQL 服务器
修改config.inc.php文件:
$cfg['Servers'][$i]['host'] = 'localhost';
改为$cfg['Servers'][$i]['host'] = '127.0.0.1';
或者修改:
/etc/php.ini :       mysql.default_socket = /tmp/mysql.sock
 
测试:在浏览器中输入http://192.168.0.1/phpMyAdmin/即可测试!
      如果输入的是索引而不是phpmyadmin的管理界面,则可能是因为自己的apache默认是访问index.html,访问指定index.php即可,如:http://192.168.0.1/phpMyAdmin/index.php
 
5.安装PHP扩展Eaccelerator加速软件(为了避免冲突,尽量别安装Zend)
 
# tar zxf eaccelerator42067ac.tar.gz
# cd eaccelerator-eaccelerator-42067ac/
# export PHP_PREFIX="/usr/local/php5/"
# $PHP_PREFIX/bin/phpize
# ./configure \
--enable-eaccelerator=shared \
--with-php-config=$PHP_PREFIX/bin/php-config
# make
# make  install
#vim /etc/ld.so.conf
******************
添加模块路径:/usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/
******************
# ldconfig
# vim /etc/php.ini
****************最后面添加**************************
[eaccelerator]
zend_extension = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/eaccelerator.so"
eaccelerator.shm_size = "16"                #根据电脑性能选择共享的内存,单位为M
eaccelerator.cache_dir = "/data/cache/eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
# mkdir /data/cache/eaccelerator –p
# chmod 0777 /data/cache/eaccelerator
# /etc/init.d/httpd  stop
# /etc/init.d/httpd  start
访问先前创建的test.php页面,出现如图信息即表示安装成功:

6.安装Suhosin,加固PHP的安全性,是个补丁程序

# wget http://download.suhosin.org/suhosin-0.9.33.tgz 
# tar zxvf suhosin-0.9.33.tgz
# cd suhosin-0.9.33 
# /usr/local/php5/bin/phpize  #phpize生成configure配置文件
# ./configure  --with-php-config=/usr/local/php5/bin/php-config 
make 
make install 
安装完成之后,出现下面的界面,记住以下路径,后面会用到。
/usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/  #suhosin模块路径
# vi /usr/local/php5/etc/php.ini  #编辑配置文件,在最后一行添加以下内容
extension_dir = “./”
改为:
extension_dir = “/usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/”
extension="suhosin.so"
重启apache即可!
但是问题报错:
暂未解决!!!
同时,希望前辈们指点下,这个问题如何解决?

随后发现官网貌似说suhosin不支持php5.3以上的版本......


以上内容参考并完善了《Linux企业应用案例精解》——李晨光著