本文属于「自托管 Docker 部署实战」系列(共 35 篇),第 34 篇。 示例中的 IP(192.0.2.10)、域名(example.com)、密码均为占位符,请按实际环境替换。

它是什么

NewsNow 把微博、知乎、B 站、GitHub Trending、V2EX 等站点的热榜聚合到一个页面,支持按分类筛选、缓存和定时刷新。适合当自己的「信息首页」。

前置条件

  • 一台 Linux 服务器(1C512M 起);
  • 已安装 Docker 与 Compose v2;
  • 服务器能访问各内容站点(部分源可能需要代理)。
curl -fsSL https://get.docker.com | sh
mkdir -p /srv/docker/active/newsnow && cd /srv/docker/active/newsnow

镜像地址

ghcr.io/ourongxing/newsnow:latest

国内拉取 ghcr.io 慢,可以用镜像站前缀(示例): ghcr.nju.edu.cn/ourongxing/newsnow:latest

目录结构

/srv/docker/active/newsnow/
├── docker-compose.yml
├── .env
└── .data/                # 缓存与 SQLite 数据

部署步骤

cat > .env <<'EOF'
NEWSNOW_JWT_SECRET=<随机长字符串>
EOF
chmod 600 .env
# docker-compose.yml
services:
  newsnow:
    image: ghcr.io/ourongxing/newsnow:latest
    container_name: newsnow
    restart: unless-stopped
    ports:
      - "4444:4444"
    volumes:
      - ./.data:/usr/app/.data
    environment:
      - HOST=0.0.0.0
      - PORT=4444
      - NODE_ENV=production
      - INIT_TABLE=true
      - ENABLE_CACHE=true
      - JWT_SECRET=${NEWSNOW_JWT_SECRET}
      # 可选:GitHub 登录
      # - G_CLIENT_ID=
      # - G_CLIENT_SECRET=
docker compose up -d
docker compose logs -f --tail=100

打开 http://<SERVER_IP>:4444。

关键配置

项 说明
4444 服务端口
.data SQLite/缓存目录,必须持久化
INIT_TABLE=true 首次启动初始化表结构;稳定后可按项目文档调整
JWT_SECRET 会话签名,必须随机
G_CLIENT_ID/SECRET GitHub OAuth,可选;不填则不启用登录

注意事项

  • 热榜数据来自第三方站点,源站改版就会抓取失败,等上游更新即可;
  • 首次启动要初始化数据库,稍等几十秒再刷新;
  • 抓取会周期性请求外部站点,频率太高可能被限流;
  • 站点没有强认证,公网部署建议加反代和访问控制;
  • 升级前备份 .data/,SQLite 迁移失败可回滚。

备份与升级

tar czf "newsnow-data-$(date +%F).tar.gz" .data

docker compose pull
docker compose up -d
  • 若使用镜像站前缀,升级时确认镜像站已同步新版本。