通过Docker安装Tiny RSS,mercury全文插件及mercury-parser-api;申请泛域名证书,安装nginx并配置ssl

最后更新:2022-04-27

Tiny Tiny RSSFreshRSS一样,是一个免费的RSS feed阅读器,它是一个必须安装在Web服务器上的Web应用程序。Docker安装FreshRSS参考这里

我的VPS 为Ubuntu 2020 X64

一、SSH 到你的主机,安装 Docker 环境
curl https://get.docker.com/ | sh
运行docker
systemctl start docker
安装 docker-compose命令
curl -L https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64  -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker容器日志文件很大,很容易导致主机磁盘空间满了,可以设置容器日志文件的大小(此步骤可选)。

新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:
{
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。
重启docker守护进程
systemctl daemon-reload
systemctl restart docker

二、安装Tiny Tiny RSS 容器镜像

     推荐安装此镜像: https://github.com/HenryQW/Awesome-TTRSS
     集成了以下插件:
  1. Mercury: 全文内容提取插件, 需要配合自建 Mercury Parser API, 镜像在此
  2. Fever: Fever API 模拟插件

通过 docker-compose 部署

创建一个新目录如 ~/tinyrss 并进入该目录,新建 docker-compose.yml,参考此处,下面是我的。
version: "3"
services:
  service.rss:
    image: wangqiru/ttrss:latest
    container_name: ttrss
    ports:
      - 181:80
    environment:
      - SELF_URL_PATH=https://127.0.0.1:181/ # please change to your own domain
      - DB_PASS=ttrss # use the same password defined in `database.postgres`
      - PUID=1000
      - PGID=1000
    volumes:
      - feed-icons:/var/www/feed-icons/
    networks:
      - public_access
      - service_only
      - database_only
    stdin_open: true
    tty: true
    restart: always


  database.postgres:
    image: postgres:13-alpine
    container_name: postgres
    environment:
      - POSTGRES_PASSWORD=ttrss # feel free to change the password
    volumes:
      - ./postgres/data/:/var/lib/postgresql/data # persist postgres data to /postgres/data/ on the host
    networks:
      - database_only
    restart: always

volumes:
  feed-icons:

networks:
  public_access: # Provide the access for ttrss UI
  service_only: # Provide the communication network between services only
    internal: true
  database_only: # Provide the communication between ttrss and database only
    internal: true

说明:docker-compose.yml 包含了 ttrss 与 postgres 镜像 1、运行以下命令后等待部署完成。
docker-compose up -d
2、默认通过 181 端口访问 ttrss,默认账户: admin 密码: password,请第一时间更改。
3、当使用域名加密访问时,docker-compose.yml文件里的SELF_URL_PATH为 http://127.0.0.1:181/, 但套了CloudfFlare CDN时需设为 https://127.0.0.1:181/,不知什么原因,多次尝试后知道的。
三、安装Mercury Parser API
docker run -p 3000:3000 -d --restart=always  wangqiru/mercury-parser-api
访问  http://你的的VPS的IP:3000。出现如下结果就安装OK.



至此tiny rss安装完成,登录ttrss进行设置,最主要的是以下几项。

(1)设置里启用API


(2)插件里启用 fever 及mercury_fulltext 插件



(3)feeds里设置前述3安装的Mercury Parser API网址


其他的可以根据自己情况设置。
完成上述准备工作后,就可以针对特定的订阅源启用全文输出了。方法是:在订阅源管理中,点击需要获取全文的订阅源,在弹出的 Edit Feed 对话框中,勾选 Plugins 选项卡中的 Get fulltext via Mercury Parser。

  另外一种获取全文的方式是使用morss,安装部署参考这里第二点,效果看这里

四、重度RSS用户,RSSHub不可不用: https://github.com/DIYgod/RSSHub
   RSSHub 是一个轻量、易于扩展的 RSS 生成器, 可以给任何奇奇怪怪的内容生成 RSS 订阅源 。国外也有相类似的应用RSS-Bridge,二者相互补充。如RSS-Bridge可以将national geographic网站的内容生成RSS,而RSSHub目前还不能。参考这里
输入以下命令部署:
docker run -d --restart=always  --name rsshub -p 1200:1200 diygod/rsshub
访问  http://你的的VPS的IP:1200。出现如下结果就安装OK
使用时只需将公共路由列表中的API换成上面的IP或你的域名,如将https://rsshub.app/api/routes/bilibili 换成https://你的IP/api/routes/bilibili 即可使用。公共的也可用,但人太多了,效果不能保证。

说明:记得在防火墙将相关端口放行,如:
sudo ufw enable 
sudo ufw allow 22
检查防火墙状态
sudo ufw status
    至此tiny rss已经安装完成,完全可以满足日常使用了。但还有两点不足,一是访问的时候要加上端口,二是网站没有加密,你看的什么内容,老大哥都知道。所以接下来,通过安装nginx,配置反向代理;申请Let's Encrypt证书,在nginx里配置SSL,实现网站全部加密访问。

五、通过安装acme.ch从 let's encrypt 生成免费证书

  通过acme.ch方式申请证书。首先安装acme.ch( 安装目录:~/.acme.sh/)。参考此处。
curl  https://get.acme.sh | sh
创建 一个 bash 的 alias, 方便使用:
alias acme.sh=~/.acme.sh/acme.sh
以下使用DNS API方式申请泛域名证书(这种方式的好处是, 不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证,并可自动更新证书)。现在主流的域名提供商都支持DNS API,如cloudflare等。若自己的域名提供商不支持的话,可以把域名提供商提供的 Namesever 修改为 Cloudflare 所提供的Namesevers地址,就可以使用clouddflare提供的API了

获取Cloudflare API 令牌,在cloudflare域名管理首页(右下角)获取 API 密钥-"Get your API token"-"API Tokens"-"API Keys"-"Global API Key"-"view"

设置 Cloudflare API 令牌,将下面的key换成你的,email换成cloudflare的登录email
export CF_Key="xyffe1f9edb9d7e41cc8b336a8373e25a810z"
export CF_Email="xyz@gmail.com"
选择安装证书的类型:由于acme.sh将默认安装的证书类型从letsencrypt换成了zerossl,想要继续使用 letsencryp 证书,有两种解决方案。
第一种是签发证书时指定 CA
acme.sh  --issue --dns dns_cf -d mydomain.com  --server  letsencrypt
另一种是直接更改默认 CA,本博文使用这种方式。
acme.sh --set-default-ca  --server  letsencrypt
如果设置了默认的 CA,以后就算版本升级也将一直默认使用指定的 CA。

验证 DNS 并申请证书(以下参数带有 ec 或ecc表示生成的是 ECC 证书,没有则是 RSA 证书。在安全性上 256 位的 ECC 证书等同于 3072 位的RSA 证书。)
acme.sh --issue --dns dns_cf -d mydomain.com -d *.mydomain.com -k ec-256
证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方
mkdir -p /root/cert
acme.sh --installcert -d mydomain.com --key-file /root/cert/private.key --fullchain-file /root/cert/cert.crt --ecc
查看已经安装的证书、申请日期、更新日期等
acme.sh --list
撤销证书
acme.sh --revoke -d mydomain.com --ecc
删除证书
acme.sh --remove -d mydomain.com --ecc
强制更新所有证书
acme.sh --renew-all --force
自动更新acme程序
acme.sh --upgrade --auto-upgrade
   
六、安装并配置nginx
 
    1、安装nginx并加入开机启动。若想自行编译,参考这里
apt install nginx -y
systemctl  start  nginx 
systemctl enable nginx
    2、配置nginx

       编辑配置文件vi /etc/nginx/nginx.conf

       为确保二级子域名可用,首先在域名提供商或cloudflare网站添加A记录
#user www-data;
worker_processes 1;
error_log  logs/error.log;
pid  logs/nginx.pid;
events {
    worker_connections  2048;
}
http {
    server_tokens off;
    include       mime.types;
    default_type  application/octet-stream;
    access_log off;
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay on;
    keepalive_timeout  65;
    gzip  on;
    client_max_body_size 10m;
    client_body_buffer_size 128k;

 server {
        listen       80 default_server;
        server_name  mydomain.com;
        root         /usr/share/nginx/html;

        location / {
                   return 301 https://$server_name$request_uri;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
}
server
 {
        listen   443 ssl;
        server_name  mydomain.com;
     
        ssl_certificate      /root/cert/cert.crt;
        ssl_certificate_key  /root/cert/private.key;
     
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers on;
        location / {   
     
          proxy_pass http://127.0.0.1:181;
           }
 }
 
 server
 {
        listen   443 ssl;
        server_name  api.mydomain.com;
     
        ssl_certificate      /root/cert/cert.crt;
        ssl_certificate_key  /root/cert/private.key;
     
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers on;
        location / {   
     
          proxy_pass http://127.0.0.1:3000;
           }
 }
server
 {
        listen   443 ssl;
        server_name  hub.mydomain.com;
     
        ssl_certificate      /root/cert/cert.crt;
        ssl_certificate_key  /root/cert/private.key;
     
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers on;
        location / {   
     
          proxy_pass http://127.0.0.1:1200;
           }
 }
 
}
运行以下命令测试配置文件是否正确:
/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
重启nginx加载新的配置文件:
/usr/sbin/nginx -s reload
浏览器输入https://mydomain.com应该可以正常访问了。

Docker安装部署FreshRSS和RSS-Bridge搭配使用参考这里


评论

Popular Posts

在VPS上轻松搭建L2TP/IPSec图文教程(通吃各种架构的VPS,包括KVM,OpenVZ等)

V2Ray安装配置VMESS+TLS及VMESS+TLS+WS

群晖NAS安装配置openwrt软路由