LNAMP是Linux系統上的開源架站組合,從名稱來看,「L」表示「Linux」作業系統,「N」表示「Nginx」網頁伺服器,「A」表示「Apache」網頁伺服器,「M」表示「MySQL」資料庫,「P」表示「PHP」程式語言,而phpMyAdmin則是以PHP作為基礎的資料庫管理工具。使用效能較佳的Nginx來處理靜態檔案、反向代理、資源分配,搭配成熟的Apache來處理動態網頁程式,可以比單純使用Nginx作為網頁伺服器來的更穩定、更容易擴充,也比單純使用Apache網頁伺服器還要來的高效。



以往架設LNAMP的方式通常是一個套件慢慢安裝、慢慢設定。但現在有一些不錯的開源項目出來,可以直接用現成的腳本(script)來快速架設LNAMP。在這篇文章中,將會使用以下這個在GitHub上的開源項目來架設LNAMP Server + phpMyAdmin,另外還附加快取以及記憶體優化的機制。

https://github.com/lj2007331/lnmp

選擇這套腳本的原因在於,作者將會用到的套件原始碼都整合進腳本內了,因此可以直接使用這個腳本在本機內快速編譯安裝這些套件原始碼,就不需再到處尋找這些離散的套件,十分省事。

在開始架設LNAMP Server + phpMyAdmin之前,您必須要先有CentOS/RedHat 6以上、Debian 7以上或是Ubuntu 12以上的Linux作業系統。這篇文章使用的Linux作業系統為Ubuntu Server 18.04,可以參考這邊文章來安裝:

https://magiclen.org/ubuntu-server-18-04/

在開始使用這個腳本之前,建議先把伺服器的作業系統更新到最新。Debian或其衍生的Linux發行版可以使用以下指令來更新Ubuntu Server的套件庫和套件:

sudo apt update && sudo apt full-upgrade

lnamp

這個腳本可能會去使用到Python腳本,且由於這個腳本需要花費不少的時間來編譯原始碼,所以如果要透過SSH來操作這個腳本,建議使用screen來執行,如此一來就算SSH連線斷掉,腳本也還是可以繼續執行。Debian或其衍生的Linux發行版可以使用以下的指令來安裝screen和python套件:

sudo apt install screen python

lnamp

下載LNAMP腳本與原始碼包

下載腳本前,先將工作目錄移動到家目錄中。接著輸入以下指令,使用wget來下載腳本:

wget http://mirrors.linuxeye.com/lnmp-full.tar.gz

若擔心網路不穩,可以加上「-c」參數來支援續傳。

lnamp

輸入以下指令,使用tar來解壓縮:

tar xzf lnmp-full.tar.gz

lnamp

安裝LNAMP + phpMyAdmin

在家目錄輸入以下指令,將工作目錄移動到解壓縮出來的「lnmp」目錄:

cd lnmp

lnamp

用以下的screen指令建立名為「lnmp」的session:

screen -S lnmp

lnamp

若SSH斷線,重新連線後可以使用以下指令來恢復session:

screen -r lnmp

接著輸入以下指令,執行安裝的腳本:

sudo ./install.sh

lnamp

一開始可以設定SSH連線的連接埠,預設是22,要不要修改它就看個人囉!

lnamp

選擇是否要使用腳本提供的iptables防火牆規則,如果您不太會設定iptables,就啟用它吧!腳本會根據使用者透過腳本開啟的服務,來決定要開放哪些連接埠可以被連入。

lnamp

選擇要安裝的網頁伺服器,在此選擇「nginx」。其它的網頁伺服器,如「Tengine」,是淘寶從Nginx發展出來的另一套網頁伺服器,有許多更進階的功能,可以運用在大型的網站。而「OpenResty」是整合Nginx和「LuaJIT」,以及許多高品質Nginx模組的網頁平台。

lnamp

lnamp

選擇要安裝的Apache Server,選擇最新版本的Apache即可。

lnamp

選擇Apache的PHP運作模式,在此選擇「php-fpm」。「php-fpm」和「mod_php」的差異是,前者在處理PHP請求時,會使用獨立的PHP行程(process),這些行程可以有多個;而後者則是直接在Apache自己的行程中處理PHP。在大部分的情況下「php-fpm」會比「mod_php」來得快,但也會使用較多的記憶體。

lnamp

選擇Apache的MPM(Multi-Processing Modules, 多行程模組),在此選擇「event」。「prefork」會在一開始就開啟多個Apache行程來監聽同樣的連接埠,當來自客戶端的請求發送過來時,最先接收到請求的行程就會去處理它,處理完後回復監聽狀態。「worker」會在一開始就開啟一個或多個Apache行程,每個行程都會建立相同數量的執行緒,一個執行緒就是一個可以一次處理一個請求的「工人」(worker),負責監聽連接埠的執行緒會把工作分配給閒置的工人,多個行程可以避免一個行程發生崩潰時,就導致整個服務無法使用的情形。「event」類似「worker」,但它遇到「keep-alive」的HTTP請求時,會去建立專屬執行緒(dedicated thread)來處理這種需要長時間維持住的連線,避免佔用原本的工人執行緒。

lnamp

選擇要安裝的資料庫,選擇最新版本的MySQL即可。其餘還有延續MySQL開源宗旨的「MariaDB」、擁有高效能InnoDB的「Percona」、阿里巴巴修改MySQL後再開源的「AliSQL」、主打穩定和安全的「PostgreSQL」和沒有SQL(NoSQL)的「MongoDB」可供選擇。

lnamp

lnamp

接著設定資料庫的密碼,要注意別打錯了。

lnamp

選擇要如何安裝資料庫,是要直接裝已經編譯好的檔案,還是要重新編譯。如果要讓資料庫能夠完美融入目前我們使用的作業系統,就重新編譯吧!如果編譯發生問題的話,才來安裝已經編譯好的檔案。

lnamp

選擇要安裝的PHP版本,選擇最新的版本即可。

lnamp

lnamp

選擇PHP要使用的解譯碼快取(opcode cache),選擇「Zend OPcache」即可。「APC」或是「APCu」,前者除了有解譯碼快取之外,還有資料快取,是早期的快取工具;而後者則只有資料快取,是從「APC」獨立出來的功能。這邊的資料快取是指在PHP程式中,使用「key-value」的方式來儲存資料。

lnamp

lnamp

接著要選定要安裝PHP的擴充模組。關於處理圖片的模組,建議選擇「ImageMagick」(imagick)。Redis是強大的in-memory資料庫,如果需要讓PHP連結Redis資料庫,也可以安裝「redis」模組。Memcached類似Redis資料庫,但功能簡單很多,稱不上是資料庫,如果需要讓PHP連結Memcachde服務,也可以安裝「memcached」模組(「memcache」模組比較老,不建議使用)。Memcached和APCu的差異在,APCu只能夠用在PHP,而Memcached可以用在PHP之外的程式(當然這點Redis也是和Memcached一樣)。

lnamp

安裝Pure-FTP來架設FTP伺服器,方便遠端上傳和下載檔案。

lnamp

安裝phpMyAdmin來遠端管理伺服器上的MySQL資料庫。

lnamp

安裝Redis資料庫。

lnamp

關於Redis的用法,可以參考這篇文章:

https://magiclen.org/ubuntu-redis-php/

安裝Memcached。

lnamp

不要安裝HHVM,因為只有CentOS能支援。

lnamp

接著等待腳本完成所有編譯與安裝設定的工作。

lnamp

工作結束後,重新啟動系統,完成安裝。

lnamp

預設路徑

Nginx目錄:

/usr/local/nginx

Apache目錄:

/usr/local/apache

各個虛擬主機的根目錄:

/data/wwwroot

預設主機的根目錄:

/data/wwwroot/default

記錄檔存放目錄:

/data/wwwlogs

可以將常用的目錄添加至環境變數中,方便管理。建議編輯家目錄中的「.bashrc」檔案,加上以下指令。

export NGINX_HOME=/usr/local/nginx
export SSL_HOME=$NGINX_HOME/ssl
export APACHE_HOME=/usr/local/apache
export WWW_HOME=/data/wwwroot
export LOG_HOME=/data/wwwlogs
export LNMP_HOME=$HOME/lnmp
export LNAMP_HOME=$LNMP_HOME

lnamp

查看伺服器的工作狀態

可以使用網頁瀏覽器用HTTP協定開啟伺服器的IP,若能看得到預設的網頁,表示Nginx運作正常。

lnamp

X Prober

X Prober是使用PHP開發的探針,可以在網頁上直接顯示伺服器的運行狀態。用瀏覽器開啟伺服器上的「xprober.php」檔案即可看到。

lnamp

lnamp

phpinfo

「phpinfo」是PHP內建的函數,可以用來在網頁上顯示PHP的相關資訊。用瀏覽器開啟伺服器上的「phpinfo.php」檔案即可看到。

lnamp

Opcache Control Panel

用瀏覽器開啟伺服器上的「ocp.php」檔案即可看到Zend OPcache的運作狀態。

lnamp

phpMyAdmin

用瀏覽器開啟伺服器上的「phpMyAdmin」目錄,即可進入phpMyAdmin。

lnamp

輸入帳號密碼來登入資料庫。

lnamp

若有出現「configuration storage is not completely configured...」的訊息,請參考以下步驟,或是查看這篇文章來解決:

https://magiclen.org/phpmyadmin-config/

lnamp

執行以下指令並輸入root使用者的密碼來匯入缺少的MySQL資料表:

mysql -u root -p < /data/wwwroot/default/phpMyAdmin/sql/create_tables.sql

lnamp

加密LNAMP腳本的預設後台

剛才提到的X Prober、phpinfo、Opcache Control Panel、phpMyAdmin,若直接開放出來,讓所有人都能輕易存取到的話,顯然對伺服器的安全性會有非常不好的影響。腳本預設的後台設定檔路徑為「/usr/local/nginx/conf/nginx.conf」。

lnamp

建議替腳本預設後台加上HTTP的「基本認證」(Basic Access Authentication)功能。可以參考以下文章:

https://magiclen.org/nginx-password/

如果有必要的話,也請加上HTTPS協定吧!如此一來,出門在外,即便使用公用網路,也可以安心地遠端管理網站!

Nginx與Apache設定檔的重新載入

在修改完Nginx設定檔之後,使用以下指令來測試設定檔是否正確無誤:

sudo env "PATH=$PATH" nginx -t

接著再使用以下指令來讓Nginx重新載入設定檔:

sudo env "PATH=$PATH" nginx -s reload

在修改完Apache設定檔之後,使用以下指令來測試設定檔是否正確無誤:

sudo env "PATH=$PATH" httpd -t

接著再使用以下指令來讓Apache重新載入設定檔:

sudo env "PATH=$PATH" httpd -k graceful

備註:此處在指令中使用「env "PATH=$PATH"」是因為「sudo」的預設PATH中,並不包含LNAMP腳本所安裝的那些執行檔,所以需要臨時覆寫設定。如果要更改「sudo」的預設PATH,可以編輯「/etc/sudoers」這個設定檔。

啟動、停止或重新啟動網頁伺服器

若要 啟動/停止/重啟 Nginx服務,可以使用以下指令:

sudo systemctl start/stop/restart nginx

若要 啟動/停止/重啟 Apache服務,可以使用以下指令:

sudo systemctl start/stop/restart httpd

添加虛擬主機(Virtual Host)

如果想要將不同的網域綁定在同一台實體主機上,並且分別連結到不同的網站,可以使用虛擬主機的功能。先將工作目錄移動到腳本的根目錄,然後輸入以下指令:

sudo ./vhost.sh

lnamp

選擇是否要使用SSL。如果要使用免費的SSL(Let's Encrypt)的話,建議參考以下這篇文章來進行會比較清楚一點:

https://magiclen.org/simple-ssl-acme-cloudflare/

在此示範不使用SSL。

lnamp

設定網域名稱。

lnamp

設定虛擬主機的根目錄路徑,使用預設值即可。

lnamp

設定別的網域名稱(可以多個網域連接到同一個虛擬主機)。

lnamp

設定直接連結保護(Hotlink Protection)。建議參考以下這篇文章來手動設定:

https://magiclen.org/nginx-hotlink-protection/

lnamp

允許Nginx和Apache寫入存取記錄,方便維護伺服器。

lnamp

lnamp

完成設定後,即可設定網域的DNS,直接用A記錄對應伺服器的IP,Nginx會根據HTTP請求標頭中的「HOST」欄位,來判斷要連到哪個虛擬主機。

lnamp

移除虛擬主機(Virtual Host)

先將工作目錄移動到腳本的根目錄,然後輸入以下指令:

sudo ./vhost.sh --del

lnamp

腳本會列出目前使用的虛擬主機網域名稱,填入想要移除的虛擬主機的網域名稱。

lnamp

決定是否要刪除虛擬主機的目錄。

lnamp

再按下鍵盤任意鍵,即可移除指定的虛擬主機。

lnamp

lnamp

管理FTP帳號

先將工作目錄移動到腳本的根目錄,然後輸入以下指令:

sudo ./pureftpd_vhost.sh

lnamp

再來就可以開始管理FTP帳號了。

lnamp