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)。
好了,既然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
至此,大功告成!