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:
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

View File

@@ -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"]

View File

@@ -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:

View File

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