Docker一键部署Glean:搭建你的专属RSS阅读器与知识管理利器
Docker一键部署Glean:搭建你的专属RSS阅读器与知识管理利器
一、Glean介绍
1.1 Glean简介
Glean是一款自托管的 RSS 阅读器与个人知识管理工具,帮助用户高效聚合、阅读和整理网络内容,同时完全掌控自己的数据。
1.2 Glean主要特点
- RSS 订阅管理:支持订阅和组织 RSS/Atom 源,并提供 OPML 导入导出功能。
- 智能阅读体验:提供干净无干扰的阅读界面,支持内容过滤以去除广告和杂乱元素。
- 稍后阅读功能:可将文章保存至“稍后阅读”列表,并支持自动清理过期内容。
- 多级文件夹与标签:通过嵌套文件夹和自定义标签灵活分类和归档文章。
- 书签收藏:不仅能收藏来自订阅源的文章,还可保存任意外部网页链接。
- 后台自动同步:每 15 分钟自动更新所有订阅源,确保内容及时获取。
- 完全自托管:基于 Docker 部署,用户拥有全部数据所有权和隐私控制权。
- 现代温暖暗色 UI:采用美观、响应式的深色主题界面,提升长时间阅读舒适度。
- 管理员仪表盘:内置管理面板,支持用户管理和系统运行状态监控。
二、本次实践规划
2.1 本地环境规划
本次实践为个人测试环境,操作系统版本为 Ubuntu 24.04.2 LTS。
| hostname | IP地址 | 操作系统版本 | Docker版本 | 部署项目 | 备注 |
|---|---|---|---|---|---|
| jeven | 192.168.3.88 | Ubuntu 24.04.2 LTS | 28.5.0 | Glean | —— |
2.2 本次实践介绍
1.本次实践部署环境为个人测试环境,生产环境请谨慎;
2.在Docker环境下部RSS阅读器Glean。
三、本地环境检查
3.1 检查Docker服务状态
检查Docker服务是否正常运行,确保Docker正常运行。
root@jeven:~# systemctl restart docker
root@jeven:~# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: active (running) since Tue 2026-01-06 17:39:44 CST; 7s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 1220391 (dockerd)
Tasks: 12
Memory: 127.0M (peak: 127.8M)
CPU: 1.767s
CGroup: /system.slice/docker.service
└─1220391 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

3.2 检查Docker版本
检查Docker版本
root@jeven:~# docker -v
Docker version 28.5.0, build 887030f
3.3 检查docker compose 版本
检查Docker compose版本,确保2.0以上版本。
root@jeven:~# docker compose version
Docker Compose version v2.39.4
四、拉取Glean镜像
下载Glean相关的5个容器镜像,执行以下命令:
docker pull registry.cn-hangzhou.aliyuncs.com/jeson/postgres:16-alpine
docker pull registry.cn-hangzhou.aliyuncs.com/jeson/redis:7-alpine
docker pull registry.cn-hangzhou.aliyuncs.com/jeson/glean-backend:latest
docker pull registry.cn-hangzhou.aliyuncs.com/jeson/glean-web:latest
docker pull registry.cn-hangzhou.aliyuncs.com/jeson/glean-admin:latest

五、部署Glean服务
5.1 创建部署目录
- 创建部署目录
mkdir -p /data/glean/{postgres,redis} && cd /data/glean
- 目前授权工作
chmod -R 777 /data/glean/
5.2 编辑变量文件
在
/data/glean目录下,新建及编辑变量文件env.txt。可自行修改映射端口和相关账号密码,测试环境下可直接使用以下简单示例。
vim env.txt
# Glean Environment Configuration
# Copy this file to .env and customize for your environment
# ========================================
# Database Configuration
# ========================================
POSTGRES_DB=glean
POSTGRES_USER=glean
POSTGRES_PASSWORD=glean
# ========================================
# Backend Configuration
# ========================================
# JWT secret key - CHANGE THIS IN PRODUCTION!
# Generate with: openssl rand -hex 32
SECRET_KEY=7f3a1b8c4d2e9f0a5b6c8d1e3f7a2b9c4d6e8f1a3b5c7d9e2f4a6b8c1d3e5f7a
# Enable debug mode (shows API docs at /api/docs)
DEBUG=false
# ========================================
# Port Configuration
# ========================================
# Web interface port
WEB_PORT=7100
# Admin dashboard port (only for full deployment)
ADMIN_PORT=7200
# =============================================================================
# ADMIN (Optional - Full Deployment Only)
# =============================================================================
# Set CREATE_ADMIN=true on first startup to auto-create admin account
# The password will be printed in the logs (save it immediately!)
CREATE_ADMIN=true
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin@123
ADMIN_ROLE=super_admin
# ========================================
# Development Configuration (optional)
# ========================================
# Full database URL (auto-generated from above if not set)
# DATABASE_URL=postgresql+asyncpg://glean:glean@localhost:5432/glean
# Redis URL
# REDIS_URL=redis://localhost:6379/0
# CORS origins (JSON array)
# CORS_ORIGINS=["http://localhost", "http://localhost:3000"]
5.3 编辑部署文件
新建及编辑docker-compose.yaml文件,内容如下所示:
vim docker-compose.yaml
# Glean Full Deployment - Docker Compose (with Admin Dashboard)
# Usage: docker compose -f docker-compose.full.yml up -d
#
# This deployment includes the admin dashboard.
# Set CREATE_ADMIN=true to auto-create admin account on first startup.
services:
postgres:
image: registry.cn-hangzhou.aliyuncs.com/jeson/postgres:16-alpine
container_name: glean-postgres
environment:
POSTGRES_DB: ${POSTGRES_DB:-glean}
POSTGRES_USER: ${POSTGRES_USER:-glean}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-glean}
volumes:
- ./postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-glean}"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
redis:
image: registry.cn-hangzhou.aliyuncs.com/jeson/redis:7-alpine
container_name: glean-redis
command: redis-server --appendonly yes
volumes:
- ./redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
backend:
image: registry.cn-hangzhou.aliyuncs.com/jeson/glean-backend:latest
container_name: glean-backend
environment:
DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-glean}:${POSTGRES_PASSWORD:-glean}@postgres:5432/${POSTGRES_DB:-glean}
REDIS_URL: redis://redis:6379/0
SECRET_KEY: ${SECRET_KEY:-change-me-in-production-use-a-long-random-string}
CORS_ORIGINS: '["http://localhost", "http://localhost:3000", "http://localhost:3001"]'
DEBUG: ${DEBUG:-false}
# Only backend runs migrations to avoid race conditions
RUN_MIGRATIONS: "true"
# Admin auto-creation (set to true for first startup)
CREATE_ADMIN: ${CREATE_ADMIN:-false}
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
ADMIN_PASSWORD: ${ADMIN_PASSWORD:-}
ADMIN_ROLE: ${ADMIN_ROLE:-super_admin}
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/api/health"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
restart: unless-stopped
command: ["uv", "run", "--no-sync", "uvicorn", "glean_api.main:app", "--host", "0.0.0.0", "--port", "8000"]
worker:
image: registry.cn-hangzhou.aliyuncs.com/jeson/glean-backend:latest
container_name: glean-worker
environment:
DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-glean}:${POSTGRES_PASSWORD:-glean}@postgres:5432/${POSTGRES_DB:-glean}
REDIS_URL: redis://redis:6379/0
SECRET_KEY: ${SECRET_KEY:-change-me-in-production-use-a-long-random-string}
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
backend:
condition: service_healthy
restart: unless-stopped
command: ["uv", "run", "--no-sync", "arq", "glean_worker.main.WorkerSettings"]
web:
image: registry.cn-hangzhou.aliyuncs.com/jeson/glean-web:latest
container_name: glean-web
ports:
- "${WEB_PORT:-80}:80"
depends_on:
- backend
restart: unless-stopped
admin:
image: registry.cn-hangzhou.aliyuncs.com/jeson/glean-admin:latest
container_name: glean-admin
ports:
- "${ADMIN_PORT:-5000}:80"
depends_on:
- backend
restart: unless-stopped
5.4 创建Glean相关容器
执行以下命令,创建Glean相关容器。
docker compose --env-file env.txt up -d

5.5 查看Glean容器状态
检查Glean容器运行状态,确保Glean各容器正常启动。
root@jeven:/data/glean# docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
glean-admin registry.cn-hangzhou.aliyuncs.com/jeson/glean-admin:latest "/docker-entrypoint.…" admin 4 minutes ago Up 4 minutes 0.0.0.0:7200->80/tcp, [::]:7200->80/tcp
glean-backend registry.cn-hangzhou.aliyuncs.com/jeson/glean-backend:latest "/app/scripts/entryp…" backend 4 minutes ago Up 4 minutes (healthy) 8000/tcp
glean-postgres registry.cn-hangzhou.aliyuncs.com/jeson/postgres:16-alpine "docker-entrypoint.s…" postgres 4 minutes ago Up 4 minutes (healthy) 5432/tcp
glean-redis registry.cn-hangzhou.aliyuncs.com/jeson/redis:7-alpine "docker-entrypoint.s…" redis 4 minutes ago Up 4 minutes (healthy) 6379/tcp
glean-web registry.cn-hangzhou.aliyuncs.com/jeson/glean-web:latest "/docker-entrypoint.…" web 4 minutes ago Up 4 minutes 0.0.0.0:7100->80/tcp, [::]:7100->80/tcp
glean-worker registry.cn-hangzhou.aliyuncs.com/jeson/glean-backend:latest "/app/scripts/entryp…" worker 4 minutes ago Up 3 minutes 8000/tcp

5.6 检查Glean容器日志
检查容器运行日志,确保Glean服务正常运行。
docker compose logs

六、访问Glean服务
6.1 访问Glean首页
浏览器地址:
http://<个人的服务器IP>:7100,访问Glean初始页。如果无法访问,请确保宿主机的防火墙已关闭或已放行相关端口,对于云服务器还需配置相应的安全组规则。

6.2 创建账号
第一次登录时,我们创建账号。点击“创建账号”,自行填写账号信息注册即可。


七、RSS使用方案
7.1 添加RSS地址
点击“+”选项,新增RSS地址。
可自行添加一些RSS地址源,以下一些RSS源可供参考:
- 少数派: https://sspai.com/feed 分享科技产品使用技巧与优质工具推荐
- 虎嗅网: 地址:https://www.huxiu.com/rss/0.xml 深度商业分析,涵盖科技、互联网、金融等领域。
- 本人博客订阅地址: https://rss.csdn.net/jks212454/rss/map

6.2 浏览效果
添加RSS源后,刷新一下即可看到相关文章,效果还是非常不错的。

6.3 注意
写作本文时,当前版本存在后台管理登录后账号无法正常登录的问题,建议等待作者修复,或使用最新版镜像以获取修复更新。
八、总结
通过本次实战,我们成功使用 Docker 快速部署了自托管 RSS 阅读器 Glean,体验了其简洁美观的界面与强大的内容管理能力。整个过程标准化、可复现,充分体现了容器化部署的便捷性与隔离优势。Glean 不仅支持 RSS 订阅与智能阅读,还集成了书签、标签和稍后读等知识管理功能,非常适合个人信息聚合。
- 点赞
- 收藏
- 关注作者

评论(0)