Cloudflare wiki

Workers, Next.js, Express, Workers Cache, R2 a API tokeny - návody a know-how z produkce

Rozcestník našich návodů ke Cloudflare a k tomu krátké, často potřebné postupy, které se jinam nevešly: účtové API tokeny, deploy do více účtů a hromadná práce s R2 z příkazové řádky. Každý příkaz zkopírujete jedním kliknutím.

Vladimír NeporAutorIng. Vladimír Nepor
Publikováno
Mapa rozcestníku Cloudflare: vaše aplikace (Next.js, Express, statické soubory) se přes Wrangler nasadí na Cloudflare Worker. Před Workerem odpovídá Workers Cache, napojené jsou D1 a R2. Čtyři karty vedou na návody a na sekce o tokenech a R2.Vaše aplikaceNext.jsExpressstatické souborySíť Cloudflarewrangler deployWorkers CacheHIT ≈ 50 msWorkerváš kódD1 · SQLR2 · souboryAPI token · .env · aws s3 → R2NÁVOD · NEXT.JSNext.js na CloudflareWorker OpenNext, D1, R2, deploy (EN)otevřít →NÁVOD · EXPRESSExpress na Workersnodejs_compat, bindingy, Handlebars (EN)otevřít →NÁVOD · EDGE CACHEWorkers Cachecache před Workerem, purgeotevřít →ZDE · CLITokeny a R2 z CLIdeploy přes token, sync do R2otevřít →
Obsah stránky

00 · Přehled

Cloudflare ve Vrealmaticu

Tady začíná všechno, co jsme o Cloudflare sepsali. Větší témata mají vlastní návody (Next.js, Express, Workers Cache). Krátké a často potřebné know-how, které k žádnému z nich nepatří, zůstává přímo zde: API tokeny, deploy do více účtů přes token a práce s úložištěm R2 z příkazové řádky.

Co potřebujete vyřešit?

OtázkaKde najdete odpověď
Chci provozovat aplikaci v Next.js na Cloudflare Workers.Next.js na Cloudflare (anglicky) →
Mám API v Expressu a chci ho na Worker.Express na Workers (anglicky) →
Stránky se mají vracet z edge bez spuštění Workeru.Workers Cache →
Jaký token potřebuji, účtový, nebo uživatelský?API tokeny →
Nasazuji do více účtů Cloudflare (klienti, projekty).Deploy přes token →
Potřebuji nahrát nebo smazat hodně souborů v R2.R2 z příkazové řádky →
Vystačím si s bezplatným plánem?Limity v kostce →
Čeho se stránka týká

Stav k říjnu 2026: Wrangler 4, účtové API tokeny, Workers Cache (spuštěná v červenci 2026). Všechno popsané běží v produkci na našich vlastních webech včetně tohoto (Next.js na OpenNext, D1, R2, Workers Cache).

01 · Návody

Návody

02 · API tokeny

Účtové a uživatelské API tokeny

Každý neinteraktivní přístup ke Cloudflare (Wrangler v CI, deploy do účtu klienta, skripty) potřebuje API token. Cloudflare dnes nabízí dva druhy a pro automatizaci je lepší volbou účtový token.

Účtový, nebo uživatelský token

Account API token (účtový)User API token (uživatelský)
KdeManage Account → Account API TokensMy Profile → API Tokens
Patříúčtu (servisní identita)konkrétnímu člověku
Když člověk odejdefunguje dálpřestane fungovat, jakmile uživatele z účtu odeberete
Typické použitíCI/CD, deploy, integracevlastní skripty a pokusy
Poznáte ho podleprefixu cfat_-

Jak token založit bezpečně

  • Začněte šablonou. Pro deploy Workerů použijte Edit Cloudflare Workers a přidejte jen to, co projekt opravdu používá (D1, R2, KV).
  • Omezte zdroje na jeden účet a tam, kde jsou potřeba oprávnění k zóně, na konkrétní zóny (Zone Resources).
  • Client IP Address Filtering povolí token jen z adres kanceláře, VPN nebo CI runneru. Uniklý token je pak jinde k ničemu.
  • TTL (platnost) u tokenů, které potřebujete jen dočasně. Token na jednorázovou migraci nemá žít navždy.
Zobrazí se jen jednou

Hodnotu tokenu Cloudflare ukáže jen hned po vytvoření. Uložte ji do správce hesel nebo rovnou do tajných proměnných CI. Když ji ztratíte, token přegenerujte (roll) nebo vytvořte nový. Několik produktů účtové tokeny nepodporuje (např. Page Rules, Registrar, Turnstile), tam použijte uživatelský.

03 · Deploy

Deploy přes token do více účtů

npx wrangler login vás přihlásí přes OAuth jako jednoho uživatele. Když nasazujete do více účtů Cloudflare (vlastního, klientských), je spolehlivější dát každému projektu vlastní účtový token v souboru .env. Wrangler si ho načte sám.

Krok 1: Odhlaste se z OAuth relace

Ať je jasné, jakou identitu Wrangler použije (token v prostředí má před OAuth stejně přednost).

Terminál
npx wrangler logout

Krok 2: V každém cílovém účtu vytvořte účtový token

Manage Account → Account API Tokens → Create Token, šablona Edit Cloudflare Workers, omezená na tento jeden účet (viz bezpečné založení tokenu). Zkopírujte si i Account ID: na Account home klikněte na tři tečky vedle názvu účtu a zvolte Copy account ID.

Krok 3: Vložte token do .env v kořeni projektu

.env
CLOUDFLARE_ACCOUNT_ID="<ACCOUNT_ID>"
CLOUDFLARE_API_TOKEN="<API_TOKEN>"
Terminál
printf '.env\n.env.*\n' >> .gitignore

Soubor .env se nesmí dostat do gitu. Pro více prostředí lze použít i soubory .env.<prostředí>.

Krok 4: Ověřte, jaký účet Wrangler vidí

Výpis musí ukázat token a účet, který čekáte. Pokud ne, zkontrolujte názvy proměnných a že příkaz spouštíte v kořeni projektu.

Terminál
npx wrangler whoami

Krok 5: Nasaďte

Terminál
npx wrangler deploy
# or the project's own script, e.g. npm run deploy
Zapamatujte si
  • Jeden projekt = jeden účtový token ve vlastním .env. Přepínání mezi účty je pak jen přepínání mezi projekty.
  • wrangler logout token z .env nezneplatní. Nepotřebný token je nutné smazat v dashboardu.
  • Stejné dvě proměnné fungují i v CI (GitHub Actions, GitLab): uložte je jako tajné proměnné (secrets), ne do repozitáře.

04 · R2

R2 Object Storage z příkazové řádky

R2 je objektové úložiště kompatibilní s S3 bez poplatků za odchozí přenos. Na pár souborů stačí Wrangler, na hromadné nahrávání, synchronizaci a mazání celých prefixů použijte AWS CLI (nebo rclone) s tokenem pro R2. My tak třeba mažeme cache kontextu stránek tohoto webu.

Krok 1: Vytvořte API token pro R2

R2 Object Storage → Account Details → API Tokens: Manage, pak Create Account API token (nebo uživatelský). Zvolte úroveň oprávnění: Admin Read & Write pro práci napříč buckety, Object Read & Write omezené na konkrétní buckety, kde to jde. Pokud to formulář nabízí, přidejte TTL a filtr IP adres. Z ukázaných hodnot potřebujete Access Key ID a Secret Access Key (zobrazí se jen jednou) a endpoint https://<ACCOUNT_ID>.r2.cloudflarestorage.com.

Krok 2: Uložte klíče jako profil AWS CLI

Samostatný profil r2 drží R2 odděleně od případných skutečných přístupů do AWS. R2 region ignoruje, CLI ho ale vyžaduje, proto auto.

~/.aws/credentials
[r2]
aws_access_key_id = <ACCESS_KEY_ID>
aws_secret_access_key = <SECRET_ACCESS_KEY>
~/.aws/config
[profile r2]
region = auto
# Only if an upload fails with a checksum error (older CLI/SDK setups):
# request_checksum_calculation = when_required
# response_checksum_validation = when_required

Novější verze AWS CLI posílají ve výchozím stavu kontrolní součty CRC. R2 je dnes podporuje, dva zakomentované řádky jsou jen záloha pro případ, že nahrávání skončí chybou kontrolního součtu.

Krok 3: Nahrajte adresář do R2

sync nahraje jen nové a změněné soubory. Výstup jde do logu, což se hodí u tisíců souborů.

Terminál
aws s3 sync <SOURCE_DIR> s3://<BUCKET>/<TARGET_PREFIX>   --endpoint-url https://<ACCOUNT_ID>.r2.cloudflarestorage.com   --profile r2   --exact-timestamps   > r2-upload.log 2>&1

Krok 4: Mazání souborů: nejdřív na zkoušku

S --dryrun příkaz jen vypíše, co by smazal. Až seznam sedí, spusťte ho znovu bez --dryrun.

Terminál
aws s3 rm s3://<BUCKET>/<PREFIX_TO_REMOVE>   --endpoint-url https://<ACCOUNT_ID>.r2.cloudflarestorage.com   --profile r2   --recursive   --dryrun
Terminál
# Example: drop the cached page context (v1) of this website
aws s3 rm s3://cache/cache_context/v1   --endpoint-url https://<ACCOUNT_ID>.r2.cloudflarestorage.com   --profile r2   --recursive

Alternativy: Wrangler a rclone

Wrangler zvládne jednotlivé objekty a nastavení bucketu (CORS, pravidla životního cyklu, vlastní domény), hromadný přenos ani synchronizaci ale nemá. Pro velké přenosy je dobrou alternativou k AWS CLI rclone.

Terminál
# Single objects (no bulk / sync command in Wrangler)
npx wrangler r2 object put <BUCKET>/<KEY> --file ./local/file.json --remote
npx wrangler r2 object get <BUCKET>/<KEY> --remote
npx wrangler r2 object delete <BUCKET>/<KEY> --remote
~/.config/rclone/rclone.conf
[r2]
type = s3
provider = Cloudflare
access_key_id = <ACCESS_KEY_ID>
secret_access_key = <SECRET_ACCESS_KEY>
endpoint = https://<ACCOUNT_ID>.r2.cloudflarestorage.com
acl = private
# required with an Object-level token (bucket-scoped)
no_check_bucket = true
Terminál
rclone sync <SOURCE_DIR> r2:<BUCKET>/<TARGET_PREFIX> --dry-run
# remove --dry-run once the list of changes looks right

05 · Limity

Limity bezplatného a placeného plánu v kostce

Bezplatný plán vystačí na překvapivě mnoho, má ale několik pevných limitů. Přehled ukazuje ty, na které narazíte nejdřív; ceny a limity se mění, proto si je před rozhodnutím ověřte v odkazované dokumentaci.

FreeWorkers Paid
Požadavky na Worker100 000 denněbez denního limitu, účtuje se za požadavek
Čas CPU na požadavek10 msvýchozí 30 s, až 5 min
Podřízené požadavky (subrequests)5010 000
Statické soubory na verzi20 000 souborů100 000 souborů
D15 mil. čtených a 100 tis. zapsaných řádků denně, 5 GBv ceně 25 mld. čtení a 50 mil. zápisů měsíčně
R2 (Standard)10 GB-měsíc, 1 mil. operací třídy A a 10 mil. třídy B měsíčně0,015 USD / GB-měsíc nad rámec free; odchozí přenos vždy zdarma
Workers Cachek dispoziciHIT se účtuje jako požadavek, bez času CPU

U renderování na serveru (Next.js na OpenNext) obvykle rozhodne limit 10 ms CPU v bezplatném plánu. S Workers Cache před Workerem se většina požadavků k Workeru vůbec nedostane.

Zdroje

Oficiální dokumentace

Stavíte na Cloudflare?

Nastavíme Workers, OpenNext, D1, R2 i Workers Cache pro váš projekt.

Rezervovat schůzku