前言
最近因為
CakeResume
作品集不能給非會員觀看,這時就想說來自己架一個站好了,那麼我主要是利用GCP
建立免費的 VM
,No-IP
使用免費的 DNS
,Certbot
自動申請免費的 SSL 憑證
,在 OS 之中,主要都是以Docker
作為主力容器服務。
建立免費 GCP VM
官方免費 VM 服務條件
- 其實一般人除了初次90天內300美元的額度可以使用以外,GCP 還有提供一個條件可以讓你
免費使用他的 VM 服務
。使用 e2-micro (2 個 vCPU,1 GB 記憶體)
的硬體- VM 位置在
奧勒岡州:us-west1
、愛荷華州:us-central1
、南卡羅來納州:us-east1
- 硬碟空間最多使用
30GB
。(個人使用10GB
而已,以前有用過30GB被收費過QQ) - 快照(Snapshot)空間就是
GCP 可以備份你的 VM
,而限制就是5GB
(超容易達成,建議不要用
)
P.S.
- 流量費用另外計算,但我的作法是 VM 只展示靜態檔案,這樣就可以避免如果架設後端 API 被亂 call。
- 每幾年基本上都會有些免費條件的調整,要請大家注意自己的帳單是否開始成長。
選擇/建立 Porject
- 一開始進入後台的時候,GCP 會先要求你
建立或是選擇一個 Project
來當作專案分類。 - 我們可以點擊側邊欄的左上角的Dropdown
選擇或建立我們的Project
。
- 如果沒有 Project 那麼直接輸入一個即可。
- 選擇好 Project 後,請將 Compute Engine API 的服務順便啟用。
建立 VM
- 進入
Compute Engine > VM執行個體
的頁面之後,請點擊建立執行個體
- 將你的
VM 名稱
、區域
、硬體條件(vCpu、Memory)
、硬碟(大小、OS)
、防火牆(HTTP、HTTPS)
設定好,點擊建立
。
安裝 Docker
- 使用瀏覽器的 SSH 進入 VM
- 安裝指令
1 | # 先清空 VM 內的舊版本 Docker |
刪除步驟:
1
2
3
4
5 # 刪除安裝包
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose docker-compose-plugin
# 刪除鏡像、容器、配置相關文件
sudo rm -rf /var/lib/docker
撰寫 docker-compose.yml
- 撰寫
/home/{user}/docker-compose.yml
是為了可以讓我們之後一鍵開啟容器服務,並且將nginx
的相關配置也寫好
/home/{user}/docker-compose.yml
1 | version: '3' |
/home/{user}/nginx/conf/default.conf
1 | server { |
- 建立
/home/{user}/html/index.html
,等等可以直接查看 Server 是否正常運行
/home/{user}/html/index.html
1 | <!DOCTYPE html> |
Nginx DEMO
- 配置好我們的文件之後,我們只要
切換的家目錄
,下 docker-compose 指令
,就可以開啟 http 服務
1 | # 切換到USER 家目錄 |
- 然後開啟瀏覽器,輸入 IP 就可以看到我們的 HTML。
測試 GZIP 是否開啟成功
- 進入測試網站
- https://www.giftofspeed.com/gzip-test/
- 輸入自己的IP,只要顯示
Enabled
即可
使用 No-IP 免費DNS服務
註冊會員
點擊No-IP的註冊連結
- https://www.noip.com/sign-up
簡單註冊並輸入想使用的 DNS,記得點擊
Free Sign Up
,其他服務要收費
指定 VM 的 IP
- 收取驗證信後,去到後台的
My Services> Managed DNS
,編輯自己 DNS 所指向的 IP
- 編輯時,
點選DNS Hostname(A)
,並輸入自己在 GCP 上的 IP
就可以了
DEMO
- 瀏覽器輸入自己的 DNS
GCP SSL 配置
撰寫配置文件
- SSL 加密之中,有一個免費的服務叫
Let's Encrypt
,由於它派發的憑證每90天就要更新一次
,所以我們必須使用自動化的方式來自動更新憑證,那麼Certbot
就是我們所需要的。
/home/{user}/docker-compose.yml
1 | version: '3' |
- 把 Certbot 的註解還原
/home/{user}/nginx/conf/default.conf
1 | server { |
Cerbot 服務
- 下指令去讓 Certbot 安裝憑證
1 | # 先開啟NGINX服務,讓Certbot驗證 |
HTTP 301 跳轉 HTTPS
- 由於我們已經申請好憑證了,但是如果我們訪問
http://{DNS}
仍然會可以看到頁面,這時我們就需要自動幫使用者做跳轉
/home/{user}/nginx/conf/default.conf
1 | server { |
SSL DEMO
Cronjob
- 為了避免我們憑證過期,所以我們要在
使用 Scheduler
來定期更新憑證
1 | # 編輯 Scheduler |
參考資料
- GCP建置、免費額度
- https://hackmd.io/@JB-Lin/B1JEPsqIw
- https://www.taskinghouse.com/posts/google-cloud-platform-free-plan-after-trial/
- https://cloud.google.com/free/docs/free-cloud-features?hl=zh-tw#free-tier-usage-limits
- Debian 上安裝 Docker
- https://dockerdocs.cn/engine/install/debian/
- https://www.runoob.com/docker/debian-docker-install.html
- docker-compose.yml && SSL
- https://mindsers.blog/post/https-using-nginx-certbot-docker/
- https://ubiq.co/tech-blog/how-to-enable-nginx-gzip-compression/
- https://hackmd.io/@JB-Lin/B1JEPsqIw