-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
71 lines (60 loc) · 2.96 KB
/
Dockerfile
File metadata and controls
71 lines (60 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# ─── Base ─────────────────────────────────────────────────────────────────────
# Alpine + native build tools (needed for argon2, tiny-secp256k1)
FROM node:20-alpine AS base
RUN apk add --no-cache libc6-compat python3 make g++
WORKDIR /app
# ─── Dependencies ─────────────────────────────────────────────────────────────
# Install all deps (dev+prod) and generate Prisma client for Linux
FROM base AS deps
COPY package*.json ./
COPY prisma ./prisma
RUN npm ci
RUN npx prisma generate
# ─── Builder ──────────────────────────────────────────────────────────────────
# Build the Next.js app; dummy env vars satisfy validation without a real DB
FROM base AS builder
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1 \
DATABASE_URL="postgresql://dummy:dummy@localhost:5432/dummy" \
REDIS_URL="redis://localhost:6379" \
AUTH_SECRET="build-time-placeholder-minimum-32-chars!!" \
MASTER_ENCRYPTION_KEY="0000000000000000000000000000000000000000000000000000000000000000" \
BITCOIN_NETWORK="signet"
RUN npm run build
# ─── App (Next.js frontend + API routes) ──────────────────────────────────────
FROM node:20-alpine AS app
RUN apk add --no-cache libc6-compat
WORKDIR /app
ENV NODE_ENV=production \
NEXT_TELEMETRY_DISABLED=1 \
PORT=3000
RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nextjs
# node_modules with Linux-native binaries (argon2, prisma engine, etc.)
COPY --from=deps /app/node_modules ./node_modules
# Next.js build output
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
COPY --from=builder /app/public ./public
# Prisma schema needed for db push at startup
COPY --from=builder /app/prisma ./prisma
# Config files needed by `next start`
COPY --from=builder /app/next.config.ts ./
COPY --from=builder /app/package*.json ./
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
USER nextjs
EXPOSE 3000
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["npx", "next", "start", "-H", "0.0.0.0"]
# ─── Worker (BullMQ payment/sync/monitor/notification) ────────────────────────
FROM node:20-alpine AS worker
RUN apk add --no-cache libc6-compat
WORKDIR /app
ENV NODE_ENV=production
COPY --from=deps /app/node_modules ./node_modules
COPY --from=builder /app/src ./src
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/tsconfig.json ./tsconfig.json
COPY --from=builder /app/package*.json ./
CMD ["npx", "tsx", "src/workers/index.ts"]