前一篇文章我們解決了如何將外部流量導到我們架設的主機了,接下來我想來介紹第一個服務 uptime-kuma,連結如下
https://github.com/louislam/uptime-kuma
會選擇這個服務作為第一個介紹的服務的原因如下
雖然說這個服務可能沒辦法像Prometheus+Grafana一樣,拉出很多有用的圖表,並且設定一些比較特别的指標,但由於自架系統通常規模會比較小,初步架設最常使用的不外乎就是系統是否正常運行並通報,而uptime-kuma則可以很簡單且快速的完成這些基本需求
這是他官網的說明
https://github.com/louislam/uptime-kuma/wiki
我們可以看到他github寫的docker-compose.yaml內的內容(2025/10/05)
https://github.com/louislam/uptime-kuma/blob/1.23.X/docker/docker-compose.yml
version: '3.3'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
volumes:
- ./uptime-kuma-data:/app/data
ports:
- 3001:3001 # <Host Port>:<Container Port>
restart: always
如果我們要使用這個服務,最直接的就是需要連到他的網頁,所以我們要先來看他的ports欄位,裡面出現了3001,3001看起來應該就是他的服務的port,在專案中的Dockerfile中也有寫上EXPOSE 3001
這個標示,所以我們可以先猜測他的服務是開在port 3001
緊接著就直接啟動他就好,並進到 http://localhost:3001 就可以看到設定畫面了
接下來,我們要改一下上方的docker-compose.yaml,把上面定義好的service跟cloudflared tunnel放到同一個網路環境
version: '3.3'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
networkds: ["cloudflared_tunnel"]
volumes:
- ./uptime-kuma-data:/app/data
# ports:
# - 3001:3001 # <Host Port>:<Container Port>
restart: always
networks:
cloudflared_tunnel:
name: cloudflared_tunnel
external: true
接著我們就可以到cloudflared tunnel那邊再加一個你需要的domain name,並且把服務內部的網址改成http://uptime-kuma:3001
,如此一來,就可以順利讓你的服務加上domain了
而因為現在服務可以透過cloudflared tunnel來存取了,所以其實也不用佔據你電腦的port 3001,所以可以先暫時註解掉,如果有需要可以再把註解打開
https://github.com/louislam/uptime-kuma/wiki/How-to-Monitor-Docker-Containers
他這邊設計的原理是將你的服務的docker.sock掛載到container裡面,這樣就可以讓uptime-kuma能夠碰到你原生機器的docker的服務,所以就可以做到類似你一般在下docker ps
的效果,如果套用到上面的設定檔就會長這樣
version: '3.3'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
networkds: ["cloudflared_tunnel"]
volumes:
- ./uptime-kuma-data:/app/data
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 3001:3001 # <Host Port>:<Container Port>
restart: always
networks:
cloudflared_tunnel:
name: cloudflared_tunnel
external: true
記得改完設定要記得檔案存檔並且重啟docker compose,你的改變才會被順利apply喔
在未來我相信你一定還會裝上各式各樣的服務,而我在這邊分享一下我是怎麼管理這些專案的
由於是自架服務,我目前還沒有接上各種的cicd跟自動化,目前我是直接開一個資料夾,然後把要管理的服務一個資料夾一個服務,裡面都有各自的docker-compose.yaml,並且各自下docker compose up -d
來管理,而服務之間的流量導傳則是透過先建立一個external的network,這樣服務跟服務之間就可以連到彼此
server
├── cloudflared-tunnel
│ └── docker-compose.yaml
└── uptime-kuma
└── docker-compose.yaml