買了一陣子的Mac mini M4,考量要跑ollama,所以買了 24GB,搭配256GB硬碟,覺得買到32Gb都快可以買兩台16GB有點太盤,所以放棄。
Docker
以前都用原廠Docker來跑,在Mac或PC真的會慢到哭出來,後來發現 OrbStack 好東西,他不只有 Docker容器,還可以閃電般的跑VM,有時候需要一個完整的ubuntu就非常好用,但K8s沒好好用過就先不說,個人用免費,另外有商業用的,用過就回不去 Docker Desktop了。
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
可以看到把 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
感想
真的勸敗一台,隨時可以搭建開發或是自己想用的服務,不要急著亂花錢去租虛擬主機
文字工作者,寫作時間常常在人類與電腦之間拉鋸,相信閱讀,相信文字與思想所構築的美麗境界