linux服务器系统中手动配置lamp服务器的经验分享
LAMP是Linux、Apache、MySQL、PHP/Perl/Python的简称。它所组成的各组件都是开源软件,因此很方便自由的获取,导致这些组件的广泛使用,并不断完善发展,初步形成新的软件系统格局,并可能成为开源软件系统工程化的核心模式。
要安装比较新的httpd我们就必须安装比较新的apr。红帽6上就不需要再指定安装apr了,因为它默认安装的版本比较新。但是我们这里使用的是红帽5.8的版本,它给我们安装的apr版本有点老,我们要安装新版本的apr,是不是老版本的apr就要卸载了呢?这不是的,老版本千万不能卸载,可能会有依赖;那升级呢?也是不行的,升级后老版本也是会没的。那有的朋友该问了,那两个版本在是不是该有冲突了。我们只能使用多版本并存的机制,只要把编译安装的新版本和老版本安装在不同的地方就可以了。
Rpm包安装: /bin, /sbin, /usr/bin, /usr/sbin ####二进制所在位置 /lib, /usr/lib ####库文件所在位置 /etc ####配置文件所在位置 /usr/share/{doc,man}####帮助文档/手册 编译安装: /usr/local/ ####定义安装第三方软件包 bin, sbin ####二进制所在位置 lib ####库文件所在位置 etc ####配置文件所在位置 share/{doc,man} ####帮助文档/手册
我们这样安装,看上去还算工整,但是我们还要想到到时候要是想要卸载某个软件怎么办?还要一个一个的找吗?那不就变麻烦了。所以我们这样调整,就是定义安装第三方软件包依旧放在/usr/local/下,并且还要创建以软件名命名的目录(为了好找),然后把它有关的文件都放在这个目录下面。但是这样安装又出现了问题,它的二进制程序不在PATH环境里面,那就不能直接执行命令了,那就修改PATH变量;还要修改库文件搜索路径;还要修改man的配置文件等。
例如: /usr/local/apr/
bin, sbin, lib, includes, etc, share/man
下面我们就开始手动配置apr及apr-util,并且如何安装httpd。(提示:这里要下载源程序包)
第一步:安装开发环境
第二步:安装apr源程序
我们这里是在我们的服务器上下载的,大家要是做的话去官方网站(apr.apache.org)上下载源程序包,我们这里将它们放到了主目录下面。如果不想放到这里的话可以放到/usr/local/src下面,这里专门放源码的。下面我们就准备安装apr【提示:如果你系统的时间比下载源码包的时间还要早的话,这样是会出错的。如果时间不对的话可以用hwclock –s,这样将软件时间同步为硬件时间。】
下面我们就要将软件进行解压后进行安装。安装完成后第一个包就装好了。
[root@localhost apr-1.4.6]# make [root@localhost apr-1.4.6]# make install
第三步:安装apr-util
安装apr-util和我们安装apr是一样的。不过它指定路径的时候还要指定apr装在什么地方,如果不指定的话,它会自动找老版本的(05行最后面的红色就是指定的apr安装路径)。
[root@localhost ~]# tar xf apr-util-1.5.2.tar.bz2 [root@localhost ~]# cd apr-util-1.5.2 [root@localhost apr-util-1.5.2]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr [root@localhost apr-util-1.5.2]# make [root@localhost apr-util-1.5.2]# make install
第四步:安装httpd
在安装httpd之前我们还要安装一个模块,这个模块是pcre。除了配置那些模块还有可能会用到--enable –deflate配置压缩模块的. --enable –expires过期首部控制。如果要以fastCGI模式工作的话必须启用—enable-proxy-fcgi。这里我们是以模块的方式工作,暂时不用启用。--enable-mpms-shared=all在版本2.2中是没有的,但是在版本2.4中就有了。Apache是支持MPM(躲到处理模块)有三种形式,prefork,worker,event。支持哪一种在编译的时候已经确定了。在2.4的时候以模块化的方式使用MPM,也就是可以同时将这三种模块一并写进来用哪个可以切换哪个。听起来非常棒,但是PHP以模块化方式给MPM结合的时候,如果使用prefork,PHP很简单。但是你使用的是worker或event我们的PHP必须编译成ZTS格式,如果你想灵活使用的话,还要编辑两次PHP。在2.2默认MPM是prefork ,在2.4默认的MPM是event。--with-mpm=MPM 指定哪一个为默认。【提示:详细内容就在图中】
[root@localhost ~]# tar xf httpd-2.4.4.tar.bz2 [root@localhost ~]# cd httpd-2.4.4 [root@localhost httpd-2.4.4]# yum -y install pcre-devel ####安装pcre模块
[root@localhost httpd-2.4.4]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-rewirte --enable-ssl --enable-cgi --enable-cgid --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
第五步:关闭selinux
之所以将这一项作为一大步来说是因为关闭selinux,不关闭的话,你的服务器启动不了。默认基本上是开启的,我们要把它给关掉。
1、暂时性的关闭
2、永久性关闭
[root@localhost httpd-2.4.4]# vim /etc/selinux/config
第六步:启动web服务器
在/usr/local/paache下面有一个脚本可以启动服务,脚本名称为bin/apachectl。
这里给大家说一下/usr/local/apache里面的内容,顺便把网页的内容添加hello apache,这时候我们查看一下。
第七步:将.pid文件放到/var/run下
我们一般都是将生成的.pid文件放到/var/run下面的,但是这里的.pid文件都放到了/usr/local/apache/logs下面,但是我们的/logs/下面都是放日志的,放这些.pid文件显然是不合适的,我们这里编辑配置文件(/etc/httpd/httpd.conf)将它的.pid文件都生成到/var/run下面。我们在配置文件中添加的内容是:PidFile "/var/run/httpd.pid"。【提示:我们还可以验证,当你没有输入这些内容的时候,关闭服务器(bin/apachectl stop)我们再用netstat –tnlp查看一下80端口,已经不再处于监听状态,我们在查看一下logs下面已经没有了.pid文件。这时候在配置文件中添加PidFile "/var/run/httpd.pid",我们发现.pid文件已经放到了/var/run/下面了,并且名字为httpd.pid。】
第八步:启动方便
我们这时候虽然能启动起来但是启动总是那么的不方便,这时候我们就要写脚本来让它方便起来了。将文件放在/etc/init.d/httpd里面,编辑完成后给它权限就行了,直接启动就行了。接下来我们让它开机后自动启动起来。
[root@localhost apache]# vim /etc/init.d/httpd [root@localhost apache]# chmod +x /etc/init.d/httpd
#!/bin/bash # # httpd Startup script for the Apache HTTP Server # # chkconfig: - 85 15 # description: Apache is a World Wide Web server. It is used to serve \ # HTML files and CGI. # processname: httpd # config: /etc/httpd/conf/httpd.conf # config: /etc/sysconfig/httpd # pidfile: /var/run/httpd.pid # Source function library. . /etc/rc.d/init.d/functions if [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpd fi # Start httpd in the C locale by default. HTTPD_LANG=${HTTPD_LANG-"C"} # This will prevent initlog from swallowing up a pass-phrase prompt if # mod_ssl needs a pass-phrase from the user. INITLOG_ARGS="" # Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server # with the thread-based "worker" MPM; BE WARNED that some modules may not # work correctly with a thread-based MPM; notably PHP will refuse to start. # Path to the apachectl script, server binary, and short-form for messages. apachectl=/usr/local/apache/bin/apachectl httpd=${HTTPD-/usr/local/apache/bin/httpd} prog=httpd pidfile=${PIDFILE-/var/run/httpd.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd} RETVAL=0 start() { echo -n $"Starting $prog: " LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch ${lockfile} return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc -p ${pidfile} -d 10 $httpd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} } reload() { echo -n $"Reloading $prog: " if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then RETVAL=$? echo $"not reloading due to configuration syntax error" failure $"not reloading $httpd due to configuration syntax error" else killproc -p ${pidfile} $httpd -HUP RETVAL=$? fi echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status -p ${pidfile} $httpd RETVAL=$? ;; restart) stop start ;; condrestart) if [ -f ${pidfile} ] ; then stop start fi ;; reload) reload ;; graceful|help|configtest|fullstatus) $apachectl $@ RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}" exit 1 esac exit $RETVAL
第九步:安装mysql
从上面的顺序可看出,下面我们将要演示MySQL安装过程,这里我们先使用5.5这个版本是如何安装的,回头再讲5.6的安装过程。大家要演示的话到mysql的官方网站上去下载(www.mysql.com)。这里就从怎样安装开始讲起。这个时候我们就可以解压【官方要求:但是我们必须要将mysql放到/usr/local下面,并且目录名称还必须是mysql】,压缩过去后,我们是重命名还是使用连接?这里最好使用的是连接,这样的它的版本号还有平台这些字符创都会保留着,容易识别正在使用的是什么版本的。
[root@localhost ~]# tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local ####由于包有点大所以速度有点慢 [root@localhost local]# ln -sv mysql-5.5.28-linux2.6-i686/ mysql ####创建连接
对我们而言,要想初始化安装mysql,我们就要使用mysql用户mysql组,并且还不能让它登录(不创建家目录)。
实际上在mysql里面有个文件是INSTALL-BINARY,这个文件里面说明了是如何安装的,这里给大家讲解一下,下面就给大家演示一下如何去安装mysql的。
这里我们就可以更改mysql的权限了,更改权限后我们先查看一下scripts下面的脚本,这个脚本是进行初始化的,里面也是有很多选项的,有个选项是—datadir=path,我们要将数据另外保存在什么地方,我们用rpm包安装默认在/var/lib/mysql。我们用编辑的方式安装mysql,它默认都放在/usr/local/mysql/data下面。我们要是把数据放在软件安装路径下面可不是好的选择,我们要给它另找路径,我们知道这个数据是不断变大的,我们最好把它放到逻辑卷中,这样等数据很大的时候我们可以用扩展逻辑卷的方式继续存放数据。这里我们先创建一个20G的逻辑分区,将其设置成逻辑卷类型。
[root@localhost mysql]# chown -R mysql.mysql /usr/local/mysql/* [root@localhost mysql]# fdisk /dev/sda [root@localhost mysql]# pvcreate /dev/sda5 ####创建物理卷 [root@localhost mysql]# vgcreate myvg /dev/sda5 ####创建卷组 [root@localhost mysql]# lvcreate -n mydata -L 5G myvg ####创建5G的逻辑卷 [root@localhost mysql]# mke2fs -j /dev/myvg/mydata ####格式化为ext3格式 [root@localhost mysql]# mkdir /mydata ####创建文件夹 [root@localhost mysql]# vim /etc/fstab ####开机自动挂载 /dev/myvg/mydata /mydata ext3 defaults 0 0 [root@localhost mysql]# mount –a
如果把mydata作为数据目录的话,将来所有文件将直接放到这个分区上了,为了便于管理我们在建立一个子目录data。它的属主属组应该是mysql,但现在是root,所以我们还要更改属主属组。并且其他用户也是不能随意查看的。
[root@localhost mysql]# mkdir /mydata/data [root@localhost mysql]# chown -R mysql.mysql /mydata/data ####更改属主、属组 [root@localhost mysql]# chmod o-rx /mydata/data ####更改其他用户的权限
这个时候我们就可以执行脚本了,进行初始化。为了安全起见,初始化完成后我们要将mysql下面的属主改为root。【提示:如果你使用的是默认的data,那你还要将data的属主改为mysql,而我们是又创建的文件存放数据,所以这里就不用改了】
[root@localhost mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data [root@localhost mysql]# chown -R root /usr/local/mysql/*
第十步:启动mysql
我们这时候是没有脚本的,所以不能用service mysqld start。但是mysql给我们提供的有脚本,在support-files下面有个文件叫mysql.server,这就是它的脚本,我们只需要将它复制过去就行了。
这个时候我们还不能启动mysql,因为我们还没有设置配置文件,mysql找配置文件的时候先去找/etc/my.cnf,再去找/etc/mysql/my.cnf,找完这里还去找$BNSEDIR/my.cnf。有人问$BNSEDIR是什么?一般来讲就是你的安装目录。下面还去找~/.my.cnf。找完后如果有冲突怎么办?这里就是以最后一个为准(后一个会覆盖前一个)。我们到support-files目录中选择一个配置文件,其中我们要选择合适的,我们就以正确的作为例子,我们这里查看一下文件中的内存是否为我们合适的内存。这里我们选择my-large.cnf,因为我们的内存是512M的,所以这里我们就选择它了。然后我们将它复制到/etc/下面,并命名为my.cnf,然后编辑配置文件。最后启动serice mysqld start。
[root@localhost mysql]# cp support-files/my-large.cnf /etc/my.cnf [root@localhost mysql]# vim /etc/my.cnf
[root@localhost mysql]# service mysqld start
我们编译的时候服务器端和客户端的mysql都装了,我们这里的mysql的二进制也装了,但是找不到,所以我们要给它一个路径这样就行了,这里我们登录一下mysql,结果如下。
[root@localhost mysql]# vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
第十一步:安装php
这里我们开始安装php,大家去php的官网(http://php.net/downloads.php)下载安装包,php有很多功能都要依赖于你系统上的某些功能的,它可以给我们动态生成图片,但是它要依赖于图片库,如果当前系统上没有图片库,它就没法使用这个功能。这里我们就先解压,解压后我们就可以配置了。
[root@localhost ~]# tar xf php-5.4.13.tar.bz2 [root@localhost ~]# cd php-5.4.13
[root@localhost php-5.4.13]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
详解: --prefix=/usr/local/php ####安装目录 --with-mysql=/usr/local/mysql ####mysql的位置 --with-openssl ####是否支持openssl功能 --with-mysqli=/usr/local/mysql/bin/mysql_config ####php与mysql交互的另一个接口(是个二进制程序) --enable-mbstring ####支持中文(非单个字节表示的语言) --with-freetype-dir ####支持fretype功能(fretype是实现引用不同字体的) --with-jpeg-dir ####支持jpg格式的图片 --with-png-dir ####支持png格式的图片 --with-zlib ####支持通用格式的压缩库 --with-libxml-dir=/usr ####xml的库的位置 --enable-xml ####支持扩展标记语言 --enable-sockets ####支持基于套接字的通信 --with-apxs2=/usr/local/apache/bin/apxs ####将它编译成apache的模块 --with-mcrypt ####支持加密功能的 --with-config-file-path=/etc ####php文件存放的目录(主配置文件为php.ini) --with-config-file-scan-dir=/etc/php.d ####主配置文件有很多片段放的位置(格式是.ini) --with-bz2 ####支持压缩库 --enable-maintainer-zts ####主要取决于apache的类型(为prefork不用,使用event或worker需要要用)如果apache以线程方式工作必须编译成这种格式
这里执行后可能会出现错误,因为它所依赖的还有别的库文件不存在,这里我们手动解决依赖关系就行了。我们查看图片出现了错误,它说你没有安装mcrypt相关的软件包,加密不了了。有两种解决方案:一、不适用加密功能把--with-mcrypt给去了。二、使用加密功能,安装mcrypt相关的包。我们这里使用第二中方案。这里我们需要安装四个软件包,一个是mhash,一个是mhash-devel,一个是libmcrypt,最后一个是libmcrypt-devel。
这几个软件包去rpmfind.net上面搜索,里面有很多版本的,我们这里选定的是mhash-0.9.2-6.el5.i386.rpm和mhash-devel-0.9.2-6.el5.i386.rpm。然后我们再上网上下载libmcrypt-2.5.7-5.el5.i386.rpm,libmcrypt-devel-2.5.7-5.el5.i386.rpm软件包,然后解压。解压完成后我们就可以再次执行./configure了。执行完成后我们就可以make和make install。
第十二步:提供配置文件
Php的配置文件比较独特,在/etc/php.ini。php-5.4.13下面有两个文件,一个是php.ini-development用户开发环境的,另一个是php.ini-production用于生产环境的。我们用于生产环境的,把php.ini-production复制到/etc/下并命名为/php.ini。下面我们就说一说如何让apache和php结合起来工作。主要修改apache的配置文件来实现。编辑apache的配置文件,让apache处理php结尾的页面文件,既然我们能够支持php了,我们主页面也应该有以php结尾的页面了。
[root@localhost php-5.4.13]# cp php.ini-production /etc/php.ini [root@localhost php-5.4.13]# vim /etc/httpd/httpd.conf
下面我们要进入网页默认目录,然后修改index.html,更改为index.php格式的。然后编辑内容,我们这里用php连接mysql,然后进行测试,我们在把mysql关闭(service mysqld stop)然后在进行测试。
[root@localhost ~]# cd /usr/local/apache/htdocs [root@localhost htdocs]# mv index.html index.php [root@localhost htdocs]# vim index.php
[root@localhost ~]# service mysqld stop
第十三步:配置xcache
下面我们就实现如何让我们的php支持虚拟主机,但是在支持虚拟主机之前,我们先让我们的php能够使用xcache,对php和opcod进行加速。这里我们直接下载好了,大家做了上网上下载(http://xcache.lighttpd.net/)。我们这里使用的是xcache-2.0版本。xcache的安装比较独特,因为xcache是php的模块准确的说是php的扩展,我们首先要使用php的命令来加载这个扩展,要识别这个扩展。Phpize意思是准备好一个扩展以便进行编译的。Php-config是能够获取php的配置信息,以及编译时候所使用的选项信息的【提示:能够和php-5.4结合工作的只支持xcache2.0及其以后的版本】
[root@localhost ~]# tar xf xcache-2.0.0.tar.bz2 [root@localhost ~]# cd xcache-2.0.0 [root@localhost xcache-2.0.0]# /usr/local/php/bin/phpize ####【提示:几乎所有扩展在安装之前都要执行这个命令的。】 [root@localhost xcache-2.0.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config --enable-xcache ####启用xcache功能 --with-php-config=/usr/local/php/bin/php-config ####php的配置命令 [root@localhost xcache-2.0.0]# make
安装完成后会在xcache-2.0.0目录下面生成一个文件叫xcache.ini。要想php能够支持xcache这个功能,那就意味着把xcache的配置信息必须要提供到php里面去,所以我们要把xcache.ini追加到php里面去,或者直径将xcache.ini直接复制到php.d下面,不过这个php.d目录是我们手动创建的,复制完成后我们要进行编辑,我们这里只把常用的给列了出来,我们应该重启才能生效,这里要重启web,因为它的模块是被web加载的。我们还需要在/usr/local/apache/htdocs/index.php 添加一项“phpinfo();“,我们在测试一下,由此可见xcache工作起来了。
[root@localhost xcache-2.0.0]# mkdir /etc/php.d [root@localhost xcache-2.0.0]# cp xcache.ini /etc/php.d [root@localhost xcache-2.0.0]# vim /etc/php.d/xcache.ini
[xcache.admin] ####xcache的管理功能 xcache.admin.enable_auth = On ####管理功能认证打开 xcache.admin.user = "mOo" ####管理用户是什么 ; xcache.admin.pass = md5($your_password) ####用md5加密的方式加密码 xcache.admin.pass = "" ####管理密码是什么 xcache.shm_scheme = "mmap" ####使用哪种方式来共享内存,“mmap”内存映射(一个内存可以让多个进程同时访问) xcache.size = 60M ####用于缓存opcode代码的空间有多大(可修改的) xcache.count = 1 ####设置你的CPU个数 xcache.slots = 8K ####在缓存当中,有几个槽位来缓存opcode,并且每个槽位是多大 xcache.ttl = 0 ####过期时间,0表示永不过期 xcache.gc_interval = 0 ####过期的时候都清理出去,我们的垃圾回收器多长时间工作一次,0表示永不工作
[root@localhost xcache-2.0.0]# service httpd restart [root@localhost xcache-2.0.0]# vim /usr/local/apache/htdocs/index.php