broke long lines, added BuildKit run command, & reordered COPY steps 🎽

This commit is contained in:
W.J. “dysbulic” H
2022-02-21 23:39:31 -05:00
parent 13c2871f25
commit ab20006b2e
6 changed files with 136 additions and 86 deletions

View File

@@ -1,61 +1,76 @@
# syntax = docker/dockerfile:1 # use BuildKit
FROM node:16-slim as base
WORKDIR /usr/src/app
# Install dependencies not included in the slim image
RUN apt-get update && apt-get install -y --no-install-recommends g++ make python
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
g++ make python \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Install dependencies for dev and prod
COPY package.json .
COPY lerna.json .
COPY yarn.lock .
COPY schema.graphql .
# Install dependencies for dev and prod in order of likelihood to change
COPY tsconfig.base.json .
COPY packages/backend/*.json ./packages/backend/
COPY packages/utils/*.json ./packages/utils/
COPY lerna.json .
COPY schema.graphql .
COPY packages/discord-bot/*.json ./packages/discord-bot/
COPY packages/utils/*.json ./packages/utils/
COPY package.json .
COPY yarn.lock .
COPY packages/backend/*.json ./packages/backend/
RUN yarn install --pure-lockfile
RUN ["yarn", "install", "--pure-lockfile"]
# Dev environment doesn't run this stage or beyond
FROM base as build
# Copy source files
COPY packages/backend ./packages/backend/
COPY packages/utils ./packages/utils/
COPY packages/discord-bot ./packages/discord-bot/
COPY packages/@types ./packages/@types/
# Set env vars
ARG GRAPHQL_HOST=hasura
ARG GRAPHQL_DOMAIN=onrender.com
ARG GRAPHQL_URL=https://$GRAPHQL_HOST.$GRAPHQL_DOMAIN/v1/graphql
ENV GRAPHQL_URL $GRAPHQL_URL
ENV HASURA_GRAPHQL_ADMIN_SECRET metagame_secret
ENV CERAMIC_URL https://ceramic.metagame.wtf
ENV GRAPHQL_URL="$GRAPHQL_URL"
ENV HASURA_GRAPHQL_ADMIN_SECRET=metagame_secret
ENV CERAMIC_URL=https://ceramic.metagame.wtf
# Copy source files
COPY packages/@types ./packages/@types/
COPY packages/discord-bot ./packages/discord-bot/
COPY packages/utils ./packages/utils/
COPY packages/backend ./packages/backend/
# Build
RUN yarn backend:build
RUN ["yarn", "backend:build"]
# Delete devDependencies
RUN yarn install --pure-lockfile --production --ignore-scripts --prefer-offline
RUN ["yarn", "install", "--pure-lockfile", \
"--production", "--ignore-scripts", \
"--prefer-offline"]
# Create completely new stage including only necessary files
FROM node:16-alpine as app
WORKDIR /app
# Copy necessary files into the stage
COPY --from=build /usr/src/app/packages/discord-bot/package.json \
./packages/discord-bot/package.json
COPY --from=build /usr/src/app/packages/discord-bot/dist \
./packages/discord-bot/dist
COPY --from=build /usr/src/app/packages/utils/package.json \
./packages/utils/package.json
COPY --from=build /usr/src/app/packages/utils/dist \
./packages/utils/dist
COPY --from=build /usr/src/app/packages/utils/node_modules \
./packages/utils/node_modules
COPY --from=build /usr/src/app/package.json ./package.json
COPY --from=build /usr/src/app/node_modules ./node_modules
COPY --from=build /usr/src/app/packages/backend/package.json ./packages/backend/package.json
COPY --from=build /usr/src/app/packages/backend/dist ./packages/backend/dist
COPY --from=build /usr/src/app/packages/backend/package.json \
./packages/backend/package.json
COPY --from=build /usr/src/app/packages/backend/dist \
./packages/backend/dist
COPY --from=build /usr/src/app/packages/utils/package.json ./packages/utils/package.json
COPY --from=build /usr/src/app/packages/utils/dist ./packages/utils/dist
COPY --from=build /usr/src/app/packages/utils/node_modules ./packages/utils/node_modules
COPY --from=build /usr/src/app/packages/discord-bot/package.json ./packages/discord-bot/package.json
COPY --from=build /usr/src/app/packages/discord-bot/dist ./packages/discord-bot/dist
CMD [ "yarn", "backend", "start" ]
CMD ["yarn", "backend", "start"]

View File

@@ -1,15 +1,21 @@
# syntax = docker/dockerfile:1 # use BuildKit
FROM node:16-slim as base
WORKDIR /usr/src/app
# Install dependencies not included in the slim image
RUN apt-get update && apt-get install -y --no-install-recommends g++ make python
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
g++ make python \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Install dependencies for dev and prod
COPY package.json .
COPY lerna.json .
COPY yarn.lock .
COPY schema.graphql .
COPY tsconfig.base.json .
COPY lerna.json .
COPY schema.graphql .
COPY package.json .
COPY yarn.lock .
COPY packages/discord-bot/*.json ./packages/discord-bot/
COPY packages/utils/*.json ./packages/utils/
@@ -18,22 +24,24 @@ RUN yarn install --pure-lockfile
# Dev environment doesn't run this stage or beyond
FROM base as build
# Copy source files
COPY packages/discord-bot ./packages/discord-bot/
COPY packages/utils ./packages/utils/
COPY packages/@types ./packages/@types/
# Set env vars
ARG GRAPHQL_HOST
ENV GRAPHQL_URL https://$GRAPHQL_HOST.onrender.com/v1/graphql
ENV HASURA_GRAPHQL_ADMIN_SECRET metagame_secret
ENV GRAPHQL_URL=https://$GRAPHQL_HOST.onrender.com/v1/graphql
ENV HASURA_GRAPHQL_ADMIN_SECRET=metagame_secret
# Copy source files
COPY packages/@types ./packages/@types/
COPY packages/discord-bot ./packages/discord-bot/
COPY packages/utils ./packages/utils/
# Build
RUN yarn discord-bot build
RUN ["yarn", "discord-bot", "build"]
# Delete devDependencies
RUN yarn install --pure-lockfile --production --ignore-scripts --prefer-offline
RUN ["yarn", "install", "--pure-lockfile", \
"--production", "--ignore-scripts", \
"--prefer-offline"]
# Create completely new stage including only necessary files
FROM node:16-alpine as app
@@ -43,9 +51,6 @@ WORKDIR /app
ENV RUNTIME_ENV docker
# Copy necessary files into the stage
COPY --from=build /usr/src/app/package.json ./package.json
COPY --from=build /usr/src/app/node_modules ./node_modules
COPY --from=build /usr/src/app/packages/discord-bot/package.json ./packages/discord-bot/package.json
COPY --from=build /usr/src/app/packages/discord-bot/dist ./packages/discord-bot/dist
@@ -53,4 +58,7 @@ COPY --from=build /usr/src/app/packages/utils/package.json ./packages/utils/pack
COPY --from=build /usr/src/app/packages/utils/dist ./packages/utils/dist
COPY --from=build /usr/src/app/packages/utils/node_modules ./packages/utils/node_modules
CMD [ "yarn", "discord-bot", "start" ]
COPY --from=build /usr/src/app/package.json ./package.json
COPY --from=build /usr/src/app/node_modules ./node_modules
CMD ["yarn", "discord-bot", "start"]

View File

@@ -1,64 +1,80 @@
# syntax = docker/dockerfile:1 # use BuildKit
FROM node:16-slim as base
WORKDIR /usr/src/app
# Install dependencies not included in the slim image
RUN apt-get update && apt-get install -y --no-install-recommends g++ make python git ca-certificates
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates g++ git make python \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Install dependencies for dev and prod
COPY package.json .
COPY lerna.json .
COPY yarn.lock .
COPY schema.graphql .
COPY tsconfig.base.json .
COPY tsconfig.json .
COPY packages/web/*.json ./packages/web/
COPY lerna.json .
COPY schema.graphql .
COPY package.json .
COPY yarn.lock .
COPY packages/web/codegen.yml ./packages/web/
COPY packages/web/*.json ./packages/web/
COPY packages/web/graphql ./packages/web/graphql/
COPY packages/utils/*.json ./packages/utils/
COPY packages/design-system/*.json ./packages/design-system/
RUN yarn policies set-version 1.15.2
RUN yarn install --pure-lockfile
RUN ["yarn", "policies", "set-version", "1.15.2"]
RUN ["yarn", "install", "--pure-lockfile"]
# Dev environment doesn't run this stage or beyond
FROM base as build
# Copy source files
COPY packages/web ./packages/web/
COPY packages/utils ./packages/utils/
COPY packages/design-system ./packages/design-system/
COPY packages/@types ./packages/@types/
# Set env vars
ARG GRAPHQL_HOST=hasura
ARG GRAPHQL_DOMAIN=onrender.com
ARG GRAPHQL_URL=https://$GRAPHQL_HOST.$GRAPHQL_DOMAIN/v1/graphql
ENV NEXT_PUBLIC_GRAPHQL_URL $GRAPHQL_URL
ENV NEXT_PUBLIC_GRAPHQL_URL="$GRAPHQL_URL"
# Copy source files
COPY packages/@types ./packages/@types/
COPY packages/utils ./packages/utils/
COPY packages/design-system ./packages/design-system/
COPY packages/web ./packages/web/
# Build
RUN yarn web:build
RUN ["yarn", "web:build"]
# Delete devDependencies
RUN yarn install --pure-lockfile --production --ignore-scripts --prefer-offline
RUN ["yarn", "install", "--pure-lockfile", \
"--production", "--ignore-scripts", \
"--prefer-offline"]
# Create completely new stage including only necessary files
FROM node:16-alpine as app
WORKDIR /app
# Copy necessary files into the stage
COPY --from=build /usr/src/app/packages/utils/package.json \
./packages/utils/package.json
COPY --from=build /usr/src/app/packages/utils/dist \
./packages/utils/dist
COPY --from=build /usr/src/app/packages/utils/node_modules \
./packages/utils/node_modules
COPY --from=build /usr/src/app/packages/design-system/package.json \
./packages/design-system/package.json
COPY --from=build /usr/src/app/packages/design-system/dist \
./packages/design-system/dist
COPY --from=build /usr/src/app/package.json ./package.json
COPY --from=build /usr/src/app/node_modules ./node_modules
COPY --from=build /usr/src/app/packages/web/package.json ./packages/web/package.json
COPY --from=build /usr/src/app/packages/web/public ./packages/web/public
COPY --from=build /usr/src/app/packages/web/.next ./packages/web/.next
COPY --from=build /usr/src/app/packages/web/package.json \
./packages/web/package.json
COPY --from=build /usr/src/app/packages/web/public \
./packages/web/public
COPY --from=build /usr/src/app/packages/web/.next \
./packages/web/.next
COPY --from=build /usr/src/app/packages/utils/package.json ./packages/utils/package.json
COPY --from=build /usr/src/app/packages/utils/dist ./packages/utils/dist
COPY --from=build /usr/src/app/packages/utils/node_modules ./packages/utils/node_modules
COPY --from=build /usr/src/app/packages/design-system/package.json ./packages/design-system/package.json
COPY --from=build /usr/src/app/packages/design-system/dist ./packages/design-system/dist
CMD [ "yarn", "web", "start" ]
CMD ["yarn", "web", "start"]

View File

@@ -1,9 +1,11 @@
# syntax = docker/dockerfile:1 # use BuildKit
FROM hasura/graphql-engine:v1.3.3.cli-migrations-v2
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.9.0/wait /wait
RUN chmod +x /wait
## Default setup
## Default Setup
ARG BACKEND_HOST=localhost
ARG BACKEND_PROTOCOL=http
@@ -15,21 +17,28 @@ ARG HASURA_GRAPHQL_SERVER_PORT=8080
ENV HASURA_GRAPHQL_DEV_MODE false
ENV HASURA_GRAPHQL_ENABLE_TELEMETRY false
ENV HASURA_GRAPHQL_ENABLED_LOG_TYPES startup, http-log, webhook-log, websocket-log, query-log
ENV HASURA_GRAPHQL_AUTH_HOOK $BACKEND_PROTOCOL://$BACKEND_HOST/$AUTH_HOOK_PATH
ENV ACTION_BASE_ENDPOINT $BACKEND_PROTOCOL://$BACKEND_HOST/$ACTION_BASE_PATH
ENV REMOTE_SCHEMA_ENDPOINT $BACKEND_PROTOCOL://$BACKEND_HOST/$REMOTE_SCHEMA_PATH
ENV TRIGGERS_ENDPOINT $BACKEND_PROTOCOL://$BACKEND_HOST/$TRIGGERS_PATH
ENV HASURA_GRAPHQL_MIGRATIONS_DATABASE_ENV_VAR HASURA_GRAPHQL_DATABASE_URL
ENV HASURA_GRAPHQL_ENABLED_LOG_TYPES \
startup, http-log, webhook-log, websocket-log, query-log
ENV HASURA_GRAPHQL_AUTH_HOOK \
$BACKEND_PROTOCOL://$BACKEND_HOST/$AUTH_HOOK_PATH
ENV ACTION_BASE_ENDPOINT \
$BACKEND_PROTOCOL://$BACKEND_HOST/$ACTION_BASE_PATH
ENV REMOTE_SCHEMA_ENDPOINT \
$BACKEND_PROTOCOL://$BACKEND_HOST/$REMOTE_SCHEMA_PATH
ENV TRIGGERS_ENDPOINT \
$BACKEND_PROTOCOL://$BACKEND_HOST/$TRIGGERS_PATH
ENV HASURA_GRAPHQL_MIGRATIONS_DATABASE_ENV_VAR \
HASURA_GRAPHQL_DATABASE_URL
ENV HASURA_GRAPHQL_NO_OF_RETRIES 3
ENV HASURA_GRAPHQL_MIGRATIONS_SERVER_TIMEOUT 90
## Migrations
## Migrations & Metadata
COPY migrations /hasura-migrations
COPY metadata /hasura-metadata
## Execution
ENTRYPOINT ["/bin/sh", "-c", "/wait && /bin/docker-entrypoint.sh /bin/sh \"$@\""]
ENTRYPOINT ["/bin/sh", "-c", \
"/wait && /bin/docker-entrypoint.sh /bin/sh \"$@\""]
CMD graphql-engine serve --server-port $HASURA_GRAPHQL_SERVER_PORT

View File

@@ -12,6 +12,7 @@
"docker:build": "docker-compose up --build -d",
"docker:stop": "docker-compose down",
"docker:clean": "docker-compose down -v",
"docker:debug": "COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose up --build",
"build": "lerna run build",
"web:dev": "lerna run dev --parallel --scope @metafam/web --include-dependencies",
"web:build": "lerna run build --scope @metafam/web --include-dependencies --stream",
@@ -21,10 +22,11 @@
"hasura:console": "yarn hasura console --no-browser",
"hasura:migrate:init": "yarn hasura migrate create \"init\" --from-server",
"hasura:seed-db": "node hasura/seed-db.mjs",
"test": "lerna run test --parallel --",
"generate": "lerna run generate --parallel --",
"test": "lerna run test --parallel --",
"test:full": "yarn lint && yarn typecheck && yarn test",
"clean": "lerna clean",
"clean:full": "lerna clean && rm -rfv node_modules/ packages/*/node_modules/ packages/*/dist/ packages/web/.next/",
"format": "prettier --write \"{*,**/*}.{ts,tsx,js,jsx,json,yml,yaml,md}\"",
"lint": "eslint --ignore-path .gitignore \"./packages/**/*.{ts,tsx,js,jsx}\"",
"typecheck": "lerna run typecheck",