Files
LogiFlow/Dockerfile
T
michaelschal 74e7eb8118 Automate database table creation during Docker updates
Add scripts and Dockerfile modifications to ensure database tables are automatically created or updated when the Docker image is rebuilt and deployed.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: e437ffed-c31b-44eb-9fd5-b6f9faa8e7ce
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/e437ffed-c31b-44eb-9fd5-b6f9faa8e7ce/biGr9ER
2025-08-16 11:25:04 +00:00

116 lines
3.1 KiB
Docker

# Multi-stage build for optimized production image
FROM node:20-alpine AS build
# Set working directory
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install all dependencies (including dev dependencies needed for build)
RUN npm ci && npm cache clean --force
# Copy source code (excluding .env to avoid conflicts)
COPY package*.json ./
COPY tsconfig.json ./
COPY drizzle.config.ts ./
COPY vite.config.ts ./
COPY tailwind.config.ts ./
COPY postcss.config.js ./
COPY components.json ./
COPY client/ client/
COPY server/ server/
COPY shared/ shared/
# Vérifier la structure
RUN ls -la server/
# Build the application
# Build frontend first
RUN npx vite build
# Vérifier que les fichiers sont construits
RUN echo "=== BUILD VERIFICATION ===" && \
ls -la dist/ && \
echo "Frontend files in dist/public:" && \
ls -la dist/public/ && \
echo "index.html exists:" && \
ls -la dist/public/index.html
# Build backend avec tous les modules externes
RUN npx esbuild server/index.production.ts \
--platform=node \
--bundle \
--format=esm \
--outfile=dist/index.js \
--external:vite \
--external:@vitejs/* \
--external:@replit/* \
--external:tsx \
--external:openid-client \
--external:@neondatabase/serverless \
--external:ws \
--external:drizzle-orm \
--external:pg \
--external:express \
--external:connect-pg-simple \
--external:passport \
--external:passport-local \
--external:express-session \
--external:zod \
--external:express-rate-limit \
--external:memoizee \
--external:nanoid \
--external:date-fns
# Production stage
FROM node:20-alpine AS production
# Create non-root user for security
RUN addgroup -g 1001 -S nodejs && \
adduser -S nextjs -u 1001
# Set working directory
WORKDIR /app
# Install production dependencies only
COPY --from=build /app/package*.json ./
RUN npm ci --only=production && npm cache clean --force
# Copy built application from build stage
COPY --from=build --chown=nextjs:nodejs /app/dist ./dist
COPY --from=build --chown=nextjs:nodejs /app/shared ./shared
# Copy migration scripts
COPY --chown=nextjs:nodejs scripts/ ./scripts/
# Create symlink for public files to be accessible from dist
RUN ln -sf /app/dist/public /app/dist/public
# Create uploads and backups directories with proper permissions
RUN mkdir -p /app/uploads /app/backups && chown -R nextjs:nodejs /app/uploads /app/backups
# Switch to non-root user
USER nextjs
# Expose port
EXPOSE 3000
ENV PORT=3000
# Install wget for health check and postgresql-client for pg_dump
USER root
RUN apk add --no-cache wget postgresql-client
USER nextjs
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/api/health || exit 1
# Copy and set entrypoint script
COPY --chown=nextjs:nodejs scripts/docker-entrypoint.sh ./
RUN chmod +x /app/scripts/auto-migrate-production.sh && \
chmod +x /app/docker-entrypoint.sh
# Start the application with migration
ENTRYPOINT ["/app/docker-entrypoint.sh"]
CMD ["node", "dist/index.js"]