- Docker (with Compose v2)
make
No local Node.js / pnpm needed — everything runs in the container.
make installThis single command:
- pulls the service images
- creates
compose.override.yamlfrom the.distfile (Traefik) if missing - creates the external
esvDocker network if missing - builds the
nodeimage - installs dependencies (
pnpm install) into./node_modulesvia the container - starts the stack
| Service | Link |
|---|---|
| Nuxt | http://www.esv.localhost |
| Traefik Dashboard | http://traefik.esv.localhost |
make up # start containers (detached)
make down # stop and remove containers
make stop # stop containers (keep them)
make logs # follow the node container logs
make sh # open a shell in the node container
make build # rebuild the node image
make node_modules # (re)install dependencies in the container
make help # list all targetsDockerfile—node+pnpm(installed globally). Runs as the unprivileged built-innodeuser (uid 1000), which matches the host user so bind-mounted files stay owned by you, not root. Dependencies are not baked into the image.compose.yaml— thenodeservice bind-mounts the project (./:/app) for hot reload and is exposed through Traefik onwww.esv.localhost(port 3000).compose.override.yaml— runs Traefik locally (*.esv.localhostrouting, dashboard). Generated fromcompose.override.yaml.dist; edit it freely, it is not committed.- Dependencies —
pnpm installruns inside the container and writes./node_modulesinto the bind mount. They are therefore musl-correct (alpine) and owned by you.pnpmkeeps its content-addressable store next to them in./.pnpm-store(hardlinked, gitignored).
node_modulesand.pnpm-storelive in the project folder but are git- and docker-ignored. Runmake node_modulesafter changing dependencies.
This project is under the MIT license. See the complete license in the bundle