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",