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:
@@ -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
|
||||||
|
|||||||
82
Dockerfile
82
Dockerfile
@@ -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"]
|
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user