Static Sites
Deploy static HTML/CSS/JS sites without containers. Caddy serves them directly for maximum performance.
What's a Static Site?
Static sites are pre-built HTML, CSS, and JavaScript files that don't require server-side processing. Examples:
- Landing pages
- Documentation sites
- SPAs (React, Vue, Svelte builds)
- Blogs built with static generators (Hugo, Astro, etc.)
Quick Deploy
bash
# Build your site
npm run build
# Initialize
cd mysite
bp init
# Select: Static site
# Public dir: dist/
# Deploy
git add . && git commit -m "Deploy"
bp deployConfiguration
Your basepod.yaml for a static site:
yaml
name: mysite
type: static
public: dist/
domain: mysite.example.comCommon Public Directories
| Framework | Public Directory |
|---|---|
| Vite | dist/ |
| Nuxt (SSG) | .output/public/ |
| Next.js (export) | out/ |
| Astro | dist/ |
| Hugo | public/ |
| Jekyll | _site/ |
How It Works
bp deployuploads your public directory- Server stores files at
/data/apps/{name}/public - Caddy serves files directly (no container)
- Automatic HTTPS via Let's Encrypt
Benefits
- Fast - No container overhead
- Efficient - Low memory usage
- Simple - No Dockerfile needed
- Instant - Deploy in seconds
Example: Nuxt SSG
bash
# Generate static site
nuxt generate
# Initialize
bp init
# App name: mysite
# Type: Static site
# Public dir: .output/public
# Deploy
git add .
git commit -m "Initial deploy"
bp deployExample: Vite/React
bash
# Build
npm run build
# Initialize
bp init
# Type: Static site
# Public dir: dist
# Deploy
git add . && git commit -m "Deploy"
bp deploySPA Routing
For single-page apps with client-side routing, Caddy automatically handles fallback to index.html for 404s.
Custom Headers
Need custom headers? Create a _headers file in your public directory:
/*
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
/assets/*
Cache-Control: public, max-age=31536000