build.sh runs npm run build on macOS, so only the host's sharp binary
(darwin-arm64) got traced into the standalone output. The container
runs node:20-alpine (Linux, musl libc), which cannot load that binary
- the server crashed at runtime, causing a 502 even though the docker
build itself succeeded.
npm pack can fetch another platform's prebuilt sharp/libvips tarballs
without an install-time OS check, so build.sh now pulls the
linux-musl x64 and arm64 builds directly into build/node_modules and
drops the now-unused host binary.
.gitignore's ".next/" rule (no leading slash) matched at any depth, so
build/.next was silently excluded from every commit even though build.sh
populates it. The Docker image was built without the compiled server/static
output, so server.js had nothing to serve. Anchor the rule to the repo root
and commit the compiled output that Dokploy actually needs.