add Docker deployment with Alpine image, release config and health check

- Alpine multi-stage Dockerfile (131 MB image)
- Release overlays (bin/server, bin/migrate), env.sh, Release module
- Health check endpoint at GET /health
- Fly.io config with SQLite volume mount
- Fix hardcoded paths in optimizer.ex and variant_cache.ex to use
  Application.app_dir/2 (breaks in releases where Plug.Static serves
  from a different directory than CWD)
- strip_beams: true in release config
- Optimised .dockerignore and .gitignore for mockup variants

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
jamey
2026-02-08 16:21:05 +00:00
parent eaa4bbb3fa
commit 1ee37c853d
15 changed files with 320 additions and 32 deletions

16
.gitignore vendored
View File

@@ -49,13 +49,15 @@ simpleshop_theme-*.tar
/priv/static/images/*-*.svg.gz
/priv/static/images/*.gz
# Generated mockup variants (auto-generated on startup via Oban)
# Source .webp files are tracked, variants are regenerated
/priv/static/mockups/*-400.*
/priv/static/mockups/*-800.*
/priv/static/mockups/*-1200.*
/priv/static/mockups/*-thumb.*
# Digested versions of mockup variants and sources (from mix phx.digest)
# Generated mockup variants, digested copies, and converted formats.
# Only source .webp files (no size suffix) are tracked — everything else regenerates.
/priv/static/mockups/*-400*
/priv/static/mockups/*-800*
/priv/static/mockups/*-1200*
/priv/static/mockups/*-thumb*
/priv/static/mockups/*.avif
/priv/static/mockups/*.jpg
/priv/static/mockups/*.gz
/priv/static/mockups/*-????????????????????????????????.*
# Generated image variants cache (regenerated from source images)