Advanced
Running without Docker, changing the code, adding languages — for those going deeper.
Docker is the recommended path — one command, few surprises. This chapter condenses the two bundled guides for every other case; the full versions ship in the archive as docs/manual-install.md and docs/self-build.md.
Running without Docker
You need Node.js 20.9+ (tested on 22), pnpm 10.33.0, PostgreSQL 14+ and a reverse proxy. The core:
pnpm install --frozen-lockfile
pnpm exec prisma migrate deploy
pnpm build- Reverse proxy: response buffering off (downloads stream through the app), large request bodies allowed (product uploads) and the visitor’s address passed on (
X-Forwarded-For— otherwise every visitor shares one rate limit). - Run it as a service: adopt the systemd unit from
docs/manual-install.md.
Changing the code
- Edit →
cd docker && docker compose --env-file ../.env up -d --build. Without--buildthe old image keeps running — the classic “why is nothing happening” trap. - For more than one-liners:
pnpm devlocally — seconds per round instead of minutes. - Three things are generated and must never be edited by hand: the Prisma client, the theme/module registries,
next-env.d.ts. - The build enforces security rules (five checks): among them, every admin action and every admin API route needs a role check. A violation fails the build — on purpose.
src/core/theme/types.tsandsrc/core/modules/types.tsare frozen — purchased themes depend on them.
Adding a language
- 1
Copy
messages/en.jsontomessages/<code>.jsonand translate it - 2
Add the code to
LOCALESinsrc/core/i18n/routing.ts - 3
Rebuild
The locale list resolves at compile time — the file alone is not enough. A test catches incomplete translations before a raw key reaches a customer.