WIP dockerfiles

This commit is contained in:
Max Leiter 2022-03-07 20:42:44 -08:00
parent 247124c7a7
commit dabe3e7f3c
No known key found for this signature in database
GPG key ID: A3512F2F2F17EBDA
9 changed files with 108 additions and 6 deletions

1
client/.dockerignore Normal file
View file

@ -0,0 +1 @@
node_modules/

56
client/Dockerfile Normal file
View file

@ -0,0 +1,56 @@
# 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 yarn.lock ./
RUN yarn install --frozen-lockfile
# If using npm with a `package-lock.json` comment out above and use below instead
# COPY package.json package-lock.json ./
# RUN npm ci
# Rebuild the source code only when needed
FROM node:16-alpine 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 node:16-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# 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 3001
ENV PORT 3001
CMD ["node", "server.js"]

View file

@ -1,6 +1,9 @@
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = { const nextConfig = {
reactStrictMode: true, reactStrictMode: true,
experimental: {
outputStandalone: true,
},
async rewrites() { async rewrites() {
return [ return [
{ {

View file

@ -1,5 +1,5 @@
import { Loading, Text } from "@geist-ui/core"; import { Loading, Page, Text } from "@geist-ui/core";
import Page from '../../components/page/Page'
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { useCallback, useEffect, useState } from "react"; import { useCallback, useEffect, useState } from "react";
import Document from '../../components/document' import Document from '../../components/document'
@ -45,7 +45,7 @@ const Post = ({ theme, changeTheme }: ThemeProps) => {
}, [router, router.query.id]) }, [router, router.query.id])
return ( return (
<Page> <Page width={"100%"}>
<Page.Header> <Page.Header>
<Header theme={theme} changeTheme={changeTheme} /> <Header theme={theme} changeTheme={changeTheme} />
</Page.Header> </Page.Header>

1
server/.dockerignore Normal file
View file

@ -0,0 +1 @@
node_modules/

3
server/.gitignore vendored
View file

@ -1,2 +1,3 @@
.env .env
node_modules/ node_modules/
dist/

38
server/Dockerfile Normal file
View file

@ -0,0 +1,38 @@
# 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 git
WORKDIR /app
COPY package.json yarn.lock tsconfig.json tslint.json ./
RUN yarn install --frozen-lockfile
# If using npm with a `package-lock.json` comment out above and use below instead
# COPY package.json package-lock.json ./
# RUN npm ci
# 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 yarn build
FROM node:16-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 drift
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER drift
EXPOSE 3000
ENV PORT 3000
CMD ["node", "dist/index.js"]

View file

@ -5,7 +5,8 @@
"main": "index.ts", "main": "index.ts",
"scripts": { "scripts": {
"start": "ts-node index.ts", "start": "ts-node index.ts",
"dev": "nodemon index.ts" "dev": "nodemon index.ts",
"build": "tsc -p ."
}, },
"author": "", "author": "",
"license": "ISC", "license": "ISC",

View file

@ -12,7 +12,8 @@
"pretty": true, "pretty": true,
"strictNullChecks": true, "strictNullChecks": true,
"skipLibCheck": true, "skipLibCheck": true,
"strictPropertyInitialization": true "strictPropertyInitialization": true,
"outDir": "dist"
}, },
"include": ["lib/**/*.ts", "index.ts", "src/**/*.ts"], "include": ["lib/**/*.ts", "index.ts", "src/**/*.ts"],
"exclude": ["node_modules"] "exclude": ["node_modules"]