- A GitHub account for source code and container registry
Create the Astro app
Create a new Astro project:Add the Node adapter
Astro requires an adapter for server-side rendering. Install the Node adapter:astro.config.mjs to include the adapter:
astro.config.mjs
Create an API route
Create a simple endpoint to test the deployment:src/pages/index.json.ts
Run locally
Start the development server:Create the Dockerfile
Dockerfile
Build and push to GitHub Container Registry
- GitHub Actions
- Docker CLI
Create Push your code to trigger the workflow:
.github/workflows/build.yml to automatically build and push on every commit to main:.github/workflows/build.yml
If your package is private, set the visibility to Public in GitHub or
configure Magic Containers with registry
credentials.
Deploy to Magic Containers
1
Create a new app
In the bunny.net dashboard, go to Magic Containers and click Add
App. Enter a name and select your deployment option.
2
Add a container
Click Add Container, then configure:
3
Add an endpoint
Go to the Endpoints tab, click Add New Endpoint, and set the
container port to
80.4
Deploy
Click Add Container, then Next Step, and Confirm and Create.
Test your app
Visit your container URL in the browser to see your Astro site, or test the API route:Response
You can add a custom hostname from the Endpoints section in your app settings.
Add Optimizer
Your CDN endpoint is already a pull zone in front of the app. Turn on Bunny Optimizer there, and a custom image service sends every<Image> width to the edge for resizing.
1
Configure the endpoint's pull zone
Open the pull zone that serves your CDN endpoint under CDN → Pull Zones. Turn on URL Query String vary, since endpoint pull zones ignore query strings by default and
?width=1080 would come back as the cached ?width=640 image.Enable Optimizer, then turn on the Dynamic Image API and automatic WebP under Optimizer → Settings. Astro already minifies CSS and JavaScript, so turn Optimizer’s minification off.2
Add the image service
The service spreads Astro’s
baseService, so Astro still works out the srcset widths, and only getURL changes. Without a baseURL, it returns relative URLs that go through the same pull zone.src/bunny-image-service.ts
3
Point Astro at the service
astro.config.mjs
Connect a database
You can connect your app to Bunny Database directly from the dashboard:- Go to Database > [Your Database] > Access
- Click Generate Tokens
- Click Add Secrets to Magic Container App
- Select your app
BUNNY_DATABASE_URL and BUNNY_DATABASE_AUTH_TOKEN environment variables are now available in your app:
src/pages/api/users.ts