From 8a83e01cf993ea34a9d7cfaf7a78db71fed766b8 Mon Sep 17 00:00:00 2001 From: apricot Date: Fri, 28 Feb 2025 11:32:21 +0200 Subject: [PATCH] feat: docker templates --- templates/pnpm/cms.Dockerfile | 38 +++++++++++++++++++++++++++++++++++ templates/pnpm/web.Dockerfile | 26 ++++++++++++++++++++++++ templates/yarn/Dockerfile | 33 ++++++++++++++++++++++++++++++ templates/yarn/api.Dockerfile | 20 ++++++++++++++++++ templates/yarn/web.Dockerfile | 23 +++++++++++++++++++++ 5 files changed, 140 insertions(+) create mode 100644 templates/pnpm/cms.Dockerfile create mode 100644 templates/pnpm/web.Dockerfile create mode 100644 templates/yarn/Dockerfile create mode 100644 templates/yarn/api.Dockerfile create mode 100644 templates/yarn/web.Dockerfile diff --git a/templates/pnpm/cms.Dockerfile b/templates/pnpm/cms.Dockerfile new file mode 100644 index 0000000..5568d5c --- /dev/null +++ b/templates/pnpm/cms.Dockerfile @@ -0,0 +1,38 @@ +# syntax=docker/dockerfile:latest +FROM node:20-alpine AS base +RUN apk add --no-cache \ + build-base \ + cairo-dev \ + jpeg-dev \ + pango-dev \ + giflib-dev \ + libpng-dev \ + libjpeg-turbo-dev \ + g++ \ + python3 \ + make + +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable +RUN corepack prepare pnpm@9.15.1 --activate +COPY package.json pnpm-*.yaml .npmrc /app/ +WORKDIR /app + +FROM base AS prod-deps +COPY ./packages/cms/package.json /app/packages/cms/package.json +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile +RUN pnpm deploy --filter=cms --prod /app/prune/node_modules + +FROM base AS build +COPY ./packages/cms /app/packages/cms +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile +RUN pnpm run build + +FROM base +COPY --from=build --chown=node:node /app/packages/cms /app +COPY --from=prod-deps --chown=node:node /app/prune/node_modules/node_modules /app/node_modules +EXPOSE 1337 +ENV NODE_ENV=production +ENTRYPOINT ["node"] +CMD ["node_modules/@strapi/strapi/bin/strapi.js", "start"] \ No newline at end of file diff --git a/templates/pnpm/web.Dockerfile b/templates/pnpm/web.Dockerfile new file mode 100644 index 0000000..17790a5 --- /dev/null +++ b/templates/pnpm/web.Dockerfile @@ -0,0 +1,26 @@ +FROM node:22-alpine AS base +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable +RUN corepack prepare pnpm@9.15.1 --activate +# Adjust directory +COPY package.json pnpm-*.yaml /app/ +WORKDIR /app + +FROM base AS build +# Adjust directory +COPY ./packages/web /app/packages/web +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile +RUN pnpm run build + +FROM nginxinc/nginx-unprivileged:latest +USER root +WORKDIR /usr/app +# Adjust directory +COPY ./packages/web/nginx/default.conf /etc/nginx/conf.d/default.conf +USER nginx +# Adjust directory +COPY --from=build /app/packages/web/build /usr/share/nginx/html +EXPOSE 8080 + +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/templates/yarn/Dockerfile b/templates/yarn/Dockerfile new file mode 100644 index 0000000..f85ea08 --- /dev/null +++ b/templates/yarn/Dockerfile @@ -0,0 +1,33 @@ +# syntax=docker/dockerfile:latest +ARG version=3.7.0 +FROM dcr.bndigital.dev/library/yarn:${version} AS build +ENV NODE_OPTIONS "--max_old_space_size=6144" +COPY .yarn .yarn +COPY package.json yarn.lock .yarnrc.yml ./ +COPY packages/cms/package.json packages/cms/ +COPY packages/website/package.json packages/website/ +RUN yarn +COPY . . +RUN yarn workspace @vertical-saas/cms run build \ + && yarn workspace @vertical-saas/website run build \ + && rm -rf packages/cms/tsconfig.json \ + && rm -rf packages/cms/src/* \ + && rm -rf packages/cms/config \ + && rm -rf packages/cms/public \ + && mv -v packages/cms/dist/* packages/cms \ + && yarn workspaces focus --production --all + +## Uncomment the following lines to build a frontend-only image +#FROM dcr.bndigital.dev/library/nodejs:${version} +#WORKDIR /usr/local/src +#COPY --from=build --chown=node /usr/local/src/packages/website/build . +#ENTRYPOINT ["http-server"] +#CMD ["--proxy", "http://localhost:5000?"] + +## Comment the following lines to build a frontend-only image +FROM dcr.bndigital.dev/library/nodejs:${version} +WORKDIR /usr/local/src +COPY --from=build --chown=node /usr/local/src/packages/cms . +COPY --from=build --chown=node /usr/local/src/packages/website/build public +ENTRYPOINT ["node"] +CMD ["node_modules/@strapi/strapi/bin/strapi.js", "start"] \ No newline at end of file diff --git a/templates/yarn/api.Dockerfile b/templates/yarn/api.Dockerfile new file mode 100644 index 0000000..08cbf42 --- /dev/null +++ b/templates/yarn/api.Dockerfile @@ -0,0 +1,20 @@ +FROM node:20-alpine + +WORKDIR /app + +COPY package.json yarn.lock ./ + +# Change flag to --immutable if yarn v2 +RUN yarn install --frozen-lockfile + +COPY . . + +RUN chown -R node:node /app + +USER node + +RUN yarn build + +EXPOSE 3000 + +CMD ["yarn", "start"] \ No newline at end of file diff --git a/templates/yarn/web.Dockerfile b/templates/yarn/web.Dockerfile new file mode 100644 index 0000000..06bf096 --- /dev/null +++ b/templates/yarn/web.Dockerfile @@ -0,0 +1,23 @@ +FROM node:22-alpine AS base +# Adjust directory +COPY package.json yarn.lock /app/ +WORKDIR /app + +FROM base AS build +# Adjust directory +COPY ./packages/web /app/packages/web +# Change flag to --immutable if yarn v2 +RUN yarn install --frozen-lockfile +RUN yarn build + +FROM nginxinc/nginx-unprivileged:latest +USER root +WORKDIR /usr/app +# Adjust directory +COPY ./packages/web/nginx/default.conf /etc/nginx/conf.d/default.conf +USER nginx +# Adjust directory +COPY --from=build /app/packages/web/build /usr/share/nginx/html +EXPOSE 8080 + +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file