LAMP Web Server 網頁伺服器快速建置入門
前言 …
LAMP 為 Linux + Apache + MySQL + PHP 這種網站伺服器組合的簡稱,分別代表著
- 作業系統
- http 伺服器
- 資料庫
- 網頁後端語言
LAMP 可說是目前非常廣泛被使用的網站建置環境組合,另外也有將其中組合抽換為其它相同功能但不同產品的組合,例如把 Linux 改為 FreeBSD 或 Windows 的 FAMP、WAMP,把 Apache 改為 NGINX 的 LNMP 等,其中的 Linux distribution (分支) 又以 Debian / Ubuntu 最為熱門,本篇不例外是使用 Ubuntu / Debian 作為示範,但基本上基於 Debian 以及 Ubuntu 的 GNU/Linux distributions 都適用。
根據 W3Techs 的統計,Linux 在 web server 的作業系統市佔率高達 36.2% ( Unix 佔總共的 68%、Linux 佔其中的 53.2% ),其中 Debian / Ubuntu 就分別佔了 Linux 的 32.6% / 31.1%:
Aapache 的 Web Server 領域更是有著 55% 過半的驚人市佔率:
資料請參考 W3Techs :
- Web Servers:
- http://w3techs.com/technologies/overview/web_server/all
- Operating Systems
- http://w3techs.com/technologies/overview/operating_system/all
- http://w3techs.com/technologies/details/os-linux/all/all
- http://w3techs.com/technologies/details/os-unix/all/all
說到寫這篇的原因,主要是前陣子因為
推坑 推薦 不少人來使用 WordPress 撰寫部落格、筆記,WordPress 目前已經擁有高達 26% 的網頁市佔率,平均每四分網站就有一個是使用 WordPress 架設,可想而知 WordPress 不管是在社群、生態系方便都已經相當成熟,考量到自行架設 WordPress 會比直接使用 WordPress.com現成的服務來的更有彈性、功能更加強大,同時又可以學技術,但對於初學者對於遇到問題的恐懼一直是最大的阻礙,故撰寫這份 LAMP 簡易安裝筆記供入門者參考,對於其他同樣使用 PHP 語言的網站平台基本上都適用。
根據 W3Techs 的統計,WordPress 在網頁市場的佔有率已經高達 26%,在使用了 Content Management System (CMS) 管理網站裡面的市佔率更高達六成 (59.2%):
W3Techs :
- http://w3techs.com/technologies/overview/content_management/all
雖然目前 PHP 最新的版本為 7.0 ,但礙於 PHP 7 推出時間還不夠久,並未被 Debian / Ubuntu 的官方套件庫收錄到穩定的發行版所使用的套件庫 (但即將推出的 Ubuntu Xenial Xerus 16.04 LTS 會有!) ,目前市場主流使用的 PHP 版本為 5.x ,在考慮相依性、使用難易度及維護性等前提下,除了新版的系統一併整合進去套件庫外,大概只剩下 ppa 安裝這個途徑,PHP 7.0 因為不是本篇重點、且非必要,還有事實上舊的 PHP 程式也不見得相容,關於 PHP 7.0 的部分可能會開另外一篇簡單講一下,這篇就以最容易取得的 PHP 5.x 為主。
接下來正文開始
本篇假設你已經會基本的 Unix 操作,以經安裝好了 Ubuntu 14.04 server 版,如果還沒安裝的話可以參考這篇:
Step by step, install Ubuntu 14.04 Server on VirtualBox 虛擬機安裝紀錄
在已經有了 Ubuntu / Debian (Linux) 的情境下,最快速、簡單把 LAMP 裝起來的方式可以濃縮為以下一行 ( 如果想忽略長篇大論,本篇實做也就只有下面這行 ):
Shell
$ sudo apt-get install apache2 libapache2-mod-php5 php5 php5-mysql php5-json mysql-server
$ sudoapt-get installapache2libapache2-mod-php5php5php5-mysqlphp5-jsonmysql-server
過程中會要求設定資料庫的密碼,輸入兩次確認後大致就只需要等設定跑完就OK了,其實不難,如果你對於長度較長的指令感到恐懼,在 Ubuntu based Linux 底下可以試試看使用 tasksel 來安裝 lamp-server,至於 Debian 底下預設是沒有 lamp-server 這個選項的,雖然有 web-server 可以選,但卻不包含 mysql 資料庫的安裝,建議直接用 apt-get 來完成安裝就好了,不必特地使用 tasksel 。
其實之前有提過 tasksel ,裏面紀錄了各種變形版本 ( Lubuntu , Kubuntu 等) 以及常用到的套件組合,讓使用者可以快速的安裝、切換需要的功能,有興趣的話可以翻這篇:
Convert your Ubuntu/Debian between different versions, like Desktop to Server
在 Ubuntu 裏面其中有一項就是 lamp-server, 透過下面的命令就可以快速安裝,過程中也是會設定資料庫密碼:
Shell
$ sudo tasksel install lamp-server
$ sudotaskselinstalllamp-server
執行後就會進行安裝,圖為開始準備套件的畫面:
詢問資料庫密碼:
確認資料庫密碼:
安裝套件:
因為基本要用到的套件並不多,所以最簡易的架設到這邊就完成了,接下來會進行依些基本的驗證工作,確認有成功安裝並啟動相關服務。
安裝完了,接下來開始驗收/驗證
1. 確認 apache 運作
透過 curl 這個命令向本機 (127.0.0.1) 送 http request 並使用 -I 參數只取得回應的標頭 (header) :
Shell
$ curl -I 127.0.0.1
$ curl -I 127.0.0.1
Ubuntu 14.04.4 LTS:
Shell
$ curl -I 127.0.0.1HTTP/1.1 200 OKDate: Thu, 25 Feb 2016 17:11:41 GMTServer: Apache/2.4.7 (Ubuntu)Last-Modified: Thu, 25 Feb 2016 15:33:31 GMTETag: "2cf6-52c99e79eb044"Accept-Ranges: bytesContent-Length: 11510Vary: Accept-EncodingContent-Type: text/html
$ curl -I 127.0.0.1HTTP/1.1 200 OKDate: Thu, 25 Feb 2016 17:11:41 GMTServer: Apache/2.4.7 (Ubuntu)Last-Modified: Thu, 25 Feb 2016 15:33:31 GMTETag: "2cf6-52c99e79eb044"Accept-Ranges: bytesContent-Length: 11510Vary: Accept-EncodingContent-Type: text/html
Debian 8.3:
Shell
$ curl -I 127.0.0.1HTTP/1.1 200 OKDate: Fri, 26 Feb 2016 11:57:22 GMTServer: Apache/2.4.10 (Debian)Last-Modified: Fri, 26 Feb 2016 11:43:55 GMTETag: "2b60-52caad05f4514"Accept-Ranges: bytesContent-Length: 11104Vary: Accept-EncodingContent-Type: text/html
$ curl -I 127.0.0.1HTTP/1.1 200 OKDate: Fri, 26 Feb 2016 11:57:22 GMTServer: Apache/2.4.10 (Debian)Last-Modified: Fri, 26 Feb 2016 11:43:55 GMTETag: "2b60-52caad05f4514"Accept-Ranges: bytesContent-Length: 11104Vary: Accept-EncodingContent-Type: text/html
有看到 HTTP/1.1 200 OK 的訊息就表示成功了! 關於 http 代碼代表的含義可以參考維基百科: List of HTTP status codes
同時我們也可以透過瀏覽器開啟對應的網頁畫面,如果是在本機上架設可以開啟 http://localhost/ 、 http://127.0.0.1/ 或 http://0.0.0.0/ ,如果不是在本機架設的伺服器,則請輸入對應的 IP 位置或是網域名稱 (虛擬機會需要設定 連接埠轉送/port redirect ),成功的話應該會看到下面這樣的畫面(Apache2 Ubuntu / Debian Default Page),如果你使用的不是 Ubuntu / Debian ,畫面可能不盡相同,但大同小異,通常都會有 It works! 的字樣,到這邊就確認完 Apache 有正常運作了:
上面的 Apache2 Ubuntu / Debian Default Page 還帶有一些設定檔、檔案目錄結構等說明資訊,建議新手可以把他們看懂!確認完 apache 能夠獨立正常運後,接下來要確認的是 apache 的 php 模組是否能正常運作。
2. 確認 apache 搭配 php 正常運作,作法是寫一個簡單的 php 涵式,將檔案存檔為副檔名 php 的檔案,送出要求到 apache ,透過回應結果來確認程式是否有被正常執行。
剛剛上面的 Apache2 Ubuntu / Debian Default Page 有提到,預設的網頁伺服器檔案根目錄(document root) 為 /var/www/html ,以本篇的範例環境來說,這個檔案目錄預設的擁有者及群組會是 root ,所以編輯、存檔的時候別忘了使用 sudo 來提升權限,這邊要做的事情是把下面這段 php 程式碼 放到 /var/www/html 底下:
PHP
Shell
$ echo '$ echo '接著就像前面確認 apache 是否正常運作一樣從瀏覽器打開對應的位置,但記得在網址最後面加上對應的檔名,例如 http://localhost/phptest.php
成功的話應該會看到這樣的畫面:
3. 確認資料庫正常運作
資料庫的確認比較簡單,執行下面這樣的指令後,輸入密碼,按下 enter 鍵,確認是否能成功登入:
Shell
$ mysql -u root -p$ mysql -u root -p登入成功的畫面:
確認登入後可以按 Ctrl + d 或是 輸入 exit 按下 enter 離開 (用 quit 也行!)
4. 最後是確認 Web server 透過 php 可以正常存取資料庫 ,我們這邊透過知名的資料庫工具 phpmyadmin 來測試,下載頁面網址: https://www.phpmyadmin.net/downloads/ ,截至目前最新的穩定版本為 4.5.5,這邊示範下載 phpMyAdmin-4.5.5-all-languages.tar.xz 這個檔案
下載後將檔案解壓縮到前面所提到的 /var/www/html/ 目錄:
Shell
$ sudo tar -xvf phpMyAdmin-4.5.5-all-languages.tar.xz -C /var/www/html/$ sudotar -xvfphpMyAdmin-4.5.5-all-languages.tar.xz -C /var/www/html/
接著一樣從瀏覽器存取對應的位置,例如 : http://localhost/phpMyAdmin-4.5.5-all-languages/
打開後沒想到出現了錯誤訊息:
如果看到這樣的畫面,表示有模組沒有啟用、或沒安裝到,以上圖為例,缺的是 json 模組,但前面不管是用 apt-get 還是 tasksel 兩種方法,我們都有安裝到 php5-json套件,所以原因應該是套件沒有被啟用。Debian / Ubuntu 底下有一個好用的工具叫作 php5enmod (安裝完 php5-common 這個套件後才有的,前面因為套件相依性的關係會被安裝到),我們可以透過這個命令來啟用 php 的 json 模組:
Shell
$ sudo php5enmod json$ sudophp5enmodjson啟用後重新啟動 apache
Shell
$ sudo service apache2 restart$ sudoserviceapache2restart這邊不是重新啟動 php 而是重新啟動 apache 的原因是因為我們上述安裝的方式都是選用將 php 包成 apache 模組的架構,有點類似將兩者綁在一起的架構,其優點是容易安裝、使用,缺點則是效能較差、需要使用較多的資源。(以 Ubuntu 為例,如果好奇系統上目前有哪些已經安裝好可以使用的模組請參考這個目錄:/etc/php5/mods-available/)
重新啟動完 apache 後可以重新整理網頁看看,應該就會成功看到登入畫面了:
帳號請輸入預設的 root ,密碼則輸入安裝資料庫時設定的密碼,登入後的畫面大概會長這樣:
到這邊基本上就完成了 LAMP 伺服器的最基本建置。
後記
LAMP 架設完了,其實並不難,之後會再利用空閒時間寫一篇關於架設好 LAMP 後安裝 WordPress 的筆記。
關於安全性的部分,本篇並沒有涵蓋到 header 資訊隱藏、以及 https / ssl 加密的部份,也就是說使用者可以很輕易的從 HTTP header 取得系統建置的相關套件、版本,且在存取網頁時,包含帳號密碼在內的所有資訊都是未經加密的明文,很容易被相關工具 “撈" 出來 (如Wireshark 或 tcpdump),簡單來說就是安全性不夠,如果你對這兩件事情有興趣,可以參考以下兩篇筆記:
用 apache, nginx, PHP架網站要注意的安全事項
用 nginx 建置一個 A+ 等級的 https 網頁伺服器
另外如前面所說,本篇撰寫的時候其實 PHP 7.0 已經推出了,關於 PHP 7.x 和 PHP 5.x 的效能差異可參考這邊的效能測試:
Roseapple Pi 蓮霧派 效能簡測 (benchmark)
最後要說的是 … 上面只有告訴大家怎樣確認功能有正常運作,但沒有告訴大家如果沒有正常運作該怎麼辦,恩,該怎麼說呢,除錯、偵錯的難度比較高(其實是高非常多),也很難一一列舉,建議遇到問題時儘量記下錯誤訊息、將錯誤訊息的畫面截圖,再透過錯誤訊息提供的資訊以及檢驗、確認自己的操作步驟是否正確、每一步驟執行完後是否成功?是否有其他錯誤訊息?最後是卡在哪一步等相關資訊,慢慢找出問題,真的看不出所以然時,也才可以用這些 “重要資訊" 向他人求救!
LAMP picture original from http://www.programmableweb.com/news/what-mean-stack-and-why-it-better-lamp/analysis/2015/12/22
上一篇: pdo怎么获取全部字段啊