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.

This commit is contained in:
Julien Froidefond
2025-12-10 15:45:48 +01:00
parent 1152389785
commit 53e5e7de3c
4 changed files with 50 additions and 71 deletions

View File

@@ -1,17 +1,17 @@
name: Deploy with Docker Compose # name: Deploy with Docker Compose
on: # on:
push: # push:
branches: # branches:
- main # adapte la branche que tu veux déployer # - main # adapte la branche que tu veux déployer
jobs: # jobs:
deploy: # deploy:
runs-on: mac-orbstack-runner # le nom que tu as donné au runner # runs-on: mac-orbstack-runner # le nom que tu as donné au runner
steps: # steps:
- name: Checkout # - name: Checkout
uses: actions/checkout@v4 # uses: actions/checkout@v4
- name: Deploy stack # - name: Deploy stack
run: | # run: |
docker compose up -d # docker compose up -d

View File

@@ -3,10 +3,8 @@ FROM node:20-alpine AS deps
RUN apk add --no-cache libc6-compat python3 make g++ RUN apk add --no-cache libc6-compat python3 make g++
WORKDIR /app WORKDIR /app
# Install pnpm
RUN corepack enable && corepack prepare pnpm@latest --activate RUN corepack enable && corepack prepare pnpm@latest --activate
# Copy package files
COPY package.json pnpm-lock.yaml ./ COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile 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++ RUN apk add --no-cache libc6-compat python3 make g++
WORKDIR /app WORKDIR /app
# Install pnpm
RUN corepack enable && corepack prepare pnpm@latest --activate 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/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 . . COPY . .
# Rebuild better-sqlite3 for the target platform ENV DATABASE_URL="file:/tmp/build.db"
RUN pnpm rebuild better-sqlite3 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 ENV NEXT_TELEMETRY_DISABLED=1
RUN pnpm build RUN pnpm build
@@ -46,55 +31,42 @@ WORKDIR /app
ENV NODE_ENV=production ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1 ENV NEXT_TELEMETRY_DISABLED=1
RUN addgroup --system --gid 1001 nodejs RUN apk add --no-cache python3 make g++
RUN adduser --system --uid 1001 nextjs
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/public ./public
COPY --from=builder /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
COPY --from=builder /app/prisma ./prisma COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/prisma.config.ts ./prisma.config.ts
# 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/package.json ./package.json COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/pnpm-lock.yaml ./pnpm-lock.yaml COPY --from=builder /app/pnpm-lock.yaml ./pnpm-lock.yaml
# Copy node_modules structure needed for Prisma ENV DATABASE_URL="file:/app/data/dev.db"
RUN mkdir -p node_modules/@prisma node_modules/better-sqlite3 node_modules/@prisma/adapter-better-sqlite3 && \ RUN pnpm add prisma @prisma/client @prisma/adapter-better-sqlite3 better-sqlite3 --prod && \
ln -sf ../.pnpm/@prisma+client@*/node_modules/@prisma/* node_modules/@prisma/ && \ pnpm dlx prisma generate
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/
# Set permissions # Create data directory for SQLite database
RUN chown -R nextjs:nodejs /app 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 USER nextjs
EXPOSE 3000 EXPOSE 3000
ENV PORT=3000 ENV PORT=3000
ENV HOSTNAME="0.0.0.0" ENV HOSTNAME="0.0.0.0"
ENV DATABASE_URL="file:/app/data/dev.db"
# Create entrypoint script to run migrations ENTRYPOINT ["./entrypoint.sh"]
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"]

View File

@@ -10,12 +10,12 @@ services:
- "3040:3000" - "3040:3000"
environment: environment:
- NODE_ENV=production - NODE_ENV=production
- DATABASE_URL=file:./prisma/dev.db - DATABASE_URL=file:/app/data/dev.db
- NEXTAUTH_URL=http://localhost:3000 - NEXTAUTH_URL=http://localhost:3000
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET:-change-this-secret-in-production} - NEXTAUTH_SECRET=${NEXTAUTH_SECRET:-change-this-secret-in-production}
volumes: volumes:
# Persist database # Persist database
- ./prisma/dev.db:/app/prisma/dev.db - ./data:/app/data
- ./prisma/migrations:/app/prisma/migrations - ./prisma/migrations:/app/prisma/migrations
restart: unless-stopped restart: unless-stopped
healthcheck: healthcheck:

View File

@@ -14,6 +14,13 @@
"prisma": { "prisma": {
"seed": "tsx prisma/seed.ts" "seed": "tsx prisma/seed.ts"
}, },
"pnpm": {
"onlyBuiltDependencies": [
"prisma",
"@prisma/engines",
"better-sqlite3"
]
},
"dependencies": { "dependencies": {
"@prisma/adapter-better-sqlite3": "^7.1.0", "@prisma/adapter-better-sqlite3": "^7.1.0",
"@prisma/client": "^7.1.0", "@prisma/client": "^7.1.0",