diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index dd3767732..73d254811 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -21,7 +21,7 @@ jobs: run: npm install - name: Build run: | - npm run build + npm run build:static touch out/.nojekyll echo "garrit.xyz" > CNAME - name: Deploy diff --git a/Dockerfile b/Dockerfile index 096603acc..aafea40ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,46 @@ -FROM node:13-alpine +# Install dependencies only when needed +FROM node:16-alpine 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 ./ +RUN npm install + +# Rebuild the source code only when needed +FROM node:16-alpine AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +RUN npm run build -COPY . /app +# Production image, copy all the files and run next +FROM node:16-alpine AS runner WORKDIR /app -RUN npm install && npm run build -FROM nginx:alpine -COPY --from=0 /app/out /usr/share/nginx/html -EXPOSE 80 \ No newline at end of file +ENV NODE_ENV production + +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nextjs -u 1001 + +# You only need to copy next.config.js if you are NOT using the default configuration +# COPY --from=builder /app/next.config.js ./ +COPY --from=builder /app/public ./public +COPY --from=builder /app/package.json ./package.json + +# 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 + +ENV PORT 3000 + +# Next.js collects completely anonymous telemetry data about general usage. +# Learn more here: https://nextjs.org/telemetry +# Uncomment the following line in case you want to disable telemetry. +# ENV NEXT_TELEMETRY_DISABLED 1 + +CMD ["node", "server.js"] \ No newline at end of file diff --git a/next.config.js b/next.config.js index 4bc20c2f5..1fea2f96f 100644 --- a/next.config.js +++ b/next.config.js @@ -3,6 +3,9 @@ const path = require("path"); const isProd = process.env.NODE_ENV === 'production' module.exports = { + experimental: { + outputStandalone: true, + }, assetPrefix: isProd ? 'https://garrit.xyz' : '', sassOptions: { includePaths: [path.join(__dirname, 'styles')], diff --git a/package.json b/package.json index 0e34fc54c..77ced02f9 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,9 @@ "private": true, "scripts": { "start": "npm run build:rss && next dev", - "build": "npm run build:rss && next build && next export", + "start:prod": "npm run build && next start", + "build": "npm run build:rss && next build", + "build:static": "npm run build && next export", "build:rss": "node lib/rss.js" }, "dependencies": {