1. 程式人生 > >如何在LNMP環境下部署ThinkPHP5.*/Laravel5.專案

如何在LNMP環境下部署ThinkPHP5.*/Laravel5.專案

如何在LNMP環境下部署ThinkPHP5.*/Laravel5.4專案

本次介紹的基礎:

1) 安裝LNMP環境(本人使用的是www.lnmp.org下載的一鍵安裝包,各檔案路徑為預設路徑)
2) ThinkPHP5版本和Laravel5版本檔案目錄很相似,入口檔案都是根目錄下的public/index.php,所以部署類似,但是本次主要以thinkphp5版本為例

注意:

    修改檔案前,切記先備份好檔案,修改檔案內容儘量先註釋一份,再複製一份修改
1、開啟php.ini配置檔案(php.ini留備份),找到display_errors,將display_errors = Off 修改成 display_errors = On,儲存並退出
    1
) cp ./php.ini ./php.ini.bak #複製php.ini檔案 2) vim ./php.ini #進去php配置檔案 3) 將display_errors = Off 修改成 display_errors = On #開啟錯誤資訊提示,僅限除錯,如果掛網站的話,切記關閉錯誤提示,將錯誤寫入日誌檔案, 4) :wq! 5) service php-fpm restart #重啟php服務,前提是php-fpm 已經新增到守護程序開機自啟動(chkconfig php-fpm on) 2
、每個域名下有一個隱藏檔案 .user.ini 1) chattr -i /home/wwwroot/test.com/.user.ini #給只讀屬性檔案解鎖,否則只可讀 2) chattr +i /home/wwwroot/test.com/.user.ini #給檔案加鎖,只可讀 3) cp /usr/local/nginx/conf/fastcgi.conf /usr/local/nginx/conf/fastcgi.conf.bak #備份檔案 3) vim /usr/local/nginx/conf/fastcgi.conf #開啟檔案 4) 將 fastcgi_param PHP_ADMIN_VALUE"open_basedir=$document_root/:/tmp/:/proc/"
; 修改為: fastcgi_param PHP_ADMIN_VALUE"open_basedir=NULL"; 5) service nginx restart #重啟nginx服務生效,前提是nginx已新增到開機自啟動(chkconfig nginx on) 3、修改php.ini的禁止的函式 6) 根據需要修改 4、修改域名對應的配置檔案,我用的是LNMP一鍵安裝包(www.lnmp.org) 1) cp /usr/local/nginx/conf/vhost/default.conf /usr/local/nginx/conf/vhost/test.com.conf //生成域名對應的.conf配置檔案 2) vim /usr/local/nginx/conf/vhost/test.com.conf //進入虛擬主機(域名)配置檔案 1)新增: include other.conf; include thinkphp.conf; //手動新增,thinkphp5.*框架使用 (本次使用) #include laravel.conf; //手動新增, Laravel框架使用 include fastcgi.conf; //手動新增 include enable-php.conf; 2) 注意: 由於程式碼執行順序是自上而下,自左向右,為避免由於插入位置出現報錯,所以四行程式碼的位置儘量如上, 注意 include other.conf 在最上面,include fastcgi.conf在最下面 3) 新增前test.com.conf檔案程式碼: server { listen 80; #listen [::]:80; server_name test.com; index index.html index.htm index.php default.html default.htm default.php; root /home/wwwroot/test.com/public; include other.conf; #error_page 404 /404.html; # Deny access to PHP files in specific directory #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; } include enable-php.conf; include thinkphp.conf; include fastcgi.conf; location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } location ~ /.well-known { allow all; } location ~ /\. { deny all; } access_log /home/wwwlogs/test.com.log; } 4)新增後test.com.conf檔案程式碼: server { listen 80; #listen [::]:80; server_name test.com ; index index.html index.htm index.php default.html default.htm default.php; root /home/wwwroot/test.com/public; include other.conf; #error_page 404 /404.html; # Deny access to PHP files in specific directory #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; } include enable-php.conf; include thinkphp.conf; # lnmp安裝包特有 include fastcgi.conf; # lnmp安裝包特有 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } location ~ /.well-known { allow all; } location ~ /\. { deny all; } access_log /home/wwwlogs/test.com.log; }

總結:

1)環境使用: 我使用的LNMP整合環境,下載地址www.lnmp.org,這是比較快速的方法,不介意時間話,也可以用yum安裝,或者原始碼安裝,後二者需要一定時間,並且要自己配置軟體安裝路徑,lnmp安裝包是比較全面的包,裡面還有apache伺服器,ftp等其他工具,可以根據需要安裝,並且lnmp.org是全球活躍的免費開源社群,有自己的生態,有很多好的資源,也有詳細的新手教程,還將很多繁瑣的操作寫成了shell指令碼,使用者只要按文件執行shell指令碼檔案即可,個人覺得還不錯

2) 修改系統配置時,切記養成留備份的習慣,否則出問題會很痛苦,

3) 預設新買的伺服器的一些常用埠是關閉的需要手動開啟,如3306(MySQL),21(FTP),80(Http),22(SSH),443(Https),6739(Redis),11211(Memcached),一般建議埠需要用時再開啟,可以在/etc/sysconfig/iptables 防火牆檔案中開啟, 修改完防火牆後,需要重啟才能生效: service iptables restart ;常用的有前四個埠,Https需要證書才能生效,Redis和Memcached埠,阿里雲的Ecs伺服器埠配置可以直接示例配置裡修改,

4) 修改軟體系統配置時,修改後切記重啟服務,否則不生效,
    如:
        1) 修改php.ini檔案,必須service php-fpm restart
        2) 修改test.com.conf 檔案,必須service nginx restart 

5) 注意 4) 中的命令,如 service nginx restart 命令, 需要先新增守護程序(即設定開機自啟動),否則需要使用完整路徑執行命令,如service /usr/local/nginx/sbin/nginx restart
                    設定開機自啟動: chkconfig on                   


6) 網站安全: php.ini 開啟錯誤資訊提示(display_errors),僅限除錯,如果執行網站的話,切記關閉錯誤提示,否則錯誤提示容易被別有用心的人利用,攻擊你的網站;提供常見的解決方法:將錯誤寫入日誌檔案,定時檢查日誌檔案

7) 上述步驟中的檔案路徑均是lnmp安裝包的預設路徑,可根據需要自定義,個人建議最好不要改,否則出錯時比較麻煩

8) test.com.conf中include的.conf檔案內容:
    1) thinkphp.conf
        location / {
            if (!-e $request_filename) {
                rewrite ^(.*)$ /index.php?s=/$1 last;
                break;
            }
        }
    2) laravel.conf
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

    3) pathinfo.conf

            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            set $path_info $fastcgi_path_info; 
            fastcgi_param PATH_INFO       $path_info;
            try_files $fastcgi_script_name =404;

    4) enable-php.conf
        location ~ [^/]\.php(/|$)
            {
                try_files $uri =404;
                fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_index index.php;
                include fastcgi.conf;       
            }


    5) enable-php-pathinfo.conf
        location ~ [^/]\.php(/|$)
            {
                fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_index index.php;
                include fastcgi.conf;
                include pathinfo.conf;
            }