5.7 KiB
5.7 KiB
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
如果你用 scp、git 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是否应为ssl或starttls。- 邮箱是否开启 SMTP/IMAP。
NEWSPAPER_SMTP_PASSWORD是否是授权码。- 服务器是否允许连接 SMTP 端口。
生成日报失败
优先检查:
DEEPSEEK_API_KEY是否正确。- DeepSeek API 账户是否有额度。
- 服务器是否能访问
https://api.deepseek.com。 config/sources.yaml中的来源是否大面积无法访问。