Deploy your Astro Site to Cloudflare
You can deploy full-stack applications, including front-end static assets and back-end APIs, as well as on-demand rendered sites, to both Cloudflare Workers and Cloudflare Pages.
This guide includes:
Cloudflare recommends using Cloudflare Workers for new projects. For existing Pages projects, refer to Cloudflare’s migration guide and compatibility matrix.
Prerequisites
Заголовок раздела «Prerequisites»To get started, you will need:
- A Cloudflare account. If you don’t already have one, you can create a free Cloudflare account during the process.
Cloudflare Workers
Заголовок раздела «Cloudflare Workers»How to deploy with Wrangler
Заголовок раздела «How to deploy with Wrangler»-
Install Wrangler CLI.
Окно терминала npm install wrangler@latest --save-dev -
If your site uses on-demand rendering, install the
@astrojs/cloudflareadapter.This will install the adapter and make the appropriate changes to your
astro.config.mjsfile in one step.Окно терминала npx astro add cloudflareОкно терминала pnpm astro add cloudflareОкно терминала yarn astro add cloudflareRead more about on-demand rendering in Astro. -
Create a Wrangler configuration file.
Running
astro add cloudflarewill create this for you; if you are not using the adapter, you’ll need to create it yourself.wrangler.jsonc {"name": "my-astro-app","compatibility_date": "YYYY-MM-DD", // Update to the day you deploy"assets": {"directory": "./dist",}}wrangler.jsonc {"main": "dist/_worker.js/index.js","name": "my-astro-app","compatibility_date": "YYYY-MM-DD", // Update to the day you deploy"compatibility_flags": ["nodejs_compat","global_fetch_strictly_public"],"assets": {"binding": "ASSETS","directory": "./dist"},"observability": {"enabled": true}} -
Preview your project locally with Wrangler.
Окно терминала npx astro build && npx wrangler dev -
Deploy using
npx wrangler deploy.Окно терминала npx astro build && npx wrangler deploy
After your assets are uploaded, Wrangler will give you a preview URL to inspect your site.
How to deploy with CI/CD
Заголовок раздела «How to deploy with CI/CD»You can also use a CI/CD system such as Workers Builds (BETA) to automatically build and deploy your site on push.
If you’re using Workers Builds:
-
Follow Steps 1-3 from the Wrangler section above.
-
Log in to the Cloudflare dashboard and navigate to
Workers & Pages. SelectCreate. -
Under
Import a repository, select a Git account and then the repository containing your Astro project. -
Configure your project with:
- Build command:
npx astro build - Deploy command:
npx wrangler deploy
- Build command:
-
Click
Save and Deploy. You can now preview your Worker at its providedworkers.devsubdomain.
Cloudflare Pages
Заголовок раздела «Cloudflare Pages»How to deploy with Wrangler
Заголовок раздела «How to deploy with Wrangler»-
Install Wrangler CLI.
Окно терминала npm install wrangler@latest --save-devОкно терминала pnpm add wrangler@latest --save-devОкно терминала yarn add wrangler@latest --dev -
If your site uses on-demand rendering, install the
@astrojs/cloudflareadapter.This will install the adapter and make the appropriate changes to your
astro.config.mjsfile in one step.Окно терминала npx astro add cloudflareОкно терминала pnpm astro add cloudflareОкно терминала yarn astro add cloudflare -
Create a Wrangler configuration file.
Because Cloudflare recommends new projects use Workers instead of Pages, the
astro add cloudflarecommand creates awrangler.jsoncandpublic/.assetsignorefile, which are specific to Workers projects. You will need to delete thepublic/.assetsignorefile and change yourwrangler.jsoncfile. If you are not using the adapter you’ll need to create it yourself.Ensure your
wrangler.jsoncfile is structured like this:wrangler.jsonc {"name": "my-astro-app","compatibility_date": "YYYY-MM-DD", // Update to the day you deploy"pages_build_output_dir": "./dist"}wrangler.jsonc {"name": "my-astro-app","compatibility_date": "YYYY-MM-DD", // Update to the day you deploy"compatibility_flags": ["nodejs_compat","disable_nodejs_process_v2"],"pages_build_output_dir": "./dist"}Read more about on-demand rendering in Astro. -
Preview your project locally with Wrangler.
Окно терминала npx astro build && wrangler pages dev ./distОкно терминала pnpm astro build && wrangler pages dev ./distОкно терминала yarn astro build && wrangler pages dev ./dist -
Deploy using
npx wrangler deploy.Окно терминала npx astro build && wrangler pages deploy ./distОкно терминала pnpm astro build && wrangler pages deploy ./distОкно терминала yarn astro build && wrangler pages deploy ./dist
After your assets are uploaded, Wrangler will give you a preview URL to inspect your site.
How to deploy a site with CI/CD
Заголовок раздела «How to deploy a site with CI/CD»-
Push your code to your git repository (e.g. GitHub, GitLab).
-
Log in to the Cloudflare dashboard and navigate to Compute (Workers) > Workers & Pages. Select Create and then select the Pages tab. Connect your git repository.
-
Configure your project with:
- Framework preset:
Astro - Build command:
npm run build - Build output directory:
dist
- Framework preset:
-
Click the Save and Deploy button.
Troubleshooting
Заголовок раздела «Troubleshooting»404 behavior
Заголовок раздела «404 behavior»For Workers projects, you will need to set not_found_handling if you want to serve a custom 404 page. You can read more about this in the Routing behavior section of Cloudflare’s documentation.
{ "assets": { "directory": "./dist", "not_found_handling": "404-page" }}For Pages projects, if you include a custom 404 page, it will be served by default. Otherwise, Pages will default to Cloudflare’s single-page application rendering behavior and redirect to the home page instead of showing a 404 page.
Client-side hydration
Заголовок раздела «Client-side hydration»Client-side hydration may fail as a result of Cloudflare’s Auto Minify setting. If you see Hydration completed but contains mismatches in the console, make sure to disable Auto Minify under Cloudflare settings.
Node.js runtime APIs
Заголовок раздела «Node.js runtime APIs»If you are building a project that is using on-demand rendering with the Cloudflare adapter and the server fails to build with an error message such as [Error] Could not resolve "XXXX. The package "XXXX" wasn't found on the file system but is built into node.:
-
This means that a package or import you are using in the server-side environment is not compatible with the Cloudflare runtime APIs.
-
If you are directly importing a Node.js runtime API, please refer to the Astro documentation on Cloudflare’s Node.js compatibility for further steps on how to resolve this.
-
If you are importing a package that imports a Node.js runtime API, check with the author of the package to see if they support the
node:*import syntax. If they do not, you may need to find an alternative package.