新手自建 Docker 伺服器 - (0) 簡介與架構說明

整理我自建 docker server 的概念以及架構說明

為什麼要自己建立 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 等等,雖然使用這基本還是滿方便開心,但終究有幾個隱憂與期望:

  1. 可能用一用就不見了,例如 youtube 下載方案
  2. 多數方案步驟冗長,或一堆廣告
  3. 資料被 Big Company 把持,例如 Notion 雖然近期有變快,但對於自己的筆記資料放別人家實在不想

當然心情上還有一個最重要的核心思想來自於 萬事不求人,自己把一個玩具建立起來的成就感,可以的話我還是希望自己能夠透明的掌握我所擁有的工具,而我目前的產業也與底層 k8s,容器技術相關,也是對自己在維運以及系統架構上能有更深一層的理解,不論是對我自己個人的技術知識成長,或者履歷上都是漂亮的(包含寫出這份 Blog)。

這一系列文章,預計會從以下幾個章節下手:

  1. 新手自建 Docker 伺服器 - (0) 簡介與架構說明
  2. 新手自建 Docker 伺服器 - (1) Ubuntu 主機建立 docker 服務
  3. 新手自建 Docker 伺服器 - (2) 建立 Nginx 代理伺服器
  4. 新手自建 Docker 伺服器 - (3) 建立應用,以靜態網頁為例
  5. 新手自建 Docker 伺服器 - (4) 建立 Joplin 筆記軟體
  6. 新手自建 Docker 伺服器 - (5) 建立自己的音樂串流服務 Navidrome

自建 Docker 伺服器 - (0) 簡介與架構說明

在一開始,先用比較 PM 的方式梳理整個計畫

User Story

我是      一個日常的使用者
我可以    建立起一個 Docker Server,並安裝各種 docker 應用
如此一來  當我有任何需求時,我可以放心安全的使用這些應用

Value

透過安全並且無負擔的個人 docker server,實現自我的軟體應用,不再依靠純粹的網路方案

前置需求

  1. 有一台 Linux 主機,並可以 SSH 連線(我是在 linode 上建立一台在 JP 的主機)
  2. 有一個可以使用的 domain(GoDaddy購買,Cloudflare 管理)
  3. 有可以終端連線的設備(我的 mac 電腦)

驗證目標

  1. 我能在 docker server 上,建立多個s docker 應用
  2. 我能經由 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 來建立,確保自己能掌握參數以及實作方式

好啦!這篇文章先到這裡,後續文章再慢慢把過程補充下來

comments powered by Disqus