From ea85d54f4257c0c3b26ca6faf7c4297856f3dfe2 Mon Sep 17 00:00:00 2001 From: Joshua Coles Date: Tue, 19 Dec 2023 22:22:46 +0000 Subject: [PATCH] It builds! --- .dockerignore | 7 ++++ Dockerfile | 67 ++++++++++++++++++++++++++++++++ next.config.js | 10 ++++- src/app/calendarOverviewCard.tsx | 4 +- tailwind.config.ts | 1 + 5 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c550055 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +Dockerfile +.dockerignore +node_modules +npm-debug.log +README.md +.next +.git diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..004dd59 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,67 @@ +FROM node:21-alpine AS base + +# 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 + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ +RUN \ + 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 --frozen-lockfile; \ + else echo "Lockfile not found." && exit 1; \ + fi + + +# Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +# 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 during the build. +# ENV NEXT_TELEMETRY_DISABLED 1 + +RUN yarn build + +# If using npm comment out above and use below instead +# RUN npm run build + +# Production image, copy all the files and run next +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV production +# Uncomment the following line in case you want to disable telemetry during runtime. +# ENV NEXT_TELEMETRY_DISABLED 1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder /app/public ./public + +# Set the correct permission for prerender cache +RUN mkdir .next +RUN chown nextjs:nodejs .next + +# 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 +# set hostname to localhost +ENV HOSTNAME "0.0.0.0" + +# server.js is created by next build from the standalone output +# https://nextjs.org/docs/pages/api-reference/next-config-js/output +CMD ["node", "server.js"] diff --git a/next.config.js b/next.config.js index 767719f..e592495 100644 --- a/next.config.js +++ b/next.config.js @@ -1,4 +1,12 @@ /** @type {import('next').NextConfig} */ -const nextConfig = {} +const nextConfig = { + output: 'standalone', + rewrites: async () => [ + { + source: '/api/:path*', + destination: 'http://cosmos:8074/:path*', + }, + ], +} module.exports = nextConfig diff --git a/src/app/calendarOverviewCard.tsx b/src/app/calendarOverviewCard.tsx index fa5c91d..953505f 100644 --- a/src/app/calendarOverviewCard.tsx +++ b/src/app/calendarOverviewCard.tsx @@ -31,7 +31,7 @@ function useCalendarData() { start: string, seconds: number, } - }[]>(`http://cosmos:8074/time_entry?select=raw_json&start=gt.${dFns.formatISO(initialDate)}&project_id=in.(${projectIds.join(',')})`, fetcher, {}); + }[]>(`/api/time_entry?select=raw_json&start=gt.${dFns.formatISO(initialDate)}&project_id=in.(${projectIds.join(',')})`, fetcher, {}); const [data, setData] = useState<{ date: Date, @@ -43,7 +43,7 @@ function useCalendarData() { // Group by day, sum up seconds const grouped = R.groupBy((entry) => { - return dFns.formatISO(dFns.parseISO(entry.raw_json.start), 'yyyy-MM-dd'); + return dFns.formatISO(dFns.parseISO(entry.raw_json.start)); }, timeEntries); const summed = R.mapObjIndexed((entries) => { diff --git a/tailwind.config.ts b/tailwind.config.ts index 152f98b..2f5aa54 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -94,6 +94,7 @@ const config: Config = { "tremor-full": "9999px", }, fontSize: { + // @ts-ignore "tremor-label": ["0.75rem"], "tremor-default": ["0.875rem", { lineHeight: "1.25rem" }], "tremor-title": ["1.125rem", { lineHeight: "1.75rem" }],