FROM node: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"]