Lnmp环境搭建


一.关闭selinux

vi /etc/sysconfig/selinux 

将SELINUX=enforcing修改为disabled然后重启系统生效


二.配置CentOS 6.0 第三方yum源

下载地址:http://mirrors.163.com/.help/centos.html

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

mv /etc/yum.repos.d/CentOS6-Base-163.repo /etc/yum.repos.d/Cent0S-Base.repo

yum clean all

yum makecache


三.安装开发包和库文件

yum -y install gcc gcc-c++ autoconf automake bison flex freetype freetype-devel fontconfig-devel gettext-devel libjpeg libjpeg-devel libpng libpng-devel libxml2 libxml2-devel libtool libtool-ltdl libtool-ltdl-devel libtiff-devel libXpm-devel libicu libicu-devel libidn libidn-devel libxslt libxslt-devel gd gd-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel openssl openssl-devel openldap* openldap-devel openldap-clients openldap-servers pcre pcre-devel pam-devel vim-enhanced mysql-devel php-devel libevent libevent-devel


四.安装nginx

nginx会有几个依赖包,我们首先安装依赖,不要安装过程中会报错:

yum -y install zlib-devel pcre-devel openssl-devel

一般源代码安装分4个步骤(有人也会省去第一个步骤),解压(tar命令)预编译(执行源码包下的configure),编译(make),编译安装(make install)

首先我们解压源码包:

tar zxf nginx-1.0.13.tar.gz   //这里解释下加压参数,z代表gzip(也就是后面的.gz文件)x代表加压,v表示显示详细信息,-f使用档案文件或设备(必选参数),然后我们进行预编译,一般预编译会带上一些参数,已达到我们想要安装的效果,比如启用某个功能,禁用某个功能:

进入源码包目录进行预编译:

cd nginx-1.0.13

./configure --prefix=/usr/local/nginx  --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module  --with-pcre

其中./configure指执行当前目录下的configure文件,预编译完成后我们就可以进行编译和安装:

make #编译 执行后make后会有大量输出,等待输出完成后如果没有报错就可以进行安装执行:

make install #安装

安装完成后我们可以到相应的目录查看安装的文件:

ls /usr/local/nginx/

conf html logs sbin

创建nginx用户及组

useradd -r -M -s /sbin/nologin nginx   //-r:建立系统账号,-M:不要自动建立用户的登入目录,-s:指定用户登入后所使用的shell,/sbin/nologin只是不允许login系统


*nginx配置优化

worker_processes auto   //nginx要开启的进程数,一般等于cpu的总核数 (设置为“auto”将尝试自动检测它)

worker_rlimit_nofile 102400   //这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。

worker_connections 5000   //每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。

keepalive_timeout 60   //keepalive超时时间

access_log /var/log/nginx/access.log   //设置nginx是否将存储访问日志

error_log /var/log/nginx/error.log   //告诉nginx只能记录严重的错误


检测配置文件

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

好了,下面我们启动nginx:

/usr/local/nginx/sbin/nginx

添加开机启动

vi /etc/rc.d/rc.local

/usr/local/nginx/sbin/nginx

通过查看端口看nginx是否启动成功,nginx占用TCP的80端口,执行下面命令:

netstat -antlp | grep 80

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5946/nginx

我们查看80端口是开放的

然后打开浏览器访问http://ip,我们会看到Welcome to nginx(之前的版本是 It’s Work):


五.安装mysql

1.安装cmake包 //mysql5.5版本以上的编译要cmake

tar zxvf cmake-2.8.1.tar.gzcd

./configure

make && make install

2.添加用户和创建数据库目录和权限设置

 //创建用户和组

groupadd mysql  

useradd -g mysql -s /sbin/nologin mysql   

mkdir /usr/local/ mysql   //创建安装目录

mkdir /usr/local/mysql/data   //创建数据库目录

touch /usr/local/mysql/log/mysql_error.log

touch /usr/local/mysql/log/mysql_access.log

touch /usr/local/mysql/data/mysql.pid

3.安装mysql

tar zxf mysql-5.5.13.tar.gz

cd mysql-5.5.13

cmake \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \#安装目录

-DMYSQL_DATADIR=/usr/local/mysql/data \#数据库存放目录

-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock \#Unixsocket文件路径

-DDEFAULT_CHARSET=utf8 \#使用utf8字符

-DDEFAULT_COLLATION=utf8_general_ci \

-DWITH_MYISAM_STORAGE_ENGINE=1 \#安装myisam存储引擎

-DDEFAULT_COLLATION=utf8_general_ci \#效验字符

-DEXTRA_CHARSETS=all \#安装所有扩展字符集

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_MEMORY_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DENABLED_LOCAL_INFILE=1 \

-DMYSQL_USER=mysql \

-DMYSQL_TCP_PORT=3306

make && make install

安装完成后复制配置文件和启动脚本:

cp support-files/my-medium.cnf /etc/my.cnf # 复制配置文件

cp support-files/mysql.server /etc/init.d/mysqld # 复制启动脚本

chmod +x /etc/init.d/mysqld # 给启动脚本执行权限

chkconfig --level 345 mysqld on #加入开机启动

为了以后方便我们为所有的二进制可执行文件和动态链接库文件做一个软连接:

ln -s /usr/local/mysql/bin/* /usr/local/bin/ # 为可执行的二进制文件做软连接

ln -s /usr/local/mysql/lib/lib* /usr/lib/ # 为动态链接库做一个软连接

为了MySQL能正常使用我们需要更改一下MySQL安装目录和MySQL的数据库目录的属主和属组:

chown -R mysql.mysql /usr/local/mysql/ # 更改安装目录属主和属组为mysql

# 修改my.cnf配置

vim /etc/my.cnf

[mysqld]:

datadir=/usr/local/mysql/data   //mysql数据库文件所在目录

default-storage-engine=MyISAM   //设置默认存储引擎

skip-external-locking   //避免MySQL的外部锁定,减少出错几率增强稳定性

#skip-name-resolve   //禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!

log-error=/usr/local/mysql/log/mysql_error.log

log=/usr/local/mysql/log/mysql_access.log

pid-file=/usr/local/mysql/data/mysql.pid

max_connections = 5000   //允许最大连接数,记住每个连接都要使用会话内存,默认值是100

max_connect_errors = 6000   //可以允许多少个错误连接

max_allowed_packet = 64M   //设置最大包,限制server接受的数据包大小,避免超长SQL的执行有问题,默认值为16M

key_buffer_size = 512M   //指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。对于内存在4GB左右的服务器该参数可设置为256M或384M。注意:该参数值设置的过大反而会是服务器整体效率降低!

table_open_cache = 2048 //所有线程打开表的数量

sort_buffer_size = 32M   //查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100×6=600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。

read_buffer_size = 8M   //读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!

#back_log = 256   //指定MySQL可能的连接数量,当MySQL主线程在很短的时间内接收到非常多的连接请求,该参数生效,主线程花费很短的时间检查连接并且启动一个新线程。back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。默认值为50。对于Linux系统推荐设置为小于512的整数。

table_cache = 512   //参数设置表高速缓存的数目。每个连接进来,都会至少打开一个表缓存。因此, table_cache 的大小应与 max_connections 的设置有关。 

thread_cache_size = 80   //表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线 程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。

wait_timeout = 600   //服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为600


# 初始化数据库

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

配置完毕后我们启动mysql:

service mysqld start

现在我们查看MySQL是否启动成功,MySQL占用TCP的3306端口,我们查看端口是否被占用:

netstat -antlp | grep 3306

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 32143/mysqld

六、安装php

编译安装php5.3.29所需组件

安装zlib

tar -zxf zlib-1.2.5.tar.gz

cd zlib-1.2.5

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

make && make install


安装libpng

tar -zxf libpng-1.6.2.tar.gz

cd libpng-1.6.2

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

make && make install


安装freetype

tar -zxf freetype-2.4.12.tar.gz

cd freetype-2.4.12

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

make && make install


安装Jpeg

tar -zxf jpegsrc.v9.tar.gz

cd jpeg-9

./configure --prefix=/usr/local/libs --enable-shared --enable-static

make && make install


安装PHP前首先要安装几个源码包依赖:

libmcrypt mhash mcrypt

安装libmcrypt (加密算法库,PHP扩展mcrypt功能对此库有依耐关系,要使用mcrypt必须先安装此库)

tar -jxf libmcrypt-2.5.8.tar.bz2 # 这个包是bz2的 使用-j参数解压

cd libmcrypt-2.5.8

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

make && make install

cd libltdl/

./configure --prefix=/usr/local/libs --enable-ltdl-install 

make && make install

####################################################

tar zxf mhash-0.9.3.tar.gz 

cd mhash-0.9.3

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

make && make install


vim /etc/ld.so.conf.d/local.conf

/usr/local/libs/lib

/usr/local/lib

ldconfig -v

###########################################################

tar -zxvf mcrypt-2.6.8.tar.gz

cd mcrypt-2.6.8

export LDFLAGS="-L/usr/local/libs/lib -L/usr/lib"

export CFLAGS="-I/usr/local/libs/include -I/usr/include"

##这命令的作用是把安装的lib库连接到/usr/lib下,因为php安装时默认只搜索/urs/lib,不设置的话可能会造成后面mcrypt编译的时候找不到mhash库.

export LD_LIBRARY_PATH=/usr/local/libs/lib: /usr/local/libs   ##这命令的作用是设置gcc编译环境变量

./configure --prefix=/usr/local/libs/ --with-libmcrypt-prefix=/usr/local/libs/

make && make install


编译安装PHP(FastCGI模式)

cp -frp /usr/lib64/libldap* /usr/lib/     //不复制的话编译php时会报错configure: error: Cannot find ldap libraries in /usr/lib

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/


下载php:

wget http://cn2.php.net/distributions/php-5.3.29.tar.gz

tar zxf php-5.3.29.tar.gz

cd php-5.3.29

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config -with-pdo-mysql --with-openssl --with-curl --enable-mbstring --enable-mbstring=all --with-gd --with-freetype-dir=/usr/local/libs --with-jpeg-dir=/usr/local/libs --with-png-dir=/usr/local/libs --with-zlib-dir=/usr/local/libs --enable-sockets --with-iconv-dir --enable-libxml --enable-soap --with-mcrypt=/usr/local/libs --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-gd-native-ttf --with-mhash=/usr/local/lib --enable-pcntl --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-phar --without-pear --enable-ftp --enable-maintainer-zts --disable-rpath --with-gettext --enable-opcache

make && make install 

cp php.ini-production /usr/local/php/etc/php.ini # 如果是开发就复制php.ini-development

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf#拷贝模板文件为php-fpm配置文件

vim /usr/local/php/etc/php-fpm.conf #编辑

pid = run/php-fpm.pid #取消前面的注释

设置 php-fpm开机启动

cp /tmp/php-5.3.29/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm #拷贝php-fpm到启动目录

chmod +x /etc/init.d/php-fpm #添加执行权限

chkconfig --level 345 php-fpm on#设置345开机启动

启动php

/etc/init.d/php-fpm start


*php-fpm配置优化

开启php-fpm慢脚本日志

request_slowlog_timeout = 30s

slowlog = /var/log/php/php-fpm.log.slow   //需新建日志文件

request_terminate_timeout = 120   //表示等待120秒后,结束那些没有自动结束的php脚本,以释放占用的资源。

pm.max_children = 2000   //静态方式下开启的php-fpm进程数量。

pm.start_servers = 10   //动态方式下的起始php-fpm进程数量。

pm.min_spare_servers = 5   //动态方式下的最小php-fpm进程数量。

pm.max_spare_servers = 200   //动态方式下的最大php-fpm进程数量。

pm.max_requests = 12000

pm.process_idle_timeout = 10s


七.整合nginx和php

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

server {

    listen 80;

    server_name localhost;

    location / {

        root html;

        index index.php index.html index.htm; # 添加index.php的首页文件

    }

    location ~ \.php$ {

        root html;

        fastcgi_pass 127.0.0.1:9000;

        fastcgi_index index.php;

        #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

        include fastcgi.conf;

        }

}


vim /usr/local/nginx/html/index.php //新建一个php的测试页

<?php

phpinfo();

?>

/usr/local/nginx/sbin/nginx -s reload   //重新载入nginx服务

访问测试页