---
title: "Docker 安装 FreshRSS 教程"
tags: ['Debian', 'Ubuntu', 'Docker', 'Docker Compose', 'FreshRSS']
published: 2024-06-21 14:34:43
updated: 2024-06-21 05:29:00
excerpt: "本文将指导如何在 Linux 下使用 Docker 和 Docker Compose 安装 FreshRSS 开源 RSS 聚合器服务。"
---
> 本文件是烧饼博客文章的 Markdown 原文，正式版本见 https://u.sb/docker-freshrss/
> 全站文章与页面索引见 https://u.sb/llms.txt，建议先读索引再继续抓取。

本文将指导如何在 Linux 下使用 Docker 和 Docker Compose 安装 FreshRSS 开源 RSS 聚合器服务。

以下操作需要 root 权限，本文命令均已带上 `sudo` 前缀，请确保当前用户拥有 `sudo` 权限；或者直接使用 root 用户操作并省略命令中的 `sudo`。其中 `docker` 命令未加 `sudo`：建议把当前用户加入 `docker` 用户组（`sudo usermod -aG docker $USER`，重新登录生效），或自行为 `docker` 命令加上 `sudo`。

*PS：本文同时适用于任何可安装 Docker 的 Linux 发行版。*

## 什么是 FreshRSS？

[FreshRSS](https://freshrss.org/) 是一款免费且开源的 RSS 聚合器，设计用于帮助用户集中管理和阅读来自不同网站的新闻源。它具有高效、轻量的特点，并且支持多用户使用。

## 安装 Docker 和 Docker Compose

Debian 和 Ubuntu 系统请参考[本站教程](/debian-install-docker/)。

其他 Linux 系统可以使用 Docker 官方的脚本安装 Docker 和 Docker Compose：

```bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
```

## 安装 FreshRSS

这里我们使用 PostgreSQL 数据库，首先创建一个目录用于存放 FreshRSS 的配置文件和数据库文件：

```bash
sudo mkdir -p /opt/freshrss
cd /opt/freshrss
```

然后创建一个 `docker-compose.yml` 文件：

```yaml
services:

  freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    hostname: freshrss
    restart: unless-stopped
    logging:
      options:
        max-size: 10m
    volumes:
      - ./data:/var/www/FreshRSS/data
      - ./extensions:/var/www/FreshRSS/extensions
    environment:
      TZ: Etc/UTC
      CRON_MIN: '3,33'
      TRUSTED_PROXY: 172.16.0.1/12 192.168.0.1/16
      ADMIN_EMAIL: 你的邮箱
      BASE_URL: 你的 FreshRSS 访问地址
    ports:
      - 127.0.0.1:8080:80

  freshrss-db:
    image: postgres:16
    container_name: freshrss-db
    hostname: freshrss-db
    restart: unless-stopped
    logging:
      options:
        max-size: 10m
    volumes:
      - ./db:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: freshrss
      POSTGRES_USER: freshrss
      POSTGRES_PASSWORD: freshrss
    command:
      - -c
      - shared_buffers=1GB
      - -c
      - work_mem=32MB
```

请自行替换 `ADMIN_EMAIL` 和 `BASE_URL` 的值，`BASE_URL` 需要写全，比如 `https://freshrss.example.com`。

然后拉取 Docker 镜像并运行：

```bash
cd /opt/freshrss
docker compose pull
docker compose up -d
```

## 安装配置 Nginx 反向代理

我们的 Docker Compose 配置文件中，FreshRSS 服务监听在 `127.0.0.1:8080` 端口，所以我们需要配置 Nginx 反代来访问，假设你 FreshRSS 的地址是 `https://freshrss.example.com`：

`freshrss.example.com` 段配置：

```nginx
	location / {
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header Host $http_host;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_redirect off;
		proxy_set_header        X-Forwarded-Proto $scheme;
		proxy_connect_timeout       300;
		proxy_send_timeout          300;
		proxy_read_timeout          300;
		send_timeout                300;
		proxy_pass http://127.0.0.1:8080;
	}
```

最后记得参考本站 [Nginx SSL 配置教程](/nginx-ssl/)加上 SSL 证书后，即可访问 `https://freshrss.example.com/`：

## 配置 FreshRSS

访问 `https://freshrss.example.com/`，在安装向导中填写数据库信息：

- 数据库类型：`PostgreSQL`
- 数据库主机（Host）：`freshrss-db`
- 数据库名称（Database）：`freshrss`
- 数据库用户（User）：`freshrss`
- 数据库密码（Password）：`freshrss`

然后点击 `Install FreshRSS` 即可完成安装。

如果需要安装插件，可以把插件上传到 `/opt/freshrss/extensions` 目录，然后在 FreshRSS 后台安装。

推荐在官方插件仓库里下载插件：[FreshRSS Extensions](https://github.com/FreshRSS/Extensions)

推荐安装 [CustomCSS](https://github.com/FreshRSS/Extensions/tree/master/xExtension-CustomCSS) 插件，就可以使用自定义 CSS 样式了，个人比较喜欢[这个主题系列](https://github.com/catppuccin/freshrss)。

如果需要第三方客户端，可以在这里查看支持的应用：[APIs & native apps](https://github.com/FreshRSS/FreshRSS/blob/edge/README.md#apis--native-apps)

## 迁移 FreshRSS

可以参考《[使用 Docker 安装 Mailcow 自建域名邮箱](/docker-mailcow/#mailcow-的迁移-t2)》。

## 备份 FreshRSS

我们可以定期备份 FreshRSS 网站文件和数据库，压缩网站目录和导出数据库命令如下：

```bash
backup_folder_name=$(date +"%Y_%m_%d_%I_%M_%p")
# 备份 FreshRSS 网站文件
tar --exclude /opt/freshrss/data/cache -zcvf data-$backup_folder_name.tar.gz /opt/freshrss/data
tar -zcvf extensions-$backup_folder_name.tar.gz /opt/freshrss/extensions
# 备份 FreshRSS 数据库
docker exec -t freshrss-db pg_dumpall -c -U freshrss | gzip > database-$backup_folder_name.gz
``` 