rwadurian/backend/services/mining-admin-service/Dockerfile

71 lines
1.9 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# =============================================================================
# Mining Admin Service - Dockerfile
# =============================================================================
# 阶段1: 构建
FROM node:20-alpine AS builder
WORKDIR /app
# 复制依赖文件
COPY package*.json ./
COPY tsconfig*.json ./
# 复制 Prisma schema
COPY prisma ./prisma/
# 安装所有依赖
RUN npm ci
# 生成 Prisma Client
RUN DATABASE_URL="postgresql://user:pass@localhost:5432/db" npx prisma generate
# 复制源代码
COPY src ./src
# 构建应用
RUN npm run build
# 阶段2: 生产运行
FROM node:20-alpine AS runner
# 创建非 root 用户
RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 -G nodejs nestjs
# 安装运行时依赖和编译工具
RUN apk add --no-cache curl tzdata openssl python3 make g++
# 创建 app 目录并设置所有权
RUN mkdir -p /app && chown nestjs:nodejs /app
WORKDIR /app
# 切换到非 root 用户
USER nestjs
# 复制依赖文件并安装生产依赖(包含原生模块编译)
COPY --chown=nestjs:nodejs package*.json ./
RUN npm ci --only=production && npm cache clean --force
# 复制 Prisma schema 并生成 client
COPY --chown=nestjs:nodejs prisma ./prisma/
RUN DATABASE_URL="postgresql://user:pass@localhost:5432/db" npx prisma generate
# 复制构建产物
COPY --chown=nestjs:nodejs --from=builder /app/dist ./dist
# 创建启动脚本 - 使用 db push 而不是 migrate deploy此服务不使用迁移文件
RUN printf '#!/bin/sh\nset -e\necho "Syncing database schema..."\nnpx prisma db push --accept-data-loss\necho "Starting application..."\nexec node dist/main.js\n' > /app/start.sh && chmod +x /app/start.sh
ENV NODE_ENV=production
ENV TZ=Asia/Shanghai
# 暴露端口
EXPOSE 3023
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD curl -f http://localhost:3023/api/v2/health || exit 1
# 启动应用
CMD ["/app/start.sh"]