Files
newspaper/docs/debian-docker-deployment.md
T
2026-07-05 17:59:02 +08:00

5.7 KiB
Raw Blame History

Debian Docker 部署说明

这份文档说明如何把 Daily News for Markyan04 部署到你的个人 Debian 服务器上,通过 Docker Compose 每天早上自动生成并发送日报。

部署目标

每天早上 08:00,按 Asia/Shanghai 时区执行:

采集新闻 -> 生成中文日报 -> 归档到 newspaper/ -> 发送到 markyan04@163.com

收件人已经在 config/delivery.yaml 中配置为:

markyan04@163.com

服务器前置条件

服务器需要安装 Docker 和 Docker Compose plugin。

Debian 常见安装方式:

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

如果希望当前用户直接运行 Docker,可以执行:

sudo usermod -aG docker "$USER"

执行后需要退出 SSH 并重新登录,用户组才会生效。

复制仓库到服务器

建议放到 /srv/apps/newspaper

sudo mkdir -p /srv/apps/newspaper
sudo chown -R "$USER":"$USER" /srv/apps/newspaper
rsync -av --exclude .env /path/to/Newspaper/ /srv/apps/newspaper/
cd /srv/apps/newspaper

如果你用 scpgit clone 或 Synology 同步目录,也可以,只要最终目录结构完整即可。

创建 .env

复制模板:

cp .env.example .env
nano .env

填写:

DEEPSEEK_API_KEY=你的 DeepSeek API Key
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-v4-pro
GITHUB_TOKEN=可选,GitHub 只读 token,用于提高开源项目搜索限额

NEWSPAPER_SMTP_HOST=smtp.163.com
NEWSPAPER_SMTP_PORT=465
NEWSPAPER_SMTP_USERNAME=你的发件邮箱
NEWSPAPER_SMTP_PASSWORD=你的邮箱授权码
NEWSPAPER_FROM_EMAIL=你的发件邮箱
NEWSPAPER_FROM_NAME=Daily News for Markyan04
NEWSPAPER_SMTP_SECURITY=ssl

NEWSPAPER_SCHEDULE_TIME=08:00
TZ=Asia/Shanghai

注意:

  • 如果使用 163 邮箱发件,需要在邮箱设置中开启 SMTP/IMAP 服务。
  • GITHUB_TOKEN 可以留空;如果 GitHub / 开源项目栏目经常空白,建议填一个只读 token。
  • NEWSPAPER_SMTP_PASSWORD 应填写邮箱授权码,不是网页登录密码。
  • 如果使用其他邮箱或邮件服务商,请按服务商文档替换 SMTP host、port 和 security。
  • 不要把 .env 提交到仓库,也不要把授权码发到聊天里。

构建镜像

docker compose build

检查配置

docker compose run --rm newspaper hongyu-daily check-config

期望输出:

config/newspaper.yaml: OK
config/sources.yaml: OK
config/delivery.yaml: OK
newspaper archive: newspaper/

只生成日报,不发送

docker compose run --rm newspaper hongyu-daily generate

检查归档目录:

ls -lh newspaper/

应该看到:

YYYY-MM-DD-daily-news-for-markyan04.md
YYYY-MM-DD-daily-news-for-markyan04.html
YYYY-MM-DD-daily-news-for-markyan04.meta.json

建议第一次先打开 .md.html 检查:

  • 正文是否为中文。
  • 每条新闻是否有来源链接。
  • 新闻是否带有发布时间、更新时间或采集时间。
  • AI 栏目是否是新鲜内容,而不是旧概念拼贴。
  • 传统新闻是否覆盖了真实的新进展,而不是泛泛复述旧背景。

发送已生成的日报

如果你已经生成了某一天的日报,可以单独发送:

docker compose run --rm newspaper hongyu-daily send --date YYYY-MM-DD

例如:

docker compose run --rm newspaper hongyu-daily send --date 2026-07-04

生成并发送一次

docker compose run --rm newspaper hongyu-daily run

这个命令会完成:

采集 -> 生成 -> 归档 -> 发送

启动每日定时任务

docker compose up -d scheduler

查看日志:

docker compose logs -f scheduler

scheduler 服务会常驻运行,每天本地时间 08:00 执行一次。

停止每日定时任务

docker compose down

可选方案:使用 Debian 主机 cron

如果你不想让 scheduler 容器常驻,也可以用 Debian 主机的 cron。

先创建日志目录:

mkdir -p /srv/apps/newspaper/logs

编辑 crontab

crontab -e

加入:

0 8 * * * cd /srv/apps/newspaper && docker compose run --rm newspaper hongyu-daily run >> logs/cron.log 2>&1

注意:不要同时启用主机 cron 和 scheduler 容器,否则每天可能会重复发送。

更新部署

当你把新代码复制到服务器后:

cd /srv/apps/newspaper
docker compose build
docker compose up -d scheduler

如果只想手动跑一次:

docker compose run --rm newspaper hongyu-daily run

常见问题

Docker 构建失败

先确认服务器能访问 Python 包源和 Debian 软件源。

docker compose build --no-cache

邮件发送失败

优先检查:

  • SMTP host 和 port 是否正确。
  • NEWSPAPER_SMTP_SECURITY 是否应为 sslstarttls
  • 邮箱是否开启 SMTP/IMAP。
  • NEWSPAPER_SMTP_PASSWORD 是否是授权码。
  • 服务器是否允许连接 SMTP 端口。

生成日报失败

优先检查:

  • DEEPSEEK_API_KEY 是否正确。
  • DeepSeek API 账户是否有额度。
  • 服务器是否能访问 https://api.deepseek.com
  • config/sources.yaml 中的来源是否大面积无法访问。