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

最后更新:2020-09-21

我的VPS 为CentOS 7 X64

一、SSH 到你的主机,安装 Docker 环境:
curl https://get.docker.com/ | sh
运行docker
systemctl start docker
安装 docker-compose命令

最新版本际安装方法在此
curl -L https://github.com/docker/compose/releases/download/1.27.3/docker-compose-`uname -s`-`uname -m` -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/docker-ttrss-plugins
     集成了以下插件:
  1. Mercury: 全文内容提取插件, 需要配合自建 Mercury Parser API, 参见HenryQW/mercury-parser-api.
  2. Fever: Fever API 模拟插件.
  3. ttrss_opencc: 使用 OpenCC 为 ttrss 提供中文繁转简的插件. 插件设置中填写 OpenCC API 服务器地址. 

通过 docker-compose 部署

编辑docker-compose.yml文件,参考此处。下面是我的。
version: "3"
services:
  database.postgres:
    image: postgres:alpine
    container_name: postgres
    environment:
      - POSTGRES_PASSWORD=ttrss # please change the password
    volumes:
      - ~/postgres/data/:/var/lib/postgresql/data # persist postgres data to ~/postgres/data/ on the host
    restart: always

  service.rss:
    image: wangqiru/ttrss:latest
    container_name: ttrss
    ports:
      - 181:80
    environment:
      - SELF_URL_PATH=http://localhost:181/ # please change to your own domain
      - DB_HOST=database.postgres
      - DB_PORT=5432
      - DB_NAME=ttrss
      - DB_USER=postgres
      - DB_PASS=ttrss # please change the password
      - ENABLE_PLUGINS=auth_internal,fever # auth_internal is required. Plugins enabled here will be enabled for all users as system plugins
      - FEED_LOG_QUIET=true
    stdin_open: true
    tty: true
    restart: always
    command: sh -c 'sh /wait-for.sh $$DB_HOST:$$DB_PORT -- php /configure-db.php && exec s6-svscan /etc/s6/'
说明:docker-compose.yml 包含了 ttrss 与 postgres 镜像 1、运行以下命令后等待部署完成。
docker-compose up -d
2、默认通过 181 端口访问 ttrss,默认账户: admin 密码: password,请第一时间更改。 3、当使用域名加密访问时(默认端口443),docker-compose.yml文件里的SELF_URL_PATH参数设为 https://127.0.0.1:181/, 当使用自定义端口如444时,SELF_URL_PATH参数设为 http://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。

四、重度RSS用户,RSSHub不可不用: https://github.com/DIYgod/RSSHub
   RSSHub 是一个轻量、易于扩展的 RSS 生成器, 可以给任何奇奇怪怪的内容生成 RSS 订阅源 ,输入以下命令部署:
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 firewall-cmd --zone=public --add-port=3000/tcp --permanent
sudo firewall-cmd --reload
之后检查新的防火墙规则
firewall-cmd --list-all
    至此tiny rss已经安装完成,完全可以满足日常使用了。但还有两点不足,一是访问的时候要加上端口,二是网站没有加密,你看的什么内容,老大哥都知道。所以接下来,通过安装nginx,配置反向代理;申请Let's Encrypt证书,在nginx里配置SSL,实现网站全部加密访问。

五、(一)通过安装acme.ch从 let's encrypt 生成免费证书(推荐)
  
  首先安装acme.ch。参考此处
通过acme.ch方式申请证书。首先安装acme.ch( 安装目录:~/.acme.sh/)
curl  https://get.acme.sh | sh
创建 一个 bash 的 alias, 方便使用:
alias acme.sh=~/.acme.sh/acme.sh
执行以下命令生成证书:
以下的命令会临时监听 80 端口,请确保执行该命令前 防火墙已放行80 端口,且没有占用
acme.sh  --issue -d <mydomain>   --standalone
证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方
acme.sh  --installcert  -d  <mydomain>  \
        --key-file   /etc/nginx/ssl/<mydomain>.key \
        --fullchain-file /etc/nginx/ssl/fullchain.cer 
      (二)通过certbot申请通配符域名证书

       下载安装程序:
wget  https://dl.eff.org/certbot-auto
运行以下命令:
./certbot-auto certonly  -d *.mydomain.com --manual --preferred-challenges dns-01  --server https://acme-v02.api.letsencrypt.org/directory
        执行完上面的命令会有一些交互式的操作,按照提示一步一步完成即可。
        注意:执行过程中要求配置 DNS TXT 记录,从而校验域名所有权,按输出要求给 _acme-challenge.mydomain.com配置一条 TXT 记录,在没有确认TXT 记录生效之前不要回车执行。
      验证通过后会生成证书。证书保存在 /etc/letsencrypt/archive/mydomain.com 但是他会在 /etc/letsencrypt/live/mydomain.com 中创建证书的软链接,推荐使用 live 中的,因为它会自动将最新的版本链接到 live 中。
     通配符的域名就已经申请完成,不过需要注意,此时只可以用 *.mydomain.com ,不包括主域名 mydomain.com,如果主域名需要的话,可以再申请一份证书,只需要将前面的命令的 -d 参数修改即可。
./certbot-auto certonly  -d  mydomain.com --manual --preferred-challenges dns-01  --server https://acme-v02.api.letsencrypt.org/directory
说明:证书有效期只有90天,此方法申请的证书到期后需要手动更新。更新的方法是前面申请证书的命令再重新运行一次,按提示操作即可。更新完成后,可能需要重启nginx。
运行以下命令显示生成证书的相关信息,包括有效期等。
./certbot-auto  certificates

六、安装并配置nginx
 
    1、安装nginx并加入开机启动:
yum install nginx -y
systemctl  start  nginx 
systemctl enable nginx
 
    2、配置nginx

      (1)编辑配置文件/etc/nginx/nginx.conf
user nginx;

worker_processes 1;

error_log /var/log/nginx/error.log;

pid /var/run/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;
    include /etc/nginx/default.d/*.conf;

 server {
        listen       80 default_server;
        server_name  localhost;
        root         /usr/share/nginx/html;

        location / {
        }

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

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
}
}

      (2)反向代理配置文件 /etc/nginx/default.d/reverse-proxy.conf
server
{
    listen 80;
    server_name mydomain.com; //修改成自己的域名
    location / {
        proxy_redirect off;
        proxy_set_header host $host;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:181;
        rewrite ^(.*)$ https://$host$1 permanent;
     
    }
 
}

server
{
    listen 80;
    server_name *.mydomain.com; //修改成自己的域名
    location / {
        proxy_redirect off;
        proxy_set_header host $host;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:1200;
        rewrite ^(.*)$ https://$host$1 permanent;
    }
 
}


server
{
    listen 80;
    server_name **.mydomain.com; //修改成自己的域名
    location / {
        proxy_redirect off;
        proxy_set_header host $host;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:3000;
        rewrite ^(.*)$ https://$host$1 permanent;
     
    }

}

      (3)ssl配置文件/etc/nginx/default.d/ssl.conf
server
 {
        listen       443 ssl;
        server_name  mydomain.com;

        ssl on;
     
        ssl_certificate      /etc/letsencrypt/live/mydomain.com/fullchain.cer;
        ssl_certificate_key  /etc/letsencrypt/live/mydomain.com/mydomain.com.key;
     
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        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  rsshub.mydomain.com;

        ssl on;
     
        ssl_certificate      /etc/letsencrypt/live/mydomain.com/fullchain.cer;
        ssl_certificate_key  /etc/letsencrypt/live/mydomain.com/mydomain.com.key;
 
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers on;
        location / {   
     
        proxy_pass http://127.0.0.1:1200;
           }
 }

server
 {
        listen       443 ssl;
        server_name  mercury.mydomain.com;

        ssl on;
     
        ssl_certificate      /etc/letsencrypt/live/mydomain.com/fullchain.cer;
        ssl_certificate_key  /etc/letsencrypt/live/mydomain.com/mydomain.com.key;
     
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers on;
        location / {   
     
        proxy_pass http://127.0.0.1:3000;
           }
 }
运行以下命令测试配置文件是否正确:
/usr/sbin/nginx -t -c /etc/nginx/nginx.conf

评论

发表评论

此博客中的热门博文

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

群晖NAS安装配置openwrt软路由