Blossom supports building and deploying static sites from various static site generators (SSGs). It automatically detects the type of static site generator being used and creates an appropriate build configuration.
Supported Static Site Generators
JavaScript/Node.js Based
- Astro - Modern static site builder with component islands
- Eleventy (11ty) - Simpler static site generator
- Gatsby - React-based static site generator
- Gridsome - Vue-based static site generator
- Next.js - React framework with static export
- Nuxt.js - Vue framework with static generation
- Parcel - Zero-configuration web application bundler
- Svelte - Svelte/SvelteKit static site generation
- Vite - Modern frontend build tool
Ruby Based
- Bridgetown - Progressive site generator built on Ruby
- Jekyll - Classic static site generator
Go Based
- Hugo - Fast static site generator written in Go
Python Based
- MkDocs - Project documentation with Markdown
- Pelican - Static site generator written in Python
Other
- Hexo - Blog framework powered by Node.js
Build Process
For each static site generator, Blossom:
- Detects the type of static site generator being used
- Creates a multi-stage Dockerfile that:
- Uses appropriate base images for building
- Installs necessary dependencies
- Runs the build process
- Creates a minimal nginx-based image with the built static files
- Builds and deploys the container
Javascript Build
Blossom automatically detects and handles JavaScript-based asset building alongside static site generators. When a package.json
or yarn.lock
file is present in your project, Blossom will:
- Install Node.js and npm/yarn in the build container
- Install project dependencies
- Run the build script if defined in
package.json
- Copy the built assets to the final nginx container
This allows you to use modern JavaScript tooling (like webpack, esbuild, or other build tools) to process your assets, even when using non-JavaScript-based static site generators like Jekyll or Hugo.
Nginx Server Output
All static sites are served using nginx, which provides:
- Efficient static file serving
- Proper mime-type handling
- Smart caching headers
Caching Headers
Blossom’s nginx configuration implements intelligent caching strategies based on the type of content being served:
- HTML files: No caching by default to ensure users always get the latest content
- Hashed static assets (e.g.,
main.abc123.css
): Long-term caching (1 year) with immutable flag, safe due to content-based hashing - Non-hashed static assets: Short-term caching (1 hour) with revalidation to balance performance and freshness
The configuration also includes optimized gzip compression for text-based assets, further improving performance.
Example
A typical static site project might look like:
my-static-site/
├── package.json # For Node.js based SSGs
├── Gemfile # For Ruby based SSGs
├── requirements.txt # For Python based SSGs
├── content/ # Your content files
└── config files # SSG-specific configuration
Blossom will automatically detect the SSG type and handle the build process appropriately.
Notes
- Each SSG has its own build output directory which is automatically mapped in the final nginx container
- The build process uses full-featured base images for better compatibility
- The final nginx image is minimal for efficient deployment