Till Tomczak 4a994c3bf8 Behebe SQLite-Bindungsprobleme für produktiven Einsatz
- Verbessere SQLite-Konfiguration mit optimalen Performance-Einstellungen
- Erweitere Dockerfile mit umfassenden Abhängigkeiten für zuverlässige SQLite-Kompilierung
- Füge native Buildflag-Optionen und Umgebungsvariablen für ARM-Kompatibilität hinzu
- Optimiere Startup-Skript mit zuverlässigerer Datenbank-Initialisierung
- Setze korrekte Berechtigungen für Datenbank-Verzeichnis und -Dateien
- Entferne fehlerträchtige Mock-Implementierung zugunsten einer robusten Produktiv-Lösung

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-01 09:41:51 +02:00

72 lines
2.7 KiB
Docker

FROM node:20-alpine
WORKDIR /app
# Install system dependencies for SQLite and native modules
RUN apk add --no-cache python3 build-base g++ make sqlite sqlite-dev gcc musl-dev git libffi-dev openssl-dev cmake
# Install pnpm
RUN npm install -g pnpm
# Copy package files
COPY package.json pnpm-lock.yaml ./
# Install dependencies with native bindings build approval, ensuring to build from source for all platforms
ENV CFLAGS="-fPIC" \
LDFLAGS="-fPIC" \
CXXFLAGS="-fPIC" \
npm_config_build_from_source=true \
npm_config_sqlite=/usr/local \
npm_config_sqlite_libname=sqlite3
# Durchführen der Installation mit umfassenden Flags für native Bindungen
RUN pnpm install --unsafe-perm --no-optional --frozen-lockfile
# Explizit better-sqlite3 für die aktuelle Plattform neu bauen
RUN cd /app/node_modules/better-sqlite3 && \
npm run build-release
# Install tsx for running TypeScript files directly
RUN pnpm add -D tsx
# Copy source code
COPY . .
# Create database directory
RUN mkdir -p db/
# Build the Next.js application
RUN pnpm build || echo "Generate schema failed, but continuing..."
# Expose the port
EXPOSE 3000
# Startup script to migrate DB and start app
RUN echo '#!/bin/sh' > /app/startup.sh && \
echo 'set -e' >> /app/startup.sh && \
echo 'mkdir -p /app/db' >> /app/startup.sh && \
echo 'echo "Starting application..."' >> /app/startup.sh && \
echo 'echo "Konfiguriere DB-Verzeichnis..."' >> /app/startup.sh && \
echo 'DB_FILE="/app/db/sqlite.db"' >> /app/startup.sh && \
echo 'if [ ! -f "$DB_FILE" ]; then' >> /app/startup.sh && \
echo ' echo "Creating empty database file..."' >> /app/startup.sh && \
echo ' touch "$DB_FILE"' >> /app/startup.sh && \
echo 'fi' >> /app/startup.sh && \
echo 'chmod 666 "$DB_FILE"' >> /app/startup.sh && \
echo 'chmod -R 777 /app/db' >> /app/startup.sh && \
echo 'export DB_PATH=$DB_FILE' >> /app/startup.sh && \
echo 'echo "Datenbank wird unter $DB_PATH verwendet"' >> /app/startup.sh && \
echo 'echo "Führe Datenbank-Migration aus..."' >> /app/startup.sh && \
echo 'NODE_ENV=production npx tsx ./src/server/db/migrate.ts' >> /app/startup.sh && \
echo 'echo "Migration abgeschlossen"' >> /app/startup.sh && \
echo 'echo "Starte Next.js Anwendung..."' >> /app/startup.sh && \
echo 'if [ -d ".next" ]; then' >> /app/startup.sh && \
echo ' pnpm start' >> /app/startup.sh && \
echo 'else' >> /app/startup.sh && \
echo ' echo "Build directory nicht gefunden, führe Build aus..."' >> /app/startup.sh && \
echo ' pnpm build && pnpm start' >> /app/startup.sh && \
echo 'fi' >> /app/startup.sh && \
chmod +x /app/startup.sh
# Start the application
CMD ["/app/startup.sh"]