From 53e5e7de3c5175850a033b7374c3442e93735489 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Wed, 10 Dec 2025 15:45:48 +0100 Subject: [PATCH] Update Docker configuration: Modify docker-compose.yml to change DATABASE_URL and volume paths for SQLite database. Refactor Dockerfile to streamline build process, set up entrypoint script, and ensure proper permissions. Update package.json to include built dependencies for Prisma. Adjust deploy.yml to comment out deployment triggers for clarity. --- .gitea/workflows/deploy.yml | 28 ++++++------- Dockerfile | 82 ++++++++++++------------------------- docker-compose.yml | 4 +- package.json | 7 ++++ 4 files changed, 50 insertions(+), 71 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 1759387..6944bfa 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -1,17 +1,17 @@ -name: Deploy with Docker Compose +# name: Deploy with Docker Compose -on: - push: - branches: - - main # adapte la branche que tu veux déployer +# on: +# push: +# branches: +# - main # adapte la branche que tu veux déployer -jobs: - deploy: - runs-on: mac-orbstack-runner # le nom que tu as donné au runner - steps: - - name: Checkout - uses: actions/checkout@v4 +# jobs: +# deploy: +# runs-on: mac-orbstack-runner # le nom que tu as donné au runner +# steps: +# - name: Checkout +# uses: actions/checkout@v4 - - name: Deploy stack - run: | - docker compose up -d +# - name: Deploy stack +# run: | +# docker compose up -d diff --git a/Dockerfile b/Dockerfile index 9ee8bf5..6020f14 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,10 +3,8 @@ FROM node:20-alpine AS deps RUN apk add --no-cache libc6-compat python3 make g++ WORKDIR /app -# Install pnpm RUN corepack enable && corepack prepare pnpm@latest --activate -# Copy package files COPY package.json pnpm-lock.yaml ./ RUN pnpm install --frozen-lockfile @@ -15,27 +13,14 @@ FROM node:20-alpine AS builder RUN apk add --no-cache libc6-compat python3 make g++ WORKDIR /app -# Install pnpm RUN corepack enable && corepack prepare pnpm@latest --activate -# Copy dependencies from deps stage COPY --from=deps /app/node_modules ./node_modules -COPY --from=deps /app/package.json ./package.json -COPY --from=deps /app/pnpm-lock.yaml ./pnpm-lock.yaml - -# Copy application files COPY . . -# Rebuild better-sqlite3 for the target platform -RUN pnpm rebuild better-sqlite3 +ENV DATABASE_URL="file:/tmp/build.db" +RUN pnpm prisma generate -# Generate Prisma Client -# Set a dummy DATABASE_URL for generation (not used, but required by prisma.config.ts) -ENV DATABASE_URL=file:./prisma/dev.db -RUN pnpm exec prisma generate - - -# Build Next.js application ENV NEXT_TELEMETRY_DISABLED=1 RUN pnpm build @@ -46,55 +31,42 @@ WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 nextjs +RUN apk add --no-cache python3 make g++ + +RUN addgroup --system --gid 1001 nodejs && \ + adduser --system --uid 1001 nextjs + +RUN corepack enable && corepack prepare pnpm@latest --activate -# Copy necessary files COPY --from=builder /app/public ./public -COPY --from=builder /app/.next/standalone ./ -COPY --from=builder /app/.next/static ./.next/static +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + COPY --from=builder /app/prisma ./prisma - -# Copy Prisma and better-sqlite3 dependencies from pnpm store -COPY --from=builder /app/node_modules/.pnpm/@prisma+client@* ./node_modules/.pnpm/@prisma+client@*/ -COPY --from=builder /app/node_modules/.pnpm/@prisma+adapter-better-sqlite3@* ./node_modules/.pnpm/@prisma+adapter-better-sqlite3@*/ -COPY --from=builder /app/node_modules/.pnpm/better-sqlite3@* ./node_modules/.pnpm/better-sqlite3@*/ - -# Copy generated Prisma client -COPY --from=builder /app/prisma/generated ./prisma/generated - -# Copy package.json and pnpm-lock.yaml for Prisma CLI +COPY --from=builder /app/prisma.config.ts ./prisma.config.ts COPY --from=builder /app/package.json ./package.json COPY --from=builder /app/pnpm-lock.yaml ./pnpm-lock.yaml -# Copy node_modules structure needed for Prisma -RUN mkdir -p node_modules/@prisma node_modules/better-sqlite3 node_modules/@prisma/adapter-better-sqlite3 && \ - ln -sf ../.pnpm/@prisma+client@*/node_modules/@prisma/* node_modules/@prisma/ && \ - ln -sf ../.pnpm/better-sqlite3@*/node_modules/better-sqlite3/* node_modules/better-sqlite3/ && \ - ln -sf ../.pnpm/@prisma+adapter-better-sqlite3@*/node_modules/@prisma/adapter-better-sqlite3/* node_modules/@prisma/adapter-better-sqlite3/ +ENV DATABASE_URL="file:/app/data/dev.db" +RUN pnpm add prisma @prisma/client @prisma/adapter-better-sqlite3 better-sqlite3 --prod && \ + pnpm dlx prisma generate -# Set permissions -RUN chown -R nextjs:nodejs /app +# Create data directory for SQLite database +RUN mkdir -p /app/data && chown -R nextjs:nodejs /app/data + +RUN echo '#!/bin/sh' > /app/entrypoint.sh && \ + echo 'set -e' >> /app/entrypoint.sh && \ + echo 'mkdir -p /app/data' >> /app/entrypoint.sh && \ + echo 'pnpm dlx prisma migrate deploy || true' >> /app/entrypoint.sh && \ + echo 'exec node server.js' >> /app/entrypoint.sh && \ + chmod +x /app/entrypoint.sh && \ + chown nextjs:nodejs /app/entrypoint.sh USER nextjs EXPOSE 3000 - ENV PORT=3000 ENV HOSTNAME="0.0.0.0" +ENV DATABASE_URL="file:/app/data/dev.db" -# Create entrypoint script to run migrations -RUN echo '#!/bin/sh' > /app/entrypoint.sh && \ - echo 'set -e' >> /app/entrypoint.sh && \ - echo 'if [ -f prisma/dev.db ]; then' >> /app/entrypoint.sh && \ - echo ' echo "Database exists, running migrations..."' >> /app/entrypoint.sh && \ - echo ' node node_modules/.bin/prisma migrate deploy || true' >> /app/entrypoint.sh && \ - echo 'else' >> /app/entrypoint.sh && \ - echo ' echo "Database does not exist, creating..."' >> /app/entrypoint.sh && \ - echo ' node node_modules/.bin/prisma migrate deploy || true' >> /app/entrypoint.sh && \ - echo 'fi' >> /app/entrypoint.sh && \ - echo 'exec node server.js' >> /app/entrypoint.sh && \ - chmod +x /app/entrypoint.sh - -CMD ["/app/entrypoint.sh"] - +ENTRYPOINT ["./entrypoint.sh"] diff --git a/docker-compose.yml b/docker-compose.yml index 67bf436..8cb2b03 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,12 +10,12 @@ services: - "3040:3000" environment: - NODE_ENV=production - - DATABASE_URL=file:./prisma/dev.db + - DATABASE_URL=file:/app/data/dev.db - NEXTAUTH_URL=http://localhost:3000 - NEXTAUTH_SECRET=${NEXTAUTH_SECRET:-change-this-secret-in-production} volumes: # Persist database - - ./prisma/dev.db:/app/prisma/dev.db + - ./data:/app/data - ./prisma/migrations:/app/prisma/migrations restart: unless-stopped healthcheck: diff --git a/package.json b/package.json index 5574c9e..d6d10de 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,13 @@ "prisma": { "seed": "tsx prisma/seed.ts" }, + "pnpm": { + "onlyBuiltDependencies": [ + "prisma", + "@prisma/engines", + "better-sqlite3" + ] + }, "dependencies": { "@prisma/adapter-better-sqlite3": "^7.1.0", "@prisma/client": "^7.1.0",