1. 程式人生 > >lnmp laravel 踩坑記

lnmp laravel 踩坑記

        先說下筆者環境:kubuntu 18.04 ,lnmp(php7.2 ,mysql5.7 ,nginx 1.14),lnmp環境搭建是採用一鍵安裝包編譯過來的。lnmp環境搭建詳見:https://lnmp.org/install.html,這裡不再贅述,主要說下 搭建laravel 專案中遇到的一些坑。

    這裡採用composer (安裝好lnmp後自帶composer)安裝laravel 5.5(並在當前目錄下建立test專案)

composer create-project laravel/laravel=5.5 test --prefer-dist

如果遇上遲遲沒有下載,可以試試如下命令:

composer config -g repo.packagist composer https://packagist.laravel-china.org

上面命令是把composer 映象設定為國內映象

如果出現類似下圖的錯誤:

則可以敲入一下命令:

composer config -g secure-http false

即全域性禁用https協議去連線

再次執行上面安裝命令:

這一部操作是很快的,然後你就會發現在當前目錄下已經建立了一個test的專案(並且可以看到laravel版本為5.5.43)。

[email protected]

:~/Data/project$ ls dye_sfabric.sql  local_test_code.rar  test [email protected]:~/Data/project$ ls dye_sfabric.sql  local_test_code.rar  test [email protected]:~/Data/project$ cd test [email protected]:~/Data/project/test$ ls app      bootstrap      composer.lock  database      phpunit.xml  readme.md  routes      storage  vendor artisan  composer.json  config         package.json  public       resources  server.php  tests    webpack.mix.js
[email protected]
:~/Data/project/test$ php artisan --version Laravel Framework 5.5.43 這裡說點題外話,在寫這篇部落格前,我配置的composer 映象不是上面的地址,composer 安裝laravel 用的命令也不是上面的命令。在寫這篇文章的過程中,遇到了點意外,發現之前配置的composer映象慢的要死,然後又重新配了下composer映象(就是上面的映象,不過話說現在的映象速度比我之前配的要快的多),如果你在看這篇文章的時候,發現上面的操作行不通了,就不要再多嘗試(也許你也會遇到類似的問題),而是應該去選擇其它的映象,不過這些都不是重點。

好了,既然laravel 安裝好了,那麼我們配置一個虛擬站點:

鍵入以下命令:

lnmp vhost add

然後根據自己的想法做相應的配置即可。

然後在Hosts檔案中配置相應的域名即可。

鍵入:vim /etc/hosts

追加下面的內容

127.0.1.1       www.lt.com

新增後,不需要重啟,會自動生效

好了,配置完退出後,等待個一分鐘左右,在瀏覽器上訪問剛配置的虛擬站點,發現不能正常訪問:

這樣一片空白,對開發者來說,很不友好,我們要知道哪裡出問題了,並解決它,ok,開啟php.ini 檔案找到 display_errors 和 display_startup_errors ,這兩個選項預設是關閉的,把它們開啟即可(設定為On)。

這裡介紹兩種快速定位php.ini檔案的方法:

[email protected]:/usr/local/nginx/conf# php -i | grep php.ini Configuration File (php.ini) Path => /usr/local/php/etc Loaded Configuration File => /usr/local/php/etc/php.ini [email protected]:/usr/local/nginx/conf# locate php.ini /home/wwwroot/sf.sm/php.ini /home/wwwroot/sf.sm/vendor/doctrine/cache/tests/travis/php.ini /usr/local/php/etc/php.ini

儲存退出,然後重啟phpfpm:

service php-fpm restart

然後再訪問,發現已經能夠顯示出錯誤資訊了:

Warning: require(): open_basedir restriction in effect. File(/home/zhang/Data/project/test/vendor/autoload.php) is not within the allowed path(s): (/home/zhang/Data/project/test/public/:/tmp/:/proc/) in /home/zhang/Data/project/test/public/index.php on line 24Warning: require(/home/zhang/Data/project/test/vendor/autoload.php): failed to open stream: Operation not permitted in /home/zhang/Data/project/test/public/index.php on line 24Fatal error: require(): Failed opening required '/home/zhang/Data/project/test/public/../vendor/autoload.php' (include_path='.:/usr/local/php/lib/php') in /home/zhang/Data/project/test/public/index.php on line 24

這裡再說明下:或許你看到的報錯資訊,不是這樣的,如果是類似的報錯資訊:

  [Symfony\Component\Process\Exception\RuntimeException]                                   

  The Process class relies on proc_open, which is not available on your PHP installation.

那就是proc_open 函式報錯,這是因為在新版php中禁用了,在php.ini中設定一下即可(記得重啟php-fpm)。

ok ,下面就著手解決剛剛報錯的問題:

報require(): open_basedir restriction in effect.的錯,是因為要開啟的目錄不在php操作範圍內,配置一下就好。這裡直接告訴在哪裡配置就Ok 了。

在nginx 配置目錄中,有個 fastcgi.conf的配置檔案,如果不知道該檔案在哪裡,可以使用

   locate fastcgi.conf

在 astcgi_param PHP_ADMIN_VALUE 這裡新增相應的目錄即可,我這裡暴力了點(直接添加了home)。

說明下:這裡是解決問題的關鍵,我曾在網上尋找答案,看到很多人說的,在php的 open_basedir  中設定,然鵝這是不正確的,因為我試了好半天都沒有成功,最最最關鍵的是open_basedir這個配置項,php預設是關閉的,最後無奈又重新建了一個專案,發現報錯資訊類似,只是open_basedir 目錄不一樣,當時就在思考,肯定是要配置nginx 而非php,後來就發現了fastcgi.conf(當然這個解決方案在lnmp.org中也有提到,只是之前沒發現)。  

然後呢,重啟ngignx 

nginx -s reload    

再次在瀏覽器中訪問下:

可以發現,報錯資訊變成了許可權不允許,許可權問題嘛,好解決,直接加許可權即可。

chmod o+w logs

   至此,大功告成!