FROM node:22-alpine

WORKDIR /app

# 国内构建环境加速（仅容器构建期生效，不影响本地/正式 registry）
# 1) Alpine apk 源换清华
RUN sed -i 's|https\?://dl-cdn.alpinelinux.org|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apk/repositories

RUN corepack enable && corepack prepare pnpm@9 --activate \
  && apk add --no-cache openssl

# 2) npm / pnpm registry 换淘宝镜像
# 3) Prisma 下载引擎走淘宝镜像
ENV PRISMA_ENGINES_MIRROR=https://registry.npmmirror.com/-/binary/prisma
RUN npm config set registry https://registry.npmmirror.com/ \
  && pnpm config set registry https://registry.npmmirror.com/

# Copy everything (.dockerignore filters out node_modules, dist, .git, etc.)
COPY . .

# 强制项目级 registry（兜底：防止项目根 .npmrc 未覆盖）
RUN echo "registry=https://registry.npmmirror.com/" > /app/.npmrc

# Install all deps (tsx is used at runtime via devDependencies)
RUN pnpm install --frozen-lockfile --registry=https://registry.npmmirror.com/

# Generate Prisma client (produces linux-musl binary per schema.prisma)
RUN pnpm exec prisma generate

# Build web SPA; server runs directly from TS via tsx
RUN pnpm --filter @stamp/web build

# Stash initial stamp + article assets so the uploads volume can be seeded on first run
RUN mkdir -p /app/stamps-seed \
  && cp packages/server/uploads/stamps/*.jpg /app/stamps-seed/ \
  && rm -rf packages/server/uploads/stamps
RUN mkdir -p /app/articles-seed \
  && cp packages/server/uploads/articles/*.jpg /app/articles-seed/ \
  && rm -rf packages/server/uploads/articles
RUN mkdir -p /app/music-seed \
  && cp packages/server/uploads/music/* /app/music-seed/ 2>/dev/null || true \
  && rm -rf packages/server/uploads/music

COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENV NODE_ENV=production
EXPOSE 3000

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
