CentOS / Debian 編譯安裝 Nginx + Mysql 5.5.8 + PHP 5.3.5

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

CentOS / Debian 編譯安裝 Nginx + Mysql 5.5.8 + PHP 5.3.5

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/Downloads/MySQL-5.5/mysql-5.5.8.tar.gz/from/http://opensource.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: *** 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
    env = /usr/local/bin:/usr/bin:/bin
    env = /tmp
    env = /tmp
    env = /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/blog/item/09067c6241b23bcfe6113a3b.html
《解決方案》

謝謝分享啊;P
《解決方案》

lastfile 發表於 2012-03-15 15:32 static/image/common/back.gif
謝謝分享啊

你這是灌水啊,到處是謝謝




[火星人 ] CentOS / Debian 編譯安裝 Nginx + Mysql 5.5.8 + PHP 5.3.5已經有486次圍觀

http://coctec.com/docs/service/show-post-13201.html