TanStack Start와 Bun을 Railway에 배포
발행: (2026년 5월 5일 AM 04:45 GMT+9)
3 분 소요
원문: Dev.to
Source: Dev.to
Problem
Railway의 Nixpacks 자동 빌드는 Bun 프로젝트를 감지하지만, 이 사이트가 필요로 하는 순서를 처리할 수 없습니다:
- 빌드 시
prisma generate실행 - Vite + TanStack Start 플러그인
- 사용자 정의
server.ts엔트리 포인트 - 시작 시
prisma migrate deploy실행
Nixpacks에 이 모든 작업을 조율하도록 가르치는 것은 단순한 다단계 Dockerfile을 사용하는 것보다 복잡합니다.
Solution
네 단계로 구성된 Dockerfile이 문제를 해결합니다:
- 두 개의 병렬
bun install단계 – 하나는 모든 의존성을 설치하고, 다른 하나는 프로덕션 전용 패키지만 설치합니다. - 빌드 단계 – 더미
DATABASE_URL을 사용해prisma generate를 실행합니다. - 경량 런타임 단계 – 생성된 Prisma 클라이언트를 프로덕션
node_modules위에 레이어합니다. - 엔트리포인트 – 컨테이너가 Railway의
SIGTERM을 받을 때 PID 1이 깔끔하게 종료되도록, Bun을exec하기 전에 마이그레이션을 실행합니다.
Dockerfile recipe (summary)
- Stage 1:
FROM bun:latest AS deps-full→bun install(전체 의존성). - Stage 2:
FROM bun:latest AS deps-prod→bun install --production. - Stage 3:
FROM deps-full AS build→ 더미DATABASE_URL을 설정하고prisma generate를 실행한 뒤, Vite/TanStack Start 번들을 빌드합니다. - Stage 4:
FROM bun:slim AS runtime→deps-prod에서node_modules를 복사하고build에서 생성된 Prisma 클라이언트를 복사한 뒤,server.ts를 추가하고 다음을 수행하는 엔트리포인트를 설정합니다:prisma migrate deploy실행exec bun server.ts
Railway‑side details
- Postgres reference variable: Railway에서 제공하는 Postgres URL을 앱의
DATABASE_URL환경 변수에 연결합니다. - Binding address: 서버를
0.0.0.0에 명시적으로 바인딩하여 Railway가 트래픽을 올바르게 라우팅하도록 합니다. - COPY order: 런타임이 올바른 클라이언트 버전을 사용하도록, 생성된 Prisma 클라이언트를 프로덕션
node_modules후에 복사합니다.
Originally published at andreasbergstrom.dev — read the full post there.