Docker 真的是一個越用越上癮的應用,目前我在效能可以勝任的時候都會盡量 Docker 化
隨便亂搞一通,壞掉了就刪掉,重新再啓動一個容器又能繼續玩~
不會因為手賤搞砸了某東西就影響到整台機器的系統,備份跟搬家也是輕輕鬆鬆~
上次介紹的 Minflux + RSSHub 與 Caddy 反向代理搭配,可以很快搭出一套屬於你自己的 RSS 閱讀器
今天來介紹另外一種也是很夯的反向代理與負載平衡服務「Traefik」,特點是 Go 語言與 Docker 深度結合
這篇就來搭配使用搭建另外一套開源的 FreshRSS 閱讀器吧!
他就像一個交通警察在路口指揮交通~
如果你跑許多應用跟服務,Traefik 可以輕鬆的幫你管理網路應該怎麼走不塞車
而且 Traefik 可以做到類似熱插拔的功能,不需要關閉甚至重新啟動任何服務
只要新增新服務時候貼上對應標籤,Traefik 會自動接管並啓動,完全不影響內部其他服務
Traefik 設定與啓動#
廢話不多說,在裝好 Docker 環境以後,我們就可以開始設定 Traefik
# 先在 Docker 內部建立一個專屬網路
$ docker network create reverse-proxy
接著建立安裝會需要用到的資料夾與 docker-compose 設定檔
# traefik 會放 docker-compose, certs 會放自動申請的 SSL 憑證
$ mkdir ~/traefik && mkdir ~/traefik/certs && cd ~/traefik
$ nano docker-compose.yml
拷貝以下內容,貼上後需要修改 16、25 行的 email 跟 volumes 的 certs 路徑,其他可以不用動,保存然後退出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| version: '3.3'
services:
traefik:
image: traefik
container_name: traefik
restart: always
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.httpchallenge=true"
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
- "[email protected]"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
- "8080:8080"
networks:
- reverse-proxy
volumes:
- "/修改/路徑/traefik/certs:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
reverse-proxy:
external: true
|
接著就直接啓動
$ sudo docker-compose up -d
啓動後打開瀏覽器 IP:8080 就能看到 Traefik 管理後台
Traefik 啓動之後就可以暫時先不用管他了~
我們只要在後面新建服務時候加上 labes 標籤,Traefik 自動偵測就會接管並自動生效
所以我們下面開始準備 FreshRSS 的 docker compose 檔案設定
$ mkdir ~/freshrss && cd ~/freshrss
$ nano docker-compose.yml
拷貝以下內容,需要修改 34 行的 rss.example.com 為你的域名,保存退出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
| version: "3"
services:
freshrss_postgresql:
image: postgres
restart: unless-stopped
networks:
- reverse-proxy
volumes:
- pgsql-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=freshrss
- POSTGRES_PASSWORD=somepass9438
- POSTGRES_DB=frssdb
freshrss:
image: freshrss/freshrss
restart: unless-stopped
networks:
- reverse-proxy
depends_on:
- freshrss_postgresql
- rsshub
volumes:
- freshrss-data:/var/www/FreshRSS/data
environment:
- CRON_MIN=20,50
- TZ=Asia/Taipei
labels:
- "traefik.enable=true"
- "traefik.port=80"
- "traefik.frontend.headers.forceSTSHeader=true"
- "traefik.frontend.headers.STSSeconds=31536000"
- "traefik.http.routers.whoami.rule=Host(`rss.example.com`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls.certresolver=myresolver"
rsshub:
image: diygod/rsshub
restart: unless-stopped
networks:
- reverse-proxy
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: "redis://redis:6379/"
PUPPETEER_WS_ENDPOINT: "ws://browserless:3000"
depends_on:
- redis
- browserless
browserless:
image: browserless/chrome
restart: unless-stopped
networks:
- reverse-proxy
redis:
image: redis:alpine
restart: unless-stopped
networks:
- reverse-proxy
volumes:
- redis-data:/data
volumes:
freshrss-data:
pgsql-data:
redis-data:
networks:
reverse-proxy:
external: true
|
如上面設定,看到了嗎?只需要在你想要開端口出來的應用加上你需要讓 Traefik 接管的服務 labels
接著我們只要啓動這個 docker compose 以後,Traefik 就會自動偵測到然後開始工作囉!
友情提示:在正式啓動以前,記得先去打開本機的防火牆端口,80 跟 443 都要打開
以上指令輸入完畢後,第一次啓動需要一點時間,大約幾十秒到幾分鐘
因為 Traefik 正在幫你跟 Let’s Encrypt 申請 SSL 憑證跟驗證 SSL 憑證
稍等片刻後使用瀏覽器 https 打開你的網址即可連到你內部設定的 FreshRSS 80 端口囉!
更棒的是,Traefik 也跟 Caddy 一樣會幫你自動維護 SSL 憑證,無需再去煩惱三個月要過期的事情了~
最近在測試三種不同 RSS 自架服務,分別是 TTRSS、Miniflux 跟今天的 FreshRSS
TTRSS 開發活躍,外掛功能最多,但整體比較臃腫
Miniflux 開發不疾不徐,大約兩、三個月更新一次,總體簡約輕盈,基本功能都有,能滿足普通日常需求
FreshRSS 開發也是蠻活躍,功能跟外掛輸 TTRSS,但是數量多過 Miniflux
我三款都有測試過一段時間,FreshRSS 對於 RSS 寫法似乎要求很嚴格,某些網站如果輸出不是很標準
FreshRSS 會直接顯示 error,但是同樣的訂閱地址拿去 TTRSS 跟 Miniflux 卻沒問題
另外值得一提的是 Reeder 支援直接吃 FreshRSS 的 API,其他 TTRSS 跟 Miniflux 都需要啟用 Fever API 才行