免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3117 | 回复: 2
打印 上一主题 下一主题

CentOS / Debian 编译安装 Nginx + Mysql 5.5.8 + PHP 5.3.5 [复制链接]

论坛徽章:
3
CU大牛徽章
日期:2013-05-20 10:43:41CU大牛徽章
日期:2013-05-20 10:44:06CU大牛徽章
日期:2013-05-20 10:44:16
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-15 10:22 |只看该作者 |倒序浏览
CentOS / Debian 编译安装 Nginx + Mysql 5.5.8 + PHP 5.3.5
整整花了我2天时间彻底弄好了Nginx和Mysql+PHP的安装
测试环境:CentOS 5.4 X86 ,Debian 5.0.6 (lenny)
CentOS上测试了Nginx的最新稳定版 ( Stable ):0.8.54
Debian上测试了Nginx的最新开发版 ( Development ):0.9.3

Mysql-server 安装的最新版本: 5.5.8

如果你用的版本和我的不一样,请不要参考,可能会给你带来麻烦

安装Nginx,
1,添加 webserver 用户用来执行nginx,如果你已经存在 www或 www-data等用户,掠过此步
     useradd -M -r --shell /sbin/nologin --home-dir /usr/local/webserver webserver
2,下载Nginx安装包:
     稳定版:        wget http://nginx.org/download/nginx-0.8.54.tar.gz  
    开发版:        wget http://nginx.org/download/nginx-0.9.3.tar.gz
    根据需要下载其中的一个
3,解压,编译,安装,以 0.8.54 版本为例,指定用户和用户组:webserver
    tar -xzvf nginx-0.8.54.tar.gz
    cd nginx-0.8.54/
     ./configure \
        --prefix=/usr/local/webserver/nginx \
        --user=webserver \
        --group=webserver \
        --with-http_stub_status_module \
        --with-http_ssl_module
    make
    make install
nginx安装完毕。

4,配置默认nginx:,找到 nginx.conf文件
我的位置在:
vim /usr/local/webserver/nginx/conf/nginx.conf  
其他安装可能会在 /etc/nginx/nginx.conf

文件内容如下:

#指定启动用户:
user  webserver webserver;  
#进程数量,nginx作者认为一个就可以,根据自己的访问量修改
worker_processes  1;
#错误日志:
error_log /var/log/nginx/error.default.log;
pid /usr/local/webserver/nginx/nginx.pid;

events {
    use epoll;   
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;

    server {
        listen       80;
        server_name  localhost;
    set $root /var/www;
    root  $root;

        access_log  /var/log/nginx/access.localhost.log;

        location / {
            root   $root;
            index  index.html index.htm index.php;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ .*\.(php|php5)?$
        {
                        fastcgi_pass  127.0.0.1:9000;
                        fastcgi_index index.php;
                        include fastcgi.conf;
         }

        #图片类资源缓存5天,并且不记录请求日志
         location ~ .*\.(ico|gif|jpg|jpeg|png|bmp|swf)$
         {
                 expires      5d;
                 access_log off;
         }

         #css/js 缓存一天,不记录请求日志
         location ~ .*\.(js|css)?$
         {
                 expires      1d;
                 access_log off;
         }

        #防止access文件被下载
        location ~ /\.ht {
            deny  all;
        }
    }
    #引入虚拟主机文件:
    include /usr/local/webserver/nginx/sites/*.conf;
}

这样配置后,需要新增加虚拟主机的直接在 nginx/sites/目录下,添加配置文件即可
如:现在有 www.example.com 域名
建立:/usr/local/webserver/nginx/sites/example.com.conf 文件
内容如下:
server {
    listen 80;
    client_max_body_size 10M;
    server_name  www.example.com example.com;  #换成你的域名,多个域名用空格分割,第一个为默认
    charset UTF-8;
    index index.html index.htm index.php;
    #定义根目录
    set $root /var/webroot/example.com;
    #设置站点路径
    root  $root;   

    #这里把访问不是www.example.com的全部跳转到 www.example.com下,实现301永久重定向。

    if ($host != 'www.example.com'){
        rewrite ^(.*)$ http://www.example.com$1 permanent;
     }

    #防止目录浏览
    autoindex off;
    #防止.htaccess文件被请求
    location ~ /\.ht {
        deny all;
    }
    error_page  404              /404.html;
    #将php类型的请求转交给fastcgi
    location ~ .*\.(php|php5|php4|shtml|xhtml|phtml)?$ {
        fastcgi_pass   127.0.0.1:9000;
        include fastcgi.conf;
    }
    #图片类资源缓存5天,并且不记录请求日志
         location ~ .*\.(ico|gif|jpg|jpeg|png|bmp|swf)$
         {
                 expires      5d;
                 access_log off;
         }
         #css/js 缓存一天,不记录请求日志
         location ~ .*\.(js|css)?$
         {
                 expires      1d;
                 access_log off;
         }
    #访问日志:
    access_log  /var/log/nginx/access.example.com.log;
    #加载.htaccess重写文件,注意,这里不支持变量路径
    #不能写成 include $root/example.com/.htaccess;
    include /var/webroot/example.com/.htaccess;
    #开启域名跳转,则当访问出错后,其他域名会自动跳转到 www.example.com

    #注意,这里我说的是,仅仅当访问出错后,才会跳转,所以,这里并不能实现301重定向!
    server_name_in_redirect  on;
}

apache的.htaccess重写规则到Nginx的改写:
http://www.anilcetin.com/convert-apache-htaccess-to-nginx/
附上wordpress的nginx的.htaccess文件:
if (!-e $request_filename){
    rewrite /. /index.php last;
}



上面的代码表示:当请求的资源不是目录也不是文件,即不存在资源的时候,重定向到index.php
启动 nginx /etc/init.d/nginx start


安装 Mysql 5.5.8

Mysql 5.5.8需要cmake编译工具,所以需要先安装cmake
自动安装
    CentOS    :    yum install cmake
    Debian    :    sudo apt-get install cmake  
编译安装
    下载:    wget     http://www.cmake.org/files/v2.8/cmake-2.8.3.tar.gz
     tar xzvf cmake-2.8.3.tar.gz
     cd cmake-2.8.3/
    然后运行:   
    ./configure
    make
    make install
    或者:
     ./bootstrap
    gmake
    gmake install
安装完cmake 后,编译mysql
1,添加mysql用户,如果之前安装过mysql已经存在mysql用户,掠过此步

    useradd -M -r --shell /sbin/nologin --home-dir /usr/local/mysql mysql

2,下载mysql 5.5.8 ,编译安装,我安装的目录在:/usr/local/mysql 数据库存放在 /var/lib/mysql 下  
wget http://dev.mysql.com/get/Downloa ... e.become.com/mysql/
    tar xzvf mysql-5.5.8.tar.gz
    cd mysql-5.5.8/
    cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql  -DINSTALL_DATADIR=/var/lib/mysql  -DDEFAULT_CHARSET=utf8  -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all  -DWITH_SSL=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_MYISAM_STORAGE_ENGINE=1
    make
    make install
    chown -R mysql:mysql /usr/local/mysql
    chown -R mysql:mysql /var/lib/mysql
    安装默认数据库
    ./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/var/lib/mysql --user=mysql
    登录修改密码:mysql -u root -h localhost,默认密码为空,直接按回车进入。
    update user set password=PASSWORD('123456') where user='root';
    复制mysql配置文件:
    cp ./support-files/my-medium.cnf /etc/my.cnf
    生成启动脚本:
    cp support-files/mysql.server /etc/init.d/mysqld
    启动mysql
    ./bin/mysqld_safe --user=mysql &
   

安装 PHP5.3.5 最新版本
注意:PHP5.3.5版本中内置了 php-fpm ,编译时开启,并且编译后不存在 php-cgi 文件了,使用 php-fpm解析 php fastcgi请求。
1,下载:
    wget http://cn.php.net/get/php-5.3.5.tar.bz2/from/am.php.net/mirror
    tar xjvf php-5.3.5.tar.bz2
    cd php-5.3.5
    执行:
    ./buildconf --force
    如果报错,可能是你的 autoconf不是 2.13 版本的,PHP5.3.5的bug,需要安装 autoconf为2.13不版本:
    CentOS : # yum install autoconf213
    Debian : # apt-get install autoconf2.13     
    设置环境变量
    CentOS : export PHP_AUTOCONF="/usr/bin/autoconf-2.13"
    Debian : export PHP_AUTOCONF="/usr/bin/autoconf2.13"
    再次运行:./buildconf --force ,出现 Forcing buildconf ,则运行成功。
    我的php安装在 /usr/local/php 目录下,这也是默认安装位置,指定用户和用户组:webserver
    ./configure \
      --prefix=/usr/local/php \
      --with-config-file-path=/usr/local/php/etc \
      --with-config-file-scan-dir=/usr/local/php/etc/conf.d \
      --enable-fpm \
      --with-fpm-user=webserver \
      --with-fpm-group=webserver \
      --with-curl \
      --with-pear \
      --with-gd \
      --with-jpeg-dir \
      --with-png-dir \
      --with-zlib \
      --with-xpm-dir \
      --with-freetype-dir \
      --with-mcrypt \
      --with-mhash \
      --with-mysql \
      --with-mysqli \
      --with-pdo-mysql \
      --with-openssl \
      --with-xmlrpc \
      --with-xsl \
      --with-bz2 \
      --with-gettext \
      --disable-debug \
      --enable-fpm \
      --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-sysvsem \
      --enable-sysvshm \
      --enable-sysvmsg

    运行可能报错 :我遇到xsl和mcrypt两个库报错,重新安装一下xsl的dev包就可以:
    CentOS    :     yum install libxslt-devel libmcrypt-devel
    Debian    :    apt-get install libxslt1-dev libmcrypt-dev
    如果你有其他的库不满足,搜索一下该库,安装一下即可,这一步应该没有太多问题。
    编译:
    make
    我在Debian下make正常,但在CentOS下却提示make错误,
    make: *** [sapi/fpm/php-fpm] Error 1     错误中出现 libiconv,应该是iconv包问题,
    使用下面的命令替换即可:
    make ZEND_EXTRA_LIBS='-liconv'
    完成后:
    make test
    make install
   
    安装完成后,cp一份源目录下的 php.ini-production 到安装目录下的etc/目录下
    比如我的
    cp  php.ini-production /usr/local/php/etc/
    注意,如果你编译php时候,没有指定配置文件路径 --with-config-file-path=/usr/local/php/etc
    可能会有问题,你需要找到php寻找配置文件的路径。然后把php.ini拷贝进去
    安装目录下的etc/目录下会有一个php-fpm.conf.default文件复制一份改名为 php-fpm.conf
    cd  /usr/local/php/etc/  # 切换到安装目录下的配置文件目录
    cp  php-fpm.conf.default  php-fpm.conf
    修改php-fpm.conf 启用如下几行,即去掉前面的分号(
    pid = run/php-fpm.pid
    error_log = log/php-fpm.log
    log_level = notice
    listen = 127.0.0.1:9000
    listen.allowed_clients = 127.0.0.1
    listen.owner = webserver
    listen.group = webserver
    listen.mode = 0666
    user = webserver
    group = webserver
    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 5
    pm.min_spare_servers = 5
    pm.max_spare_servers = 35
    pm.max_requests = 500
    env[HOSTNAME] = $HOSTNAME
    env[PATH] = /usr/local/bin:/usr/bin:/bin
    env[TMP] = /tmp
    env[TMPDIR] = /tmp
    env[TEMP] = /tmp
   
    如果你的路径为默认安装路径:/usr/local/php
    则安装完成后会生成 /etc/init.d/php-fpm 启动脚本,并且这个脚本还是错的!
    如果不是,则不会生成php-fpm启动脚本,不管有没有生成,自己创建,如果有的,清空原脚本
    vim /etc/init.d/php-fpm
    内容如下:
    #! /bin/sh

    ### BEGIN INIT INFO
    # Provides:          php-fpm
    # Required-Start:    $remote_fs $network
    # Required-Stop:     $remote_fs $network
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts php-fpm
    # Description:       starts the PHP FastCGI Process Manager daemon
    ### END INIT INFO

    prefix=/usr/local/php
    exec_prefix=${prefix}

    php_fpm_BIN=${exec_prefix}/sbin/php-fpm
    php_fpm_CONF=${prefix}/etc/php-fpm.conf
    php_fpm_PID=${prefix}/var/run/php-fpm.pid


    php_opts="--fpm-config $php_fpm_CONF"


    wait_for_pid () {
        try=0

        while test $try -lt 35 ; do

            case "$1" in
                'created')
                if [ -f "$2" ] ; then
                    try=''
                    break
                fi
                ;;

                'removed')
                if [ ! -f "$2" ] ; then
                    try=''
                    break
                fi
                ;;
            esac

            echo -n .
            try=`expr $try + 1`
            sleep 1

        done

    }

    case "$1" in
        start)
            echo -n "Starting php-fpm "

            $php_fpm_BIN $php_opts

            if [ "$?" != 0 ] ; then
                echo " failed"
                exit 1
            fi

            wait_for_pid created $php_fpm_PID

            if [ -n "$try" ] ; then
                echo " failed"
                exit 1
            else
                echo " done"
            fi
        ;;

        stop)
            echo -n "Gracefully shutting down php-fpm "

            if [ ! -r $php_fpm_PID ] ; then
                echo "warning, no pid file found - php-fpm is not running ?"
                exit 1
            fi

            kill -QUIT `cat $php_fpm_PID`

            wait_for_pid removed $php_fpm_PID

            if [ -n "$try" ] ; then
                echo " failed. Use force-exit"
                exit 1
            else
                echo " done"
            fi
        ;;

        force-quit)
            echo -n "Terminating php-fpm "

            if [ ! -r $php_fpm_PID ] ; then
                echo "warning, no pid file found - php-fpm is not running ?"
                exit 1
            fi

            kill -TERM `cat $php_fpm_PID`

            wait_for_pid removed $php_fpm_PID

            if [ -n "$try" ] ; then
                echo " failed"
                exit 1
            else
                echo " done"
            fi
        ;;

        restart)
            $0 stop
            $0 start
        ;;

        reload)

            echo -n "Reload service php-fpm "

            if [ ! -r $php_fpm_PID ] ; then
                echo "warning, no pid file found - php-fpm is not running ?"
                exit 1
            fi

            kill -USR2 `cat $php_fpm_PID`

            echo " done"
        ;;

        *)
            echo "Usage: $0 {start|stop|force-quit|restart|reload}"
            exit 1
        ;;

    esac   
   
    现在应该可以启动 php-fpm了:以root权限运行:
    /etc/init.d/php-fpm  start
   
    重新启动一下nginx
    /etc/init.d/nginx restart
   

    设置开机启动:
    CentOS    :
        chkconfig --add mysqld        
        chkconfig --add nginx
        chkconfig --add php-fpm
        
        chkconfig --level 2345 mysqld on
        chkconfig --level 2345 nginx on
        chkconfig --level 2345 php-fpm on
    Debian    :
        sudo rcconf
        选择 mysqld  nginx php-fpm 确定

来自: http://hi.baidu.com/smallchicken ... b23bcfe6113a3b.html

论坛徽章:
0
2 [报告]
发表于 2012-03-15 15:32 |只看该作者
谢谢分享啊

论坛徽章:
3
CU大牛徽章
日期:2013-05-20 10:43:41CU大牛徽章
日期:2013-05-20 10:44:06CU大牛徽章
日期:2013-05-20 10:44:16
3 [报告]
发表于 2012-03-17 22:04 |只看该作者
lastfile 发表于 2012-03-15 15:32
谢谢分享啊


你这是灌水啊,到处是谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP