Mac mini m4 自架服務

Mar 05, 2025

買了一陣子的Mac mini M4,考量要跑ollama,所以買了 24GB,搭配256GB硬碟,覺得買到32Gb都快可以買兩台16GB有點太盤,所以放棄。

Docker

以前都用原廠Docker來跑,在Mac或PC真的會慢到哭出來,後來發現 OrbStack 好東西,他不只有 Docker容器,還可以閃電般的跑VM,有時候需要一個完整的ubuntu就非常好用,但K8s沒好好用過就先不說,個人用免費,另外有商業用的,用過就回不去 Docker Desktop了。

Screenshot 2025-03-05 at 10.28.44 PM.png

Caddy

就跟Nginx一樣的Web server角色,但不一樣的是非常簡單的設定,而且可以幫你自動註冊 Let's Encrypt,不用再另外裝cerbot,雖然會犧牲一點點效能,相比Nginx。但方便的設定擋與SSL真的是太香了。

我就放一下 Caddy的

docker-compose.yml

services: caddy: image: caddy:latest restart: unless-stopped ports: - "8000:80" - "4433:443" volumes: - $PWD/Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config networks: - caddy - host volumes: caddy_data: external: true caddy_config: networks: caddy: external: true host: driver: bridge

為何用 8000與 4433 port對外,為了避免常用port撞到,這兩個很重要,他在註冊SSL驗domain都會需要,另外我是在家裡用中華電信浮動IP的固定IP撥號(三小),所以會有實體的固定IP,可以在家裡的AirPort(AP)設定 port forward,好讓真實對外的port可以對應到家裡內網的IP與port

Screenshot 2025-03-05 at 10.38.20 PM.png

可以看到把 external port 對應 internal port

  • 80 -> 8000
  • 443 -> 4433 這樣就可以順利的導入內網

Caddyfile

這個是Caddy會的設定檔

webdav.yourdomain { reverse_proxy 10.0.0.45:5000 { flush_interval -1 } tls { protocols tls1.2 tls1.3 } } mail.yourdomain { reverse_proxy mailpit:8025 { flush_interval -1 } tls { protocols tls1.2 tls1.3 } }

內部IP

如果是內網的其他設備,可以直接寫IP與Port去做轉導

其他Docker

在同一台主機上跑的其他Docker,記得要用Docker name加上port,這樣才能順利轉導,這個也是卡最久的地方,後面會有其他docker-compose.yml的寫法,讓他們可以和Caddy在同一個network透過docker name來呼叫。

Service server (Docker)

這邊以 mailpit 開發email寄信必備的服務為例

docker-compose.yml

version: '2.4' services: mailpit: image: axllent/mailpit container_name: mailpit restart: unless-stopped volumes: - ./data:/data ports: - 8025:8025 - 1025:1025 environment: MP_MAX_MESSAGES: 5000 MP_DATABASE: /data/mailpit.db MP_SMTP_AUTH_ACCEPT_ANY: 1 MP_SMTP_AUTH_ALLOW_INSECURE: 1 MP_UI_AUTH: "user1:passwd1 user2:passwd2" networks: - caddy networks: caddy: external: true
  • 在services下要加上 networks caddy
  • networks 為caddy,記得要加 external: true

實際使用步驟

1. 增加需要的 docker-compose.yml

記得要設定

  • services底下的 networks
  • 最外層的 networks

2. 更改 Caddyfile

  • 設定之前別忘了到DNS先設定,不然茫茫人海,網址找不到IP。
  • 還有你家的AP port forward

可以把上面的範例抄一遍

new_service.yourdomain { reverse_proxy new_service:new_port { flush_interval -1 } tls { protocols tls1.2 tls1.3 } }

3.重新啟動 Caddy

docker compose down && docker compose up -d

這樣他就會去reload設定檔與註冊SSL

感想

真的勸敗一台,隨時可以搭建開發或是自己想用的服務,不要急著亂花錢去租虛擬主機

Ekman Hsieh

文字工作者,寫作時間常常在人類與電腦之間拉鋸,相信閱讀,相信文字與思想所構築的美麗境界