Deploying a static site with GitHub Actions
Setting up BunnyCDN storage zone
From the Storage page at BunnyCDN, click Add Storage Zone. Give your storage zone a memorable name and choose a tier and main storage region. If you choose a different region than "Europe (Falkenstein)", you will need to provide --endpoint to thumper sync later. Set up your desired amount of Geo Replication and click "Add Storage Zone."
Now you should have an empty Storage Zone. Navigate to the "FTP & API Access" pane. The Hostname that is listed corresponds to the --endpoint parameter to thumper sync. The password corresponds to the THUMPER_KEY environment variable or --access-key command line parameter. Put it somewhere safe, like a GitHub Actions secret, available under https://github.com/YOURNAME/YOURPROJECT/settings/secrets/actions.
Optionally, if you want to purge the cache when you deploy a new version of your site, you will need your BunnyCDN API key. You will find it under your profile page. Create a secret for that too. This is THUMPER_API_KEY. This makes for 2 secrets:
THUMPER_KEYis the password for your storage zone.THUMPER_API_KEYis the bunny.net API key for your account.
Setting up a GitHub Workflow
This documentation site is deployed to a BunnyCDN storage site with a GitHub workflow. The workflow looks like this:
name: Deploy documentation
on:
push:
tags:
- '*.*.*'
workflow_dispatch: {}
jobs:
deploy_docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: jdx/mise-action@v2
- name: Render CLI help
run: cargo test
- name: Render mdbook
run: mdbook build docs
- name: Deploy docs to kaveland/thumper
run: thumper sync docs/book kaveland --path thumper --concurrency 4 --verbose
env:
THUMPER_KEY: ${{ secrets.THUMPER_KEY }}
- name: Purge pull zone
run: thumper purge-zone 3644443
env:
THUMPER_API_KEY: ${{ secrets.THUMPER_API_KEY }}
The first few steps in the deploy_docs job are all about producing the static site files. The repository is cloned. Then we use jdx/mise-action to install mdbook which builds the static site, and thumper from mise.toml at the root of the repository:
[tools]
"ubi:rust-lang/mdbook" = "v0.4.48"
"ubi:kaaveland/thumper" = "latest"
The thumper sync command uses --path thumper to place the static site at thumper/ in the storage zone. This is not necessary if you want to sync your site to the root of the storage zone instead, but this documentation site shares the domain with a few others. You may have to provide --endpoint to thumper sync.
Purging the cache with thumper purge-zone is optional. This command takes the ID of your pull zone as an argument—it is the numeric part of the URL to the pull zone page. You can force a cache-refresh immediately with this approach, making your new content available faster. This enables you to set a very high Cache Expiration Time. You can also use thumper purge-url with a * wildcard at the end of your URL, to purge only parts of your page.
Setting up a BunnyCDN Pull Zone
Once you've verified that you can sync to your storage zone, you can configure a BunnyCDN pull zone to make your content available to the world. Here's the official guide.