Docker一键部署Glean:搭建你的专属RSS阅读器与知识管理利器

举报
江湖有缘 发表于 2026/07/20 00:48:27 2026/07/20
【摘要】 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 订阅与智能阅读,还集成了书签、标签和稍后读等知识管理功能,非常适合个人信息聚合。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。