diff --git a/.dockerignore b/.dockerignore index 3c487cf..534f3d9 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1 @@ -.next/ -node_modules/ .env.example \ No newline at end of file diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 8905ead..4c5cfd6 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -16,6 +16,7 @@ env: REGISTRY: ghcr.io # github.repository as / IMAGE_NAME: fayorg/calendrier-avant + DATABASE_URL: ${{ secrets.DATABASE_URL }} jobs: diff --git a/Dockerfile b/Dockerfile index 010e83f..d9dd4d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,37 +1,48 @@ -FROM node:18-alpine AS deps +FROM node:18-alpine AS base + +# 1. Install dependencies only when needed +FROM base AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. RUN apk add --no-cache libc6-compat + WORKDIR /app -COPY package.json package-lock.json* ./ + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ RUN \ - if [ -f package-lock.json ]; then npm ci; \ + if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ + elif [ -f package-lock.json ]; then npm ci; \ + elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i; \ else echo "Lockfile not found." && exit 1; \ fi -FROM node:18-alpine AS builder + +# 2. Rebuild the source code only when needed +FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . -ENV NEXT_TELEMETRY_DISABLED 1 - RUN npx prisma generate RUN npm run build -FROM node:18-alpine AS runner +# 3. Production image, copy all the files and run next +FROM base AS runner WORKDIR /app -ENV NODE_ENV production +ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED 1 -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 nextjs +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nextjs -u 1001 -COPY --from=builder /app/next.config.js ./ -COPY --from=builder /app/sentry.properties ./ -COPY --from=builder /app/.sentryclirc ./ -COPY --from=builder /app/public ./public +# COPY --from=builder /app/public ./public + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + USER nextjs EXPOSE 3000 diff --git a/app/login/page.tsx b/app/login/page.tsx deleted file mode 100644 index 6f35a33..0000000 --- a/app/login/page.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import LoginForm from "@components/custom" -export default function LoginPage() { - return ( -
-
-
-
-
-
- -
-
- ); -} diff --git a/next.config.js b/next.config.js index 767719f..29f15a9 100644 --- a/next.config.js +++ b/next.config.js @@ -1,4 +1,6 @@ /** @type {import('next').NextConfig} */ -const nextConfig = {} +const nextConfig = { + output: 'standalone', +}; -module.exports = nextConfig +module.exports = nextConfig; diff --git a/tsconfig.json b/tsconfig.json index 29bc924..709a6e8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,10 +21,10 @@ "paths": { "@/*": ["./*"], "@components/*": ["./components/*"], - "@lib/*": ["lib/*"], + "@lib/*": ["./lib/*"], "@styles/*": ["/styles/*"], - "@santa/*": ["images/santa/*"], - "@images/*": ["images/*"], + "@santa/*": ["./images/santa/*"], + "@images/*": ["./images/*"], } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],