关注的网站多了,逐个打开查看更新既费时间,也容易漏掉内容。FreshRSS可以将不同网站的RSS或Atom订阅集中管理,打开一个页面就能查看新文章,还能按分类整理、标记已读或收藏,方便以后查找。
下面介绍如何使用莱卡云Linux云服务器,通过Docker部署FreshRSS,并配合Caddy配置HTTPS访问。教程同时涵盖订阅添加、自动刷新、OPML导入导出和数据备份,适合想搭建私人阅读器的用户参考。
一、项目介绍
FreshRSS是一款开源RSS阅读器,可以部署在自己的服务器上,通过浏览器管理订阅内容。
它支持订阅分类、未读管理、文章收藏、搜索,以及订阅列表的导入和导出。数据库可以使用SQLite,也支持MySQL、PostgreSQL等其他数据库。
本次教程将完成以下配置:
- 使用自己的域名,通过HTTPS登录阅读器。
- 集中订阅博客文章和开源项目更新。
- 对订阅源进行分类,收藏需要保留的文章。
- 配置后台自动刷新。
- 导出OPML订阅列表。
- 备份项目配置和阅读数据。
本文采用SQLite,个人使用不需要额外部署数据库,也不需要配置邮件服务器。
二、搭建环境本次可以使用莱卡云Linux云服务器,建议配置如下:
- CPU:2核。
- 内存:2GB。
- 磁盘:预留10GB可用空间。
- 系统:Debian 12或Ubuntu 24.04。
- Docker:安装Docker Engine。
- Compose:使用新版docker compose插件。
- 域名:准备一个可以修改DNS解析的子域名。
- 端口:TCP 80、443空闲,并允许公网访问。
莱卡云官网购买:点击直达
以上是个人体验和小规模使用的建议配置,并非官方最低要求。订阅源和保留文章数量增加后,应关注数据库大小及磁盘空间。
建议使用独立服务器跟随教程操作。如果服务器已经运行宝塔、Nginx或其他网站,需要先确认80、443端口是否被占用。服务器还需要能够访问镜像仓库、证书服务和准备订阅的网站。
相关推荐:
三、安装Docker和Docker Compose以下命令均在服务器终端中执行,使用root用户。
如果当前使用具有sudo权限的普通用户,先执行:
sudo -i
本文固定使用freshrss/freshrss:1.30.4镜像,与原教程保持一致,不将其视为后续始终最新的版本。
1. 安装Docker及Compose插件在尚未安装Docker的新服务器上执行:
(
set -e
. /etc/os-release
case "$ID" in
debian)
freshrss_dist=debian
freshrss_suite="$VERSION_CODENAME"
;;
ubuntu)
freshrss_dist=ubuntu
freshrss_suite="${UBUNTU_CODENAME:-$VERSION_CODENAME}"
;;
*) echo "本教程仅适用于 Debian 或 Ubuntu"; exit 1 ;;
esac
apt-get update
apt-get install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL "https://download.docker.com/linux/$freshrss_dist/gpg" \
-o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/$freshrss_dist
Suites: $freshrss_suite
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
)
执行:
docker --version docker compose version systemctl is-active docker docker run --rm hello-world
前两条命令应显示版本信息,第三条应返回:
active
最后一条命令的输出中应包含:
Hello from Docker!
如果已经安装Docker和Compose,并通过上述检查,可以跳过安装步骤。

以rss.example.com为例,在域名DNS管理页面添加一条A记录:
| 设置项 | 填写内容 |
|---|---|
| 记录类型 | A |
| 主机记录 | rss |
| 记录值 | 服务器实际公网IPv4地址 |

本文中的rss.example.com只是示例,后续需要替换成自己的域名。
本次使用直接DNS解析。如果DNS服务提供代理功能,先使用“仅DNS”模式完成部署。
没有配置可用IPv6时,不添加AAAA记录;已有错误的AAAA记录应先修正。
同时,在云服务器安全组和系统防火墙中放行入站TCP 80、443,保留现有SSH端口。
检查域名解析:
getent ahostsv4 rss.example.com
返回地址应与服务器公网IPv4相符。
检查端口占用:
ss -lntp '( sport = :80 or sport = :443 )'
如果已有其他程序监听这些端口,需要先处理冲突,再启动本教程的Caddy,不要直接停止不清楚用途的现有服务。
2. 创建项目目录执行:
mkdir -p /opt/freshrss/{data,extensions,caddy,caddy-data,caddy-config}
cd /opt/freshrss
保存域名配置。执行前,将下面的rss.example.com换成自己的域名:
cat > .env <<'EOF' FRESHRSS_DOMAIN=rss.example.com EOF chmod 600 .env
这里只填写域名,不加https://,也不加其他路径。
3. 创建Caddy配置继续执行:
cat > caddy/Caddyfile <<'EOF'
{$FRESHRSS_DOMAIN} {
reverse_proxy freshrss:80
}
EOF
域名解析正确、端口可达后,Caddy会为该域名申请并续期HTTPS证书,同时将HTTP访问跳转到HTTPS。
五、保存Compose配置并启动继续在/opt/freshrss目录执行:
/Shanghai CRON_MIN: '*/20' volumes: - ./data:/var/www/FreshRSS/data - ./extensions:/var/www/FreshRSS/extensions logging: options: max-size: '10m' max-file: '3' caddy: image: caddy:2-alpine restart: unless-stopped depends_on: - freshrss environment: FRESHRSS_DOMAIN: ${FRESHRSS_DOMAIN:?请先填写 .env 中的域名} ports: - '80:80' - '443:443' volumes: - ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro - ./caddy-data:/data - ./caddy-config:/config logging: options: max-size: '10m' max-file: '3'
其中:
- data保存FreshRSS配置和SQLite数据。
- extensions保存额外安装的扩展。
- caddy-data保存证书等数据。
- caddy-config保存Caddy运行配置数据。
- CRON_MIN配置后台刷新任务,后面会说明。
检查配置、拉取镜像并启动:
cd /opt/freshrss docker compose config -q docker compose pull docker compose up -d docker compose ps
docker compose config -q成功时通常没有输出。如果出现错误,先修正,再执行后续命令。
查看服务日志:
docker compose logs --tail=80 caddy freshrss
确认freshrss和caddy两个容器保持运行,再进入浏览器完成安装。

在浏览器打开自己的域名:https://rss.example.com
首次签发证书可能需要一些时间。浏览器没有证书警告后,按安装向导操作。
1、选择语言。 选择简体中文。
2、检查环境。 确认页面中的必要环境检查通过。

3、选择数据库。 数据库类型选择SQLite,不需要填写外部数据库服务器。

4、配置账号。 填写站点标题、默认用户名,认证方式选择“网页表单”,设置独立的高强度密码。
站点标题可以填写:
我的订阅中心
管理员密码应保存在密码管理器中,不要写进普通文档、截图或日志。

5、完成安装。 进入登录页面,使用刚创建的账号登录。
服务启动后应及时完成首次安装。个人使用时,保持匿名访问、匿名刷新和公开注册关闭,再用浏览器无痕窗口访问一次,确认需要登录才能进入自己的阅读页面。
还可以检查FreshRSS记录的站点地址:
cd /opt/freshrss docker compose exec -T freshrss php -r \ '$c = include "/var/www/FreshRSS/data/config.php"; echo $c["base_url"], PHP_EOL;'
输出应为自己的HTTPS域名,末尾是否带斜杠不影响这里的检查。
七、添加订阅源并阅读文章 1. 创建分类并添加订阅登录后,进入“订阅管理”,创建一个分类,例如:
技术订阅
点击添加订阅源,填写RSS地址,并选择刚创建的分类。

两个地址分别是RSS和Atom订阅源,都可以用于FreshRSS。填写地址、选择分类并保存后,返回阅读首页,检查左侧是否出现两个订阅源,以及对应的文章列表。
如果添加失败,先检查服务器是否能访问该地址,再确认源地址是否填写完整。不要把普通网页地址与明确提供的订阅地址混淆。

添加订阅后,可以按下面的顺序熟悉操作:
- 点击左侧分类,查看该分类下的文章。
- 点击文章展开内容。
- 点击星标,收藏需要保留的文章。
- 进入“收藏”列表,确认刚才的文章已经出现。
- 在搜索框输入文章标题中的关键词,查找已抓取的内容。
- 阅读后标记为已读,整理未读列表。

这里的搜索针对自己的订阅内容,不是互联网搜索。
部分网站的RSS只提供摘要,FreshRSS中看到的内容也可能只有摘要。需要阅读完整内容时,可以点击文章标题访问原网站。
另外,订阅源可能只提供最近若干篇文章。首次添加订阅,不代表能够自动获取该网站的全部历史文章。
八、配置自动刷新前面的Compose文件已经设置:
CRON_MIN: '*/20'
表示后台任务在每小时的0、20、40分触发。
需要注意,后台任务的触发时间与订阅源的刷新间隔是两层设置。
进入:
配置 → 归档
找到自动刷新间隔相关选项,演示时可将默认间隔设为20分钟。如果某个订阅源单独设置了更长的间隔,它仍会遵守自己的设置。

可以在服务器查看定时任务配置:
cd /opt/freshrss docker compose exec freshrss crontab -l
任务实际运行后,查看最近一次任务的输出:
docker compose exec freshrss cat /tmp/FreshRSS.log
首次任务尚未触发时,这个日志文件可能还不存在。
也可以查看容器日志:
docker compose logs --since=30m freshrss
需要立即检查订阅时,可以在网页中点击刷新按钮。
刷新后没有新增文章,不一定是故障,也可能是原网站没有更新,或者订阅源尚未达到下一次刷新时间。网页中的手动刷新成功,也不能单独证明后台定时任务正常。
九、导出和导入订阅列表以后更换阅读器时,可以使用OPML迁移订阅列表。
进入:
订阅管理 → 导入/导出
导出时,选择订阅源列表和需要导出的来源,下载OPML文件并妥善保存。

需要导入时,在同一页面选择已有的OPML文件,执行导入,再检查订阅源和分类是否出现。
OPML主要用于迁移订阅列表和分类,不能代替完整备份。 账号配置、文章数据库及阅读状态等数据,需要通过项目数据备份保留。
十、数据备份与日常维护 1. 备份项目数据本教程将持久化数据统一保存在:
/opt/freshrss
备份前短暂停止服务,可以避免一边写入SQLite,一边复制数据库文件。
下面的命令会停止服务、打包项目目录、检查归档,再启动服务。执行期间网站会短暂无法访问,建议安排在空闲时段。
( set -e cd /opt/freshrss umask 077 mkdir -p /opt/backups/freshrss backup_file="/opt/backups/freshrss/freshrss-$(date +%Y%m%d-%H%M%S).tar.gz" trap 'docker compose start >/dev/null' EXIT docker compose stop tar -czf "$backup_file" -C /opt freshrss tar -tzf "$backup_file" >/dev/null docker compose start trap - EXIT printf '备份文件:%s\n' "$backup_file" ) docker compose -f /opt/freshrss/compose.yaml ps

完成后,确认两个容器重新运行,并在浏览器中检查能否登录。
备份文件保存在:
/opt/backups/freshrss
建议通过SFTP等方式另外保存一份,避免服务器故障时连同本机备份一起丢失。
这个归档包含账号数据和证书文件,应限制访问权限,保存在自己控制的位置,不要上传到公开网盘或代码仓库。
2. 更新FreshRSS更新前先完成备份,并查看目标版本的官方发布说明。
将compose.yaml中的:
image: freshrss/freshrss:1.30.4
改成准备升级的稳定版本标签,然后执行:
cd /opt/freshrss docker compose config -q docker compose pull freshrss docker compose up -d freshrss docker compose ps docker compose logs --tail=80 freshrss
由于本文固定了版本标签,只执行pull而不修改标签,不会自动跨版本升级。
升级后,检查登录、订阅刷新、收藏和搜索是否正常。如果升级涉及数据库迁移,不要仅将镜像标签改回旧版就认为完成了回滚,应结合升级前备份恢复。
3. 恢复备份需要迁移到新服务器时,先按前面的步骤安装Docker和Compose。
将自己的备份文件上传到新服务器的/root目录。下面的命令适用于尚未存在/opt/freshrss的空白服务器,执行前替换实际备份文件名:
(
set -e
backup_file='/root/freshrss-实际备份时间.tar.gz'
test -f "$backup_file"
test ! -e /opt/freshrss || {
echo '/opt/freshrss 已存在,请改用空白测试服务器'
exit 1
}
tar -tzf "$backup_file" >/dev/null
tar -xzf "$backup_file" -C /opt
)
如果继续使用原域名,将DNS记录指向新服务器,确认新服务器的TCP 80、443可达,然后启动:
cd /opt/freshrss docker compose config -q docker compose up -d docker compose ps
打开原域名,用原来的账号登录,检查订阅源、分类、收藏及已读状态是否保留。
正常恢复后不需要重新创建管理员。若再次出现首次安装向导,应检查备份内容及数据挂载是否正确。
十一、常见问题排查 1. HTTPS页面打不开依次检查A记录是否指向实际服务器、是否存在错误的AAAA记录、安全组和系统防火墙是否放行TCP 80、443,以及这两个端口是否被其他程序占用。
查看Caddy日志:
cd /opt/freshrss docker compose logs --tail=100 caddy
根据日志中的证书签发或网络错误继续处理,不要通过忽略证书警告来完成登录。
2. 页面提示502先检查FreshRSS容器:
cd /opt/freshrss docker compose ps docker compose logs --tail=100 freshrss
再确认Caddy配置中的上游地址仍为:
freshrss:80
常见原因包括地址填写错误、服务器无法访问来源网站、来源证书异常,或者网站返回403、429。
先确认填写的是有效RSS或Atom地址,再根据错误处理网络或访问频率问题。
4. 没有自动更新先查看容器中的定时任务,再检查订阅源刷新间隔和最近更新时间。源站没有新文章时,正常执行的刷新任务也可能没有新增内容。
5. 重启容器后订阅是否保留按本文配置,数据保存在服务器的data目录中,正常重启容器会继续使用这些数据。
但删除/opt/freshrss/data会影响实际阅读数据。清理服务器空间时,应先确认目录用途并做好备份。
完成以上步骤后,就可以通过自己的HTTPS域名使用FreshRSS,把技术博客和项目更新集中起来,按分类阅读、收藏,并定期备份数据。
相关阅读:
《莱卡云Linux云服务器使用Docker搭建Dockge教程》
《莱卡云香港云服务器快速搭建Pingvin Share平台教程》
(本文由美国主机侦探原创,转载请注明出处“美国主机侦探”和原文地址!)
微信扫码加好友进群
主机优惠码及时掌握
QQ群号:707632017
主机优惠发布与交流




