fix: add setup service for db push/seed; update README

The production runner image has no node_modules, so prisma CLI and tsx
are unavailable. Add a Compose 'setup' profile service that uses the
builder stage (which has all dev tools) to run db push and db seed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
jerick
2026-04-20 15:25:02 -04:00
parent 55debd082b
commit 0b4f9f5c0e
2 changed files with 30 additions and 8 deletions

View File

@@ -26,14 +26,19 @@ Edit `.env`:
- Change `POSTGRES_PASSWORD` to a strong password - Change `POSTGRES_PASSWORD` to a strong password
```sh ```sh
# 2. Build and start the stack # 2. Build the images
docker compose up --build -d docker compose build
# 3. First-run only: apply the schema and create your user # 3. Start the database
docker compose exec app npx prisma db push docker compose up db -d
docker compose exec app npx prisma db seed
# 4. Open the app # 4. First-run only: apply the schema and create your user
docker compose --profile setup run --rm setup
# 5. Start the app
docker compose up app -d
# 6. Open the app
open http://localhost:3000 open http://localhost:3000
``` ```
@@ -65,8 +70,7 @@ docker compose down
docker compose down -v docker compose down -v
# Re-seed after a wipe # Re-seed after a wipe
docker compose exec app npx prisma db push docker compose --profile setup run --rm setup
docker compose exec app npx prisma db seed
# Check health # Check health
curl http://localhost:3000/api/health curl http://localhost:3000/api/health

View File

@@ -33,5 +33,23 @@ services:
retries: 3 retries: 3
start_period: 60s start_period: 60s
# First-run setup: applies the schema and seeds the user.
# Uses the builder stage so all dev tools (prisma CLI, tsx, bcryptjs) are available.
# Run once with: docker compose --profile setup run --rm setup
setup:
build:
context: .
target: builder
command: sh -c "npx prisma db push && npx prisma db seed"
environment:
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}
SEED_EMAIL: ${SEED_EMAIL}
SEED_PASSWORD: ${SEED_PASSWORD}
depends_on:
db:
condition: service_healthy
profiles:
- setup
volumes: volumes:
postgres_data: postgres_data: