diff --git a/apps/glean/0.1.4/data.yml b/apps/glean/0.1.4/data.yml new file mode 100644 index 000000000..699f4dd3d --- /dev/null +++ b/apps/glean/0.1.4/data.yml @@ -0,0 +1,53 @@ +additionalProperties: + formFields: + - default: "/home/glean" + edit: true + envKey: GLEAN_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 3001 + edit: true + envKey: PANEL_APP_PORT_ADMIN + labelZh: WebUI 后台端口 + labelEn: WebUI Admin Port + required: true + rule: paramPort + type: number + - default: "admin" + edit: true + envKey: ADMIN_USERNAME + labelZh: 管理员用户名 + labelEn: Admin username + required: true + type: text + - default: "" + edit: true + envKey: ADMIN_PASSWORD + labelZh: 管理员密码 + labelEn: Admin password + required: true + type: password + - default: "" + edit: true + envKey: SECRET_KEY + labelZh: 签名密钥 + labelEn: Signature key + required: true + type: password + - default: "glean" + edit: true + envKey: POSTGRES_PASSWORD + labelZh: 数据库密码 + labelEn: Postgres password + required: true + type: text diff --git a/apps/glean/0.1.4/docker-compose.yml b/apps/glean/0.1.4/docker-compose.yml new file mode 100644 index 000000000..322f0ba6b --- /dev/null +++ b/apps/glean/0.1.4/docker-compose.yml @@ -0,0 +1,130 @@ +networks: + 1panel-network: + external: true + glean-network: + driver: bridge + +services: + glean-postgres: + image: postgres:16-alpine + container_name: ${CONTAINER_NAME}-postgres + restart: unless-stopped + volumes: + - ${GLEAN_ROOT_PATH}/postgres:/var/lib/postgresql/data + networks: + - glean-network + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + healthcheck: + test: [ "CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-glean}" ] + interval: 10s + timeout: 5s + retries: 5 + environment: + POSTGRES_DB: ${POSTGRES_DB:-glean} + POSTGRES_USER: ${POSTGRES_USER:-glean} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-glean} + + glean-redis: + image: redis:7-alpine + container_name: ${CONTAINER_NAME}-redis + command: redis-server --appendonly yes + restart: unless-stopped + volumes: + - ${GLEAN_ROOT_PATH}/redis:/data + networks: + - glean-network + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + healthcheck: + test: [ "CMD", "redis-cli", "ping" ] + interval: 10s + timeout: 5s + retries: 5 + + glean-backend: + depends_on: + glean-postgres: + condition: service_healthy + glean-redis: + condition: service_healthy + image: ghcr.io/leslieleung/glean-backend:0.1.4 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + 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} + RUN_MIGRATIONS: "true" + CREATE_ADMIN: ${CREATE_ADMIN:-true} + ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} + ADMIN_PASSWORD: ${ADMIN_PASSWORD:-} + ADMIN_ROLE: ${ADMIN_ROLE:-super_admin} + restart: unless-stopped + healthcheck: + test: [ "CMD", "curl", "-f", "http://localhost:8000/api/health" ] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + networks: + - glean-network + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + command: [ "uv", "run", "--no-sync", "uvicorn", "glean_api.main:app", "--host", "0.0.0.0", "--port", "8000" ] + + glean-worker: + depends_on: + glean-postgres: + condition: service_healthy + glean-redis: + condition: service_healthy + glean-backend: + condition: service_healthy + image: ghcr.io/leslieleung/glean-backend:0.1.4 + container_name: ${CONTAINER_NAME}-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:-} + networks: + - glean-network + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + restart: unless-stopped + command: [ "uv", "run", "--no-sync", "arq", "glean_worker.main.WorkerSettings" ] + + glean-web: + depends_on: + - glean-backend + image: ghcr.io/leslieleung/glean-web:0.1.4 + container_name: ${CONTAINER_NAME}-web + ports: + - "${PANEL_APP_PORT_HTTP:-80}:80" + networks: + - glean-network + restart: unless-stopped + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + + glean-admin: + depends_on: + - glean-backend + image: ghcr.io/leslieleung/glean-admin:0.1.4 + container_name: ${CONTAINER_NAME}-admin + ports: + - "${PANEL_APP_PORT_ADMIN:-3001}:80" + networks: + - glean-network + restart: unless-stopped + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} diff --git a/apps/glean/0.1.4/envs/default.env b/apps/glean/0.1.4/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/apps/glean/0.1.4/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/glean/0.1.4/envs/global.env b/apps/glean/0.1.4/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/apps/glean/0.1.4/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/glean/0.1.4/scripts/init.sh b/apps/glean/0.1.4/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/glean/0.1.4/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/glean/0.1.4/scripts/uninstall.sh b/apps/glean/0.1.4/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/glean/0.1.4/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/glean/0.1.4/scripts/upgrade.sh b/apps/glean/0.1.4/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/glean/0.1.4/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/glean/README.md b/apps/glean/README.md new file mode 100644 index 000000000..a18778de4 --- /dev/null +++ b/apps/glean/README.md @@ -0,0 +1,75 @@ +# Glean 拾灵 + +简短的介绍 + +![Glean 拾灵](https://file.lifebus.top/imgs/glean_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 核心功能 + +### 📰 RSS 订阅 + +订阅和管理 RSS/Atom 源,支持 OPML 导入导出 + +### 📚 智能阅读 + +简洁的阅读体验,支持内容过滤 + +### 🔖 稍后阅读 + +保存文章以便稍后阅读,支持自动清理 + +### 📁 文件夹与标签 + +多层级文件夹和标签组织内容 + +### ⭐ 收藏系统 + +收藏订阅文章或外部链接 + +### 🔧 后台同步 + +每 15 分钟自动更新订阅源 + +### 🔒 自托管 + +Docker 部署,完全掌控数据 + +### 🎨 现代界面 + +美观的暖色深色主题响应式界面 + +### 👨‍💼 管理后台 + +用户管理和系统监控 + +## 规划中的功能(WIP) + +### 🧠 智能推荐 + +基于 AI 的偏好学习和文章评分 + +### ⚙️ 规则引擎 + +支持 Jinja2 风格条件的自动化处理 + +### 🤖 AI 功能 + +摘要生成、自动打标、关键词提取(BYOK) + +### 📄 完整内容获取 + +为仅提供摘要的 RSS 源获取完整正文 + +### 🔌 Chrome 扩展 + +浏览器一键收藏 + +### 📱 移动端 PWA + +适配移动设备的渐进式 Web 应用 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/glean/data.yml b/apps/glean/data.yml new file mode 100644 index 000000000..1a576bc6b --- /dev/null +++ b/apps/glean/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: glean + name: Glean 拾灵 + tags: + - WebSite + - Local + shortDescZh: 一个自托管的 RSS 阅读器和个人知识管理工具。 + shortDescEn: A self-hosted RSS reader and personal knowledge management tool. + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/LeslieLeung/glean/ + github: https://github.com/LeslieLeung/glean/ + document: https://github.com/LeslieLeung/glean/ diff --git a/apps/glean/logo.png b/apps/glean/logo.png new file mode 100644 index 000000000..2512e2b9c Binary files /dev/null and b/apps/glean/logo.png differ