> For the complete documentation index, see [llms.txt](https://stablebuild.gitbook.io/ja/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://stablebuild.gitbook.io/ja/mirtokyasshu/file-mirror.md).

# ファイルミラー

コンテナはインターネットからプルするファイルに依存している場合がほとんどです。GitHub でホストされている依存関係、ビルドツールチェーン、クラウドベンダーの CLI ツールなど、さまざまなものが含まれます。Dockerfile の例：

```docker
# AWS CLIをインストール
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(arch).zip" -o "awscliv2.zip" && \
    unzip awscliv2.zip && \
    ./aws/install
```

信頼性の高い安定したビルドを目指す場合、ファイルはいつでも変更または削除される可能性があるため問題になります。URL でホストされているものが引き続き利用可能である保証も、常に同じファイルを返す保証もまったくありません。

StableBuild は、他のサーバーへのプルスルーキャッシュとして機能するファイルミラーを運営することでこれを解決します。ダウンロードする任意の URL に StableBuild のファイルミラー URL をプレフィックスとして付けます。例：

{% code overflow="wrap" %}

```bash
curl "https://your-prefix.httpcache.stablebuild.com/my-first-tutorial/https://awscli.amazonaws.com/awscli-exe-linux-$(arch).zip" -o "awscliv2.zip"
```

{% endcode %}

このファイルが初めてリクエストされると、awscli.amazonaws.com からフェッチして StableBuild に保存します。次回このファイルをリクエストすると、キャッシュから提供されます。ファイルはイミュータブルになり、ホストサーバーでファイルが変更または削除されても、常にまったく同じファイルが返されます。

> 異なるコンテナが異なるバージョンのファイルを必要とする場合があるため、キャッシュキーを指定します（上記では `my-first-tutorial`）。各キャッシュキーはそれぞれ独立したキャッシュです。

以上です。インターネットからダウンロードするものはすべて安定した信頼性の高いものになりました。🎉

### 認証 / HTTP ヘッダー

API キーなどの認証が必要な URL にアクセスする場合、HTTP ヘッダーでキーを渡すことができます。URL がキャッシュにない場合に、元のサーバーに転送されます。例：

{% code overflow="wrap" %}

```
curl -H "x-api-key: xxxxxx" https://your-prefix.httpcache.stablebuild.com/cache-key/https://httpbin.org/headers
```

{% endcode %}

その後、この URL はキャッシュに入り、URL がキャッシュキーになります。これにより、送信されたヘッダーはそれ以降解釈されなくなります。API キーを変更しても、上記の URL は同じコンテンツを返します。

#### Basic 認証

Basic 認証を使用する場合、URL にユーザー名とパスワードを含めることができます。例えば、<https://httpbin.org/basic-auth/admin/secret>（実際の URL）という URL があり、ユーザー名 `admin`、パスワード `secret` の認証情報がある場合、次のように URL にエンコードできます：

{% code overflow="wrap" %}

```
curl -v https://your-prefix.httpcache.stablebuild.com/cache-key/https://admin:secret@httpbin.org/basic-auth/admin/secret
```

{% endcode %}

### ヒントとコツ

#### キャッシュからファイルを削除する

キャッシュされたファイルは **ダッシュボード > File mirror** に一覧表示されます。「Cached files」に移動し、キャッシュキーをクリックして、URL を見つけてください。三点メニューをクリックし、*Delete* を選択してキャッシュからファイルを削除します。以降のリクエストではファイルが再フェッチされます。

<figure><img src="/files/FqVfZEf9xOJLwio43Vfn" alt=""><figcaption><p>キャッシュからファイルを削除</p></figcaption></figure>

#### GitHub リポジトリのキャッシュ

GitHub リポジトリへのアクセスが必要な場合、次のようなコードがあるかもしれません：

```bash
git clone https://github.com/libvips/libvips && \
    cd libvips && \
    git checkout 2be083adf2fcf3de5da393a748339bd103960cd3 && \
    # リポジトリで何か処理する
```

StableBuild は `git` コマンドをキャッシュできませんが、代わりにこのコミットの ZIP ファイルを GitHub からダウンロードしてキャッシュできます。例：

{% code overflow="wrap" %}

```bash
curl https://your-prefix.httpcache.stablebuild.com/my-first-tutorial/https://github.com/libvips/libvips/archive/2be083adf2fcf3de5da393a748339bd103960cd3.zip -o libvips.zip && \
    unzip libvips.zip && \
    mv libvips-2be083adf2fcf3de5da393a748339bd103960cd3 libvips && \
    cd libvips && \
    # リポジトリで何か処理する
```

{% endcode %}

#### ファイルを手動でアップロードする

ローカルファイルをファイルミラーに保存したい場合：

1. **ダッシュボード > File mirror** に移動します。
2. 「Cached files」で、キャッシュキーを選択するか、青い「New cache key」ボタンで新しいキャッシュキーを作成します。
3. 「Upload file」をクリックし、ファイルと名前を選択します。

<figure><img src="/files/xksmz3uqn0qJLJY5zA9F" alt=""><figcaption><p>ファイルミラーへのファイルの手動アップロード</p></figcaption></figure>

その後、「Cached files」でアップロードしたファイルを見つけ、三点メニューを選択して「Copy URL」をクリックします。その URL を Dockerfile やビルドスクリプトで使用できます。

<figure><img src="/files/NuoEEuajZt40XNzaZyht" alt=""><figcaption><p>手動アップロードしたファイルの URL をコピー</p></figcaption></figure>

#### ストレージ制限

キャッシュされたファイルはストレージ制限の対象となります（有料プランでは超過料金が発生します）。現在のストレージ使用量は **ダッシュボード** で確認できます。ファイルがキャッシュからフェッチされなくなったかどうか（削除できるかどうか）を確認するには、**ダッシュボード > Billing > Raw usage logs** の生トラフィックログを参照してください。

#### 大きな URL は非同期で処理される

StableBuild のファイルミラーに HTTP リクエストを行うと、通常は初回ダウンロード中にファイルをキャッシュします。ただし、場合によっては非同期でファイルを処理します。これは次の場合に発生します：

1. 返されるファイルが 5GB を超える場合。
2. ファイルが 100MB を超えるが、`Content-Length` ヘッダーが設定されていない場合。

（これは UI でアップロードされたファイルには適用されず、常に即時処理されます。）

この場合、URL が StableBuild にキャッシュされるまで数分（またはサイズによってはそれ以上）かかる場合があります。この状態では、「Cached files」の URL の横に砂時計アイコンが表示されます：

<figure><img src="/files/UVYxype4o3jG7tHrRpZC" alt=""><figcaption><p>非同期でキャッシュされているファイル</p></figcaption></figure>

このファイルは非同期で処理されるため、（別のデータセンターの別のマシンから）2 回目のフェッチが行われます。
