Skip to main content

Logs and Status

docker compose ps # container health
docker compose logs -f app # app stdout/stderr
docker compose logs -f postgres # DB
docker compose logs --since 30m app # last 30 minutes

Health checks

Both app and postgres ship Docker healthchecks:

docker inspect --format='{{.State.Health.Status}}' coursemaker-app
docker inspect --format='{{.State.Health.Status}}' coursemaker-postgres

healthy means the app responds to GET / with HTTP 200 and Postgres is accepting queries.

Running a one-off command in the app container

docker compose exec app sh
docker compose exec app node -e 'console.log(process.env.NEXT_PUBLIC_APP_URL)'

Re-running migrations manually

Migrations run automatically at container start. Force a manual run:

docker compose exec app bun migrate.js

(migrate.js is the bundled Drizzle migrator shipped inside the image.)

Disk and DB size

docker system df
docker compose exec postgres psql -U coursemaker -d coursemaker \
-c "SELECT pg_size_pretty(pg_database_size('coursemaker'));"