# Docker Compose for SSG Benchmark # Provides isolated environments for each Static Site Generator version: '3.8' services: # Hugo - The world's fastest framework for building websites hugo: build: context: . dockerfile: docker/Dockerfile.hugo image: ssg-benchmark-hugo container_name: ssg-bench-hugo volumes: - ./sites/hugo:/site:rw - ./results:/results:rw working_dir: /site environment: - HUGO_ENV=production command: ["hugo"] mem_limit: 4g cpus: 2 # Zola - A fast static site generator in a single binary zola: build: context: . dockerfile: docker/Dockerfile.zola image: ssg-benchmark-zola container_name: ssg-bench-zola volumes: - ./sites/zola:/site:rw - ./results:/results:rw working_dir: /site command: ["zola", "build"] mem_limit: 4g cpus: 2 # Jekyll - Transform your plain text into static websites jekyll: build: context: . dockerfile: docker/Dockerfile.jekyll image: ssg-benchmark-jekyll container_name: ssg-bench-jekyll volumes: - ./sites/jekyll:/site:rw - ./results:/results:rw working_dir: /site environment: - JEKYLL_ENV=production command: ["bundle", "exec", "jekyll", "build"] mem_limit: 4g cpus: 2 # Blades - A fast & flexible static site generator blades: build: context: . dockerfile: docker/Dockerfile.blades image: ssg-benchmark-blades container_name: ssg-bench-blades volumes: - ./sites/blades:/site:rw - ./results:/results:rw working_dir: /site command: ["blades"] mem_limit: 4g cpus: 2 # Hwaro - Rust-based static site generator hwaro: build: context: . dockerfile: docker/Dockerfile.hwaro image: ssg-benchmark-hwaro container_name: ssg-bench-hwaro volumes: - ./sites/hwaro:/site:rw - ./results:/results:rw working_dir: /site command: ["hwaro", "build"] mem_limit: 4g cpus: 2 # Hwaro built from its main branch, for measuring unreleased work against the # pinned release above. Same Dockerfile, same builder image, same flags — only # the source ref differs. Behind a profile so it is never part of the default # cross-SSG comparison: `docker compose --profile dev build hwaro-main`. hwaro-main: build: context: . dockerfile: docker/Dockerfile.hwaro args: HWARO_VERSION: main image: ssg-benchmark-hwaro-main container_name: ssg-bench-hwaro-main volumes: - ./sites/hwaro:/site:rw - ./results:/results:rw working_dir: /site command: ["hwaro", "build"] mem_limit: 4g cpus: 2 profiles: - dev # Eleventy - A simpler static site generator eleventy: build: context: . dockerfile: docker/Dockerfile.eleventy image: ssg-benchmark-eleventy container_name: ssg-bench-eleventy volumes: - ./sites/eleventy:/site:rw - ./results:/results:rw working_dir: /site command: ["eleventy"] mem_limit: 4g cpus: 2 # Pelican - A static site generator powered by Python pelican: build: context: . dockerfile: docker/Dockerfile.pelican image: ssg-benchmark-pelican container_name: ssg-bench-pelican volumes: - ./sites/pelican:/site:rw - ./results:/results:rw working_dir: /site command: ["pelican", "content", "-s", "pelicanconf.py"] mem_limit: 4g cpus: 2 # Hexo - A fast, simple & powerful blog framework hexo: build: context: . dockerfile: docker/Dockerfile.hexo image: ssg-benchmark-hexo container_name: ssg-bench-hexo volumes: - ./sites/hexo:/site:rw - ./results:/results:rw working_dir: /site command: ["hexo", "generate"] mem_limit: 4g cpus: 2 # Gatsby - React-based static site generator gatsby: build: context: . dockerfile: docker/Dockerfile.gatsby image: ssg-benchmark-gatsby container_name: ssg-bench-gatsby volumes: - ./sites/gatsby:/site:rw - ./results:/results:rw working_dir: /site environment: - NODE_ENV=production command: ["gatsby", "build"] mem_limit: 4g cpus: 2 # Astro - The web framework for content-driven websites astro: build: context: . dockerfile: docker/Dockerfile.astro image: ssg-benchmark-astro container_name: ssg-bench-astro volumes: - ./sites/astro:/site:rw - ./results:/results:rw working_dir: /site command: ["astro", "build"] mem_limit: 4g cpus: 2 # Docusaurus - A React-based static site generator by Meta docusaurus: build: context: . dockerfile: docker/Dockerfile.docusaurus image: ssg-benchmark-docusaurus container_name: ssg-bench-docusaurus volumes: - ./sites/docusaurus:/site:rw - ./results:/results:rw working_dir: /site command: ["npx", "docusaurus", "build"] mem_limit: 4g cpus: 2 # Benchmark runner service benchmark-runner: image: alpine:3.19 container_name: ssg-bench-runner volumes: - ./scripts:/scripts:ro - ./sites:/sites:rw - ./results:/results:rw - ./docker:/docker:ro - /var/run/docker.sock:/var/run/docker.sock working_dir: /scripts environment: - USE_DOCKER=true - ITERATIONS=3 - PAGE_COUNTS=10 100 1000 5000 - SCENARIOS=minimal blog heavy - SSGS=hugo zola jekyll blades hwaro eleventy pelican hexo gatsby astro docusaurus depends_on: - hugo - zola - jekyll - blades - hwaro - eleventy - pelican - hexo - gatsby - astro - docusaurus command: ["sh", "-c", "apk add --no-cache bash docker-cli && bash /scripts/benchmark.sh"] profiles: - benchmark networks: default: name: ssg-benchmark-network driver: bridge