還在使用虛擬主機嗎?改用虛擬專用伺服器 (VPS),擁有更多控制權吧~
前言
早期我需要一台伺服器來運行一些我自己的程式,一般的虛擬主機只提供網站的功能,不能依自己的需求做設定,而且費用還不低,那時候還不流行 VPS 所以也沒得租,於是我把一台舊電腦拿來安裝 Linux,為了顧及省電及安靜,不使用傳統硬碟,那時候也還沒有便宜的 SSD,我測試把 Linux 安裝在一個 8GB SD卡上,雖然一度熱當,但還是安裝成功而且可以運行。之後有聽說 Linode 有提供 VPS (Virtual Private Server) 的服務,不過當時價格不低。2011 年中 DigitalOcean 開始服務了,而且只要一個月 $5 美元就有 SSD 硬碟的方案可用,雖然硬體配置有點低,但對我來說已經夠用,試用了一陣子,就一直用到現在了。
我大概是 2013 年左右開始使用 DigitalOcean,那時候還沒有亞洲機房,所以就隨便選了一個紐約機房來試用,除了 Ping 值稍慢外,沒什麼大問題。大約 2014 年初,DigitalOcean 建立了新加坡機房,但是因為擔心新機房會不會有問題,就想說再等等。
去年(2017年)終於打算將主機換到新加坡的機房,做了一番研究後發現,可以快速的將原本的主機以映像檔的方式搬移到新加坡機房後重建。不過考慮到我原本使用的是 CentOS 6 32 位元版本,它的維護期間也快到期了 (2020年),不如直接使用 CentOS 7 64位元版本 (2024年) 吧。另外,這次也打算改用 Nginx 網頁伺服器,換掉使用了很久的 Apache,所以也花了一點時研究如何設定及使用 Nginx。
我一直有做筆記的習慣,之前建立伺服器的時候找了許多資料,不過那時候的筆記有點零碎。這次在重建整個伺服器時,想到每次做的這些設定其實都有一定的流程,那不如就把整個流程做個有系統的整理,寫成一個操作手冊,方便自己日後使用,也可以分享給需要的人。
這裡有個重要的事情必須說明,所謂事業有專攻,一般來說會有專門的網管人員來建立及管理伺服器,程式設計師專責寫程式,網站及資料庫伺服器的部份也許還有個專人來負責,所以這份操作手冊並不打算包括這些全部的專業,而是專注在最小必要的部份,讓你可以靠自己就能打造一個安全可靠的伺服器,未來有需要更專業、更進階的功能再自行去研究,或請專業的人來管理。
最後我要稍為聊一下 AWS。AWS (Amazon Web Services) 是那個做書店網站起家的亞馬遜提供的雲端運算服務,它把服務分的非常細,造成初次使用的人在使用之前必須花點時間瞭解,而且它是以使用時間或使用量去計費,聽起來好像不錯,可是對於一個剛起步的個人或新創公司來說太複雜,而且費用的不確定性太高。Linode 和 DigitalOcean 不同的地方在於,它是以一個固定的價格來提供不同的使用方案,讓開發者可以自行選擇需要的方案,要付多少費用非常清楚,不用擔心費用會超過預算。
亞馬遜在 2016 年的時候也開始推出固定費用式的 Amazon Lightsail 的服務,打算來搶 Linode 及 DigitalOcean 的客人,你就知道還是有許多開發者是選擇這類方案的。DigitalOcean 的創辦人就曾提過,為了避免和亞馬遜硬碰硬,所以才採取針對獨立開發者或新創公司提供這樣的服務,但現在看來亞馬遜要開始跨過界線了,或許是因為這個原因,Linode 及 DigitalOcean 的最低 $5 方案已經把記憶體升級到 1GB 了,而 Amazon Lightsail 還是 512 MB 喔。
1. 開始之前
技術架構的選擇通常會有多方面的考量,這裡會簡單說明我選用的技術架構的原因。1.1 為什麼選擇 CentOS
在說明為什麼選擇 CentOS 之前,我們先來聊聊微軟的 Windows。如果你是用 ASP.NET 來開發網站的話,通常會選擇 IIS 網頁伺服器來執行,並且放在 Windows Server 上,所以如果你是使用微軟的技術架構,這份文件可能就對你無用,雖然現在微軟有提供 SDK 可以讓你在 Linux 上運行,這部分就請自行研究了。選擇 Windows 或 Linux 並無好壞之分,純看個人需要。
Linux 有非常多的發佈版本,不過較為流行的有兩個,一個是 Debian,另一個就是 Red Hat。桌面版本很受歡迎的 Ubuntu 就是 Debian 系,如果要用 Red Hat 系的可以選擇 Fedora。
伺服器一般不安裝圖形介面,通常以終端機連線並以指令操作。你可以使用 Debian 或 Ubuntu 出的伺服器版本,或是我選擇的 CentOS;Fedora 的伺服器版本偏向實驗性質會有很多新功能,但穩定性可能不佳。
Red Hat 是一間公司的名稱,它發行的 Linux 全名是 Red Hat Enterprise Linux (RHEL),這個是給企業用的付費版本,有提供咨詢服務,它以相同的程式碼另外發佈了一個免費的版本 CentOS。
我們不比較 Debian 及 CentOS 的優缺點,它們除了同樣使用 Linux 核心外,其他的設計理念及發佈週期等均不同,選擇哪一個因人而異。選擇 CentOS 有幾個好處,因為它使用和 RHEL 同樣的程式碼,要遇到更新緩慢或漏洞沒有修補的機率就小一些,另外就是 CentOS 使用的人較多,要找資料時就相對方便,這點很重要。
Debian 的套件管理工具是 APT,CentOS 則是 YUM;CentOS 和 RHEL 可以使用 Fedora EPEL 來擴充軟體套件。
1.2 為什麼選擇 Nginx
早期大家都是用 Apache 當網頁伺服器,用得好好的沒什麼問題,直到發現當連線數增加到一個程度後,運行的效率會開始變差,稱為 C10K 問題,即一個網站伺服器最多只能同時處理 10000 個請求的連線數,之後無論硬體如何加強,伺服器也無法負荷。後來 (2002年) 一位俄羅斯人 Igor Sysoev 開發了一個名為 Nginx (唸 engine-x) 的網頁伺服器,號稱可以解決 C10K 的問題。慢慢的有越來越多人使用 Nginx (見下圖,或請看網頁伺服器調查 February 2018 Web Server Survey),Apache 的使用率從 2012 年左右開始下降,Nginx 則緩慢的往上升,從前的 LAMP 技術架構逐漸變成 LNMP (Linux + Nginx + MySQL + PHP)。
圖片來源:https://news.netcraft.com/archives/2018/02/13/february-2018-web-server-survey.html
在決定選用 Nginx 之前,我花了一點時間研究 Nginx 如何設定及使用,還有效能方面的實驗。在配置檔的文件方面,相較於 Apache 的角括號區塊指令
<指令>...</指令>
,我反而比較喜歡 Nginx 的大括號表示方式 指令 { ... }
。在效能實驗方面,Nginx 不只回應速度比較快,每秒請求連線數 (Request per second) 高,也真的如傳說中耗用的資源比較少,像是 CPU 及記憶體的使用量,這點很重要,因為我打算租用最低價方案的 VPS,而最低價方案只提供 512 MB 的記憶體 (現在已升級為 1GB) 。
如果想瞭解實際的測試數據,可以參考 Web server performance comparison 的比較,它測試 5k 的 PNG 檔在 25000 個請求數下耗用的記憶體;另外,效能測試可以參考 Linux Web Server Performance Benchmark – 2016 Results,Apache 的成績真的都不太好。
1.3 PHP-FPM 是什麼
CGI (Common Gateway Interface) 稱為通用閘道介面,是伺服器和請求處理程式之間的一種資料傳輸標準,請求處理程式可以用任何一種程式語言撰寫,早期比較常用 Perl。CGI 有個很大的缺點,就是每當請求發生時,就會產生一個程序來處理,當請求增加時,對硬體資源的消耗就會很大;於是有了 FastCGI (Fast Common Gateway Interface) 來解決這個問題。FastCGI 伺服器會建立一個持續性的程序來處理一連串的請求,這個程序由 FastCGI 伺服器來管理,而不是網頁伺服器。當一個請求進來時,網頁伺服器把這個請求的所有資料透過兩種方式傳遞給 FastCGI 伺服器來處理,一種是 Socket,另一種是 TCP connection;Socket 適合網頁伺服器和 FastCGI 伺服器同在一台機器上,而 TCP 連線則可以連到遠端的 FastCGI 伺服器。
Apache 可以使用模組的方式,直接處理 PHP 程式,也可以使用 mod_fcgid 模組,透過 FastCGI 的方式來處理。
FastCGI 和 CGI 一樣是個資料傳輸標準,所以任何人都可以以此標準來開發處理程式,PHP-FPM 就是其中一種。FPM 全名為 FastCGI Process Manager,所以 PHP-FPM 就是 PHP FastCGI 標準的一種實作,它的任務就是管理 PHP 的處理程序。Nginx 可以透過 FastCGI 將有關 PHP 的請求傳遞給 PHP-FPM 來處理。
PHP-FPM 會像是網頁伺服器一樣,以 daemon 的方式在背景執行。
1.4 資料庫的部份
資料庫的種類非常多,概分為關聯式資料庫及非關聯式資料庫 (NoSQL) 兩種。較知名的關聯式資料庫: 非關聯式資料庫較知名的有: 和前面所說的一樣,技術是選你所需要的,在大部份情況下你是不需要用到非關聯式資料庫的,甚至基於 DBMS (Database Management System) 的關聯式資料庫也不需要;如果你的系統讀取多於寫入,而且不需要太多的 transaction (即全執行或全不執行),一個 SQLite 檔案式資料庫即可滿足需求。
瞭解你所選擇的資料庫的特性及強項是否能滿足你的需求,並且在研究如何操控它之後才使用它。
1.5 要選哪家 VPS
這裡只談月租固定價格的 VPS 商,並且因為我只有用過 DigitalOcean,所以沒辦法直接告訴你該怎麼選擇,你可以依需求自行選擇。因為是月租固定價格,所以不用擔心費用超支,如果有需要增加硬體規格,例如 CPU 的數量、記憶體及硬碟的容量等,可以之後依需求調整或選擇其他方案,容不容易擴增就是一個可以考慮的點。另外,DigitalOcean 有提供一鍵安裝 One-click applications 的功能,只需要不到 55 秒的時間就能裝好像是 LNMP 的架構系統,在使用上非常快速方便。如果你需要台灣的連線有較快的反應時間 (Ping 值),有沒有亞洲機房就是很重要的考慮因素,東京機房又勝過新加坡機房,這都要考慮。
以下為 2018 年 6 月,各家 VPS 商的方案:
Linode | DigitalOcean | Vltur | Amazon Lightsail | |
---|---|---|---|---|
成立時間 | 2003年 | 2011年 | 2014年 | 2016年 |
費用方案 | $5 | $5 | $5 (註1) | $5 |
CPU (註2) | 1 | 1 | 1 | 1 |
RAM | 1 GB | 1 GB | 1 GB | 512 MB |
Storage | 25 GB SSD | 25 GB SSD | 25 GB SSD | 20 GB SSD |
Transfer (註3) | 1 TB | 1 TB | 1 TB | 1 TB |
是否有東京機房 | 有 x2 | 無 | 有 x1 | 有 x1 |
是否有新加坡機房 | 有 x1 | 有 x1 | 有 x1 | 有 x1 |
- 註 1 :Vltur 最低價方案為 $2.5
- 註 2 :雖然同為 1 個虛擬 CPU ,但是各家所用的實體 CPU 規格可能不同,提供的效能就會有所差異。
- 註 3 :傳輸量分為流入及流出,大部分只計算流出的流量;有些會限制流入的流量或沒有註明。
- 註 4 :台灣連外的頻寬第一是美國、第二是日本,新加坡只有第五,但是美國太遠,所以一般來說,大家都希望選日本的機房;但是如果你的使用者都在美國,那當然選美國機房。聽說 Linode 的東京機房必須用搶的;我自己用 DigitalOcean 的新加坡機房速度不錯,雖然 Ping 值大約 100 ms 左右,但還可以接受。
繼續閱讀:動手學 VPS 架站:使用 CentOS 7 + Nginx + PHP-FPM + MariaDB (2) - Linux 入門
本文網址:https://blog.tonycube.com/2018/07/vps-centos-7-nginx-php-fpm-mariadb-1.html
由 Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀
由 Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀
我要留言
留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。