# write a dockerfile for a react app
# ---------- 基础 ----------
FROM node:20-alpine AS base
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install --shamefully-hoist

# ---------- Prisma + SQLite ----------
COPY prisma ./prisma
ENV DATABASE_URL=file:/app/data/db.sqlite
RUN mkdir -p /app/data
RUN pnpm prisma generate
RUN pnpm prisma migrate deploy --schema ./prisma/schema.prisma

# ---------- 构建 ----------
COPY . .
ENV REDIS_URL= 
RUN pnpm build

# ---------- 运行时 ----------
FROM node:20-alpine AS runner
WORKDIR /app
RUN apk add --no-cache redis

COPY --from=base /app/.next/standalone ./
COPY --from=base /app/.next/static ./.next/static
COPY --from=base /app/public ./public
COPY --from=base /app/prisma ./prisma
COPY --from=base /app/.env.docker ./.env

# 启动脚本：后台起 Redis + Next.js
COPY <<EOF /app/start.sh
#!/bin/sh
redis-server --daemonize yes
exec node .next/standalone/server.js
EOF
RUN chmod +x /app/start.sh

EXPOSE 3000
CMD ["sh", "/app/start.sh"]