Docker 快速搭建 Miniflux + RSSHub

最近裡面熱鬧許多,有些原因是不少人都開到終身免費的 Oracle Cloud 虛擬機

開始想著在虛擬機裡面安裝各種應用,像是之前說到的 Outline,還有皮樂大大寫的 v2ray + MTProxy

今天來講講 RSS 閱讀器的搭建,之前有介紹過 Miniflux安裝,不過搭建起來比較麻煩

對於新手來說步驟有點多,安裝過程只要有一個步驟錯誤就常常不知所措

所以還是來個 Docker 快速版本吧,也順便把超好用萬物皆可 RSS 化的 RSSHub 一起打包進去~

Docker Community 穩定版安裝

首先 SSH 連到伺服器裡面,先從安裝 Docker 跟所需軟體開始

1
2
3
4
# 先完整更新一下系統
$ sudo apt update && sudo apt full-upgrade -y
# 安裝一下等下會需要用到的軟體
$ sudo apt install nano curl wget libcap2-bin -y

接下來使用官方 Get Docker 自動安裝的腳本

1
$ curl -fsSL https://get.docker.com/ | sh

以上一條指令輸入完,稍等片刻就自動完成 Docker 安裝

安裝完 Docker 以後,我們設定一下 Docker 權限,將自己帳號新增到 Docker 群組裡面

1
2
3
4
# 將你帳號加入 docker 群組
$ sudo usermod -aG docker $USER
# 退出
$ exit

完成以後,再登入回去機器中即可生效(有些機器可能要重開機才會生效)

1
2
# 驗證
$ docker version

如果正確設定好權限,以上指令輸入後應該能同時看見 Client 跟 Server 資訊(如下)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
Client: Docker Engine - Community
 Version:           19.03.7
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        7141c199a2
 Built:             Wed Mar  4 01:22:41 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.7
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       7141c199a2
  Built:            Wed Mar  4 01:21:15 2020
  OS/Arch:          linux/amd64
  Experimental:     false
1
2
# 最後安裝 docker-compose
$ sudo apt install docker-compose

安裝 Miniflux + RSSHub

這部分我們開始來安裝 Miniflux + RSSHub,我把這兩個服務寫在一個 docker compose 檔案裡面

只要拷貝貼上馬上就能跑起來

1
2
3
4
# 先新增一個 Miniflux 的目錄
$ mkdir ~/miniflux && cd ~/miniflux
# 新建一個設定檔
$ nano docker-compose.yml

拷貝以下全部內容,然後貼上保存

 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
version: "3"

services:

   miniflux:
     image: miniflux/miniflux:latest
     container_name: miniflux
     restart: unless-stopped
     ports:
       - "8888:8080"
     depends_on:
       - db
       - rsshub
     environment:
       - DATABASE_URL=postgres://miniflux:[email protected]/miniflux?sslmode=disable
       - POLLING_FREQUENCY=15
       - RUN_MIGRATIONS=1

   db:
     image: postgres:latest
     container_name: postgres
     restart: unless-stopped
     environment:
       - POSTGRES_USER=miniflux
       - POSTGRES_PASSWORD=somepass888
     volumes:
       - miniflux-db:/var/lib/postgresql/data

   rsshub:
     image: diygod/rsshub:latest
     container_name: rsshub
     restart: unless-stopped
     ports:
       - "1200:1200"
     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:latest
     container_name: browserless
     restart: unless-stopped

   redis:
     image: redis:alpine
     container_name: redis
     restart: unless-stopped
     volumes:
       - redis-data:/data

volumes:
  miniflux-db:
  redis-data:

接著一行指令即可啓動所有服務

1
$ docker-compose up -d

以上指令輸入完畢,就會看到 docker 開始部屬,視網路以及機器效能,等待幾分鐘全部完畢後

還需要下面兩條指令初始化 Miniflux 資料庫

1
2
3
4
# 下面這條指令在日後 Miniflux 大版本升級時候有可能也會用到
$ docker-compose exec miniflux /usr/bin/miniflux -migrate
# 下面這條在新增管理員帳號跟密碼,等下要登入 Miniflux 管理後台用的
$ docker-compose exec miniflux /usr/bin/miniflux -create-admin

完成以上指令就完成全部安裝,只要打開瀏覽器輸入伺服器 IP 加上端口 8888 即可進入 Miniflux 網頁

https://www.jkg.tw/media/2020/03/CleanShot-2020-03-06-at-11.12.55-20200317181631596.png

👆 Miniflux 登入畫面

Miniflux 真的輕巧,登入畫面極度簡約,只有帳號、密碼以及 Login 按鈕,連個 logo 都沒有 👍

Miniflux 的設定就不用多說了,就算看不懂英文,軟體也有內建簡體中文

RSSHub 的使用

這裡簡單介紹一下 RSSHub 使用方法,官網上面有列出非常多「原本不支援或者支援不夠好」的 RSS 列表

例如 Facebook 的粉絲專頁、或者是某人的 Instagram、Twitter 帳號,也可以拿來訂閱 Dcard 熱門文章之類的

通通可以透過 RSSHub 轉換 RSS 後來訂閱更新通知,非常非常的實用!

如果在官網搜尋發現目前沒有支援你想要的網站,你也可以到這邊發個 RSS Request

說不定哪天他們更新就加入了呢? 😉

先到官網上面搜一下看看你想要 RSS 化的網址,例如 Facebook 粉絲專頁

https://www.jkg.tw/media/2020/03/CleanShot-2020-03-06-at-11.55.02.png

👆 點「Facebook 粉絲專頁」

進入後會跳出關於 Facebook 粉絲專頁的路由寫法

https://www.jkg.tw/media/2020/03/CleanShot-2020-03-06-at-12.44.53.png

如上圖,這裡搜出來後會有兩個重要的資料,一個是路由寫法,另外一個是參數

以下使用「源源鋼藝」在臉書上面的粉絲專頁作為示範

https://www.jkg.tw/media/2020/03/CleanShot-2020-03-06-at-12.27.52.png

如上圖,稍微看一下就能明白路由與參數寫法規則,最終得出我們自建 RSSHub 訂閱源源鋼藝粉專的網址

1
http://rsshub:1200/facebook/page/uanuan.cc/

最後我們回到 Miniflux 網頁,把以上那串網址貼到自架的 Miniflux 訂閱按下去即可

https://www.jkg.tw/media/2020/03/CleanShot-2020-03-06-at-13.41.44.png

成功訂閱之後顯示的效果:

https://www.jkg.tw/media/2020/03/CleanShot-2020-03-06-at-13.43.06.png

RSSHub 把臉書的內文也成功爬出來了,完美~

https://www.jkg.tw/media/2020/03/CleanShot-2020-03-06-at-13.44.07.png

在 macOS 上面的 Reeder 客戶端也是完美~

https://www.jkg.tw/media/2020/03/CleanShot-2020-03-05-at-15.11.59.png

所以如果你有網站想要加到你 RSS 訂閱,但該網站卻沒有提供 RSS 訂閱網址時候

你就可以到 RSSHub 官網上面查查看有無支援的路由,他們社群更新維護的非常勤勞

有問題也可以用中文回報,溝通起來輕鬆沒有問題

同場加映:Caddy 反向代理 + 免費 SSL 憑證全自動申請

如果是搭在區域網內沒有外出使用的需求,那麼上面做法已經足夠

但如果你是搭在租的 VPS 或者是有外出使用的需求,建議就要繼續下面的操作了

首先你會需要有一個固定 IP 以及自己的域名(域名可以參考以前 nctu.me 免費域名註冊)

先把想要的子域名綁在該台機器的固定 IP 上以後,我們就可以繼續往下操作

通常情況我們會在同一台伺服器上安裝多種服務,所以我們需要使用反向代理在前端做引導分流

使用不同域名指到內部不同服務,例如:

今天搭的 Miniflux,我們可以設個子域名為 rss rss.example.com -> 127.0.0.1:8888

同樣機器上另外搭的 AdGuard Home,可以設個子域名為 ag ag.example.com -> 127.0.0.1:3000

另外還搭了個人部落格的話,可以設個子域名為 blog blog.example.com -> 127.0.0.1:6599

跟 Miniflux 同樣使用 Go 語言寫的 Caddy 就非常適合這個工作,簡單幾行設定檔即可立刻啓動

比以前用 Nginx 的複雜設定簡單非常多,而且還自帶 Let’s Encrypt SSL 憑證申請與自動續期

想要了解更詳細的可以去官網看說明書

Caddy 是使用 Go 語言寫的,所以你可以把所有原始碼下載下來自己編譯,也可以直接使用官方編譯好的執行檔

直接到官方編譯好的執行檔下載: https://github.com/caddyserver/caddy/releases

下載請根據自己平台對應的執行檔,底下操作使用的是 linux amd64

1
2
3
4
5
6
# 下載編譯好的 Caddy 執行檔
$ wget https://github.com/caddyserver/caddy/releases/download/v2.0.0-beta.15/caddy2_beta15_linux_amd64
# 賦予執行和設定低端口綁定的權限
$ chmod +x caddy2_beta15_linux_amd64 && sudo setcap cap_net_bind_service=+ep caddy2_beta15_linux_amd64
# 把執行檔放到系統資料夾並改名
$ sudo mv caddy2_beta15_linux_amd64 /usr/local/bin/caddy

開始寫一個 Caddy Server 的設定檔

1
$ sudo mkdir /etc/caddy && sudo nano /etc/caddy/Caddyfile

拷貝以下內容貼上(注意:以下的第一行域名部分請修改為你自己的域名)

1
2
3
4
https://rss.example.com {
    encode zstd gzip
    reverse_proxy 127.0.0.1:8888
}

Caddy 設定檔就是這麼簡單,四行搞定,啓動後 Caddy 會自動去 LE 申請 SSL 憑證並自動維護續期

瞬間搭一個 https 的反向代理或者網頁伺服器再也沒這麼簡單過~

下面我們要開防火牆,把 http 80 跟 https 443 打開(80 是申請 SSL 憑證時會用到的)

1
2
3
4
$ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# 下面這行,開機後會自動載入本機目前設定的防火牆規則
$ sudo apt install iptables-persistent

打開機器的防火牆後,如果機器是託管在 GCP 或者 Oracle 之類的也不要忘記到網站開啟防火牆規則

確認防火牆 80、443 端口都打開後,我們先跑看看 Caddy 有無問題,執行下面指令

1
$ sudo caddy run --config /etc/caddy/Caddyfile

接著會看到一連串啓動 INFO,第一次啓動的話可能需要點時間(Caddy 需要去申請驗證 SSL 憑證)

稍等幾十秒到一、兩分鐘,會看見驗證通過並且開始啟用憑證時,可以打開瀏覽器,輸入自己的網址

https://rss.example.com/

正常的話就會看見你搭建的 Miniflux 登入頁面,接著我們回到終端機,按下鍵盤 Ctr + C 中斷 Caddy 執行

我們接下來要設定讓系統每次重開機都自動啓動 Caddy 伺服器

1
2
# 製作開機自動啓動服務檔
$ sudo nano /etc/systemd/system/caddy.service

拷貝以下全部內容,並直接貼上保存退出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[Unit]
Description=Caddy Server
After=syslog.target
After=network.target

[Service]
User=root
Group=root
LimitNOFILE=64000
ExecStart=/usr/local/bin/caddy run --config /etc/caddy/Caddyfile
Restart=always

[Install]
WantedBy=multi-user.target

接著輸入以下指令啟用 Caddy Service

1
2
3
$ sudo systemctl daemon-reload
$ sudo systemctl enable caddy.service
$ sudo systemctl start caddy.service

以上全部設定完畢後,即可安全的使用你的專屬域名打開你專屬的 RSS 閱讀器

我個人還蠻喜歡使用 Docker 玩新東西的,隨便怎麼亂裝亂玩都沒關係,實驗完畢後簡單一個指令就刪光光

系統還是維持乾淨狀態,而且搬家遷移速度也很快,短短幾分鐘內就能搞定 😍