Loading...
Loading...
Deploy static sites to Cloudflare Pages with custom domains and CI/CD. Use when the user wants to deploy a site to Cloudflare Pages, add a custom domain to a Pages project, set up GitHub Actions CI/CD for Cloudflare Pages, roll back a deployment, or verify deployment status. Triggers on "deploy to Cloudflare", "Cloudflare Pages", "add custom domain", "pages deploy", or any Cloudflare Pages hosting workflow.
npx skill4agent add baphomet480/claude-skills cloudflare-pages| Requirement | How to get it |
|---|---|
| wrangler CLI | |
| Cloudflare account | dash.cloudflare.com — free tier works |
| Account ID | Dashboard → any zone → Overview sidebar, or |
| API Token (CI/CD) | Dashboard → API Tokens → "Edit Cloudflare Workers" template (includes Pages) |
| DNS API Token | Dashboard → API Tokens → Custom → Zone:DNS:Edit (only if adding custom domains via API) |
| Zone ID | Dashboard → your domain → Overview sidebar (only for custom domains) |
# 1. Build your site
<your-build-command> # e.g. hugo --minify, npm run build
# 2. Deploy output directory
wrangler pages deploy <output-dir> --project-name <project-name>production<project>.pages.devbash scripts/setup_pages_project.sh <project-name> "<build-command>" <output-dir> [branch]wrangler pages project create*.pages.devbranchmainwrangler pages project create <project-name> --production-branch main<your-build-command>
wrangler pages deploy <output-dir> --project-name <project-name># Set required environment variables
export CLOUDFLARE_ACCOUNT_ID="<your-account-id>"
export CLOUDFLARE_API_TOKEN="<pages-edit-token>"
export CLOUDFLARE_ZONE_ID="<your-zone-id>"
export CLOUDFLARE_DNS_TOKEN="<dns-edit-token>" # optional, falls back to API_TOKEN
bash scripts/add_custom_domain.sh <custom-domain> <project-name><project>.pages.dev| Secret | Value |
|---|---|
| API token with "Edit Cloudflare Workers" permissions |
| Your Cloudflare account ID |
# List recent deployments
wrangler pages deployment list --project-name <project-name>
# Rollback: checkout previous commit, rebuild, redeploy
git checkout <commit-hash>
<your-build-command>
wrangler pages deploy <output-dir> --project-name <project-name>
# Return to latest
git checkout mainexport CLOUDFLARE_ACCOUNT_ID="<your-account-id>"
export CLOUDFLARE_API_TOKEN="<your-token>"
bash scripts/verify_deployment.sh <project-name> [custom-domain]*.pages.dev| Script | Purpose | Required env vars |
|---|---|---|
| Create Pages project via wrangler | |
| Register domain + create CNAME | |
| Check deploy status, SSL, HTTP | |
| Operation | Token needed | Scope | Where used |
|---|---|---|---|
| Wrangler OAuth | Automatic via | Local CLI, CI/CD |
| Register custom domain on Pages | API Token | Account:Cloudflare Pages:Edit | |
| Create CNAME DNS record | DNS API Token | Zone:DNS:Edit | |
| CI/CD deploy (GitHub Actions) | API Token | "Edit Cloudflare Workers" template | GitHub Secrets |
| Query deployments | API Token | Account:Cloudflare Pages:Read | |
CLOUDFLARE_API_TOKENCLOUDFLARE_DNS_TOKEN| Problem | Cause | Fix |
|---|---|---|
| wrangler not installed | |
| OAuth expired or wrong token | |
| Custom domain stuck "pending" | Missing or wrong CNAME record | Check DNS: CNAME must point to |
| SSL not provisioning | Domain not proxied through Cloudflare | Set CNAME proxy to "Proxied" (orange cloud) |
| 522 error on custom domain | DNS record exists but wrong target | Delete old record, re-run |
| Deploy succeeds but site 404s | Wrong output directory | Verify build output dir matches deploy path |
| CI/CD deploy fails | Missing GitHub secrets | Add |
wrangler pages deploy