Files
task-manager/Dockerfile
T
paul-nothaft 1f8b382fd5
continuous-integration/drone/push Build is passing
Use tsx to run TypeScript directly in production environments
Replace esbuild compilation with tsx execution in the Dockerfile to resolve module resolution errors by allowing TypeScript files to be run directly.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ceced2fc-aa46-458d-ba87-ddd4b7bb1518
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/659922a9-0087-461c-90dd-6d9a58b81d4d/ceced2fc-aa46-458d-ba87-ddd4b7bb1518/SBF5OKZ
2025-10-23 17:50:27 +00:00

49 lines
1.3 KiB
Docker

# Base stage with Node.js
FROM node:20-alpine AS base
WORKDIR /app
# Dependencies stage
FROM base AS dependencies
COPY package.json package-lock.json ./
RUN npm ci --only=production && \
cp -R node_modules /tmp/prod_node_modules && \
npm ci
# Build stage
FROM base AS build
COPY --from=dependencies /app/node_modules ./node_modules
COPY . .
# Build the client application (frontend only)
RUN npm run build
# Production stage
FROM base AS production
# Install ALL dependencies (including tsx for running TypeScript in production)
COPY --from=dependencies /app/node_modules ./node_modules
# Copy built frontend
COPY --from=build /app/dist/public ./dist/public
# Copy server source files (TypeScript)
COPY --from=build /app/server ./server
COPY --from=build /app/shared ./shared
COPY --from=build /app/drizzle.config.ts ./
COPY --from=build /app/package.json ./
COPY --from=build /app/tsconfig.json ./
# Set environment variables
ENV NODE_ENV=production
ENV PORT=5000
# Expose the application port
EXPOSE 5000
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD node -e "require('http').get('http://localhost:5000/api/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
# Start the application using tsx to run TypeScript directly
CMD ["npx", "tsx", "server/index.ts"]