Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2325478
  • 博文数量: 535
  • 博客积分: 8689
  • 博客等级: 中将
  • 技术积分: 7066
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-26 10:00
文章分类

全部博文(535)

文章存档

2024年(4)

2023年(4)

2022年(16)

2014年(90)

2013年(76)

2012年(125)

2011年(184)

2010年(37)

分类: LINUX

2011-09-22 13:46:54




CentOS 6.0 x64编译LNMP环境

需要注意的是:64位里面有些软链接的操作是32位系统不需要或者不相同的,因此这里请注意文章里的描述,以免出现问题。

(一)准备必要的组件

这一步将安装系统里缺失的组件,以便后面的编译过程顺利。VPS由于都是精简过的系统,因此大部分的组件都有缺失,因此这一步是相当重要的。

这步操作可以通过yum源来完成,简单方便。在控制台里敲入下面的命令:

yum install gcc gcc-c++ autoconf 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 e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel libtool libtool-libs libevent-devel libevent openldap openldap-devel nss_ldap openldap-clients openldap-servers libtool-ltdl libtool-ltdl-devel bison

然后让系统自己安装就好了。

(二)准备必要的软件源码包

接下来我们要准备各个软件的源码包,以便编译安装。

首先我们创建下载目录:

mkdir -p /data0/software
cd /data0/software

接下来使用wget依次将以下软件包下载好:

wget
wget
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.15.tar.gz/from/http://mysql.easynet.be/
wget
wget “″
wget “″
wget
wget “″
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.12.tar.gz
wget
wget

这样源码包的准备工作就结束了。

(三)安装CMake

由于最新的MySQL使用CMake编译,因此我们首先要把CMake编译安装好:

tar zxvf cmake-2.8.5.tar.gz
cd cmake-2.8.5
./configure --prefix=/usr
make
make install
cd ..

 

(四)安装MySQL

首先我们建立mysql用户组和用户:

groupadd mysql
useradd -g mysql mysql

然后解包并编译安装MySQL:

tar xvf mysql-5.5.15.tar.gz
cd mysql-5.5.15
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/ -DMYSQL_DATADIR=/data0/mysql/data -DMYSQL_UNIX_ADDR=/data0/mysql/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_TCP_PORT=3306 -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_UNIX_ADDR=/data0/mysql/mysql.sock -DWITH_DEBUG=0 -DWITH_READLINE=1 -DWITH_SSL=yes -DSYSCONFDIR=/data0/mysql
make
make install

接下来给MySQL的目录赋予权限:

chmod +w /usr/local/webserver/mysql
chown -R mysql:mysql /usr/local/webserver/mysql

创建一系列的MySQL需要用到的目录:

mkdir -p /data0/mysql/data/
mkdir -p /data0/mysql/binlog/
mkdir -p /data0/mysql/relaylog/
chown -R mysql:mysql /data0/mysql/

接着我们以mysql帐号身份建立数据库:

/usr/local/webserver/mysql/scripts/mysql_install_db --basedir=/usr/local/webserver/mysql --datadir=/data0/mysql/data --user=mysql

然后我们复制mysql的启动脚本到/etc/init.d/目录方便启动:

cd support-files
cp mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld

然后我们将my.cnf复制到正确的地方:

cp my-medium.cnf /data0/mysql/my.cnf
cd ../../

注意这里根据自己服务器的应用需要,选择support-files下对应的预设配置文件替换掉上面命令中蓝色的部分。我这里选择的是中等压力的配置文件my-medium.cnf。

接下来我们编辑下MySQL的配置文件,做些设置:

vim /data0/mysql/my.cnf

然后在“[mysqld]”这一节的最后添加下面的内容:

basedir = /usr/local/webserver/mysql
datadir = /data0/mysql/data
log-error = /data0/mysql/mysql_error.log
pid-file = /data0/mysql/mysql.pid
relay-log-index = /data0/mysql/relaylog/relaylog
relay-log-info-file = /data0/mysql/relaylog/relaylog
relay-log = /data0/mysql/relaylog/relaylog
log-slow-queries = /data0/mysql/slow.log

然后我们启动MySQL服务:

/etc/init.d/mysqld start或者/usr/local/webserver/mysql/bin/mysqld_safe --datadir=/data0/mysql/data/ --user=mysql &

如果无问题的话应该显示SUCCESS的提示。

然后我们设置下root的密码,安装后默认root是空密码,这样很不安全:

/usr/local/webserver/mysql/bin/mysql -u root
GRANT ALL PRIVILEGES ON *.* TO ' BY '000000';
GRANT ALL PRIVILEGES ON *.* TO ' IDENTIFIED BY '000000';

注意把蓝色部分替换为你要设置的密码。

接下来我们创建libmysqlclient的软链接,以免编译其它依赖Mysql软件时出现libmysqlclient.so.18: cannot open shared object file的错误:

ln -s /usr/local/webserver/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18 (64位系统使用)
ln -s /usr/local/webserver/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18 (32位系统使用)

就此MySQL编译安装工作结束。

(五)安装PHP所需要的一些库

接下来为了后面编译PHP的顺利进行,先需要将一些必要的库编译安装好。

首先是libiconv库的编译安装:

tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1/
./configure --prefix=/usr/local
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 ../../

接下来我们要建立libmcrypt库的软链接:

#64位系统使用

ln -sf /usr/local/lib/libmcrypt.la /usr/lib64/libmcrypt.la
ln -sf /usr/local/lib/libmcrypt.so /usr/lib64/libmcrypt.so
ln -sf /usr/local/lib/libmcrypt.so.4 /usr/lib64/libmcrypt.so.4
ln -sf /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib64/libmcrypt.so.4.4.8
ln -sf /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
ln -sf /usr/local/lib/libiconv.so.2 /usr/lib64/libiconv.so.2
ldconfig

#32位系统使用

ln -sf /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -sf /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -sf /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -sf /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -sf /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
ln -sf /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2
ldconfig

接下来编译安装mhash:

tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make
make install
cd ..

建立libmhash相关的软链接:

#64位系统使用
ln -sf /usr/local/lib/libmhash.a /usr/lib64/libmhash.a
ln -sf /usr/local/lib/libmhash.la /usr/lib64/libmhash.la
ln -sf /usr/local/lib/libmhash.so /usr/lib64/libmhash.so
ln -sf /usr/local/lib/libmhash.so.2 /usr/lib64/libmhash.so.2
ln -sf /usr/local/lib/libmhash.so.2.0.1 /usr/lib64/libmhash.so.2.0.1
ldconfig

#32位系统使用
ln -sf /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -sf /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -sf /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -sf /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -sf /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
ldconfig

接下来编译安装mcrypt:

tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure
make
make install
cd ..

这样PHP编译所依赖的一些库就准备好了。

(六)安装PHP

首先我们再做几个软链接,这些软链接只是64位系统需要,32位系统不需要做

ln -s /usr/lib64/libjpeg.so /usr/lib/libjpeg.so
ln -s /usr/lib64/libldap.so /usr/lib/libldap.so
ln -s /usr/lib64/libpng.so /usr/lib/libpng.so

然后我们开始解包PHP并以FastCGI模式(PHP-FPM)编译安装:

tar xvf php-5.3.8.tar.gz
cd php-5.3.8

 

 

./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib  --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear

make ZEND_EXTRA_LIBS='-liconv'
make install

 

 

 

创建PHP的配置文件:

cp -f php.ini-production /usr/local/webserver/php/etc/php.ini
cd ..

由于刚才安装的时候试用了without-pear参数没有安装PEAR(因为直接安装会报错),现在我们再来补上:

wget
/usr/local/webserver/php/bin/php go-pear.phar

至此PHP的编译安装完毕。

(七)安装PHP的扩展模块及配置PHP

接下来我们安装一些PHP常用的模块来优化系统:

首先是memcache的编译安装:

tar xvf memcache-2.2.6.tgz
cd memcache-2.2.6
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ..

然后我们编译安装eAccelerator加速器:

tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1/
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ..

然后我们将编译好的这两个扩展模块添加到PHP配置文件中:

sed -i 's#; extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/"\nextension = "memcache.so"\n#' /usr/local/webserver/php/etc/php.ini
sed -i "s#;always_populate_raw_post_data = On#always_populate_raw_post_data = On#g" /usr/local/webserver/php/etc/php.ini
sed -i "s#;cgi.fix_pathinfo=1#cgi.fix_pathinfo=0#g" /usr/local/webserver/php/etc/php.ini

创建eAccelerator所需的缓存目录:

mkdir -p /usr/local/webserver/eaccelerator_cache

然后我们到php.ini中配置eaccelerator加速器:

vim /usr/local/webserver/php/etc/php.ini

然后到文件的最后添加下面的内容:注意里面的引号

[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

然后我们建立PHP存放日志的目录:

mkdir -p /usr/local/webserver/php/logs

然后我们建立php-fpm的配置文件:

vim /usr/local/webserver/php/etc/php-fpm.conf

然后在里面写入下面的内容:

[global]
pid = /usr/local/webserver/php/logs/php-fpm.pid
error_log = /usr/local/webserver/php/logs/php-fpm.log
log_level = notice
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 5s
daemonize = yes
[www]
listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
user = www
group = www
listen.mode=0666
pm = static
pm.max_children = 64
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 1024

request_terminate_timeout = 0s
request_slowlog_timeout = 0s
slowlog = logs/slow.log
rlimit_files = 65535
rlimit_core = 0
chroot =
chdir =
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

php_flag[display_errors] = off

然后我们添加www用户组和帐号信息,以便后面的php-fpm和nginx能够正常工作:

groupadd www
useradd -g www www

接下来,让我们测试下php-fpm配置文件是否正确:

/usr/local/webserver/php/sbin/php-fpm -t

如果出现“NOTICE: configuration file /usr/local/webserver/php/etc/php-fpm.conf test is successful”字样则表示配置正确。否则需要检查配置文件。

(八)安装Nginx

首先我们创建网页存放的根目录:

mkdir -p /var/www

这里可以根据需要建立你自己喜欢的Web根目录地址,不过注意后面的配置文件相应地方需要做修改。第一次进行编译操作或者初学者建议保持这里的配置不改动,以便顺利完成编译安装工作。

然后创建Nginx所需的日志目录并分配权限:

mkdir -p /var/log/nginx
chmod +w /var/log/nginx
chown -R www:www /var/log/nginx

然后编译安装Nginx所需的pcre库:

tar zxvf pcre-8.12.tar.gz
cd pcre-8.12/
./configure
make
make install
cd ..

接下来,编译安装Nginx:

tar xvf nginx-1.0.6.tar.gz
cd nginx-1.0.6/
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
cd ..

然后编辑Nginx的配置文件:

vim /usr/local/webserver/nginx/conf/nginx.conf

将对应的内容改为如下:

user www www;
worker_processes 2;

error_log /var/log/nginx/error.log;

注意蓝色文字部分根据服务器的配置选择不同的值。512M以下内存为1~2;1G内存4;2G内存8;4G内存16,以此类推。

然后在配置文件的“http {”这节里面增加下面的内容以便优化:

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

接下来我们运行下面的命令测试Nginx的配置文件是否正确:

/usr/local/webserver/nginx/sbin/nginx -t

如果出现下面提示的一种则表示配置文件无误,否则需要做进一步修改:

nginx: the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/webserver/nginx/conf/nginx.conf test is successf

这样Nginx的安装与配置也就完成。

(九)设置开机启动

我们编译好了的软件默认是不会开机自动启动的,我们需要处理下以便实现开机自启动。

首先是MySQL:

chkconfig --add mysqld
chkconfig --level 345 mysqld on

然后php-fpm和Nginx的启动我们放到/etc/rc.local启动文件中:

vim /etc/rc.local

在文件的末尾增加下面的内容:

ulimit -SHn 65535
/usr/local/webserver/php/sbin/php-fpm
/usr/local/webserver/nginx/sbin/nginx

保存退出后即可。

至此,所有的编译安装工作都结束。让我们启动php-fpm和Nginx来做测试吧!(MySQL在上面已经启动了)在控制台里面输入下面命令:

ulimit -SHn 65535
/usr/local/webserver/php/sbin/php-fpm
/usr/local/webserver/nginx/sbin/nginx

即可启动php-fpm和nginx。

(十)各项服务的启动与停止

1、MySQL:

启动:/etc/init.d/mysqld start
停止:/etc/init.d/mysqld stop
重启:/etc/init.d/mysqld restart

2、php-fpm:

启动: /usr/local/webserver/php/sbin/php-fpm
停止:killall php-fpm

3、Nginx:

启动: /usr/local/webserver/nginx/sbin/nginx
停止:killall nginx

如果你有更多的Linux知识,可以考虑将php-fpm和Nginx的启动做成启动脚本放在/etc/init.d/下。

(十一)遇到的问题

在我编译安装的时候,Nginx在启动之后报错:

[emerg] 1552#2780: could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32

网上查了一下资料,这个错误表示无法构建server_names_hash,应该增加server_names_hash_bucket_size的值。

解决办法很简单,在Nginx的配置文件的“http {”这一节加上下面的内容即可:

server_names_hash_bucket_size 64;

经过实验,本文的全部编译操作指令在CentOS 5.x和6.0下测试均通过。其他系统安装时可能无法适用本文的一些指令。

阅读(1850) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~