01项目速览
Re Player 是一个链接型媒体库:它不直接挂载任何存储服务,而是把外部媒体链接登记为 虚拟目录,再由访客端播放器按需加载。所有页面与接口都由 Cloudflare Workers 上的 Astro 服务端渲染产出,数据写入 Cloudflare D1。
多格式播放
视频、音频、图片一键播放,统一在网页播放器中处理。
链接伪挂载
在固定的 /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前期准备
-
注册 Cloudflare 账号
打开 dash.cloudflare.com 注册并登录。免费套餐已包含 Workers 与 D1 的可用额度,个人使用足够。
-
安装 Node.js ≥ 22
从 nodejs.org 下载安装包,装好后在终端确认版本。低于 22 会导致 Astro 7 构建失败。
-
获取代码
克隆仓库,或从 Releases 下载 ZIP 解压。使用 Git 集成方式时,先把仓库 Fork 到自己账号下再连接。
-
(可选)登录 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,之后每次推送都会自动构建并发布, 还可以保留历史版本随时回滚。
-
Fork 仓库
打开 github.com/lircia/RP-Re_Player, 点右上角「Fork」Fork 到自己账号下,方便后续自定义配置与提交改动。
-
在 Cloudflare 创建 Workers 应用
控制台左侧选择「计算和 AI」→「Workers 和 Pages」→「创建应用程序」→ 选择 「Workers」→「导入现有 Git 存储库 / Connect to Git」, 首次使用需按提示授权 Cloudflare 访问 GitHub。
-
选择仓库与生产分支
选中你 Fork 的仓库,生产分支保持默认的
main。 -
检查构建与部署设置
构建命令保持默认的
npm run build;部署命令需要显式指向适配器生成的配置文件 (见下方表格)。首次构建约 1–3 分钟。 -
保存并部署
完成后会得到
<项目名>.workers.dev地址, 也可以在「设置 → 域和路由」里绑定自定义域。 -
绑定 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 也能运行(自动回退内存存储), 但重启或重新部署后数据会丢失,因此正式使用请务必绑定。
-
创建 D1 数据库
控制台里选择「存储和数据库」→「D1 SQL 数据库」→「创建数据库」, 名称填
re-play(可自定义);也可以在本地用命令行创建。 -
复制 database_id
进入数据库详情页,复制数据库 ID。
-
写入项目配置
把 ID 填进
wrangler.toml后提交到你的仓库; 使用 Git 集成方式时,也可以在控制台的「设置 → 绑定」里直接添加 D1 绑定。 绑定名必须保持为DB。 -
重新部署
绑定只在部署时生效,务必重新部署一次(Git 集成方式可点「重试部署」)。
-
验证
访问
/admin或/table,RP 会自动创建所需数据表并开始写入。
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 | 访客页打开前显示的外部媒体地址 |
B | A 与 C 的最大显示或播放时间(秒),默认 4.2 |
C | 与 A 同时播放的可选外部音频地址;设置后 A 视频静音 |
N | 网站名称 |
P | 管理员密码(建议保存为「机密 / Secret」) |
US | Umami 脚本地址 |
UI | Umami 网站 ID |
UH | 可选:Umami 主机地址 |
UD | 可选:Umami 域名列表 |
DB 是绑定不是变量
DB 属于绑定(Binding),请在第 06 节的「D1 数据库绑定」里配置,不要写进变量列表。
[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首次访问与后台
-
打开站点
访问
https://<项目名>.workers.dev(或你绑定的自定义域)。 会先看到入口动画,移动端会自动跳到/Local。 -
登录管理后台
打开
/admin,用变量P设置的密码登录(默认masteradmin)。 -
挂载媒体
在后台把外部视频 / 音频 / 图片链接登记为虚拟目录与文件;站点名称、主题等也在这里设置。
-
查看统计
访问
/table查看访问、目录、媒体与播放事件。
| 路由 | 说明 |
|---|---|
/ | 入口动画,移动端跳转 /Local |
/Re | 入口动画页(外部 intro 媒体后进入 /Loading) |
/Loading | 选择语言后进入访客页面 |
/Local | 常规访客媒体库 |
/Local/Pash/... | 常规伪挂载展示 URL |
/Tree/... | /root/tree 挂载媒体的原生播放器页面 |
/table | 访客统计页(需管理员密码) |
/admin | 管理后台(伪挂载、主题、设置) |
Tree 与 Local
Tree 与 Local 同级,但在常规 Local 列表里不会显示;
如果需要它出现在目录树中,请在管理后台把对应文件夹注册为 /tree。
09版本更新
-
先备份数据库
D1 里的数据是唯一无法重新生成的东西,升级前导出一次最稳妥。
-
拉取最新代码
命令行方式用
git pull;Git 集成方式推送代码或直接重新部署即可。 -
更新依赖并重新发布
执行
npm install后重新构建部署。 -
数据结构自动升级
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
├── 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 相关链接
项目
GitHub 仓库 · 简体中文 README · English README · 日本語 README · 问题反馈
许可
Re Player 以 MIT 许可证开源,你可以自由使用、修改与分发;
详细条款见仓库中的 LICENSE 文件。
关于本页 本页仅提供部署说明,不代客部署、不提供在线部署入口。 页面为手写 HTML / CSS / JS,无第三方框架与外部请求,可整套转载或自行托管。