# 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
ENV PRISMA_ENGINES_MIRROR=https://registry.npmmirror.com/-/binary/prisma
RUN pnpm prisma generate
RUN pnpm prisma migrate deploy --schema ./prisma/schema.prisma

# ---------- 构建 ----------
COPY . .
RUN pnpm prisma generate
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 --port "${REDIS_PORT:-6379}" --daemonize yes &

until redis-cli -h localhost -p "${REDIS_PORT:-6379}" ping >/dev/null 2>&1; do
  sleep 1
done

exec node server.js
EOF

RUN chmod +x /app/start.sh

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