trigo / Dockerfile
k-l-lambda's picture
Use npm ci with fallback to npm install --force
7bb4f7a
raw
history blame
2.05 kB
FROM node:20-slim
ENV DEBIAN_FRONTEND=noninteractive
# Build timestamp: 2026-01-12T23:30
RUN apt-get update && apt-get install -y curl git git-lfs && rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Initialize git-lfs
RUN git lfs install
# Copy package files
RUN mkdir -p app backend
COPY trigo-web/package.json ./package.json
COPY trigo-web/package-lock.json ./package-lock.json
COPY trigo-web/backend/package.json ./backend/package.json
COPY trigo-web/backend/package-lock.json ./backend/package-lock.json
# Install build tools
RUN npm install -g tsx esbuild
# Install root deps (production only)
RUN npm ci --omit=dev || npm install --omit=dev --force
# Install backend deps with retry
RUN cd backend && (npm ci || npm install --force)
# Copy backend source
COPY trigo-web/backend/src/ ./backend/src/
COPY trigo-web/backend/tsconfig.json ./backend/
# Build backend
RUN mkdir -p backend/dist/backend/src && \
esbuild backend/src/server.ts --bundle --platform=node --target=node20 --format=esm \
--outfile=backend/dist/backend/src/server.js \
--external:express --external:socket.io --external:cors --external:dotenv --external:uuid
# Copy pre-built frontend dist directly (skip app npm install and vite build)
COPY trigo-web/app/dist/ ./app/dist/
# Copy public folder
COPY trigo-web/public/ ./public/
# Copy env files
COPY trigo-web/.env ./.env
COPY trigo-web/backend/.env ./backend/.env
COPY trigo-web/backend/.env.local ./backend/.env.local
# Copy inc folder (shared types)
COPY trigo-web/inc/ ./inc/
# Copy parser
COPY trigo-web/public/lib/tgnParser.cjs ./public/lib/
# Check that LFS files were properly copied
RUN echo "=== Checking LFS files ===" && \
ls -la app/dist/assets/*.wasm 2>/dev/null || echo "No WASM files found" && \
ls -la app/dist/onnx/*/*.onnx 2>/dev/null | head -5 || echo "No ONNX files found" && \
file app/dist/assets/*.wasm 2>/dev/null | head -1 || echo "Cannot check file type"
ENV PORT=7860
ENV HOST=0.0.0.0
ENV NODE_ENV=production
EXPOSE 7860
CMD ["npm", "run", "start:prod"]