為什麼要自己建立 Docker 伺服器呢
自從學會在 GCP 建立自己的 Wordpress 製作出個人網站之後,開始對於自己建立生活可以使用的城市與解決方案感到興趣,在目前對於 Hugo + Serverless 足夠熟悉之後,決定開始去碰自己一直以來一知半解的 Docker 伺服器。
最早是跟朋友在討論 Multi-wordpress 的 solution 時,接觸了 docker 以及 nginx 的,雖然成功的建立出單一 host 多 wordpress ,但當下對很多背後原理以及後續應用不熟悉,維護上又覺得效能堪憂,接著就還是了回頭路單一 Server 給一組 Wordpress,而在之後才接觸到 Serverless。而在經過這幾天的學習之後,總算靠著 Google 與 ChatGPT 完成了自己的 docker server,也陸續建了幾個自己常用的應用,希望透過這一系列文章,把自己的學習經驗記錄下來,多少是算是做個筆記的備份。
目前我常常使用到的網路服務,大多是想要用的時候會直接靠 Google 找到方案解決,例如 PDF 合併、拆解、壓縮,Youtube 影片轉 mp3(通常是為了採譜),或者有使用一些 SaaS 服務如 Notion、Cloudflare page 等等,雖然使用這基本還是滿方便開心,但終究有幾個隱憂與期望:
- 可能用一用就不見了,例如 youtube 下載方案
- 多數方案步驟冗長,或一堆廣告
- 資料被 Big Company 把持,例如 Notion 雖然近期有變快,但對於自己的筆記資料放別人家實在不想
當然心情上還有一個最重要的核心思想來自於 萬事不求人,自己把一個玩具建立起來的成就感,可以的話我還是希望自己能夠透明的掌握我所擁有的工具,而我目前的產業也與底層 k8s,容器技術相關,也是對自己在維運以及系統架構上能有更深一層的理解,不論是對我自己個人的技術知識成長,或者履歷上都是漂亮的(包含寫出這份 Blog)。
這一系列文章,預計會從以下幾個章節下手:
- 新手自建 Docker 伺服器 - (0) 簡介與架構說明
- 新手自建 Docker 伺服器 - (1) Ubuntu 主機建立 docker 服務
- 新手自建 Docker 伺服器 - (2) 建立 Nginx 代理伺服器
- 新手自建 Docker 伺服器 - (3) 建立應用,以靜態網頁為例
- 新手自建 Docker 伺服器 - (4) 建立 Joplin 筆記軟體
- 新手自建 Docker 伺服器 - (5) 建立自己的音樂串流服務 Navidrome
自建 Docker 伺服器 - (0) 簡介與架構說明
在一開始,先用比較 PM 的方式梳理整個計畫
User Story
我是 一個日常的使用者
我可以 建立起一個 Docker Server,並安裝各種 docker 應用
如此一來 當我有任何需求時,我可以放心安全的使用這些應用
Value
透過安全並且無負擔的個人 docker server,實現自我的軟體應用,不再依靠純粹的網路方案
前置需求
- 有一台 Linux 主機,並可以 SSH 連線(我是在 linode 上建立一台在 JP 的主機)
- 有一個可以使用的 domain(GoDaddy購買,Cloudflare 管理)
- 有可以終端連線的設備(我的 mac 電腦)
驗證目標
- 我能在 docker server 上,建立多個s docker 應用
- 我能經由 domain 使用這些 docker 應用,並且有 https 憑證
架構說明
以下為我所設計並完成的架構,給大家參考
@startuml left to right direction skinparam actorStyle awesome rectangle "Ubuntu" as ub { package Docker { usecase "Nginx" as ng note top of ng listen XXX Reverse to XXX.domain docker end note usecase "DockerA" as dka usecase "DockerB" as dkb } } note left of ub Create on Linode IP: 1.1.1.1 end note "User" as u u --> (Cloudflare) : XXX.domain note top of (Cloudflare) A Record: XXX.domain -> 1.1.1.1 end note (Cloudflare) --> ng ng --> dka : AAA.domain ng --> dkb : BBB.domain @enduml
- User(也就是我自己)會透過不同的 domain,例如 aaa.domain 或 bbb.domain 取用不同的 docker 應用
- 在 Cloudflare 上,每個 XXX.domain 都指向 Server 的 IP
- Nginx 負責在監聽到指定 XXX.domain 時,轉到對應的 docker 服務(另外有一個綁在一起的 Let’s Encrypt 憑證自動申請)
- 每一個 Docker 服務都透過格式一至的 docker-compose.yml 來建立,確保自己能掌握參數以及實作方式
好啦!這篇文章先到這裡,後續文章再慢慢把過程補充下來