メインコンテンツへスキップ

Cloudflare デプロイガイド · v0.1.0

Re Player を Cloudflare にデプロイする

Re Player(RP)はリンク型メディアライブラリ:管理者が管理画面で外部の動画・音声・画像を仮想 /root ディレクトリとして登録し、訪問者は Web 上でディレクトリツリーをたどってそのまま再生できます。動作環境は Astro 7 + Cloudflare Workers 上で、自前のサーバーは不要です。 このページでは、Cloudflare アプリの作成 → D1 データベースのバインド → 環境変数の設定 → 管理画面へのログインまでを、ぜろから順に説明します。

Node ≥ 22 Astro 7 Cloudflare Workers D1 データベース MIT オープンソース

このページは自分でデプロイする方法のみを説明しており、オンラインデプロイの提供は行いません。デプロイの代行も行いません。

01プロジェクト概要

Re Player はリンク型メディアライブラリ:ストレージサービスを直接マウントするのではなく、外部メディアのリンクを仮想ディレクトリとして登録し、訪問者側のプレイヤーが必要に応じて読み込みます。すべてのページと API は Cloudflare Workers 上の Astro がサーバーサイドレンダリングで生成し、データは Cloudflare D1 に書き込まれます。

Cloudflare 実行基盤Workers
ビルドツールAstro 7
データストアCloudflare D1
オープンソースライセンスMIT

多形式の再生

動画・音声・画像をワンクリックで再生。Web プレイヤーが一括して処理します。

リンク疑似マウント

固定の /root 配下に任意の外部メディアリンクをマウントしてディレクトリツリーを構築します。

ASS 字幕

JASSUB / libass によるブラウザレンダリングで、中国語・日本語のフォントフォールバックを内蔵しています。

LRC 歌詞

リアルタイム同期と自動ハイライトスクロール。二言語歌詞と複数行タイムスタンプに対応しています。

言語の自動判定

訪問者の IP から中国語 / 英語 / 日本語を自動選択。手動での切り替えもできます。

訪問者統計

アクセス数・ディレクトリ・メディア・再生イベントは /table で確認できます。

5 つのテーマ

デフォルト・レトロ・アズール・ニューブルー・ライトグレー。公開ページでワンクリック切り替え。

パスワード保護

/admin の管理画面と /table の統計ページにはいずれも管理者パスワードが必要です。

D1 永続化

D1 が未バインドのときは自動的にメモリ保存へフォールバックするので、まず動作を確認してからデータベースを追加できます。

リポジトリ 英語・簡体字中国語・日本語の説明はそれぞれ README.md、 README.zh-CN.md、 README.ja.mdにあります。 このページはデプロイ方法のみを扱います。機能の詳細は README を参照してください。

02デプロイ方法の選び方

Re Player 本体は Cloudflare Workers 上で動作します。違いは「どうやってコードを Cloudflare へ届けるか」だけです。

方法難易度リリース方法向いている人
Cloudflare Workers · Git 連携 おすすめ GitHub リポジトリを接続し、push またはクリックだけで自動ビルド・公開 一度設定すれば、あとはリポジトリを更新するだけでよい人
Cloudflare Workers · Wrangler CLI 中級者向け ローカルでコマンド 1 つでビルドとアップロードが完了 ターミナルに慣れ、リリース工程を完全に掌握したい人
ローカル実行(プレビューのみ) 任意 npm run local / Local.cmd まず手元の PC で試したい、ローカルからのみアクセスしたい人

まず整理しておきたい 2 点 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. コードを取得

    リポジトリを clone するか、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 も、追加のグローバルツールチェーンも不要です。

04Cloudflare Workers へデプロイ

これが最も手間のかからない方法です。リポジトリを Cloudflare に接続すれば、以後は push のたびに自動でビルド・公開されます。 過去のバージョンも記録として残るため、いつでもロールバックできます。

  1. リポジトリを Fork

    github.com/lircia/RP-Re_Playerを開き、右上の「Fork」をクリックしてご自分のアカウントへ Fork します。後から設定をカスタマイズしたり、変更を commit したりしやすくなります。

  2. Cloudflare で Workers アプリケーションを作成

    コンソール左側で「コンピューティングと AI」→「Workers と Pages」→「アプリケーションを作成」→ 「Workers」→「Import an existing Git repository / 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 によるローカルからのリリース

ローカルにリポジトリを clone すれば、コマンド 1 つでビルドとリリースが完了します。ターミナル操作に慣れ、リリース工程を完全に掌握したい人に向いています。

 ターミナル
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です。

注意 メインリポジトリのローカル実行機能は不完全で、サービスを実行している端末からしかアクセスできません。 LAN 内のほかの端末からアクセスしたい場合は、リリースパッケージを使用し、同梱の説明に従ってください。

06D1 データベースの作成とバインド

D1 は疑似マウント情報、訪問者統計、設定を保存するために使います。D1 がなくても RP は動作します(自動的にメモリ保存へフォールバックします)が、 再起動や再デプロイのたびにデータが失われます。本番利用では必ずバインドしてください。

  1. D1 データベースを作成

    コンソールで「ストレージとデータベース」→「D1 SQL データベース」→「データベースを作成」を選び、 名前には re-playを入力します(任意の名前で構いません)。ローカルでコマンドラインから作成することもできます。

  2. database_id をコピー

    データベースの詳細ページを開き、データベース ID をコピーします。

  3. プロジェクトの設定に書き込む

    ID を wrangler.toml に入力してリポジトリへ commit します。 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 スクリプトの URL
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)として保存し、平文のまま公開リポジトリへ commit しないでください。

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 連携方式ではコードを push するか、そのまま再デプロイすれば完了です。

  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 バインディングを含み)、サーバー側の実行環境が必要であり、静的なファイル群ではありません。 Re Player 本体は Cloudflare Workers へデプロイしてください。

デプロイ後にページが開かない/イントロアニメーションから先へ進まない場合は?

まずデプロイログにエラーがないか確認し、次にデータベースのバインディングと変数の設定が完了しているかを確認します。 入口ページは設定に従って A / C が指す外部メディアを読み込みます。 これらのアドレスにアクセスできないと、アニメーションの段階で長く待たされることがあります。まずこの 2 つの変数を空にして一度試すと原因を切り分けられます。

D1 のバインディング名は別の名前に変更できますか?

できません。必ず DBのままにしてください。名前を変えると RP がデータベースを読めず、メモリ保存へフォールバックします。 「再起動や再デプロイの後にデータがすべて消える」という症状になります。

まだ D1 を用意していませんが、先に動かすことはできますか?

できます。D1 がない場合、RP は自動でメモリ保存へフォールバックするため機能は一通り使えますが、再起動・再デプロイ・インスタンスの切り替えでデータは失われます。 まず試してからデータベースを追加する、という進め方で問題ありません。

環境変数を変更したのに反映されない場合は?

原因は 2 つ考えられます。1 つは環境変数は再デプロイしないと反映されないこと。もう 1 つは、D1 が利用できる場合に rp_settings 内の env:変数名 の値のほうが優先され、 管理画面で変更した値が環境変数を上書きする、という点です。第 07 節の優先順位の説明と照らし合わせて確認してください。

/admin が開けない、またはパスワードが常に間違いと表示される場合は?

P 変数が保存され、再デプロイ済みであることを確認してください。古いデータベースをそのまま使っている場合は、 rp_settings に古い env:P が残っていないか確認してください。 パスワードは「シークレット / Secret」として保存できます。変更した場合も再デプロイが必要です。

メディアの再生に失敗する、字幕や歌詞が読み込まれない場合は?

メディア、.ass 字幕と .lrc 歌詞は、いずれも Cloudflare Workers から アクセスできる公開 HTTP(S) アドレスである必要があります。RP はブラウザの CORS 制限を避けるためにサイト内のエンドポイント経由で字幕と歌詞を読み込みますが、 配信元がリクエストを直接拒否する場合(ホットリンク防止・認証・IP 制限)は、それでも失敗します。

LAN 内のほかの端末からローカルサービスにアクセスしたい場合は?

メインリポジトリのローカル実行機能は不完全で、サービスを実行しているマシンからしかアクセスできません。LAN 内のほかの端末からアクセスする必要がある場合は、 リリースパッケージを使用し、同梱の説明に従ってください。

サイト全体の費用はどのくらいかかりますか?

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 で作られており、サードパーティのフレームワークや外部リクエストはありません。まるごと転載したり、ご自身でホスティングしたりできます。