FROM node:lts-alpine AS base ARG APP_VERSION=dev ENV APP_VERSION=${APP_VERSION} RUN apk add --no-cache openssl && corepack enable USER node WORKDIR /home/node/app COPY --chown=node:node .yarnrc.yml . COPY --chown=node:node package.json . COPY --chown=node:node api/package.json api/ COPY --chown=node:node web/package.json web/ COPY --chown=node:node yarn.lock . RUN mkdir -p /home/node/.yarn/berry/index RUN mkdir -p /home/node/.cache RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,uid=1000 \ --mount=type=cache,target=/home/node/.cache,uid=1000 \ CI=1 yarn install COPY --chown=node:node redwood.toml . COPY --chown=node:node graphql.config.js . FROM base AS api_build ARG ADDRESS_PROD ARG ADDRESS_DEV ARG DOMAIN ARG API_DOMAIN ARG MAX_HTTP_CONNECTIONS_PER_MINUTE ARG SMTP_HOST ARG SMTP_PORT ARG SMTP_SECURE ARG SMTP_USER ARG SMTP_PASSWORD ARG EMAIL_FROM ARG EMAIL_TO ARG FIRST_NAME ARG LAST_NAME ARG APP_VERSION COPY --chown=node:node api api RUN yarn rw build api FROM api_build AS web_build_with_prerender ARG FIRST_NAME ARG LAST_NAME ARG COUNTRY ARG STATE ARG CITY ARG DEFAULT_THEME ARG API_ADDRESS_PROD ARG API_ADDRESS_DEV ARG APP_VERSION ENV APP_VERSION=${APP_VERSION} COPY --chown=node:node web web RUN yarn rw build web FROM base AS web_build ARG FIRST_NAME ARG LAST_NAME ARG COUNTRY ARG STATE ARG CITY ARG DEFAULT_THEME ARG API_ADDRESS_PROD ARG API_ADDRESS_DEV ARG APP_VERSION ENV APP_VERSION=${APP_VERSION} COPY --chown=node:node web web RUN yarn rw build web --no-prerender FROM node:lts-alpine AS api_serve RUN apk add --no-cache openssl && corepack enable RUN mkdir -p /home/node/app/api/files_prod \ && chown -R node:node /home/node/app/api/files_prod USER node WORKDIR /home/node/app COPY --chown=node:node .yarnrc.yml . COPY --chown=node:node package.json . COPY --chown=node:node api/package.json api/ COPY --chown=node:node yarn.lock . RUN mkdir -p /home/node/.yarn/berry/index RUN mkdir -p /home/node/.cache RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,uid=1000 \ --mount=type=cache,target=/home/node/.cache,uid=1000 \ CI=1 yarn workspaces focus api --production COPY --chown=node:node redwood.toml . COPY --chown=node:node graphql.config.js . COPY --chown=node:node --from=api_build /home/node/app/api/dist /home/node/app/api/dist COPY --chown=node:node --from=api_build /home/node/app/api/db /home/node/app/api/db COPY --chown=node:node --from=api_build /home/node/app/node_modules/.prisma /home/node/app/node_modules/.prisma ARG APP_VERSION ENV NODE_ENV=production ENV APP_VERSION=${APP_VERSION} CMD [ "./api/dist/server.js" ] FROM node:lts-alpine AS web_serve RUN corepack enable USER node WORKDIR /home/node/app COPY --chown=node:node .yarnrc.yml . COPY --chown=node:node package.json . COPY --chown=node:node web/package.json web/ COPY --chown=node:node yarn.lock . RUN mkdir -p /home/node/.yarn/berry/index RUN mkdir -p /home/node/.cache RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,uid=1000 \ --mount=type=cache,target=/home/node/.cache,uid=1000 \ CI=1 yarn workspaces focus web --production COPY --chown=node:node redwood.toml . COPY --chown=node:node graphql.config.js . COPY --chown=node:node --from=web_build /home/node/app/web/dist /home/node/app/web/dist ARG APP_VERSION ENV APP_VERSION=${APP_VERSION} ENV NODE_ENV=production \ API_PROXY_TARGET=http://api:8911 CMD "node_modules/.bin/rw-web-server" "--api-proxy-target" "$API_PROXY_TARGET" FROM base AS console COPY --chown=node:node api api COPY --chown=node:node web web COPY --chown=node:node scripts scripts