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