# Alternative Dockerfile - Approach Simple et Direct FROM node:20-alpine AS builder RUN apk add --no-cache python3 make g++ git WORKDIR /build COPY package*.json ./ RUN npm ci --include=dev --prefer-offline COPY . . RUN npm run build && ls -la dist/ && test -f dist/index.js # Production Stage avec approach simplifiée FROM node:20-alpine AS production RUN apk add --no-cache dumb-init postgresql-client wget curl bash # Créer l'utilisateur RUN addgroup -g 1001 -S nodejs && adduser -S regisflow -u 1001 -G nodejs WORKDIR /app RUN mkdir -p /app/backups /app/logs /app/data # Copier les fichiers depuis le builder COPY --from=builder --chown=regisflow:nodejs /build/package*.json ./ COPY --from=builder --chown=regisflow:nodejs /build/dist ./dist COPY --from=builder --chown=regisflow:nodejs /build/shared ./shared COPY --from=builder --chown=regisflow:nodejs /build/drizzle.config.ts ./ COPY --from=builder --chown=regisflow:nodejs /build/init.sql ./ # Installer TOUTES les dépendances (dev inclus) pour avoir drizzle-kit RUN npm ci --include=dev --prefer-offline # Copier les assets publics COPY --from=builder --chown=regisflow:nodejs /build/dist/public ./public # Vérifier que drizzle-kit est disponible RUN npx drizzle-kit --version # Nettoyer RUN npm cache clean --force && rm -rf /tmp/* # Créer le script d'entrée INLINE dans le Dockerfile au lieu de le copier RUN cat > /app/start.sh << 'EOF' #!/bin/bash set -e echo "🚀 RegisFlow starting..." if [ -z "$DATABASE_URL" ]; then echo "❌ DATABASE_URL not set" exit 1 fi DB_HOST=$(echo $DATABASE_URL | sed -n 's|.*@\([^:/]*\).*|\1|p') DB_PORT=$(echo $DATABASE_URL | sed -n 's|.*:\([0-9]*\)/.*|\1|p') DB_USER=$(echo $DATABASE_URL | sed -n 's|.*://\([^:]*\):.*|\1|p') echo "⏳ Waiting for database..." timeout=90 while ! pg_isready -h "$DB_HOST" -p "${DB_PORT:-5432}" -U "$DB_USER" -q && [ $timeout -gt 0 ]; do sleep 3 timeout=$((timeout-3)) done if [ $timeout -le 0 ]; then echo "❌ Database timeout" exit 1 fi echo "✅ Database ready" mkdir -p /app/logs /app/backups echo "🔄 Running migrations..." if npm run db:push; then echo "✅ Migrations successful" else echo "❌ Migration failed, but continuing anyway..." echo " Application will auto-create tables on first connection" fi echo "🌟 Starting application..." exec npm start EOF # Donner les permissions au script RUN chmod +x /app/start.sh && chown regisflow:nodejs /app/start.sh # Changer définitivement vers l'utilisateur non-root USER regisflow EXPOSE 5000 ENV NODE_ENV=production ENV PORT=5000 ENV TZ=Europe/Paris # Health check HEALTHCHECK --interval=30s --timeout=15s --start-period=90s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:5000/health || exit 1 # Utiliser le script inline ENTRYPOINT ["dumb-init", "--", "/app/start.sh"]