centos6.8下LNMP (nginx1.8.0+php5.6.10+mysql5.6.12) - 部署手冊

散盡浮華發表於2016-08-11

 

在平時運維工作中,經常需要用到LNMP應用框架。
以下對LNMP環境部署記錄下:

1)前期準備:為了安裝順利,建議先使用yum安裝依賴庫
[root@opd ~]#yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg-devel zlib libxml2-devel ncurses-devel bison libtool-ltdl-devel libiconv libmcrypt mhash mcrypt libmcrypt-devel pcre-devel openssl-devel freetype-devel libcurl-devel

2)安裝nginx
[root@opd ~]#cd /opt/src
[root@src ~]#wget http://nginx.org/download/nginx-1.8.0.tar.gz
[root@src ~]#tar -zxvf nginx-1.8.0.tar.gz
[root@src ~]#cd nginx-1.8.0
新增www使用者,其中-M參數列示不新增使用者家目錄,-s參數列示指定shell型別
[root@nginx-1.8.0 ~]#useradd www -M -s /sbin/nologin
[root@nginx-1.8.0 ~]#vim auto/cc/gcc
將這句註釋掉取消Debug編譯模式 大概在179行
#CFLAGS="$CFLAGS -g"

我們再配置下nginx編譯引數
[root@nginx-1.8.0 ~]#./configure --prefix=/opt/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
[root@nginx-1.8.0 ~]#make
[root@nginx-1.8.0 ~]#make install clean
新增開機自啟動
[root@nginx-1.8.0 ~]#vim /etc/rc.local
在這個檔案裡面新增:/opt/nginx/sbin/nginx
[root@nginx-1.8.0 ~]#/opt/nginx/sbin/nginx

                                                               Centos7採用yum方式安裝nginx                                                            
centos7系統庫中預設是沒有nginx的rpm包的,所以我們自己需要先更新下rpm依賴庫
1)使用yum安裝nginx需要包括Nginx的庫,安裝Nginx的庫
# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

2)使用下面命令安裝nginx
# yum install nginx

3)啟動Nginx
# service nginx start

# systemctl start nginx.service
                                                                                                                                                                           

3)安裝PHP
由於PHP需要這些類庫的支撐
先下載PHP
[root@opd ~]#cd /opt/src/
[root@src ~]#wget http://cn2.php.net/distributions/php-5.6.10.tar.gz
[root@src ~]#tar -zxvf php-5.6.10.tar.gz
[root@src ~]#cd php-5.6.10
我們先配置下PHP的編譯引數
[root@php-5.6.10 ~]#./configure --prefix=/opt/php --with-mysql --with-mysqli --with-iconv-dir --with-zlib --with-libxml-dir --enable-xml --with-curl --enable-fpm --enable-mbstring --with-gd --with-openssl --with-mhash --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-libdir=/usr/lib64 --with-jpeg-dir=/usr/lib64 --with-freetype-dir=/usr/lib64 --with-png-dir=/usr/lib64
[root@php-5.6.10 ~]#make
[root@php-5.6.10 ~]#make install clean
複製php.ini
[root@php-5.6.10 ~]#cp php.ini-development /opt/php/lib/php.ini
[root@php-5.6.10 ~]#cd /opt/php/etc/
[root@php-5.6.10 ~]#cp php-fpm.conf.default php-fpm.conf        //在php-fpm.conf檔案中可以定義php的服務埠、程式啟動的使用者和組許可權(最好和nginx服務啟動許可權一直)等。
使用PHP-FPM管理指令碼,在編譯包裡面已經配置好了,只需要複製到/etc/init.d/中即可
[root@php-5.6.10 ~]#cd /opt/src/php-5.6.10/sapi/fpm/
[root@php-5.6.10 ~]#cp init.d.php-fpm /etc/init.d/php-fpm
[root@php-5.6.10 ~]#chmod +x /etc/init.d/php-fpm
啟動php-fpm
[root@php-5.6.10 ~]#service php-fpm start
加入開機啟動策略
[root@php-5.6.10 ~]#chkconfig --add php-fpm
[root@php-5.6.10 ~]#chkconfig php-fpm on

4)安裝MySQL (可參考:centos 6x系統下原始碼安裝mysql操作記錄
MySQL5.7.x以上的版本不支援本安裝新增了boost引擎,後續我會更新……
先下載MySQL
[root@opd ~]#cd /opt/src/
[root@src ~]#wget http://cdn.mysql.com//archives/mysql-5.6/mysql-5.6.21.tar.gz
[root@src ~]#tar -zxvf mysql-5.6.12.tar.gz
[root@src ~]#cd mysql-5.6.12
我們先配置下MySQL的編譯引數 一般我們就配置下安裝路徑就可以了 如你有特殊配置也可以在安裝之後修改引數也可以的
[root@mysql-5.6.12 ~]#cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=ON -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DCOMPILATION_COMMENT='production environment' -DWITH_READLINE=ON -DSYSCONFDIR=/opt/mysql -DMYSQL_UNIX_ADDR=/opt/mysql/mysql.sock -DMYSQL_DATADIR=/opt/data

-------------------------------------------------------------------------------------------------------------------------------------
注意:mysql5.5以上的編譯就用cmake了,而不是使用./configure了。
cmake編譯的優化引數說明如下:
-------------------------------------
-DCMAKE_INSTALL_PREFIX=dir_name       安裝的主目錄
-DDEFAULT_CHARSET          字符集,預設字符集是latin1
-DDEFAULT_COLLATION=collation_name       服務校對,預設的是latin1_swedish_ci,可以通過SHOW COLLATION語句檢視哪個校對匹配的字符集
-DENABLED_LOCAL_INFILE       是否開啟LOAD DATA INFILE的LOCAL引數
-DWITH_INNOBASE_STORAGE_ENGINE=1       將INNODB儲存引擎編譯進去
-DWITH_FEDERATED_STORAGE_ENGINE=1       將FEDERATED儲存引擎編譯進去
-DWITH_BLACKHOLE_STORAGE_ENGINE=1       將BLACKHOLE儲存引擎編譯進去
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1      不編譯EXAMPLE儲存引擎
-DWITH_PARTITION_STORAGE_ENGINE=1          將分割槽儲存引擎編譯進去
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1       將Performance Schema(效能檢視)儲存引擎編譯進去
-DCOMPILATION_COMMENT=string       編譯環境描述
-DWITH_READLINE=bool       是否使用readline庫
-DSYSCONFDIR=dir_name my.cnf       引數檔案的路徑
-DMYSQL_UNIX_ADDR=file_name Unix socket        檔案的路徑,socket檔案用於伺服器監聽連線,這個引數必須是絕對路徑
-DENABLED_PROFILING=bool       是否開啟profiling程式碼的查詢(用於SHOW PROFILE and SHOW PROFILES語句)
-DMYSQL_DATADIR=dir_name MySQL       檔案目錄的路徑,這個引數也可以在啟動MySQL的時候帶上--datadir引數進行設定
-DWITH_EXTRA_CHARSETS=name       指定額外的字符集,預設是all,包含所有的字符集。
-DINSTALL_BINDIR=dir_name      安裝使用者程式的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/bin
-DINSTALL_DOCDIR=dir_name      安裝文件的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/doc
-DINSTALL_INCLUDEDIR=dir_name      安裝標頭檔案的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/include
-DINSTALL_LIBDIR=dir_name       安裝庫檔案的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/lib
-DINSTALL_MANDIR=dir_name      安裝幫助手冊的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/man
-DINSTALL_PLUGINDIR=dir_name      安裝外掛的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/lib/plugin
-DINSTALL_SBINDIR=dir_name      安裝mysqld服務端啟動指令碼的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/bin
-DINSTALL_SCRIPTDIR=dir_name      初始化MySQL資料庫的資料檔案路徑的mysql_install_db指令碼路徑,預設路徑是DCMAKE_INSTALL_PREFIX/scripts
-DINSTALL_SQLBENCHDIR=dir_name      安裝sql-bench的路徑,預設路徑是DCMAKE_INSTALL_PREFIX
-DINSTALL_SUPPORTFILESDIR=dir_name      安裝支援檔案的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/support-files
-DMYSQL_TCP_PORT=port_num     伺服器監聽TCP/IP連線的埠,預設是3306

如若要編譯進其它功能,如SSL等,則可使用類似如下選項來實現編譯時使用某庫或不使用某庫:
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0
-------------------------------------------------------------------------------------------------------------------------------------

編譯需要較長的時間
[root@mysql-5.6.12 ~]#make
[root@mysql-5.6.12 ~]#make install clean
新增mysql使用者,設定mysql目錄許可權
[root@mysql-5.6.12 ~]# useradd mysql -M -s /sbin/nologin
[root@mysql-5.6.12 ~]# chown -R mysql:mysql /opt/mysql
[root@mysql-5.6.12 ~]# chown -R mysql:mysql /opt/data
安裝資料庫
[root@mysql-5.6.12 ~]# cd /opt/mysql/scripts
[root@scripts ~]#./mysql_install_db --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data
[root@scripts ~]#cd /opt/mysql/support-files
複製mysql管理指令碼
[root@support-files ~]#cp mysql.server /etc/rc.d/init.d/mysql
複製mysql配置檔案
[root@support-files ~]#cp my-default.cnf /etc/my.cnf
新增mysql服務
[root@support-files ~]#chkconfig --add mysql
加入開機啟動策略
[root@support-files ~]#chkconfig mysql on
[root@support-files ~]#service mysql start

4)nginx+php配置

server {
        listen       80;
        server_name  www.wangshibo.com;

        #charset koi8-r;

        access_log  /Data/logs/nginx/www.wangshibo.com/access.log main;
        error_log  /Data/logs/nginx/www.wangshibo.com/error.log;

        ## maintence
        if ($remote_addr !~ ^(100.110.15.16|100.110.15.17|100.110.15.18|127.0.0.1)) {             //nginx訪問的白名單限制
          rewrite ^.*$ /maintence.php last;
        }

        location / {
            root   /var/www/vhosts/www.wangshibo.com/main;
        try_files $uri $uri/ @router;
            index  index.php;
        }

        location /nginx_status {
           stub_status on;
           access_log off;
        }


        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    
        location @router {
        rewrite ^.*$ /index.php last;
        }

        location ~ \.php$ {
            root       /var/www/vhosts/www.wangshibo.com/main;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_read_timeout 30;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;               //這一行最好將/scripts換成$document_root,否則可能出現白麵
            #include        fastcgi_params;
            include        fastcgi.conf;
        }
    
        location ~ ^/(status|ping)$
        {
           include fastcgi_params;
           fastcgi_pass 127.0.0.1:9000;
           fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        }

        } 

相關文章