发新话题
 搜藏 打印 该页面添加到 Mister Wong

CentOS5.2配置LAMP全过程

CentOS5.2配置LAMP全过程

CentOS5.2配置LAMP全过程(第二版)
作者:eddiechen

最近发现我以前写centos5.2的配置过程,里面有不少错误的地方。很多编译安装的软件,事实上,好像没有最后用到。这也是我重新写一次。

这次学会了几个sed的用法,所以很多的改动我尽量用sed来完成,这样就简单很多。还有就是系统的初始设置。我已经重新整理过来。基本可以做到一个脚本完成全过程。

下面的配置,很多关于安全的设置,都没有做,现在还没有搞的太明白,如果web是给内网使用或者测试,那么应该问题不大,如果是拿到外面使用,估计还是需要做不少的优化。如cache,防盗链这些。



参考文档

参考了网上不少文档,下面的3篇是重点,不少代码都是从下面复制过来的。

RHEL4上安装基于postfix的全功能邮件服务器(全部使用目前最新源码包构建) (http://bbs.chinaunix.net/thread-987344-1-1.html
Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建胜过Apache十倍的Web服务器(第4版)(http://blog.s135.com/read.php/366.htm
基于CentOS构建高性能的LAMP平台.(http://bbs.linuxtone.org/thread-122-1-1.html

文章内容分为7部分

一:系统约定
二:系统基本设置
三:下载软件
四:安装必须的软件
五:编译安装软件
六:配置apache PHP
七:测试 (通过phpinfo,phpmyadmin,sugarcrm的安装来测试)

一:系统约定
    采用Centos5.2光盘,
    软件源代码包存放位置        /usr/local/src
    源码包编译安装位置(prefix)        /usr/local/software_name
    MySQL 数据库位置        /data/mysql/data
    Apache 网站根目录        /data/www/wwwroot(虚拟主机在这个目录下)
    Apache 虚拟主机日志根目录        /data/www/logs
    Apache 运行账户        www:www
    创建两个虚拟主机    test.com linux.com

所有的配置的文件修改,都做备份,备份的名字为 文件名.save

下面的实验是用vmware station 6 创建一个 redhat AS5的vm,安装centos5.2,安装的时候,选择安装语言是英文,采用文本方式来安装,选择最小化的安装。

yum的更新,采用本地光盘的方式,这样比较快捷。

我的机器基本设置

IP:192.168.1.200/255.255.255.0

网关:192.16.1.1

DNS:192.168.1.1

hostname:ns1

二:系统基本设置

我已经把所有需要配置的内容,做一个一个脚本,只需要运行一次就可以。
复制内容到剪贴板
代码:
cd /usr/local/src

vi /usr/local/src/init.sh
复制内容到剪贴板
代码:
#####################

#Diabe IPV6
cp /etc/modprobe.conf /etc/modprobe.conf.save
echo "alias net-pf-10 off" >> /etc/modprobe.conf
echo "alias ipv6 off" >> /etc/modprobe.conf

#SSH
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.save
sed -i '/#PermitRootLogin/s/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config
sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' /etc/ssh/sshd_config
sed -i "s/#UseDNS yes/UseDNS no/" /etc/ssh/sshd_config
sed -i -e '44 s/^/#/' -i -e '48 s/^/#/' /etc/ssh/sshd_config
/etc/init.d/sshd restart

#停止 the “beep"


cp /etc/inputrc /etc/inputrc.save
sed -i '/#set bell-style none/s/#set bell-style none/set bell-style none/' /etc/inputrc


#关闭SElinux

cp /etc/sysconfig/selinux /etc/sysconfig/selinux.save
sed -i '/SELINUX=enforcing/s/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux



#加载光驱

mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
echo "mount /dev/cdrom /mnt/cdrom" >> /etc/rc.local


#设置yum使用本地光盘

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.save
mv /etc/yum.repos.d/CentOS-Media.repo /etc/yum.repos.d/CentOS-Media.repo.save
echo "[DVDISO]" >> /etc/yum.repos.d/dvdiso.repo
echo "name=DVD ISO" >> /etc/yum.repos.d/dvdiso.repo
echo "baseurl=file:///mnt/cdrom/" >> /etc/yum.repos.d/dvdiso.repo
echo "enabled=1" >> /etc/yum.repos.d/dvdiso.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/dvdiso.repo


#vim设置

yum -y install vim-enhanced
mv /bin/vi /bin/vi.save
ln -s /usr/bin/vim /bin/vi
cp /etc/vimrc /etc/vimrc.save
sed -i "39 s/^/ set number \n filetype on\n set history=1000\n syntax on\n set tabstop=4\n set showmatch\n set vb t_vb=\n set mouse=a\n set ignorecase\n set autowrite\n /" /etc/vimrc

#时间的设置
yum -y install ntp
ntpdate 210.72.145.44 && clock -w

#安装常用软件

yum -y install wget unzip

#停止没有必要的服务
chkconfig --list |grep 3:on |awk '{print $1}' |egrep -v 'sshd|network|syslog' |xargs -i{} chkconfig --level 3 {} off
chkconfig --list | grep 3:on | cut -f1

#重新启动
init 6
####################
复制内容到剪贴板
代码:
sh init.sh
三:下载软件
复制内容到剪贴板
代码:
cd /usr/local/src

vi list
复制内容到剪贴板
代码:
http://download.filehat.com/apache/httpd/httpd-2.2.8.tar.gz
http://opensource.nchc.org.tw/COSA/CNS4/cronolog-1.6.2.tar.gz
http://www.libgd.org/releases/gd-2.0.35.tar.bz2
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
http://mirror.optus.net/sourceforge/m/mc/mcrypt/libmcrypt-2.5.8.tar.gz
http://jaist.dl.sourceforge.net/sourceforge/mcrypt/mcrypt-2.6.7.tar.gz
http://www.openssl.org/source/openssl-0.9.8h.tar.gz
http://openbsd.md5.com.ar/pub/OpenBSD/OpenSSH/portable/openssh-5.0p1.tar.gz
http://mysql.byungsoo.net/Downloads/MySQL-5.0/mysql-5.0.51b.tar.gz
http://cn2.php.net/get/php-5.2.6.tar.bz2/from/this/mirror
http://downloads.phpchina.com/zend/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
ftp://ftp.cac.washington.edu/mail/imap.tar.Z
http://puzzle.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-2.11.8.1-all-languages-utf-8-only.tar.gz
http://dl.sugarforge.org/sugarcrm/Latest-SugarCE5.1/SugarCE5.1.0/SugarCE-5.1.0.zip
http://mirror.optus.net/sourceforge/m/mh/mhash/mhash-0.9.9.tar.gz
复制内容到剪贴板
代码:
wget -i list
四:安装必须的软件

采用yum的方式安装
复制内容到剪贴板
代码:
yum -y install gcc make patch gcc-c++ gcc-g77 flex bison autoconf automake \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel libtiff-devel fontconfig-devel libXpm-devel gettext-devel   pam-devel pcre-devel libtool libtool-ltdl
五:编译安装软件


下面的内容,其实你可以复制到一个文本,比如 install.sh 运行这个脚本,我已经测试过了,整整运行了快1个小时,估计是我在vm上跑道原因。前提是你下载的软件和我是一样的,也就是软件都是通过上面的下载的。
复制内容到剪贴板
代码:
###############################################

#安装openssl
cd /usr/local/src
tar zxvf openssl-0.9.8h.tar.gz
cd openssl-0.9.8h
./config shared zlib
make
make test
make install
mv /usr/bin/openssl /usr/bin/openssl.save
mv /usr/include/openssl /usr/include/openssl.save
mv /usr/lib/libssl.so /usr/lib/libssl.so.save
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
ln -sv /usr/local/ssl/lib/libssl.so.0.9.8 /usr/lib/libssl.so
cd ..


#配置库文件搜索路径
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v

#检测安装结果
openssl version

#安装openssh

tar xvf openssh-5.0p1.tar.gz

cd openssh-5.0p1

./configure \
      "--prefix=/usr" \
      "--with-pam" \
      "--with-zlib" \
      "--sysconfdir=/etc/ssh" \
      "--with-ssl-dir=/usr/local/ssl" \
      "--with-md5-passwords"

make
make install

cd ..

service sshd restart

ssh -v

#安装GD

tar jxvf gd-2.0.35.tar.bz2
cd gd-2.0.35
aclocal
./configure --prefix=/usr/local/gd2
make && make install
cd ..

#安装 libmcrypt


tar zxvf libmcrypt-2.5.8.tar.gz

cd libmcrypt-2.5.8/
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make
make install
cd ../../

cp /usr/local/lib/libmcrypt.* /usr/lib



#安装libiconv


tar zxvf libiconv-1.12.tar.gz

cd libiconv-1.12/
./configure --prefix=/usr/local
make
make install
cd ../

ln -s /usr/local/lib/libiconv.so.2 /usr/lib/


#安装mhash

tar zxvf mhash-0.9.9.tar.gz
cd mhash-0.9.9/
./configure
make
make install
cd ../
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

#安装mcrypt


tar zxvf mcrypt-2.6.7.tar.gz
cd mcrypt-2.6.7/
./configure
make
make install
cd ../


#安装cronolog

tar xvf cronolog-1.6.2.tar.gz

cd cronolog-1.6.2

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

make && make install

cd ..


#安装imap

tar zxf imap.tar.Z
cd imap-2007b
make lr5 PASSWDTYPE=std SSLTYPE=unix.nopwd IP6=4
echo "set disable-plaintext nil" > /etc/c-client.cf
mkdir /usr/local/imap-2007b
mkdir /usr/local/imap-2007b/include/
mkdir /usr/local/imap-2007b/lib/
chmod -R 077 /usr/local/imap-2007b
rm -rf /usr/local/imap-2007b/include/*
rm -rf /usr/local/imap-2007b/lib/*
rm -rf /usr/sbin/imapd
cp imapd/imapd /usr/sbin/
cp c-client/*.h /usr/local/imap-2007b/include/
cp c-client/*.c /usr/local/imap-2007b/lib/
cp c-client/c-client.a /usr/local/imap-2007b/lib/libc-client.a

cd ..

#安装MYSQL


tar zxvf mysql-5.0.51b.tar.gz

cd mysql-5.0.51b

./configure \
       "--prefix=/usr/local/mysql" \
       "--localstatedir=/data/mysql/data" \
       "--with-comment=Source" \
       "--with-server-suffix=-test.com" \
       "--with-mysqld-user=mysql" \
       "--without-debug" \
       "--with-big-tables" \
       "--with-charset=gbk" \
       "--with-collation=gbk_chinese_ci" \
       "--with-extra-charsets=all" \
       "--with-pthread" \
       "--enable-static" \
       "--enable-thread-safe-client" \
       "--with-client-ldflags=-all-static" \
       "--with-mysqld-ldflags=-all-static" \
       "--enable-assembler" \
       "--without-isam" \
       "--without-innodb" \
       "--without-ndb-debug"
make && make install
useradd mysql -d /data/mysql -s /sbin/nologin
/usr/local/mysql/bin/mysql_install_db --user=mysql
cd /usr/local/mysql
chown -R root:mysql .
chown -R mysql /data/mysql/data
cp share/mysql/my-huge.cnf /etc/my.cnf
cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
/etc/rc.d/init.d/mysqld start

cd /usr/local/mysql/bin
for i in *; do ln -s /usr/local/mysql/bin/$i /usr/bin/$i; done

cd /usr/local/src

mysqladmin -u root password chenshake


#安装Apache

tar zxvf httpd-2.2.8.tar.gz  
cd httpd-2.2.8
./configure \
       "--prefix=/usr/local/apache2" \
"--with-included-apr" \
       "--enable-so" \
       "--enable-deflate=shared" \
       "--enable-expires=shared" \
       "--enable-rewrite=shared" \
       "--enable-static-support" \
       "--disable-userdir"
make
make install
cd ..

#安装PHP

tar jxvf php-5.2.6.tar.bz2
cd php-5.2.6
./configure \
"--prefix=/usr/local/php" \
"--with-apxs2=/usr/local/apache2/bin/apxs" \
"--with-config-file-path=/usr/local/php/etc" \
"--with-mysql=/usr/local/mysql" \
"--with-gd=/usr/local/gd2" \
"--with-libxml-dir=/usr" \
"--with-jpeg-dir" \
"--with-png-dir" \
"--with-freetype-dir" \
"--with-zlib " \
--with-iconv-dir=/usr/local \
"--with-openssl=/usr/local/ssl" \
"--with-curl " \
"--with-curlwrappers " \
"--with-mcrypt" \
"--with-imap=/usr/local/imap-2007b" \
"--with-kerberos" \
"--with-bz2" \
"--enable-soap" \
"--enable-gd-native-ttf" \
"--enable-ftp" \
"--enable-mbstring" \
"--enable-exif" \
"--disable-ipv6" \
"--disable-cgi" \
"--disable-cli"   

make
make install
mkdir /usr/local/php/etc
cp php.ini-dist /usr/local/php/etc/php.ini
cd ..

#安装Zend Optimizer (安装Zend Optimizer过程的最后不要选择重启Apache。)

tar xzvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.3-linux-glibc23-i386
./install.sh


##########################################################################
脚本到这里为止,因为zend的设置,我没法自动完成,只能你手动设置,如果谁知道怎么做,麻烦指导指导,注意php.ini 的位置 /usr/local/php/etc/

#设置session的存放位置和修改php上次文件的大小,最大文件25m
复制内容到剪贴板
代码:
cp /usr/local/Zend/etc/php.ini /usr/local/Zend/etc/php.ini.save
sed -i -e '991 s/;//' /usr/local/Zend/etc/php.ini
sed -i 's/post_max_size = 8M/ post_max_size = 30M/g' /usr/local/Zend/etc/php.ini
sed -i 's/upload_max_filesize = 2M/ upload_max_filesize = 25M/g' /usr/local/Zend/etc/php.ini
cd /usr/local/src
六:配置apache PHP

创建apache的启动脚本,apache编译包里带的那个启动脚本,有一个缺点,启动和停止没有任何提示,所以就用下面这个,比较方便。
复制内容到剪贴板
代码:
vi /etc/init.d/httpd
复制内容到剪贴板
代码:
###################################

#!/bin/bash
#
# Startup script for the Apache Web Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.   It is used to serve \
#               HTML files and CGI.
# processname: httpd
# pidfile: /usr/local/apache2/logs/httpd.pid
# config: /usr/local/apache2/conf/httpd.conf

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache2/bin/apachectl
httpd=/usr/local/apache2/bin/httpd
pid=/usr/local/apache2/logs/httpd.pid
prog=httpd
RETVAL=0




# The semantics of these two functions differ from the way apachectl does
# things -- attempting to start while running is a failure, and shutdown
# when not running is also a failure.   So we just do it the way init scripts
# are expected to behave here.
start() {
         echo -n $"Starting $prog: "
        daemon $httpd $OPTIONS
         RETVAL=$?
         echo
         [ $RETVAL = 0 ] && touch /var/lock/subsys/httpd
        return $RETVAL
}
stop() {
         echo -n $"Stopping $prog: "
        killproc $httpd
         RETVAL=$?
         echo
         [ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd $pid
}
reload() {
         echo -n $"Reloading $prog: "
        killproc $httpd -HUP
         RETVAL=$?
         echo
}

# See how we were called.
case "$1" in
   start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status $httpd
         RETVAL=$?
         ;;
  restart)
        stop
         start
        ;;
  condrestart)
         if [ -f $pid ] ; then
                 stop
                 start
         fi
        ;;
  reload)
        reload
        ;;
  graceful|help|configtest|fullstatus)
        $apachectl $@
        RETVAL=$?
         ;;
   *)
         echo $"Usage: $prog {start|stop|restart|condrestart|reload|status"
        echo $"|fullstatus|graceful|help|configtest}"
        exit 1
esac

exit $RETVAL

###########################
设置可运行和开机启动
复制内容到剪贴板
代码:
chmod +x /etc/rc.d/init.d/httpd
chkconfig --add httpd
chkconfig --level 3 httpd on
配置apache
复制内容到剪贴板
代码:
groupadd www -g 48
useradd -u 48 -g www www
mkdir -p /data/www/wwwroot/linux.com
mkdir -p /data/www/wwwroot/test.com
mkdir -p /data/logs
chmod +w /data/www/wwwroot
chown -R www:www /data/www/wwwroot
cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.save
编辑httpd.conf
复制内容到剪贴板
代码:
sed -i -e '121 s/^/#/' -i -e '122 s/^/#/' /usr/local/apache2/conf/httpd.conf
sed -i -e "s/User daemon/User www/" -i -e "s/Group daemon/Group www/" /usr/local/apache2/conf/httpd.conf
sed -i 's/DirectoryIndex index.html/ DirectoryIndex index.php index.html index.htm/g' /usr/local/apache2/conf/httpd.conf
sed -i -e '101 s/^#//g' -i -e '374 s/^#//g' -i -e '389 s/^#//g' -i -e '392 s/^#//g' -i -e '401 s/^#//g' /usr/local/apache2/conf/httpd.conf
sed -i "58 s/^/AddType application\/x-httpd-php .php/" /usr/local/apache2/conf/httpd.conf
编辑php.ini
复制内容到剪贴板
代码:
cp /usr/local/php/etc/php.ini /usr/local/php/etc/php.ini.save
sed -i '205 s#;open_basedir =#open_basedir = /data/www/wwwroot:/tmp#g' /usr/local/php/etc/php.ini
sed -i '/expose_php/s/On/Off/' /usr/local/php/etc/php.ini
sed -i '/display_errors/s/On/Off/' /usr/local/php/etc/php.ini
配置虚拟主机

备份相关配置文件
复制内容到剪贴板
代码:
mv /usr/local/apache2/conf/extra/httpd-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf.save
mv /usr/local/apache2/conf/extra/httpd-default.conf /usr/local/apache2/conf/extra/httpd-default.conf.save
mv /usr/local/apache2/conf/extra/httpd-mpm.conf /usr/local/apache2/conf/extra/httpd-mpm.conf.save
创建3个apache相关的文件
复制内容到剪贴板
代码:
vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
复制内容到剪贴板
代码:
NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin shake.chen@gmail.com
    DocumentRoot "/data/www/wwwroot/test.com"
    ServerName test.com
    ServerAlias bbs.test.com
    ErrorLog "logs/test.com-error_log"
    CustomLog "|/usr/local/cronolog/sbin/cronolog /data/logs/access_www.test.com.%Y%m%d" combined
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin shake.chen@gmail.com
    DocumentRoot "/data/www/wwwroot/linux.com"
    ServerName linux.com
    ServerAlias bbs.linux.com
    ErrorLog "logs/linux.com-error_log"
    CustomLog "|/usr/local/cronolog/sbin/cronolog /data/logs/access_www.linux.com.%Y%m%d" combined
</VirtualHost>
复制内容到剪贴板
代码:
vi /usr/local/apache2/conf/extra/httpd-default.conf
复制内容到剪贴板
代码:
Timeout 15
KeepAlive Off
MaxKeepAliveRequests 50
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess
ServerTokens Prod
ServerSignature Off
HostnameLookups Off
复制内容到剪贴板
代码:
vi /usr/local/apache2/conf/extra/httpd-mpm.conf
复制内容到剪贴板
代码:
<IfModule mpm_prefork_module>
    ServerLimit         2000
    StartServers          10
    MinSpareServers       10
    MaxSpareServers      15
    MaxClients          2000
    MaxRequestsPerChild   10000
</IfModule>
七:测试


修改本地hosts文件
192.168.1.200    www.test.com

启动Apache
复制内容到剪贴板
代码:
service httpd start
测试php
复制内容到剪贴板
代码:
cd /data/www/wwwroot/test.com
vi info.php
复制内容到剪贴板
代码:
<?

phpinfo()

?>
这个时候 http://192.168.1.200/info.php 或者 http://www.test.com/info.php 就可以看到php的信息。


安装phpadmin
复制内容到剪贴板
代码:
cd /usr/local/src
tar zxvf phpMyAdmin-2.11.8.1-all-languages-utf-8-only.tar.gz
cp -rf phpMyAdmin-2.11.8.1-all-languages-utf-8-only /data/www/wwwroot/test.com/phpmyadmin
cd /data/www/wwwroot/test.com/phpmyadmin

cp config.sample.inc.php config.inc.php

sed -i -e "/^\$cfg\['blowfish_secret'\]/{ s@'';@'88888888888888888';@; }" config.inc.php
这个时候,你就可以通过 http://192.168.1.200/phpmyadmin 或者http://www.test.com/phpmyadmin 来进行数据库管理, 我上面已经给mysql设置的密码。

user:root
password:chenshake




安装sugarcrm

sugarcrm的邮件模块需要用到imap,ssl,所以我编译的时候,需要吧imap,curl模块编译进去.
复制内容到剪贴板
代码:
cd /usr/local/src
unzip SugarCE-5.1.0.zip
mv SugarCE-Full-5.1.0/ /data/www/wwwroot/test.com/sugarcrm
chmod -R 777 /data/www/wwwroot/test.com/sugarcrm/
这个时候,你通过连接访问一步一步安装就基本没有问题了。

本文由cckj 发布于Linuxsky 论坛,网址:http://bbs.linuxsky.org/thread-7226-1-1.html

相关主题

TOP

辛苦

谢谢楼主,辛苦了!

TOP

发新话题