← Containers / containers / examples
Připojení bucketů R2 pomocí FUSE
FUSE (Filesystem in Userspace) umožňuje připojit R2 buckety jako souborové systémy v rámci Containers. Aplikace pak mohou s R2 pracovat pomocí standardních operací souborového systému namísto API pro objektové úložiště.
Pro lokální spuštění FUSE kontejneru viz Podpora FUSE během lokálního vývoje.
Mezi běžné případy použití patří:
- Inicializace kontejnerů pomocí assets - připojení datových sad, modelů nebo závislostí pro sandboxy a agentní prostředí
- Uchovávání stavu uživatele - ukládání a přístup ke konfiguraci uživatele nebo stavu aplikace bez nutnosti spravovat stahování
- Velké statické soubory - zabraňuje zbytečnému nárůstu velikosti obrazů kontejneru nebo stahování souborů při spuštění
- Úprava souborů - zpřístupní kód nebo konfiguraci uvnitř kontejneru a uloží úpravy napříč instancemi.
Připojování bucketů
Pro připojení bucketu R2 nainstalujte do svého Dockerfile FUSE adaptér a nastavte ho tak, aby se spouštěl při startu kontejneru.
Tento příklad používá tigrisfs ↗, které podporuje úložiště kompatibilní s S3, včetně R2:
Dockerfile
FROM alpine:3.20
# Install FUSE and dependencies
RUN apk add --no-cache \
--repository http://dl-cdn.alpinelinux.org/alpine/v3.20/main \
ca-certificates fuse curl bash
# Install tigrisfs
RUN ARCH=$(uname -m) && \
if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \
if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \
curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \
tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \
rm /tmp/tigrisfs.tar.gz && \
chmod +x /usr/local/bin/tigrisfs
# Create startup script that mounts bucket and runs a command
RUN printf '#!/bin/sh\n\
set -e\n\
\n\
mkdir -p /mnt/r2\n\
\n\
R2_ENDPOINT="https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com"\n\
echo "Mounting bucket ${R2_BUCKET_NAME}..."\n\
/usr/local/bin/tigrisfs --endpoint "${R2_ENDPOINT}" -f "${R2_BUCKET_NAME}" /mnt/r2 &\n\
sleep 3\n\
\n\
echo "Contents of mounted bucket:"\n\
ls -lah /mnt/r2\n\
' > /startup.sh && chmod +x /startup.sh
EXPOSE 8080
CMD ["/startup.sh"]Spouštěcí skript vytvoří přípojný bod, na pozadí spustí tigrisfs pro připojení bucketu a poté vypíše obsah připojeného adresáře.
Předávání přihlašovacích údajů do kontejneru
Váš Container potřebuje Přihlašovací údaje R2 a konfiguraci předanou jako proměnné prostředí. Přihlašovací údaje ukládejte jako Worker secrets, poté je předejte prostřednictvím envVars vlastnost:
import { Container, getContainer } from "@cloudflare/containers";
export class FUSEDemo extends Container {
defaultPort = 8080;
sleepAfter = "10m";
envVars = {
AWS_ACCESS_KEY_ID: this.env.AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY: this.env.AWS_SECRET_ACCESS_KEY,
R2_BUCKET_NAME: this.env.R2_BUCKET_NAME,
R2_ACCOUNT_ID: this.env.R2_ACCOUNT_ID,
};
}import { Container, getContainer } from "@cloudflare/containers";
interface Env {
FUSEDemo: DurableObjectNamespace<FUSEDemo>;
AWS_ACCESS_KEY_ID: string;
AWS_SECRET_ACCESS_KEY: string;
R2_BUCKET_NAME: string;
R2_ACCOUNT_ID: string;
}
export class FUSEDemo extends Container<Env> {
defaultPort = 8080;
sleepAfter = "10m";
envVars = {
AWS_ACCESS_KEY_ID: this.env.AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY: this.env.AWS_SECRET_ACCESS_KEY,
R2_BUCKET_NAME: this.env.R2_BUCKET_NAME,
R2_ACCOUNT_ID: this.env.R2_ACCOUNT_ID,
};
} AWS_ACCESS_KEY_ID a AWS_SECRET_ACCESS_KEY by se měly ukládat jako tajné údaje, zatímco R2_BUCKET_NAME a R2_ACCOUNT_ID lze nakonfigurovat jako proměnné ve vašem wrangler.jsonc:
{
"vars": {
"R2_BUCKET_NAME": "my-bucket",
"R2_ACCOUNT_ID": "your-account-id"
}
}Další poskytovatelé úložiště kompatibilní s S3
Další poskytovatelé úložiště kompatibilní s S3, včetně AWS S3 a Google Cloud Storage, lze připojit stejným způsobem jako R2. Bude potřeba zadat příslušnou adresu URL koncového bodu a přístupové údaje daného poskytovatele úložiště.
Připojování prefixů bucketů
Pro připojení konkrétního prefixu (podadresáře) v rámci bucketu vyžaduje většina FUSE adaptérů připojit celý bucket a poté přistupovat k cestě prefixu v rámci tohoto připojení.
S tigrisfs připojte bucket a k prefixu přistupujte přes cestu v souborovém systému:
RUN printf '#!/bin/sh\n\
set -e\n\
\n\
mkdir -p /mnt/r2\n\
\n\
R2_ENDPOINT="https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com"\n\
/usr/local/bin/tigrisfs --endpoint "${R2_ENDPOINT}" -f "${R2_BUCKET_NAME}" /mnt/r2 &\n\
sleep 3\n\
\n\
echo "Accessing prefix: ${BUCKET_PREFIX}"\n\
ls -lah "/mnt/r2/${BUCKET_PREFIX}"\n\
' > /startup.sh && chmod +x /startup.shVaše aplikace pak může číst z /mnt/r2/${BUCKET_PREFIX} pro přístup pouze k souborům pod tímto prefixem. Předejte BUCKET_PREFIX jako proměnnou prostředí spolu s ostatní konfigurací R2.
Připojování bucketů v režimu jen pro čtení
Abyste aplikacím zabránili zapisovat do připojeného bucketu, přidejte -o ro příznak pro připojení souborového systému jen pro čtení:
RUN printf '#!/bin/sh\n\
set -e\n\
\n\
mkdir -p /mnt/r2\n\
\n\
R2_ENDPOINT="https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com"\n\
/usr/local/bin/tigrisfs --endpoint "${R2_ENDPOINT}" -o ro -f "${R2_BUCKET_NAME}" /mnt/r2 &\n\
sleep 3\n\
\n\
ls -lah /mnt/r2\n\
' > /startup.sh && chmod +x /startup.shTo se hodí pro sdílené soubory nebo konfigurační soubory, u kterých chcete zajistit, aby z nich aplikace jen četly data.
Související zdroje
- Proměnné prostředí kontejneru - zjistěte, jak předávat secrets a proměnné do Containers
- tigrisfs ↗ - FUSE adaptér pro úložiště kompatibilní s S3 včetně R2
- s3fs ↗ - alternativní FUSE adaptér pro úložiště kompatibilní s S3
- gcsfuse ↗ - FUSE adaptér pro buckety Google Cloud Storage