静的サイト
Zenavo は静的サイトを Caddy でポート 8080 から配信し、デプロイのたびにリポジトリからビルドします。
プレーンな HTML
index.html があり package.json がないリポジトリは static として検出され、ファイルがそのまま配信されます。
ビルドするサイト(Vite、React、Vue、Svelte、Astro)
Vite、Create React App、Vue、static アダプターを使う SvelteKit、Astro など、フレームワークが静的ファイルを出力する Node.js プロジェクトは、build スクリプトでビルドされ、出力フォルダーが配信されます。zbpack は各フレームワークのフォルダー(Vite は dist、Create React App は build)を知っていて、Build Plan Preview に outputDir として表示されます。別のフォルダーなら Settings → Build → zbpack options で設定します。
ZBPACK_OUTPUT_DIR=publicシングルページアプリ
クライアント側のルーター(React Router、Vue Router)は設定なしで動きます。拡張子がなくファイルにも一致しないパスは index.html を返し、/assets/app.js のように見つからないアセットは 404 のままです。
静的サイトの変数
静的サイトにはサーバーがないので、Vite の VITE_*(import.meta.env.VITE_API_URL)や Create React App の REACT_APP_* などの変数は、ビルド時に存在する必要があります。Variable タブの変数は実行中のサービスにしか渡されないので、これらは Settings → Build → Build arguments に設定してください。例:
VITE_API_URL=https://api.example.comDockerfile がなくてもビルドに渡ります。ビルド引数を参照してください。自分の Dockerfile では、ビルドコマンドの前にそれぞれ ARG 行で宣言します。バンドルの中身はすべて公開されるので、これらの変数にシークレットを入れないでください。
デプロイ
- Add Service → GitHub で、リポジトリとブランチを選びます。
- Next をクリックし、プレビューに static、または nodejs とフレームワーク・出力フォルダーが表示されていることを確認して Deploy をクリックします。
- Networking タブでドメインを生成するか、自分のドメインを設定します。
その他のジェネレーター
Hugo、Jekyll、MkDocs や zbpack が知らないジェネレーターでは、ビルド済みの出力をコミットして ZBPACK_OUTPUT_DIR をそこに向けるか、サイトをビルドして配信する Dockerfile を追加します。
FROM hugomods/hugo:exts AS build
WORKDIR /src
COPY . .
RUN hugo --minify
FROM caddy:2-alpine
COPY --from=build /src/public /usr/share/caddy
EXPOSE 80よくある問題
| 症状 | 原因 |
|---|---|
/ 以外のページを再読み込みすると 404 | 自分の Dockerfile のサーバーに index.html へのフォールバックがありません。Caddy なら try_files {path} /index.html を使うか、生成されるビルドを使ってください。 |
| 画面が真っ白で、コンソールにアセットの 404 が出る | ビルドのベースパスが / ではありません。vite.config の base や package.json の homepage を確認してください。 |
VITE_* の値が undefined | Variable タブにしか設定されておらず、ビルドに届いていません。ビルド引数に設定して再デプロイしてください。自分の Dockerfile なら ARG での宣言も必要です。 |