填坑1:在阿里云自帶的CentOS + LAMP環境下部署一個Laravel項目

前言

最近做的這個題庫系統,出題模塊已經差不多弄完了,后面其他模塊的需求還沒有明確,所以就想把項目放到服務器上去跑一跑,本來以為部署一下應該是很簡單的事情,況且網上有一堆教程,應該不是難事,結果愣是搞了快一天,不過最后好不容易弄得差不多了,來記錄一下其中的問題和思考。

開始嘗試

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

  • 服務器配置:阿里云云翼計劃,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教程2

其實中間的諸多Linux指令我并不理解是什么皮皮意思,但是為了加深印象,我姑且把基本的流程轉述一遍,其中很多名詞和概念還不熟悉甚至完全不了解,可以以后再來做一下詞義補充。

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

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

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

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

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

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

懷疑對象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,刪都刪不掉!),單個大文件讀寫很快
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容