コンテンツにスキップ

Docker ビルド

ビルダーは Docker イメージとして提供されます。コンテンツリポジトリは、Node.js や Astro をローカルにインストールすることなく、このイメージを実行して静的 HTML を生成します。

docker/Dockerfilenode:24-alpine を使用したマルチステップビルドを採用しています:

FROM node:24-alpine AS builder
WORKDIR /app
# Install deps (cached layer)
COPY package*.json ./
RUN npm ci
# Copy framework code
COPY . .
# Remove placeholder content
RUN rm -rf src/content/docs/*
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
レイヤー内容個別にキャッシュする理由
1COPY package*.json + npm ci依存関係は変更頻度が低く、このレイヤーをキャッシュすることで毎回のビルドでの再ダウンロードを回避
2COPY . .フレームワークのソースコード
3rm -rf src/content/docs/*注入されたコンテンツのみが表示されるよう、プレースホルダーコンテンツを削除
4COPY entrypoint.shビルドオーケストレーションスクリプト

docker/entrypoint.sh はコンテナ起動時に毎回実行されます。以下の手順を順番に実行します:

Terminal window
npm install
npm update

テーマパッケージおよびすべての依存関係が最新の互換バージョンであることを確認します。

ステップ 2: テーマ設定のコピー

Section titled “ステップ 2: テーマ設定のコピー”
Terminal window
cp /app/node_modules/@f5-sales-demo/docs-theme/astro.config.mjs /app/astro.config.mjs
cp /app/node_modules/@f5-sales-demo/docs-theme/src/content.config.ts /app/src/content.config.ts

テーマパッケージから astro.config.mjscontent.config.ts をコピーします。テーマは Astro 設定の唯一の信頼できるソースです。テーマシステムの設計についてはアーキテクチャを参照してください。

Terminal window
if [ -d "$CONTENT_DIR" ]; then
cp -r "$CONTENT_DIR"/* /app/src/content/docs/
else
echo "ERROR: No content found at $CONTENT_DIR"
exit 1
fi

マウントされたコンテンツを Astro のコンテンツコレクションディレクトリにコピーします。コンテンツディレクトリが存在しない場合はエラーで終了します。

Terminal window
if [ -z "$DOCS_TITLE" ] && [ -f /app/src/content/docs/index.mdx ]; then
DOCS_TITLE=$(grep -m1 '^title:' /app/src/content/docs/index.mdx | sed 's/title: *["]*//;s/["]*$//')
export DOCS_TITLE
fi

DOCS_TITLE が環境変数で設定されていない場合、index.mdxtitle: フロントマターフィールドから抽出します。

Terminal window
if [ -z "$DOCS_BASE" ] && [ -n "$GITHUB_REPOSITORY" ]; then
DOCS_BASE="/${GITHUB_REPOSITORY#*/}"
export DOCS_BASE
fi

GitHub リポジトリ名からサイトのベースパスを導出します(例:owner/my-docs/my-docs になります)。

Terminal window
npm run build

astro build を実行し、/app/dist/ に静的出力を生成します。

Terminal window
if [ -d "$OUTPUT_DIR" ]; then
cp -r /app/dist/* "$OUTPUT_DIR"/
fi

ビルドされたサイトを出力マウントポイントにコピーします。

変数デフォルト値説明
CONTENT_DIR/content/docsマウントされたコンテンツディレクトリへのパス
OUTPUT_DIR/outputビルドされたサイトがコピーされるパス
DOCS_TITLE(index.mdx から抽出)Astro 設定に渡されるサイトタイトル
DOCS_DESCRIPTION(index.mdx から抽出)フロントマターからのサイト説明
DOCS_BASE(GITHUB_REPOSITORY から導出)サイトのベースパス(例:/my-docs
DOCS_SITE(GITHUB_REPOSITORY_OWNER から導出)Astro 設定に渡されるサイト URL(例:https://<owner>.github.io
GITHUB_REPOSITORY(GitHub Actions により設定)DOCS_BASE の導出に使用される owner/repo 文字列
GENERATE_PDFfalseビルド後の PDF 生成を有効化
PDF_FILENAMEdocs生成される PDF の出力ファイル名
LLMS_OPTIONAL_LINKS[]llms.txt の Optional セクション用の子サイト URL の JSON 配列

Docker を使用してローカルでドキュメントをビルドするには:

Terminal window
docker run --rm \
-v "$(pwd)/docs:/content/docs" \
-v "$(pwd)/output:/output" \
ghcr.io/f5-sales-demo/docs-builder:latest

これにより、ローカルの docs/ ディレクトリがコンテンツとしてマウントされ、ビルドされたサイトが output/ に書き込まれます。

ライブ開発サーバーワークフローを希望するコンテンツ執筆者は、コンテンツ執筆者向けローカルプレビューを参照してください。

開発者向け: ローカル開発サーバー

Section titled “開発者向け: ローカル開発サーバー”

ビルダー自体(コンポーネント、プラグイン、テーマ統合)の開発を行う場合、Docker を使用せずに Astro の開発サーバーを直接実行できます:

Terminal window
npm ci
cp node_modules/@f5-sales-demo/docs-theme/astro.config.mjs astro.config.mjs
cp node_modules/@f5-sales-demo/docs-theme/src/content.config.ts src/content.config.ts
# Copy some test content into the content collection
cp -r /path/to/test-content/* src/content/docs/
DOCS_TITLE="Dev Test" npx astro dev --host

http://localhost:4321 を開きます。コンポーネントやプラグインの変更にはホットモジュールリプレースメント(HMR)が機能します。

イメージは GitHub Container Registry に公開されています:

ghcr.io/f5-sales-demo/docs-builder

毎回のビルドで 2 つのタグがプッシュされます:

タグ説明
latestmain からの最新ビルド
<sha>再現可能なビルドのための完全な Git コミット SHA

イメージのビルドと公開を行うワークフローについては、CI/CD とガバナンスを参照してください。