fly.io deploy succeeds but site still serves old index.html and index.md

Hi all — I’m running into a confusing Fly.io deploy issue and could use a second set of eyes.

Summary

  • fly deploy completes successfully and fly releases shows new releases being created.

  • However, my website still serves the old HTML (same content length/etag), and curl shows the page has a Last-Modified date from Sep 17, 2025.

  • My Machines also seem to auto-stop, and sometimes end up in a stopped state.

What I see
Releases:

  • fly releases shows recent releases (e.g., v15 complete ~11 minutes ago).

Machines:

  • fly machine list shows two machines; one is started, one is stopped (both on the same deployment image).

Logs:

  • Logs show nginx starting normally, and I also see Fly autostopping machines due to “excess capacity”.

When I curl the site (even with no-cache headers), I still get the old content:

  • curl -i https://jack-mullen.fly.dev/ | head -n 20

  • curl -i -H "Cache-Control: no-cache" https://jack-mullen.fly.dev/ | head -n 20

Both return:

  • HTTP/2 200

  • last-modified: Wed, 17 Sep 2025 16:07:08 GMT

  • same etag, same content-length

  • HTML begins with <!-- site/index.html -->

So it doesn’t look like browser caching — it seems like the container is serving an old index.html baked into the image.

Questions

  1. For an nginx/static site on Fly, what’s the best way to confirm which file nginx is serving and whether my Docker build is copying the correct directory?

  2. Could this be caused by Dockerfile COPY paths / a .dockerignore excluding my updated files / deploying from the wrong working directory (wrong fly.toml)?

  3. What’s the recommended config to avoid “all machines stopped” while debugging? (I saw auto_stop_machines logs; should I set min_machines_running = 1?)

Environment

  • App: jack-mullen

  • Region: dfw

  • Serving via nginx in a container image

  • URL tested: https://jack-mullen.fly.dev/

Happy to paste fly.toml, Dockerfile, and nginx config if that helps — just let me know what’s most useful. Thanks!

Hi… For the latter, use fly ssh console, after ensuring that at least one Machine is running already. That will give you a Bash shell (typically), which can in turn be used to explore the Machine’s filesystem interactively.

The Nginx side I don’t know that well, but probably there’s a verbose setting that will cause it to say exactly which local file it’s serving, etc.

auto_stop_machines = false in fly.toml would be best, although min_machines_running ≥ 1 would also work.

The docs for auto-stop are a little fragmented, but here’s one of them:

https://fly.io/docs/launch/autostop-autostart/#configure-autostop-autostart

The stopped state is normal and generally a good thing for static sites, since it saves you money. (Often a lot of money, in low-traffic situations.) You do need to pair it with auto-start, though, :sweat_smile:.

“Excess capacity” is just the system’s way of saying that traffic is currently low, basically.

Any one of those three could be the culprit, so it’s best to post them all, really. The </> button in the toolbar will give you an area suitable for pasting code and config files.

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.