# Dockerfile for Recipe Translation Tool
# Stage 1: Builder
FROM node:20-alpine AS builder

WORKDIR /app

# 国内镜像加速
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

# 安装 pnpm（不使用 corepack）
RUN npm install -g pnpm

COPY package.json pnpm-lock.yaml ./

# 设置国内镜像源
RUN npm config set registry https://registry.npmmirror.com && \
    pnpm config set registry https://registry.npmmirror.com

# 安装依赖
RUN pnpm install --frozen-lockfile

COPY . .

# 构建项目
RUN pnpm build

# Stage 2: Runner
FROM node:20-alpine AS runner

WORKDIR /app

ENV NODE_ENV=production

# 国内镜像
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

# 创建用户
RUN addgroup --system --gid 1001 nodejs && \
    adduser --system --uid 1001 nextjs

# 复制构建产物
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static

# 复制配置文件
COPY --from=builder /app/config.json ./
COPY --from=builder /app/.version ./
COPY --from=builder /app/.env ./
COPY --from=builder /app/docker-compose.yml ./

# 给 nextjs 用户授权整个目录
RUN chown -R nextjs:nodejs /app

# 安装 git（版本检查、拉取更新）和 docker CLI（构建/重启容器）
USER root
RUN apk add --no-cache git docker-cli docker-compose
# 以 root 运行以确保有权限访问挂载的 Docker socket /var/run/docker.sock
# 若需以非 root 运行，需在宿主机上执行:
#   sudo chmod 666 /var/run/docker.sock
# 或在容器入口脚本中动态匹配 socket 的 group GID

EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"

CMD ["node", "server.js"]