- 新增 PaddleOCR 本地高精度 OCR 服务支持,包括 Dockerfile、API 服务和 provider 实现 - 在 docker-compose 中集成 RapidOCR 和 PaddleOCR 服务,并配置健康检查 - 优化后端 API 路由前缀,移除 `/api` 以简化代理配置 - 更新 Nginx 配置以正确传递请求头和代理 WebSocket 连接 - 在前端设置页面添加 PaddleOCR 和 RapidOCR 的测试与配置选项 - 修复后端 Dockerfile 以支持 Python 原生模块构建 - 更新 OCR 设置指南,反映当前服务状态和部署方式 - 添加上传文件调试日志和权限设置
72 lines
1.7 KiB
Docker
72 lines
1.7 KiB
Docker
# ========================================
|
|
# Stage 1: Dependencies
|
|
# ========================================
|
|
FROM node:20-alpine AS deps
|
|
|
|
# Add Python and build tools for native modules (bcrypt, etc.)
|
|
RUN apk add --no-cache libc6-compat python3 make g++
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy package files
|
|
COPY package*.json ./
|
|
COPY prisma ./prisma/
|
|
|
|
# Install dependencies
|
|
RUN npm ci
|
|
|
|
# ========================================
|
|
# Stage 2: Builder
|
|
# ========================================
|
|
FROM node:20-alpine AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY . .
|
|
|
|
# Generate Prisma Client
|
|
RUN npx prisma generate
|
|
|
|
# Build TypeScript
|
|
RUN npm run build
|
|
|
|
# ========================================
|
|
# Stage 3: Runner
|
|
# ========================================
|
|
FROM node:20-alpine AS runner
|
|
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production
|
|
|
|
# Add dumb-init, su-exec and OpenSSL for Prisma
|
|
RUN apk add --no-cache dumb-init su-exec openssl-dev openssl
|
|
|
|
# Create non-root user
|
|
RUN addgroup -g 1001 -S nodejs && \
|
|
adduser -S nodejs -u 1001
|
|
|
|
# Copy necessary files - use tsx to run TypeScript directly
|
|
COPY --from=builder /app/src ./src
|
|
COPY --from=builder /app/node_modules ./node_modules
|
|
COPY --from=builder /app/prisma ./prisma
|
|
COPY --from=builder /app/package*.json ./
|
|
|
|
# Create uploads directory with proper permissions
|
|
RUN mkdir -p /app/uploads && \
|
|
chown -R nodejs:nodejs /app
|
|
|
|
# Copy entrypoint and set permissions
|
|
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
|
|
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
|
|
|
# Don't switch user here - let entrypoint do it after setting up data dir
|
|
|
|
EXPOSE 13057
|
|
|
|
# Use dumb-init to handle signals properly
|
|
# Run as root, entrypoint will switch to nodejs
|
|
ENTRYPOINT ["dumb-init", "--"]
|
|
CMD ["docker-entrypoint.sh"]
|