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

257 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Debian Docker 部署说明
这份文档说明如何把 Daily News for Markyan04 部署到你的个人 Debian 服务器上,通过 Docker Compose 每天早上自动生成并发送日报。
## 部署目标
每天早上 08:00,按 `Asia/Shanghai` 时区执行:
```text
采集新闻 -> 生成中文日报 -> 归档到 newspaper/ -> 发送到 markyan04@163.com
```
收件人已经在 `config/delivery.yaml` 中配置为:
```text
markyan04@163.com
```
## 服务器前置条件
服务器需要安装 Docker 和 Docker Compose plugin。
Debian 常见安装方式:
```bash
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,可以执行:
```bash
sudo usermod -aG docker "$USER"
```
执行后需要退出 SSH 并重新登录,用户组才会生效。
## 复制仓库到服务器
建议放到 `/srv/apps/newspaper`
```bash
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`
复制模板:
```bash
cp .env.example .env
nano .env
```
填写:
```text
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` 提交到仓库,也不要把授权码发到聊天里。
## 构建镜像
```bash
docker compose build
```
## 检查配置
```bash
docker compose run --rm newspaper hongyu-daily check-config
```
期望输出:
```text
config/newspaper.yaml: OK
config/sources.yaml: OK
config/delivery.yaml: OK
newspaper archive: newspaper/
```
## 只生成日报,不发送
```bash
docker compose run --rm newspaper hongyu-daily generate
```
检查归档目录:
```bash
ls -lh newspaper/
```
应该看到:
```text
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 栏目是否是新鲜内容,而不是旧概念拼贴。
- 传统新闻是否覆盖了真实的新进展,而不是泛泛复述旧背景。
## 发送已生成的日报
如果你已经生成了某一天的日报,可以单独发送:
```bash
docker compose run --rm newspaper hongyu-daily send --date YYYY-MM-DD
```
例如:
```bash
docker compose run --rm newspaper hongyu-daily send --date 2026-07-04
```
## 生成并发送一次
```bash
docker compose run --rm newspaper hongyu-daily run
```
这个命令会完成:
```text
采集 -> 生成 -> 归档 -> 发送
```
## 启动每日定时任务
```bash
docker compose up -d scheduler
```
查看日志:
```bash
docker compose logs -f scheduler
```
`scheduler` 服务会常驻运行,每天本地时间 08:00 执行一次。
## 停止每日定时任务
```bash
docker compose down
```
## 可选方案:使用 Debian 主机 cron
如果你不想让 `scheduler` 容器常驻,也可以用 Debian 主机的 cron。
先创建日志目录:
```bash
mkdir -p /srv/apps/newspaper/logs
```
编辑 crontab
```bash
crontab -e
```
加入:
```text
0 8 * * * cd /srv/apps/newspaper && docker compose run --rm newspaper hongyu-daily run >> logs/cron.log 2>&1
```
注意:不要同时启用主机 cron 和 `scheduler` 容器,否则每天可能会重复发送。
## 更新部署
当你把新代码复制到服务器后:
```bash
cd /srv/apps/newspaper
docker compose build
docker compose up -d scheduler
```
如果只想手动跑一次:
```bash
docker compose run --rm newspaper hongyu-daily run
```
## 常见问题
### Docker 构建失败
先确认服务器能访问 Python 包源和 Debian 软件源。
```bash
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` 中的来源是否大面积无法访问。