# Docker — copy-only deploy (Dokploy) Build artifacts are produced **on the developer machine** and committed to git. Dokploy only builds thin images that copy those files (no `pnpm install` on the server). ## One-time / before each deploy ```bash pnpm install pnpm build:release git add apps/api/release apps/admin-panel/dist apps/user-app/dist git commit -m "chore: refresh release artifacts" git push ``` What this produces: | App | Artifact | Image | |---|---|---| | API | `apps/api/release/app.js` (+ Prisma under `release/vendor`) | `docker.arvancloud.ir/node:20-bookworm` | | Admin | `apps/admin-panel/dist/` | `docker.arvancloud.ir/nginx:latest` | | User | `apps/user-app/dist/` | `docker.arvancloud.ir/nginx:latest` | ## Dokploy Environment ```env POSTGRES_USER=goldbank POSTGRES_PASSWORD=... POSTGRES_DB=goldbank EXTERNAL_DB_PORT=5433 DATABASE_URL=postgresql://goldbank:...@db:5432/goldbank?schema=public PORT=3000 ``` ## Domains (container ports) | Service | Domain | Port | |---|---|---| | `admin-panel` | admin.example.com | **80** | | `user-app` | app.example.com | **80** | | `api` | (optional) | **3000** | Frontends call `/api` on their own domain; nginx proxies to `api:3000`. ## Local compose smoke test ```bash pnpm build:release docker compose up --build -d ```