JUN

VPS(CentOS5.5)上纯手工编译搭建LAMP架构
LAMP=Linux+Apache+Mysql+PHP,是目前被很多人使用的服务器架构,个人认为,它和LNMP(L...
扫描右侧二维码阅读全文
28
2011/12

VPS(CentOS5.5)上纯手工编译搭建LAMP架构

LAMP=Linux+Apache+Mysql+PHP,是目前被很多人使用的服务器架构,个人认为,它和LNMP(Linux+Nginx+Mysql+PHP)架构比起来,在运行PHP的时候不容易出现502错误。本人也是被502搞烦了才从LNMP转向LAMP的,这大概是因为在LNMP架构上的PHP是以FASTCGI模式运行的(现在又換成LNMP了= =等我有大点内存再換成LAMP吧。。。)
我们就以Apache2.2.21、Mysql5.1.59、PHP5.3.8来进行搭建。
Mysql到5.5版本之后不是以前--configure的方式编译了,使用的是cmake,而且默认使用InnoDB引擎,在编译里取消InnoDB后,启动MySQL会失败并在日志里提示。
[text]
111025 17:24:17 [ERROR] Unknown/unsupported storage engine: InnoDB
111025 17:24:17 [ERROR] Aborting</td>
[/text]
需要在my.cnf上加入default-storage-engine=MyISAM
本文会分别对5.1.59和5.5+版本的安装进行说明,如果你需要使用到InnoDB引擎,建议还是5.5+版本。请自行斟酌需要哪个版本。

一、默认装好的Centos系统上会自带有Apache,为了要安装自己编译的Apache,我们必须先删除这个自带的。
[bash]yum remove httpd[/bash]
※注:
如果上面的命令不能成功删除,可能是依赖包比较多,用
[bash]rpm -qa|grep httpd[/bash]
查看与httpd的依赖包有多少,从下往上按顺序删除
[bash]rpm -e ……[/bash]
安装其他插件,设置时区:
[bash]
#安装fastestmirror插件,一般VPS上都已经安装了,这样执行这个命令就进行更新
yum -y install yum-fastestmirror
#更新系统软件
yum -y update
#设置时区
rm -rf /etc/localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[/bash]
一般情况下需要关闭SElinux,可以执行这个命令查看SElinux是否已经关闭
[bash]/usr/sbin/sestatus[/bash]
如果返回SElinux status:disabled就可以了。
若没有关闭,你需要编辑/etc/sysconfig/selinux文件,设置selinux=disabled。这样一来下次系统重启的时候SElinux就不起跟着启动了。
还需要执行下面的命令来使当前会话中的SElinux失效:
[bash]setenforce 0[/bash]
最后用/usr/sbin/sestatus命令看看是否已经让SElinux失效了。

二、配置本地编译环境,获取最新版本号的APACHE/MYSQL/PHP。
1、运行这个命令来在VPS上配置编译环境。

yum -y install gcc gcc-c++ bison patch unzip mlocate flex wget automake autoconf cpp gettext readline-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel libmcrypt libmcrypt-devel zlib zlib-devel libmhash libmhash-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel libidn libidn-devel openldap openldap-devel openldap-clients openldap-servers nss_ldap expat-devel libtool libtool-ltdl-devel

※在这里获取的BISON可能不是最新版本的,对BISON有高版本要求的同学自己去官方网站下载编译安装。步骤也很简单:
[bash]
cd bison
./configure
make
make install
[/bash]
很简单吧~ 个人比较懒,不是最新也无所谓了TvT

2、获取Apache、MySQL和PHP。
APACHE:
[bash]wget http://www.apache.org/dist/httpd/httpd-2.2.21.tar.gz[/bash]
MYSQL:
[bash]wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.59.tar.gz/from/http://mysql.he.net/[/bash]
#或5.5.17版本
[bash]wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.17.tar.gz/from/http://mysql.he.net/[/bash]
PHP:
[bash]wget http://cn.php.net/get/php-5.3.8.tar.gz/from/us.php.net/mirror[/bash]
这些都是官网的下载地址,如果有更新可能会下载不到,请自己去它们的官网下载。
APACHE:http://httpd.apache.org
MYSQL:http://www.mysql.com
PHP:http://www.php.net
(其中Mysql请下载Source Code,选最后一个Compressed TAR archive)

3、将下载好的文件解压
[bash]tar zxvf httpd-2.2.21.tar.gz;tar zxvf mysql-5.1.59.tar.gz;tar zxvf php-5.3.8.tar.gz[/bash]
#5.5.17版本:
[bash]tar zxvf httpd-2.2.21.tar.gz;tar zxvf mysql-5.5.17.tar.gz;tar zxvf php-5.3.8.tar.gz[/bash]
三、编译、安装并配置MYSQL。
1、编译安装MYSQL
Ⅰ.5.1.59版本的安装:
[bash]
cd mysql-5.1.59
#増加专门用于管理mysql的用户
groupadd mysql
useradd -r -g mysql mysql
#配置
./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data \
--enable-thread-safe-client --enable-assembler --enable-local-infile \
--with-charset=utf8 --with-collation=utf8_general_ci \
--with-extra-charsets=all --with-big-tables --with-readline --with-ssl \
--with-embedded-server
make
make install
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
bin/mysql_install_db --user=mysql
chown -R root .
chown -R mysql var
cd /root/mysql-5.1.59
cp support-files/my-medium.cnf /etc/my.cnf
#开机启动
cp support-files/mysql.server /etc/init.d/mysqld
chmod 0755 /etc/init.d/mysqld
chkconfig --add mysqld
[/bash]
5.1版本的到此就安装完成了。
而如果你选择的是5.5版本的安装就比较复杂一点。请看下面:

Ⅱ.5.5.17版本的安装:
刚开始我也觉得很奇怪,怎么下载的MYSQL里面没有平时熟悉的configure文件呢?取而代之的是configure.cmak文件。
GOOGLE了一下才知道MYSQL从5.5版本开始采用CMAKE来编译,也许今后的版本都会这样。
下载并编译安装CMAKE。
[bash]
wget http://www.cmake.org/files/v2.8/cmake-2.8.6.tar.gz
tar zxvf cmake-2.8.6.tar.gz
cd cmake-2.8.6
./bootstrap
make
make install
[/bash]
编译好之后可能会让你运行gmake,但是我还是照着官方文档的方法用make来编译了。GOOGLE了一下好像在LINUX上这两个一样。
截止到发教程为止官方最新版本还是2.8.6,有需要更新版本的同学请到官网下载:http://www.cmake.org/
[bash]
groupadd mysql
useradd -r -g mysql mysql (←需要一个mysql用户组的mysql用户来运行mysqld进程)
cd ..
cd mysql-5.5.17
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all
[/bash]
注:
a.对sock文件安装有特别需求的加上一条 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock ,再把等号右边的值换成你想要的。没有这条配置指令就默认安装在/tmp/mysql.sock。
b.MyISAM、MERGE、MEMORY、CSV和INNOBASE已经被强制安装进去而不用我们另外自行安装。5.5之后的默认引擎为INNODB。如有需要安装其它引擎请使用参数-DWITH_engine_STORAGE_ENGINE=1。如果你的VPS内存小,不想使用INNODB引擎(INNODB安装完成后大概占300MB左右内存),请加上参数-DWITHOUT_INNOBASE_STORAGE_ENGINE=1。
c.对安装参数有更多自定义需要的,请参考解压后目录下的INSTALL-SOURCE文件2.9部分。
[bash]
make
make install
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
scripts/mysql_install_db --user=mysql (初始化数据库,如果失败可以删掉数据库文件夹再执行一次)
chown -R root .
chown -R mysql data
cp support-files/my-medium.cnf /etc/my.cnf
[/bash]
◎把mysql添加到系统服务并设置开机启动
[bash]
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 345 mysqld on
service mysqld start
[/bash]
mysql.server脚本调用mysqld_safe来启动服务器。在mysql.server启动服务器之前,它把目录改变到MySQL安装目录,然后调用safe_mysqld。如果你想要作为一些特定的用户运行服务器,在/etc/my.cnf选项文件的[mysqld]组增加相应user选项。
◎将默认引擎改为MyISAM
如果你编译的时候没有编译进INNODB引擎,这一步是不可少的,否则MySQL将不能启动。
官方文档明确说MySQL5.5之后全部默认使用INNODB引擎。
[bash]mysql&gt;show engines;[/bash]
可以看到INNODB已经作为默认引擎使用。
关掉它,在my.cnf文件的mysqld区域加上一句:
[bash]default-storage-engine=MyISAM[/bash]
注意:如果你不小心把INNODB编译进去了,还要加上skip-innodb,但是把INNODB编译进去的话就算跳过不使用INNODB,也会比未编译进去的多50MB左右内存。内存使用对比
未编译INNODB,使用MyISAM:58MB
编译INNODB,使用MyISAM:100+MB
编译INNODB,使用INNODB:300+MB
2、进一步配置MySQL
安装完MySQL第一件事就是更改管理员密码,删除密码为空的用户。
[bash]
#进入mysql安装目录下的bin目录
cd /usr/local/mysql/bin
./mysqladmin -u root -p password "这里換成你的新密码"
[/bash]
注意密码要用双引号(而不是单引号)括起来。
回车确认后再输入一次新密码就可以了。
接下来删除不需要的用户:
[bash]./mysql -uroot -p[/bash]
#输入密码之后
[bash]
mysql &gt; use mysql;
mysql &gt; delete from user where password="";
mysql &gt; exit;
[/bash]
四、编译、安装并配置APACHE。
1、编译安装
[bash]
cd (回到ROOT目录)
cd httpd-2.2.21
./configure --prefix=/usr/local/apache --enable-so --enable-cache \
--enable-disk-cache --enable-file-cache --enable-mem-cache \
--enable-deflate --enable-headers --enable-mime-magic \
--enable-proxy --enable-rewrite --enable-ssl \
--enable-mods-shared=all --enable-expires
make
make install
[/bash]
在这里说明一下几个参数的意义:
--enable-so:就是使用so模块啦。
--enable-deflate:这个就是gzip。
--enable-expires:使用这个可以让一些例如图片文件在浏览者的本地缓存一段时间。

PHP官网上说,想要知道更多的编译参数请执行./configure --help来查看……于是米渣不得不老老实实./configure --help|more来一条一条地查看参数,累死人= =不过我还真没有在README的相关文件里找到有关编译参数的说明……

2、配置
编辑httpd.conf文件,把user和group的值改成www
[bash]
user www
group www
[/bash]
编辑bin目录下的apachectl文件,加入以下代码
# chkconfig:345 85 15
# description:httpd
注意不要漏掉前面的#号。
其它请随自己喜好配置
[bash]
groupadd www
useradd -M -g www -s /sbin/nologin www
[/bash]
执行命令
[bash]
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
chkconfig --add httpd
chkconfig --level 345 httpd on
service httpd start
[/bash]
五、编译、安装并配置PHP。
1、编译安装
[bash]
cd
cd php-5.3.8
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \
--with-curl \
--with-pear \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--with-freetype-dir \
--with-mcrypt \
--with-mhash \
--with-openssl \
--with-xmlrpc \
--with-bz2 \
--with-gettext \
--with-mime-magic \
--disable-debug \
--enable-exif \
--enable-wddx \
--enable-zip \
--enable-bcmath \
--enable-calendar \
--enable-ftp \
--enable-mbstring \
--enable-soap \
--enable-sockets \
--enable-sqlite-utf8 \
--enable-shmop \
--enable-dba \
--enable-magic-quotes
make
make install
[/bash]
2、让APACHE支持PHP
一般安装完之后MOD模块就已经自动被复制到APACHE的MOULES目录下,并在APACHE的配置文件里写入PHP的相关信息,我们先检查是否有以下几句,没有的话自己加上
[bash]
LoadModule php5_module modules/libphp5.so
<FilesMatch \.php$>;
SetHandler application/x-httpd-php
</FilesMatch>;
[/bash]
为了避免潜在的危险,例如上传或者创建类似exploit.php.jpg的文件并被当做 PHP 执行,PHP官网已经建议不再使用 Apache 的 AddType 指令来设置。
PHP更新之后之前的php.ini-recommend对应php.ini-production,php.ini-dist对应php.ini-development。个人比较喜欢已经帮设置好的recommend。我们把php.ini复制到相应目录下,也就是在编译时指定的--with-config-file-path参数。
[bash]cp php.ini-production /usr/local/php/etc/php.ini[/bash]
别忘记在php.ini里把short_open_tag打开:[ccei]short_open_tag=on[/ccei]

六、安装Zend Guard Loader
在PHP升到5.3版本之后,原来的Zend Optimizer正式被Zend Guard Loader替代了。
在网上找不到可以直接下载的链接,Zend官方需要登录才可以下载,所以请各位同鞋登录Zend官方网站下载http://www.zend.com
下载后上传到root目录下。
[bash]tar zxvf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz[/bash]
文件名请根据实际情况进行更改。
[bash]
mkdir /usr/local/php/zend
cp ./ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x/ZendGuardLoader.so /usr/local/php/zend/ZendGuardLoader.so
[/bash]
然后在php.ini最后添加
[bash]
[ZendGuardLoader]
zend_extension=/usr/local/php/zend/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path=
[/bash]
over!
重启下apache就好了。

七、结束
终于把坑填完了= =累shi人了。
关于优化这方面大家自己GOOGLE一下你就知道,大家自己看着办吧orz小心不要把apache的MaxClients设得太高,DD一来肯定会挂。过段时间研究一下Nginx做前端Apache做后端的结构,负载应该更强一点。
本软件使用的均为32位系统软件,如果你是64位系统请自己寻找相对应的版本。配置方式大同小异。

Last modification:May 7th, 2016 at 01:18 pm
If you think my article is useful to you, please feel free to appreciate

One comment

  1. […] 一些基础的东西请参照以前的文章:VPS(CentOS5.5)上纯手工编译搭建LAMP架构 […]

Leave a Comment