--- title: 用 Docker 自幹 RSS Reader ? tags: 自學文件, VPS, Docker --- 自幹 RSS Reader 服務嗎? [TOC] ## 架構規劃 (2020/08/11) :::info 原本有的用 _斜體_ 表示,新增的用 **粗體** 表示 已經關閉的就劃刪除線 ::: :::danger 這是我的 VPS 目前的樣子,不是你的R ::: - _原有的 Apache Server_ - _WordPress Blog_ - _Polr ShortUrl_ - ~~NextCloud~~ - **Reverse Proxy** - **Docker Compose** - **Miniflux ( 主要對外 )** - **PostgreSQL ( Miniflux 需要 )** - **RSSHub ( 躲在 Compose 裡面,能與 Miniflux 連上線就好 )** - **browserless ( 爬蟲 )** - **Redis ( 資料庫快取 )** _系統環境 : Debian 10.5_ :::danger :no_entry: **警告** 雖然說 Ubuntu 同樣基於 Debian 上,但是 Debian 比起 Ubuntu 不方便許多 光是 /sbin 底下的路徑不知道為啥近期的版本 ( 10.4,10.5待確認,這應該是 bug ) 都沒有 PATH 到,真奇怪 :/ 建議入門先玩 Ubuntu ::: :::warning :warning: 注意 以下內容以 Debian 環境為主 ::: ## 安裝 Docker 與 Compose ### Docker 本體 #### 必要驗證 ```bash= ## 安裝驗證軟體包用的必要軟體 sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common ## 匯入 Doceker 官方的 GPG Key ## 驗證用 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - ## 測試一下是否可以驗證 sudo apt-key fingerprint 0EBFCD88 ``` :::info 如果驗證成功,應該會跑以下訊息: ```bash= pub 4096R/0EBFCD88 2017-02-22 Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid Docker Release (CE deb) <docker@docker.com> sub 4096R/F273FCD8 2017-02-22 ``` ::: #### 新增軟體來源以及安裝 ```bash= ## 新增 Docker 官方來源 sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable" ## 安裝 Docker sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io ``` 輸入 `docker` 有跑出東西就好 ### Docker Compose ```bash= sudo apt install docker-compose ``` ## 撰寫 Docker Compose 以及設定 Docker ### 設定 Docker #### 設定永久 Volumes ```bash= ## Radis 存放 sudo docker volume create redis-data ## PostgreSQL 資料庫存放 sudo docker volume create miniflux-db ## 確認一下有沒有設定好 sudo docker volume ls ``` #### 設定永久 Networks ```bash= ## 新增 Networks 讓容器內的應用互通 ## 也是為了未來擴充性考量 ## -d bridge 可以不用加,預設就是 bridge sudo docker network create -d bridge rss-out ## 看一下是否有新增好了 suod docker network ls ``` ### 開始撰寫 `docker-compose.yml` ```yaml= version: '3' services: rsshub: image: diygod/rsshub restart: always environment: NODE_ENV: production CACHE_TYPE: redis REDIS_URL: 'redis://redis:6379/' PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000' depends_on: - redis - browserless networks: - rss miniflux: image: miniflux/miniflux:latest ## 這邊可以改對外,可以改成 80 以外的數字 ## 也一定要改,不然 Apache Proxy 會有問題 ports: - "80:8080" depends_on: - db environment: - DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable # 這邊對應 db 的環境變數修改 - RUN_MIGRATIONS=1 # 初次使用需要以下三個,否則無法使用 - CREATE_ADMIN=1 - ADMIN_USERNAME=admin - ADMIN_PASSWORD=test123 networks: - rss db: image: postgres:latest environment: - POSTGRES_USER=miniflux # 資料庫帳號,改好記得改上面 - POSTGRES_PASSWORD=secret # 資料庫密碼,改好記得改上面 - POSTGRES_DB=miniflux volumes: - miniflux-db:/var/lib/postgresql/data networks: - rss browserless: image: browserless/chrome restart: always networks: - rss redis: image: redis:alpine restart: always volumes: - redis-data:/data networks: - rss volumes: redis-data: external: true miniflux-db: external: true networks: rss: external: name: rss-out ``` ## 設定 Apache Reverse Proxy ### 啟用模組 ```bash= ## 基本上要啟用這些 sudo a2enmod mod_proxy proxy_http ## 如果你要 HTTP/2 的話下面這個也要啟用 sudo a2enmod proxy_http2 ## 記得重啟 Apache sudo systemctl restart apache2 ``` ### Virtual Host 設定檔 類似這樣: ```xml= ## rss-proxy.conf <VirtualHost *:80> ServerName rss.nesquate.tw ProxyRequests off # 不關掉會被別人當 Proxy ServerAdmin webmaster@localhost ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Proxy *> Order allow,deny Allow from all </Proxy> ProxyPass / http://127.0.0.1:4000/ ProxyPassReverse / http://127.0.0.1:4000/ ProxyPreserveHost on </VirtualHost> ``` 之後下指令: ```bash= ## 啟用該 Virtual Host sudo a2ensite rss-proxy.conf ## 重啟 Apache sudo systemctl restart apache2 ``` ## 初始化 Miniflux 1. 第一次 `sudo docker-compose up -d` - 初始化資料庫,此時 Miniflux 無法使用 3. 第一次 `sudo docker-compose down` 4. 第二次 `sudo docker-compose up -d` - 初始化 Miniflux ,建立管理員帳號 6. 初始化後,移除 `docker-compose.yml` 內的 `CREATE_ADMIN` 、 `ADMIN_USERNAME` 與 `ADMIN_PASSWORD` - 安全考量 8. 第三次 `sudo docker-compose up -d` - 設定完成 ## 額外設定 - SSL 參考 [Polr Setup 當中的 SSL 設定環節](https://hackmd.io/@nesquate/setup-polr#%E5%AE%89%E8%A3%9D-SSL-%E8%AD%89%E6%9B%B8-%E8%B7%91-HTTPS-%E8%A6%81%E7%94%A8%E5%88%B0) ## 如何填寫 RSS 地址 參考 [這裡](https://docs.rsshub.app/usage.html#sheng-cheng-ding-yue-yuan) 只是 _rsshub.app_ 要變成 _rsshub:1200_ 這樣 ## 連結蒐集 ### Apache Reverse Proxy - [[Apache] 反向代理設定 Reverse Proxy](https://richarlin.tw/blog/apache_reverse_proxy/) - [Apache Reverse Proxy 實作](https://medium.com/@jhihwei.su/apache-reverse-proxy-%E5%AF%A6%E4%BD%9C-8d863b222ad7) ### Miniflux - [ miniflux / miniflux ](https://github.com/miniflux/miniflux) - [Installation Instructions # Docker](https://miniflux.app/docs/installation.html#docker) - [RSS 不能亡!自己架一台 RSS Reader 吧!「Miniflux」](https://www.jkg.tw/p1939/) ### RSSHub - [ DIYgod / RSSHub ](https://github.com/DIYgod/RSSHub) - [部署 # Docker Compose 部署](https://docs.rsshub.app/install/#docker-compose-bu-shu) ### Docker - [Install Docker Engine on Debian](https://docs.docker.com/engine/install/debian/) - [Docker 快速搭建 Miniflux + RSSHub](https://www.jkg.tw/p3246/)