製作網站的心得
第一步:設計網站的architecture
要設計網站的architecture,就要先決定網站的內容,以這個網站為例,它是一個分享資源的網站,要儲存很多的檔案,但下載這些檔案要不要登入呢?一開始我是想整一個有帳戶的網站,有使用者名稱、密碼和電郵地址等,但當我想到如果整得不小心,會有帳戶資料外洩,還要做pen test和SAST等,實在太麻煩了!所以最後決定整一個read only的網站便算。
接著便要想一想這個網站有沒有動態的內容,歌曲的列表便是動態內容,之前想過列表的每一列可在DB table裏loop出來,但列表只得兩欄實在太簡單,好像不值得用DB,所以算了吧!連DB都慳返。
基於以上考慮,使用static HTML便足夠,連JavaScript和backend program都不用寫。所以這個網站的architecture只需要一個web server和file server,不需要app server和DB server。我設計過這麼多的architecture,都是第一次見這麼簡單的!
第二步:決定用什麼工具寫HTML和分享檔案
市面上有很多專業的工具可以寫HTML,不過你和我在家裏都有的就是Microsoft Word和Excel,它的好處是what you see is what you get和係人都識用,所以我決定列表就用Excel來輸入,之後copy & paste到Word裏面,連其他文字一齊format,最後另存為UTF-8的HTML。
至於分享檔案,我首選是Google Drive,一個Google帳戶便可以有15GB免費的Google Drive,實在太著數了,這個網站的分享檔案也只用了1GB,把電腦上的folder一次過drag & drop到Google Drive便成了,不過最痛苦便是要將每一個folder的分享連結都copy出來放到Excel裏。
第三步:建立網站的infrastructure
在建立網站的infrastructure時有幾個步驟,每個步驟都要考慮成本和容易性,以下詳細說明。
首先要有個domain name,很多年前已在HKDNR買了個hackker.hk,所以已不記得當年怎樣做。有了domain後就要有DNS server,這個可以用Cloudflare,它是免費並提供很多實用的服務,它有兩個DNS server送給你,只要在HKDNR裏輸入便可以讓hackker.hk使用Cloudflare DNS。
根據architecture design,下一步就要有web server和file server,file server已被Google Drive解決了,只有web server要找個data center來host,現時最平和最方便當然是用Cloud,我比較熟AWS,而且有一張過期的証書,可以學會至用。我需要一部Linux機並裝上Apache web server,所以我先在AWS us-east-1 (N. Virginia)創建和時租了部EC2,為何選擇us-east-1而不是ap-east-1 (HK)?因為us-east-1的EC2是最平的,反而HK的很貴,但連線速度會比HK慢,不過可以用Cloudflare proxy來解救,由香港連去近香港的Cloudflare server再proxy到美國會快過香港直連去美國。要怎樣的EC2規格是有學問的,因為只需要行Apache web server,所以選t3.micro (2 CPU和1GB RAM),OS選最平的Amazon Linux,硬碟選gp3 8GB,一切都要用最少要求,因為Cloud的好處就是elastic,將來不夠用再升級,不需要現在就用最貴最好的,這可慳返不少。
Set好部EC2、裝了Apache web server和upload好static HTML之後便要把Cloudflare接上EC2的Elastic IP,這需要兩個步驟,首先要設定EC2上的security group即是firewall只准Cloudflare IP連接EC2的HTTPS,之後在Cloudflare DNS上加返個A-record並proxy EC2的Elastic IP。本來HTTPS是要買SSL cert的(很貴),但由於用Cloudflare proxy的關係,它會送你universal cert,太著數了!
至於load balancer和DR,老實說,這個網站我不覺得人流會這麼多,而且是個非常簡單的網站,根本不用load balancing和HA,AWS的availability已經很高,Cloudflare又有提供caching和Always Online的服務,所以不用付費給load balancer和DR。另外關於page & event tracking,不用Google Analytics了,Cloudflare已自動提供page visit數據。最後關於網站的聯絡電郵,不用整一個email server,只需要用Cloudflare的email routing轉寄[email protected]的電郵到我另一個實體電郵地址便可。
第四步:設定網站的security
雖然這個網站沒有會員帳戶,不會吸引黑客入侵,但還是要有mindset去做好每一個網站的保安。
首先想一想每個網頁會不會發生XSS、SQL injection和session hijack等OWASP安全性問題,這個網站沒有JavaScript、沒有application也沒有DB,自然不會有這些問題,所以pen test和SAST都不用做。之後想想有沒有call其他網站的資源,例如GA、GTM和其他CDN,這個網站當然也沒有,所以CSP都不用set。不過還有幾樣保安是要做的,以下詳細說明。
第一是AWS和Cloudflare帳戶都要有MFA登入,它們都支援Google Authenticator,這可避免帳戶盜用。
第二是EC2上的security group,inbound rule只開放SSH給管理員的IP,和HTTPS給Cloudflare IP,outbound rule開放給需要call出去的server,其他一律封殺。
第三是WAF、anti-DDoS和rate limit,可用Cloudflare免費的服務。至於Cloudflare上的bot detection,我怕會影響到search engine和AI,所以關掉,但可以沒有bot detection是因為已有WAF、anti-DDoS、rate limit和網站本身沒有帳戶等功能。 另外,可用WAF的Custom Rules去製作網站資源URL的whitelist,非白即封,這可減少web server的HTTP 404 traffic和增加安全性。
最後是要在Cloudflare上set一些notification,例如當我的網站down了或被攻擊都會收到電郵通知等。
第五步:讓網站可被搜尋
當完成所有設定後,便要讓Google和Bing可搜尋新的網站,只要到Google Search Console和Bing Webmaster Tools登記網站的URL即可,另外還要弄一個robots.txt和sitemap.xml來告訴search engine怎樣搜尋網站。
最後,這個網站每個月成本只需HK$100。以上便是本人的心得,如有任何問題,可聯絡本人[email protected],電郵內請提供姓名和所屬教會,否則本人不會閱讀和回覆。
Copyright (c) 2025 Hackker Wong. All rights reserved.