跳到主要内容

Cloudflare 部署指南 · v0.1.0

把 Re Player 部署到 Cloudflare

Re Player(RP)是一套基于链接的媒体库:管理员在后台把外部视频、音频、图片挂载成虚拟 /root 目录,访客在网页里浏览目录树并直接播放。项目运行在 Astro 7 + Cloudflare Workers 之上,不需要自备服务器。 本页从零开始带你完成:创建 Cloudflare 应用 → 绑定 D1 数据库 → 配置环境变量 → 登录后台。

Node ≥ 22 Astro 7 Cloudflare Workers D1 数据库 MIT 开源

本页只说明如何自行部署,不提供在线部署入口,也不代客部署。

01项目速览

Re Player 是一个链接型媒体库:它不直接挂载任何存储服务,而是把外部媒体链接登记为 虚拟目录,再由访客端播放器按需加载。所有页面与接口都由 Cloudflare Workers 上的 Astro 服务端渲染产出,数据写入 Cloudflare D1。

Cloudflare 运行平台Workers
构建工具Astro 7
数据存储Cloudflare D1
开源许可MIT

多格式播放

视频、音频、图片一键播放,统一在网页播放器中处理。

链接伪挂载

在固定的 /root 下挂载任意外部媒体链接,形成目录树。

ASS 字幕

JASSUB / libass 浏览器渲染,内置中、日文字体回退。

LRC 歌词

实时同步、自动高亮滚动,支持双语歌词与双行时间戳。

自动语言

按访客 IP 自动选择中文 / 英文 / 日文,也支持手动覆盖。

访客统计

通过 /table 查看访问、目录、媒体与播放事件。

五套主题

默认、复古、蔚蓝、新蓝、浅灰,公开页一键切换。

密码保护

/admin 后台与 /table 统计页都需要管理员密码。

D1 持久化

未绑定 D1 时自动回退内存存储,方便先跑起来再补数据库。

仓库 英文、简体中文、日文说明分别位于 README.md、 README.zh-CN.md、 README.ja.md。 本页只负责“怎么部署”,功能细节以 README 为准。

02部署方式怎么选

Re Player 应用本体运行在 Cloudflare Workers 上,差别只在于“你怎么把代码送到 Cloudflare”。

方案难度发布方式适合谁
Cloudflare Workers · Git 集成 推荐 连接 GitHub 仓库,推送或点击即自动构建发布 想一次配置好、之后只用改仓库的人
Cloudflare Workers · Wrangler CLI 进阶 本地执行一条命令即可构建并上传 熟悉终端、希望完全掌控发布过程的人
本地运行(仅预览) 可选 npm run local / Local.cmd 先在电脑上试用,只在本机访问

先分清两件事 Re Player 使用 @astrojs/cloudflare 适配器(output: "server"),构建产物是 Workers 运行时(dist/server/entry.mjs 与 dist/server/wrangler.json,含 ASSETS 与 DB 绑定), 不是一堆静态文件,因此它只能部署到 Cloudflare Workers,不能当成静态站点丢给 Pages。 本页这份文档站点是纯静态页面,只讲怎么部署 Re Player, 不提供在线部署入口,也不代客部署。

环境要求

  • Node.js ≥ 22(Astro 7 要求)与 npm;
  • 一个 Cloudflare 账号(免费套餐即可,Workers 与 D1 都有免费额度);
  • Git 集成方式需要一个 GitHub 账号(把仓库 Fork 到自己名下);
  • 命令行方式无需额外安装全局工具,npx wrangler 会直接使用项目内依赖。

03前期准备

  1. 注册 Cloudflare 账号

    打开 dash.cloudflare.com 注册并登录。免费套餐已包含 Workers 与 D1 的可用额度,个人使用足够。

  2. 安装 Node.js ≥ 22

    从 nodejs.org 下载安装包,装好后在终端确认版本。低于 22 会导致 Astro 7 构建失败。

  3. 获取代码

    克隆仓库,或从 Releases 下载 ZIP 解压。使用 Git 集成方式时,先把仓库 Fork 到自己账号下再连接。

  4. (可选)登录 Wrangler

    只有命令行发布方式需要。首次执行会在浏览器弹出授权页,同意即可。

 终端
# 1. 检查环境
node -v      # 需要 v22 或更高
npm -v

# 2. 获取源码
git clone https://github.com/lircia/RP-Re_Player.git
cd RP-Re_Player
npm install

# 3. 登录 Cloudflare(仅命令行发布方式需要)
npx wrangler login

提示 全流程只需要 npm,不需要 Docker、不需要额外安装全局工具链。

04部署到 Cloudflare Workers

这是最省心的方式:把仓库连接到 Cloudflare,之后每次推送都会自动构建并发布, 还可以保留历史版本随时回滚。

  1. Fork 仓库

    打开 github.com/lircia/RP-Re_Player, 点右上角「Fork」Fork 到自己账号下,方便后续自定义配置与提交改动。

  2. 在 Cloudflare 创建 Workers 应用

    控制台左侧选择「计算和 AI」→「Workers 和 Pages」→「创建应用程序」→ 选择 「Workers」→「导入现有 Git 存储库 / Connect to Git」, 首次使用需按提示授权 Cloudflare 访问 GitHub。

  3. 选择仓库与生产分支

    选中你 Fork 的仓库,生产分支保持默认的 main。

  4. 检查构建与部署设置

    构建命令保持默认的 npm run build;部署命令需要显式指向适配器生成的配置文件 (见下方表格)。首次构建约 1–3 分钟。

  5. 保存并部署

    完成后会得到 <项目名>.workers.dev 地址, 也可以在「设置 → 域和路由」里绑定自定义域。

  6. 绑定 D1 后重新部署

    数据库绑定只对之后的部署生效,请先完成第 06 节,再点一次「重试部署」。

设置项值说明
根目录/仓库根目录即项目根目录
构建命令npm run build保持默认,内部为 astro check && astro build
部署命令npx wrangler deploy --config dist/server/wrangler.json指向适配器产物中的 Worker 配置(含 ASSETS 与 DB 绑定)
Node 版本NODE_VERSION = 22在「设置 → 变量和机密」中添加,避免构建环境 Node 版本过低

为什么部署命令不是默认值 npm run build 产出的是 dist/server/entry.mjs 与 dist/server/wrangler.json;Wrangler 默认读项目根目录的 wrangler.toml, 而真正描述 Worker 入口与静态资源绑定的配置由适配器生成,所以部署时要加上 --config dist/server/wrangler.json。

05命令行部署与本地预览

5.1 Wrangler CLI 本地发布

在本地克隆仓库后,一条命令就能完成构建与发布,适合习惯终端操作、希望完全掌控发布过程的人。

 终端
git clone https://github.com/lircia/RP-Re_Player.git
cd RP-Re_Player
npm install

# 构建并发布到 Cloudflare Workers
npm run cf:deploy

# 等价于:
# npm run build && wrangler deploy --config dist/server/wrangler.json

常用命令 npm run cf:dev 在本地启动带 Worker 运行时的开发服务器; npm run preview 预览已有构建产物。

5.2 本地运行(可选)

想先在本机看效果,可以执行 npm run local(Windows 上双击 Local.cmd 亦可)。 默认在 127.0.0.1 上提供 HTTP 80 与 HTTPS 443 服务, 地址显示为 soers.de5.net,默认管理员密码为 masteradmin。

注意 主仓库里的本地运行能力并不完整,只能在运行服务的本机访问。 若需要通过局域网内其他设备访问,请使用发布包并阅读包内说明。

06创建并绑定 D1 数据库

D1 用来保存伪挂载信息、访客统计与设置。没有它 RP 也能运行(自动回退内存存储), 但重启或重新部署后数据会丢失,因此正式使用请务必绑定。

  1. 创建 D1 数据库

    控制台里选择「存储和数据库」→「D1 SQL 数据库」→「创建数据库」, 名称填 re-play(可自定义);也可以在本地用命令行创建。

  2. 复制 database_id

    进入数据库详情页,复制数据库 ID。

  3. 写入项目配置

    把 ID 填进 wrangler.toml 后提交到你的仓库; 使用 Git 集成方式时,也可以在控制台的「设置 → 绑定」里直接添加 D1 绑定。 绑定名必须保持为 DB。

  4. 重新部署

    绑定只在部署时生效,务必重新部署一次(Git 集成方式可点「重试部署」)。

  5. 验证

    访问 /admin 或 /table,RP 会自动创建所需数据表并开始写入。

 wrangler.toml
name = "rp"
compatibility_date = "2026-09-06"
keep_vars = true

[[d1_databases]]
binding = "DB"              # 必须是 DB,不要改名
database_name = "re-play"      # 你的 D1 数据库名称
database_id = "你的 D1 数据库 ID"
 终端 · 用命令行管理数据库
# 创建数据库(输出中会给出 database_id,填进 wrangler.toml)
npx wrangler d1 create re-play

# 查看已有数据库列表
npx wrangler d1 list

# 备份数据库(更新前建议执行)
npx wrangler d1 export re-play --remote --output backup.sql

RP 自动创建的数据表

数据表用途
rp_pseudo_links伪挂载(虚拟目录)信息
rp_media_visitors媒体播放进度与完播统计
rp_visitor_events访问、目录、媒体、播放事件
rp_settings保存的环境变量
rp_visitor_theme公开页访客主题

绑定名必须为 DB 改名后 RP 找不到数据库,会静默回退到内存存储,表现为“重启后数据全丢”。

免手工建表 RP 启动时会自动创建并升级上述数据表,不需要在 D1 控制台里粘贴任何 SQL。

07环境变量

在 Workers 项目的「设置 → 变量和机密」中添加,或在 wrangler.toml 的 [vars] 段里声明。所有变量在重新部署后生效。

变量用途
A访客页打开前显示的外部媒体地址
BA 与 C 的最大显示或播放时间(秒),默认 4.2
C与 A 同时播放的可选外部音频地址;设置后 A 视频静音
N网站名称
P管理员密码(建议保存为「机密 / Secret」)
USUmami 脚本地址
UIUmami 网站 ID
UH可选:Umami 主机地址
UD可选:Umami 域名列表

DB 是绑定不是变量 DB 属于绑定(Binding),请在第 06 节的「D1 数据库绑定」里配置,不要写进变量列表。

 wrangler.toml · [vars]
[vars]
A  = ""                              # 访客页打开前显示的外部媒体地址
B  = "4.2"                           # A / C 的最大显示或播放时间(秒)
C  = ""                              # 与 A 同时播放的可选外部音频地址
N  = "Re Player"                     # 网站名称
P  = "masteradmin"                   # 管理员密码,生产环境请务必修改
US = "https://cloud.umami.is/script.js"
UI = ""
UH = ""
UD = ""

变量优先级

  • keep_vars = true 会阻止 Wrangler 删除你在控制台里配置的变量, 因此控制台与 wrangler.toml 可以共存;
  • D1 可用时,RP 会在 rp_settings 中为每个非空的已绑定短变量写入 env:变量名 键(仅在键尚不存在时写入),此后优先读取数据库中的值;
  • 也就是说:在后台改过的值不会被重新部署覆盖;反过来,如果在环境变量里改了值却没生效, 请检查 rp_settings 里是否已经存了旧值。

务必改密码 默认密码 masteradmin 是公开信息,而 /admin 与 /table 都靠它保护; 建议把它保存为机密(Secret),不要明文提交到公开仓库。

08首次访问与后台

  1. 打开站点

    访问 https://<项目名>.workers.dev(或你绑定的自定义域)。 会先看到入口动画,移动端会自动跳到 /Local。

  2. 登录管理后台

    打开 /admin,用变量 P 设置的密码登录(默认 masteradmin)。

  3. 挂载媒体

    在后台把外部视频 / 音频 / 图片链接登记为虚拟目录与文件;站点名称、主题等也在这里设置。

  4. 查看统计

    访问 /table 查看访问、目录、媒体与播放事件。

路由说明
/入口动画,移动端跳转 /Local
/Re入口动画页(外部 intro 媒体后进入 /Loading)
/Loading选择语言后进入访客页面
/Local常规访客媒体库
/Local/Pash/...常规伪挂载展示 URL
/Tree/.../root/tree 挂载媒体的原生播放器页面
/table访客统计页(需管理员密码)
/admin管理后台(伪挂载、主题、设置)

Tree 与 Local Tree 与 Local 同级,但在常规 Local 列表里不会显示; 如果需要它出现在目录树中,请在管理后台把对应文件夹注册为 /tree。

09版本更新

  1. 先备份数据库

    D1 里的数据是唯一无法重新生成的东西,升级前导出一次最稳妥。

  2. 拉取最新代码

    命令行方式用 git pull;Git 集成方式推送代码或直接重新部署即可。

  3. 更新依赖并重新发布

    执行 npm install 后重新构建部署。

  4. 数据结构自动升级

    RP 会在启动时自动创建 / 升级数据表,无需手工执行 SQL。

 终端 · 更新并重新发布
# 1. 备份数据库
npx wrangler d1 export re-play --remote --output backup.sql

# 2. 拉取最新代码并更新依赖
git pull
npm install

# 3. 重新构建并发布
npm run cf:deploy

回滚很容易 使用 Git 集成方式时,每次部署都会保留记录,出问题时在「部署」页选择历史版本即可一键回滚; 数据库结构由 RP 自动兼容升级,通常不需要手动处理。

10常见问题

构建失败,提示 Node 版本过低怎么办?

Astro 7 要求 Node.js ≥ 22。本地把 Node 升到 22 或更高; 在 Cloudflare 的构建环境里,到项目「设置 → 变量和机密」添加 NODE_VERSION = 22,然后重新部署。

能把 Re Player 当作静态站点部署到 Cloudflare Pages 吗?

不能。适配器输出的是 Workers 运行时入口 dist/server/entry.mjs 与 dist/server/wrangler.json(包含 ASSETS 静态资源绑定与 DB 绑定),需要服务端运行环境,而不是一堆静态文件。 请把应用本体部署到 Cloudflare Workers。

部署完成后页面打不开 / 一直停在入口动画?

先确认部署日志没有报错,再检查是否已完成数据库绑定与变量配置。 入口页会按配置读取 A / C 指向的外部媒体, 如果这些地址不可访问,动画阶段可能长时间等待;先清空这两个变量试一次即可定位问题。

D1 绑定名可以改成别的吗?

不可以,必须保持 DB。改名后 RP 读不到数据库,会回退到内存存储, 表现为“重启或重新部署后数据全部消失”。

暂时没有配置 D1,能先跑起来吗?

可以。没有 D1 时 RP 会自动回退内存存储,功能可用,但重启、重新部署或实例切换后数据会丢失。 先体验、后补数据库完全可行。

改了环境变量却不生效?

两种情况:一是环境变量需要重新部署才生效; 二是 D1 可用时 rp_settings 里的 env:变量名 值优先级更高, 后台改过的值会覆盖环境变量。可对照第 07 节的优先级说明排查。

/admin 打不开、或者密码一直提示错误?

确认 P 变量已保存并重新部署过;若沿用了旧数据库, 请检查 rp_settings 中是否残留旧的 env:P。 密码可以用「机密 / Secret」方式保存,修改后同样需要重新部署。

媒体播放失败、字幕或歌词加载不出来?

媒体、.ass 字幕与 .lrc 歌词都必须是可被 Cloudflare Workers 访问到的公开 HTTP(S) 地址。RP 通过站内接口读取字幕与歌词以规避浏览器 CORS 限制, 但如果源站直接拒绝请求(防盗链、鉴权、IP 限制),仍然会失败。

想让局域网里的其他设备访问本地服务?

主仓库中的本地运行能力并不完整,只能在运行服务的本机访问;需要通过局域网内其他设备访问时, 请使用发布包并按包内说明操作。

整个站点的费用大概是多少?

Cloudflare Workers 与 D1 都有免费额度,个人自用、小流量分享通常完全落在免费额度内; 流量很大时再关注 Workers 请求数与 D1 读写量即可。

11附录

11.1 项目目录结构

 RP-Re_Player
RP-Re_Player
├── src/                        # 源码
│   ├── layouts/                # 页面布局
│   ├── lib/                    # 业务逻辑(伪挂载、字幕、歌词、主题等)
│   ├── pages/                  # 路由页面
│   │   ├── api/                # API 接口
│   │   │   ├── admin/          # 管理后台接口
│   │   │   └── public/         # 访客公开接口
│   │   ├── Local/              # 访客媒体库
│   │   └── tree/               # 原生播放器
│   ├── styles/                 # 全局与主题样式
│   └── types/                  # 类型定义
├── public/                     # 静态资源(字体、图标、海报)
├── scripts/                    # 构建与本地运行脚本
├── astro.config.mjs            # Astro 配置
├── wrangler.toml               # Cloudflare 配置
├── package.json                # 项目依赖
└── LICENSE                     # MIT 许可证

11.2 相关链接

许可 Re Player 以 MIT 许可证开源,你可以自由使用、修改与分发; 详细条款见仓库中的 LICENSE 文件。

关于本页 本页仅提供部署说明,不代客部署、不提供在线部署入口。 页面为手写 HTML / CSS / JS,无第三方框架与外部请求,可整套转载或自行托管。