SolidJS Dockerfile generator
Generate a production Dockerfile for a SolidJS single-page app — multi-stage build, unprivileged nginx and working deep links.
Configure
Loading...
What this Dockerfile does
1 item needs attention
Needs attention: Compose credentials are placeholders
The generated docker-compose.yml uses `app`/`app` so it runs out of the box locally. Replace them with real secrets before this reaches a server.
Good practice: Multi-stage build (3 stages)
Compilers, dev dependencies and source files stay in the build stages. Only the runtime artefacts are copied into the final image.
Good practice: Runs as nginx, not root
A container escape from a root process is a host root process. Dropping privileges is the cheapest hardening step there is.
Good practice: .dockerignore keeps secrets out of the build context
`.git`, `.env` and local dependency folders never reach the daemon, so they cannot end up in a layer or in `docker history`.
Good practice: Dependency cache persists across builds
BuildKit cache mounts keep the package manager store outside the image. Rebuilds after a lockfile change reuse everything already downloaded, and the cache adds nothing to the final size.
Good practice: Healthcheck defined
Docker, Compose and Easypanel can tell the difference between a running process and a working app, and restart it when it wedges.
Good practice: Deep links survive a refresh
The server config falls back to index.html for unknown paths. Without it, reloading /dashboard/settings returns a 404 — which is exactly what the previous generator shipped.
Good practice: Fingerprinted assets cached for a year, index.html never
Hashed filenames are immutable, so they get a one-year max-age. index.html is marked no-store so a deploy is picked up on the next reload instead of stranding users on a stale bundle.
Good practice: Unprivileged nginx image
nginxinc/nginx-unprivileged runs the master process as UID 101. The stock nginx image runs its master as root.
Note: Requires BuildKit
BuildKit is the default builder in Docker 23 and later. On anything older, export `DOCKER_BUILDKIT=1` before building.
Note: Alpine uses musl, not glibc
Smallest possible image, but packages with prebuilt native binaries — sharp, canvas, bcrypt, better-sqlite3, Prisma engines — may have to compile from source or fail outright. Switch to Debian slim if a native module misbehaves.
Note: Estimated image size: ~60–120 MB
A rough band for the final stage, before your own dependencies. Run `docker images` after a build for the real number.
How to use it
Everything runs locally. Nothing is uploaded, and no account is needed.
Drop the files into your project root
Every generated file belongs next to your package manifest — the Dockerfile references paths relative to the build context, so nesting them in a subfolder breaks the COPY lines.
Build the image
docker build -t solid .Run it
docker run --rm -p 8080:8080 solidOr bring up the whole stack
docker compose up --build