CognxSafeTrack commited on
Commit
8ff7abb
·
1 Parent(s): 4aef0ac

deploy: add root Dockerfile for Railway

Browse files
Files changed (1) hide show
  1. Dockerfile +23 -42
Dockerfile CHANGED
@@ -1,51 +1,32 @@
1
- FROM node:20-bookworm-slim
2
 
3
  WORKDIR /app
4
 
5
- # Set Puppeteer vars to skip direct download and use system Chromium
6
- ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
7
- ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
8
-
9
- # Install System dependencies: Chromium (for Puppeteer), OpenSSL (for Prisma), CA certs, and Worker deps (ffmpeg, espeak)
10
- RUN apt-get update && apt-get install -y \
11
- chromium \
12
- openssl \
13
- ca-certificates \
14
- curl \
15
- ffmpeg \
16
- espeak-ng \
17
- --no-install-recommends && \
18
- rm -rf /var/lib/apt/lists/*
19
-
20
- # Install pnpm and Typescript
21
- RUN npm install -g pnpm@9 typescript tsx
22
-
23
- # Copy ALL workspace files first for a proper pnpm install
24
- COPY package.json pnpm-workspace.yaml ./
25
- COPY packages/ packages/
26
- COPY apps/ apps/
27
- COPY scripts/ scripts/
28
-
29
- # Install all dependencies
30
- RUN pnpm install
31
-
32
- # Generate Prisma Client
33
- RUN pnpm --filter @repo/database generate
34
 
35
- # Give Node more memory and force IPv4 DNS resolution
36
- ENV NODE_OPTIONS="--max-old-space-size=2048 --dns-result-order=ipv4first"
37
 
38
- # Build all packages and apps to ensure dist folders are populated
39
- RUN pnpm -r build
40
 
41
- # Expose port (HF Spaces uses 7860)
42
- EXPOSE 7860
43
- ENV PORT=7860
 
 
44
 
45
- # SAFETY: Default to skipping DB push to prevent schema drift.
46
- ENV SKIP_DB_PUSH=true
 
47
 
48
- # Entrypoint: Dispatch based on SERVICE_NAME env var
49
- ENV SERVICE_NAME=api
50
 
51
- CMD ["sh", "-c", "if [ \"$SERVICE_NAME\" = \"worker\" ]; then echo '[STARTUP] Starting WhatsApp Worker...'; pnpm --filter whatsapp-worker start; else if [ -n \"$DATABASE_URL\" ] && [ \"$SKIP_DB_PUSH\" != \"true\" ]; then echo '[STARTUP] Syncing DB schema...'; pnpm --filter @repo/database db:push --accept-data-loss; fi && echo '[STARTUP] Starting API Gateway...'; pnpm --filter api start; fi"]
 
 
1
+ FROM node:20
2
 
3
  WORKDIR /app
4
 
5
+ # 1. Install system dependencies
6
+ RUN apt-get update && apt-get install -y ffmpeg espeak-ng && rm -rf /var/lib/apt/lists/*
7
+
8
+ # 2. Copy project files
9
+ COPY . .
10
+ RUN npm install -g pnpm
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ # 3. Install all dependencies
13
+ RUN pnpm install --frozen-lockfile
14
 
15
+ # 4. Generate Prisma Client
16
+ RUN pnpm --filter @repo/database generate
17
 
18
+ # 5. Build all packages and apps
19
+ RUN pnpm --filter @repo/shared-types build
20
+ RUN pnpm --filter @repo/prompts build
21
+ RUN pnpm --filter api build
22
+ RUN pnpm --filter whatsapp-worker build
23
 
24
+ # 6. Environmental Setup
25
+ ENV NODE_OPTIONS="--dns-result-order=ipv4first"
26
+ EXPOSE 8080
27
 
28
+ # 7. Make startup script executable
29
+ RUN chmod +x ./start.sh
30
 
31
+ # 8. Start everything via the master script
32
+ CMD ["./start.sh"]