- 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>
51 lines
1.2 KiB
TOML
51 lines
1.2 KiB
TOML
# fly.toml — Fly.io deployment configuration
|
|
#
|
|
# Getting started:
|
|
# 1. Install flyctl: curl -L https://fly.io/install.sh | sh
|
|
# 2. Sign up / log in: fly auth login
|
|
# 3. Create the app: fly launch --no-deploy
|
|
# 4. Create a volume: fly volumes create simpleshop_data --size 1
|
|
# 5. Set secrets:
|
|
# fly secrets set SECRET_KEY_BASE=$(mix phx.gen.secret)
|
|
# fly secrets set PHX_HOST=your-domain.com
|
|
# 6. Deploy: fly deploy
|
|
# 7. Open: fly open
|
|
|
|
app = "simpleshop-theme"
|
|
primary_region = "lhr"
|
|
|
|
[build]
|
|
dockerfile = "Dockerfile"
|
|
|
|
# SQLite needs a persistent volume — without this, your database is lost on every deploy.
|
|
[mounts]
|
|
source = "simpleshop_data"
|
|
destination = "/data"
|
|
|
|
[env]
|
|
PHX_SERVER = "true"
|
|
DATABASE_PATH = "/data/simpleshop_theme.db"
|
|
|
|
[http_service]
|
|
internal_port = 4000
|
|
force_https = true
|
|
auto_stop_machines = "stop"
|
|
auto_start_machines = true
|
|
min_machines_running = 0
|
|
|
|
[http_service.concurrency]
|
|
type = "connections"
|
|
hard_limit = 1000
|
|
soft_limit = 1000
|
|
|
|
[[http_service.checks]]
|
|
grace_period = "30s"
|
|
interval = "15s"
|
|
method = "GET"
|
|
timeout = "5s"
|
|
path = "/health"
|
|
|
|
[[vm]]
|
|
size = "shared-cpu-1x"
|
|
memory = "1gb"
|