侧边栏壁纸
博主头像
いちごみるく

行动起来,活在当下

  • 累计撰写 70 篇文章
  • 累计创建 48 个标签
  • 累计收到 55 条评论

目 录CONTENT

文章目录

Docker搭建TTRSS——免费开源多平台RSS阅读器

本文按 TTRSS 官方安装指南部署 PostgreSQL、应用、更新器与 Nginx 四个组件,并说明持久化、初始化密码与备份方式。已有阅读器数据库的迁移应单独验证。

Tiny Tiny RSS 是自托管 RSS 阅读器,负责订阅、更新、分类与已读状态。RSSHub 可以作为内容来源,全文提取属于额外功能,不是基础安装所必需。TTRSS 官方安装指南

一、准备配置

在独立目录保存 compose.yaml。下面用 PostgreSQL 17 固定数据库大版本;不要用浮动 postgres:alpine 让已有数据库突然跨大版本启动。

services:
  db:
    image: postgres:17-alpine
    restart: unless-stopped
    env_file: .env
    environment:
      POSTGRES_USER: ${TTRSS_DB_USER}
      POSTGRES_PASSWORD: ${TTRSS_DB_PASS}
      POSTGRES_DB: ${TTRSS_DB_NAME}
    volumes:
      - db:/var/lib/postgresql/data
  app:
    image: ghcr.io/tt-rss/tt-rss:latest
    restart: unless-stopped
    env_file: .env
    volumes:
      - app:/var/www/html
      - ./config.d:/opt/tt-rss/config.d:ro
    depends_on:
      - db
  updater:
    image: ghcr.io/tt-rss/tt-rss:latest
    restart: unless-stopped
    env_file: .env
    command: /opt/tt-rss/updater.sh
    volumes:
      - app:/var/www/html
      - ./config.d:/opt/tt-rss/config.d:ro
    depends_on:
      - app
  web-nginx:
    image: ghcr.io/tt-rss/tt-rss-web-nginx:latest
    restart: unless-stopped
    env_file: .env
    ports:
      - "127.0.0.1:8280:80"
    volumes:
      - app:/var/www/html:ro
    depends_on:
      - app
volumes:
  db:
  app:

应用卷同时提供给应用、更新器和 Web;数据库保存在另一个卷,数据库端口不映射到宿主机。上游仓库根目录的 Compose 已注明用于开发、没有数据库持久化,不应直接作为生产部署文件;本文对应安装指南的持久化方案。

创建 config.d 和权限受限的 .env,填写自己的数据库密码、完整访问 URL:

TTRSS_DB_USER=ttrss
TTRSS_DB_NAME=ttrss
TTRSS_DB_PASS=替换为随机数据库密码
TTRSS_SELF_URL_PATH=https://rss.example.com/tt-rss/

变量前缀是 TTRSS_。示例沿用 /tt-rss/ 路径;想放到网站根目录时,需要按官方指南同时改 APP_WEB_ROOT、APP_BASE 与 URL,不能只去掉末尾路径。

mkdir -p config.d
chmod 600 .env
docker compose config --quiet
docker compose up -d
docker compose logs --tail 100 app updater web-nginx

depends_on 不保证数据库已经可以接受连接,初始化情况应看日志。当前模板未设置 ADMIN_USER_PASS 时会生成随机管理员密码,按应用日志取得;不要假定存在通用初始密码。ADMIN_USER_* 设置在每次启动时应用,若主动设置密码,应理解这会影响后续启动。官方环境变量模板

二、HTTPS 反向代理

在已经配置证书的 Nginx 虚拟主机中添加:

location /tt-rss/ {
    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_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://127.0.0.1:8280/tt-rss/;
}

登录后测试添加订阅、自动更新与文章打开。只看到首页不能证明更新器在运行。HTTP 和 HTTPS 混用或 SELF_URL_PATH 路径不一致,可能导致跳转、资源 URL 或客户端访问异常。

三、备份和升级

db 卷保存用户、订阅和已读状态,app 卷及 config.d 保存需要保留的本地扩展与配置。备份应包含这些数据,并在隔离环境验证恢复。数据库使用逻辑导出或一致性备份,不能复制运行中的数据目录后就宣称可恢复。

上游目前的可选备份容器带 PostgreSQL 17 客户端,不适用于直接备份更高大版本数据库。PostgreSQL 18 镜像还改变了数据卷路径;从 17 升级到 18 必须设计迁移与回滚,不能只修改 image 标签。官方备份和数据库版本说明

本文的应用镜像仍使用浮动标签,长期运行应记录已测试 digest,升级前阅读变更并备份。不要执行 docker compose down -v 来排查普通登录或网络问题,它会删除命名卷。

四、接入 RSSHub

先验证 RSSHub 路由返回有效 RSS,再从 TTRSS 所在网络测试其 URL。浏览器能访问不意味着容器能访问,localhost 也不是另一个容器。自建内部服务可放在共同网络并使用服务名,按上游指南处理端口和内网 URL 限制;不要为了单个订阅全局放开所有内部地址检查。

0

评论区