
Glean是一款自托管的 RSS 阅读器与个人知识管理工具,帮助用户高效聚合、阅读和整理网络内容,同时完全掌控自己的数据。
本次实践为个人测试环境,操作系统版本为 Ubuntu 24.04.2 LTS。
hostname | IP地址 | 操作系统版本 | Docker版本 | 部署项目 | 备注 |
|---|---|---|---|---|---|
jeven | 192.168.3.88 | Ubuntu 24.04.2 LTS | 28.5.0 | Glean | —— |
1.本次实践部署环境为个人测试环境,生产环境请谨慎;
2.在Docker环境下部RSS阅读器Glean。
检查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
检查Docker版本
root@jeven:~# docker -v
Docker version 28.5.0, build 887030f检查Docker compose版本,确保2.0以上版本。
root@jeven:~# docker compose version
Docker Compose version v2.39.4下载Glean相关的5个容器镜像,执行以下命令:
docker pull registry.cn-hangzhou.aliyuncs.com/jeson/postgres:16-alpinedocker pull registry.cn-hangzhou.aliyuncs.com/jeson/redis:7-alpinedocker pull registry.cn-hangzhou.aliyuncs.com/jeson/glean-backend:latestdocker pull registry.cn-hangzhou.aliyuncs.com/jeson/glean-web:latestdocker pull registry.cn-hangzhou.aliyuncs.com/jeson/glean-admin:latest
mkdir -p /data/glean/{postgres,redis} && cd /data/gleanchmod -R 777 /data/glean/在
/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"]新建及编辑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执行以下命令,创建Glean相关容器。
docker compose --env-file env.txt up -d 
检查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
检查容器运行日志,确保Glean服务正常运行。
docker compose logs
浏览器地址:
http://<个人的服务器IP>:7100,访问Glean初始页。如果无法访问,请确保宿主机的防火墙已关闭或已放行相关端口,对于云服务器还需配置相应的安全组规则。

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


点击“+”选项,新增RSS地址。

可自行添加一些RSS地址源,以下一些RSS源可供参考:
少数派: https://sspai.com/feed 分享科技产品使用技巧与优质工具推荐
虎嗅网: 地址:https://www.huxiu.com/rss/0.xml 深度商业分析,涵盖科技、互联网、金融等领域。

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

写作本文时,当前版本存在后台管理登录后账号无法正常登录的问题,建议等待作者修复,或使用最新版镜像以获取修复更新。
通过本次实战,我们成功使用 Docker 快速部署了自托管 RSS 阅读器 Glean,体验了其简洁美观的界面与强大的内容管理能力。整个过程标准化、可复现,充分体现了容器化部署的便捷性与隔离优势。Glean 不仅支持 RSS 订阅与智能阅读,还集成了书签、标签和稍后读等知识管理功能,非常适合个人信息聚合。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。