Diary News · 私人新闻汇总系统

抓取境外权威源 → 自动翻译 → 网页 + Android 双端展示。 跑在一台 30G 香港 VPS 上,自用 + 家人/小圈子。

完整方案见 docs/architecture.md,部署步骤见 DEPLOY.md

仓库结构

diary-news/
├── backend/              # FastAPI 后端 + worker + scheduler
│   ├── app/
│   │   ├── api/          # 路由
│   │   ├── core/         # 安全 / 依赖
│   │   ├── models/       # SQLAlchemy 模型
│   │   ├── schemas/      # Pydantic schemas
│   │   ├── services/     # 采集 / 翻译
│   │   ├── workers/      # 抓取 / 翻译 pipeline + APScheduler
│   │   ├── scripts/      # 初始化脚本
│   │   ├── config.py     # Pydantic Settings
│   │   ├── database.py   # 异步 SQLAlchemy
│   │   └── main.py       # FastAPI 入口
│   ├── alembic/          # 迁移
│   ├── Dockerfile
│   └── pyproject.toml
├── frontend/             # Vue 3 + Vite + Naive UI
├── docs/
│   └── architecture.md
├── Caddyfile             # 反代
├── docker-compose.yml
├── .env.example
├── DEPLOY.md
└── README.md

快速开始(本地开发)

# 1. 准备环境
cp .env.example .env
# 编辑 .env 填入密钥

# 2. 启动
docker compose up -d

# 3. 初始化数据库 + 创建 owner 账号 + 导入 5 个种子源
docker compose exec api alembic upgrade head
docker compose exec api python -m app.scripts.create_user --username owner --password YOUR_PASS
docker compose exec api python -m app.scripts.seed_sources

# 4. 触发一次抓取(看效果)
docker compose exec api python -c "import asyncio; from app.workers.pipeline import run_once; asyncio.run(run_once())"

# 5. 打开
# http://localhost/

设计原则

  • 轻量:单机 30G 能跑,不堆重型服务
  • 可控:源管理 / 翻译配额 / 抓取调度全部可视化
  • 可扩展:ML 字段已建好(分类/点评/实体),不需改表
  • 不反爬对抗:愿意被 ban IP 就 ban,优先合规

当前阶段

Phase 1 · MVP(本仓库)

  • 5 个权威 RSS 源采集(Reuters/BBC/Al Jazeera/NHK/DW)
  • 腾讯云 TMT 翻译 + 字符配额监控 + 降级
  • 网页:登录 / 24h 列表 / 详情 / 源管理
  • 凌晨分波次调度
  • Android(Phase 3)
  • 智能分类/点评(Phase 4)
  • PWA 离线 / 推送(Phase 2)
Description
每日简报系统
Readme 697 KiB
Languages
Python 75.7%
Vue 16.5%
TypeScript 3.7%
CSS 1.7%
Shell 1.6%
Other 0.8%