【簡書】在阿里雲自帶的CentOS + LAMP環境下部署一個Laravel項目

在阿里雲自帶的CentOS + LAMP環境下部署一個Laravel項目

96 
做者 DonnieZero 
2017.07.29 22:02* 字數 2218 閱讀 5556評論 3

前言

最近作的這個題庫系統,出題模塊已經差很少弄完了,後面其餘模塊的需求尚未明確,因此就想把項目放到服務器上去跑一跑,原本覺得部署一下應該是很簡單的事情,何況網上有一堆教程,應該不是難事,結果愣是搞了快一天,不過最後好不容易弄得差很少了,來記錄一下其中的問題和思考。php

開始嘗試

首先說明一下環境以及版本html

  • 服務器配置:阿里云云翼計劃,9.9一個月的學生機, CPU: 1核 內存:2 GB (I/O優化)、1Mbps
  • CentOS 7:
  • Apache:2.4
  • Mysql:
  • PHP:5.6.3
  • Laravel:5.4

以前購買過阿里雲的ECS服務器,因此這方面的操做沒什麼可說的,就是winscp + puttty的二件套,很快完成密碼的修改,而後就開始準備部署項目了。做爲對於Linux以及部署服務器一無所知的我,第一步確定是去找教程,事實上,我第一遍部署的大部分操做都是參照如下兩篇教程作的「傻瓜式操做」 :教程1教程2linux

其實中間的諸多Linux指令我並不理解是什麼皮皮意思,可是爲了加深印象,我姑且把基本的流程轉述一遍,其中不少名詞和概念還不熟悉甚至徹底不瞭解,能夠之後再來作一下詞義補充。laravel

  1. 服務器安裝資源配置,安裝epel
  2. SELinux設置爲寬容模式保障證安裝過程不受影響
  3. A、M、P的安裝和自動啓動(阿里雲自帶了,能夠大大省略,只要檢查一下就好)
  4. Composer的安裝(這個很重要)
  5. Laravel框架的安裝(因爲個人項目已經開發了一段時間,因此主要作的是進行遷移)
  6. 修改Apache配置,配置虛擬主機(我直接放在了Apache的根目錄下面,就是跟phpmyadmin在一塊兒的)

(忍不住想說用MarkDown寫東西真的很優雅麼????)web

其實到此爲止主要的流程已經結束了,因此打開瀏覽器,輸入公網ip地址,打開展現的是apache和php的版本信息,而後進入ip/questionsystem/public。Boom炸了,報的是服務器500的錯誤,倒也是預料之中的事情,下面就是漫長的查錯之旅。sql

懷疑對象1,php拓展包缺失

在以前按照教程進行操做的過程當中,曾經出現過關於php-extension的錯誤,致使了composer直接安裝Laravel項目失敗(因爲當時沒有截圖,因此具體狀況已經沒法描述,長知識會顯示一個problem1:php-ext之類的東西,大意就是缺乏Laravel所須要的php-extension),因此我一開始是懷疑php環境存在問題。apache

在網上查了一下,在segmentfault上找到了相似的問題,而後根據那篇博文安裝好了所須要的extension,順便去Laravel學院看了一下Laravel到底須要哪些php-extension以及配置的建議:安裝環境以及須要的拓展包, 配置參考1配置參考2。通過幾回嘗試(大規模無差異安裝php-ext)以後,終於能夠順利安裝完成Laravel了,而後把安裝好的項目遷移到apache指向的目錄下,跑一下public,Boom,依舊是500爆炸,只能繼續懷疑了。segmentfault

懷疑對象2,apache路徑設置問題

這個懷疑就很玄學了,由於在網上看的諸多教程,都說要設置虛擬主機,其中的設置方法也是千奇百怪,有的說在http.conf中直接加virtualhost就好了,也有人說要另外寫一個http-vhosts.conf文件。我也懶得去很認真分析httpd.conf文件的內容,大概看了一下,感受直接寫在裏面應該沒問題。瀏覽器

試了一下,一開始重啓Apache服務都會報錯,改來改去不報錯了,而後把larael項目所在的項目改成documentroot的值,這纔想到救我就算設置了虛擬主機要怎麼訪問啊,我又沒有域名。。。因而又很尷尬地把項目扔回了/webdata(也就是apache初始指向的路徑),折騰了一圈看來確定不是路徑的問題,繼續懷疑。服務器

懷疑對象3, apache沒有開啓rewrite功能

這個懷疑看起來仍是頗有道理的,涉及Laravel中所使用的url美化,如下是部分解釋

框架中自帶的public/.htaccess文件支持URL中隱藏index.php,如過你的Laravel應用使用Apache做爲服務器,須要先確保Apache啓用了mod_rewrite模塊以支持.htaccess解析。

由於Laravel/public中的index.php其實並非能夠直接解析的php,而是須要rewrite的文件,這也就是爲何其中同時會包含一個.htaccess的文件,就是爲了配套apache的這個功能。根據網上的經驗,先改了http.conf裏面的allowoverride,又根據Laravel學院裏一篇文章去改了.htaccess的內容,可是通過無數次嘗試,依然不能克服500的報錯。

雖然在這個懷疑最後是以失敗了結中,可是過程當中發現了一個頗有意思的東西,就是能夠在純文本環境下模擬瀏覽器打開網頁,固然這是要藉助工具的,這就是Lynx。具體的安裝和使用我就不贅述了,網上一搜一大堆,可是用一下確實仍是很好玩的,感受就像是php裏面的file_get_content函數,不過貌似只能就讀取到原生的html代碼,對js什麼的就不太好使了。

Happy Ending

雖然說在前面的各類懷疑中來來回回搞了好幾個小時一直未能成功,心態也漸漸走向崩潰,不過最後仍是好歹把問題給解決了。這裏要大大感謝一番這個文章,正是裏面的一句話讓我找到了正確的道路

Apache的日誌文件
ErrorLog /etc/httpd/logs/error_log (php的錯誤日誌也輸出到這裏)
CustomLog /etc/httpd/logs/access_log combined

看到這裏真是內心冰火兩重天,一方面感嘆終於不用跟無頭蒼蠅一項亂改一氣了,另外一方面又在感嘆爲何沒有作早點看到這段話。事不宜遲,我馬上打開在日誌文件看了一下,報的錯更加讓我崩潰

[Fri Jul 28 17:22:22.773044 2017] [:error] [pid 15735] [client 115.156.163.42:16231] PHP Fatal error: Uncaught exception 'UnexpectedValueException' with message 'The stream or file "/webdata/questionsystem/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied' in /webdata/questionsystem/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107\nStack trace:\n#0 /webdata/questionsystem/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\Handler\StreamHandler->write(Array)\n#1 /webdata/questionsystem/vendor/monolog/monolog/src/Monolog/Logger.php(337): Monolog\Handler\AbstractProcessingHandler->handle(Array)\n#2 /webdata/questionsystem/vendor/monolog/monolog/src/Monolog/Logger.php(616): Monolog\Logger->addRecord(400, Object(Symfony\Component\Debug\Exception\FatalErrorException), Array)\n#3 /webdata/questionsystem/vendor/laravel/framework/src/Illuminate/Log/Writer.php(203): Monolog\Logger->error(Object(Symfony\Component\Debug\Exception\FatalErrorException), Array)\n#4 /webdata/questionsystem/vendor/laravel/framework/src/Illuminate/Log/Writer.php in /webdata/questionsystem/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 107, referer: http://39.108.84.38/questionsystem/

雖然說看起來一大段,可是Permission Denied仍是很顯眼的,nmd搞了這麼久原來是掛在了權限上,後面修改權限的過程就不贅述了,最後仍是要來一張成功照來安慰一下本身。

後續

雖然說整個配置過程和排錯過程已經寫得比較詳細了,可是其實其中還有一些值得補充的地方,並且都不是三言兩語就能說清楚的,等有時間再回來寫上

  • 阿里雲預裝的Mysql的密碼初始化方法
  • Linux中的權限設置問題
  • Linux文件讀寫的速度問題,具體就是多個小文件讀寫很慢(好比vender,刪都刪不掉!),單個大文件讀寫很快
相關文章
相關標籤/搜索