From 0ccc3a2a0c4f71a0a438a513f051038854b84a42 Mon Sep 17 00:00:00 2001 From: Pedro Pablo Pastene Date: Mon, 24 Oct 2022 00:40:46 -0300 Subject: [PATCH 01/11] Simplem implementation of Docker for development and production --- .dockerignore | 11 +++++++++++ Makefile | 17 +++++++++++++++++ docker/Dockerfile.dev | 11 +++++++++++ docker/Dockerfile.prod | 13 +++++++++++++ docker/docker-compose.dev.yml | 13 +++++++++++++ docker/docker-compose.prod.yml | 10 ++++++++++ 6 files changed, 75 insertions(+) create mode 100644 .dockerignore create mode 100644 Makefile create mode 100644 docker/Dockerfile.dev create mode 100644 docker/Dockerfile.prod create mode 100644 docker/docker-compose.dev.yml create mode 100644 docker/docker-compose.prod.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..175a3ab --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +/node_modules +/docker + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +.vercel +.gitignore +.github +.next \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b5096bf --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +build-development: + docker-compose -f docker/docker-compose.dev.yml build --no-cache + +run-development: + docker-compose -f docker/docker-compose.dev.yml up -d + +stop-development: + docker-compose -f docker/docker-compose.dev.yml down + +build-production: + docker-compose -f docker/docker-compose.prod.yml build --no-cache + +run-production: + docker-compose -f docker/docker-compose.prod.yml up -d + +stop-production: + docker-compose -f docker/docker-compose.prod.yml down \ No newline at end of file diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev new file mode 100644 index 0000000..edc57be --- /dev/null +++ b/docker/Dockerfile.dev @@ -0,0 +1,11 @@ +FROM node:14-alpine + +WORKDIR /app + +COPY package*.json yarn.lock* ./ + +RUN yarn + +COPY ./ ./ + +CMD ["yarn", "dev"] \ No newline at end of file diff --git a/docker/Dockerfile.prod b/docker/Dockerfile.prod new file mode 100644 index 0000000..568de55 --- /dev/null +++ b/docker/Dockerfile.prod @@ -0,0 +1,13 @@ +FROM node:14-alpine + +WORKDIR /app + +COPY package*.json yarn.lock* ./ + +RUN yarn + +COPY ./ ./ + +RUN yarn build + +CMD ["yarn", "start"] \ No newline at end of file diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml new file mode 100644 index 0000000..c3eada7 --- /dev/null +++ b/docker/docker-compose.dev.yml @@ -0,0 +1,13 @@ +version: '3.8' + +services: + app: + container_name: hacktoberfest_projects_dev + build: + context: ../ + dockerfile: docker/Dockerfile.dev + ports: + - 3000:3000 + volumes: + - ../:/app + - /app/node_modules diff --git a/docker/docker-compose.prod.yml b/docker/docker-compose.prod.yml new file mode 100644 index 0000000..c35eebc --- /dev/null +++ b/docker/docker-compose.prod.yml @@ -0,0 +1,10 @@ +version: '3.8' + +services: + app: + container_name: hacktoberfest_projects_prod + build: + context: ../ + dockerfile: docker/Dockerfile.prod + ports: + - 3000:3000 From 30b7ea3936c552ccbc2eec72b101892ce604a948 Mon Sep 17 00:00:00 2001 From: Pedro Pablo Pastene Date: Mon, 24 Oct 2022 00:40:46 -0300 Subject: [PATCH 02/11] Simplem implementation of Docker for development and production --- .dockerignore | 11 +++++++++++ Makefile | 17 +++++++++++++++++ docker/Dockerfile.dev | 11 +++++++++++ docker/Dockerfile.prod | 13 +++++++++++++ docker/docker-compose.dev.yml | 13 +++++++++++++ docker/docker-compose.prod.yml | 10 ++++++++++ 6 files changed, 75 insertions(+) create mode 100644 .dockerignore create mode 100644 Makefile create mode 100644 docker/Dockerfile.dev create mode 100644 docker/Dockerfile.prod create mode 100644 docker/docker-compose.dev.yml create mode 100644 docker/docker-compose.prod.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..175a3ab --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +/node_modules +/docker + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +.vercel +.gitignore +.github +.next \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b5096bf --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +build-development: + docker-compose -f docker/docker-compose.dev.yml build --no-cache + +run-development: + docker-compose -f docker/docker-compose.dev.yml up -d + +stop-development: + docker-compose -f docker/docker-compose.dev.yml down + +build-production: + docker-compose -f docker/docker-compose.prod.yml build --no-cache + +run-production: + docker-compose -f docker/docker-compose.prod.yml up -d + +stop-production: + docker-compose -f docker/docker-compose.prod.yml down \ No newline at end of file diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev new file mode 100644 index 0000000..edc57be --- /dev/null +++ b/docker/Dockerfile.dev @@ -0,0 +1,11 @@ +FROM node:14-alpine + +WORKDIR /app + +COPY package*.json yarn.lock* ./ + +RUN yarn + +COPY ./ ./ + +CMD ["yarn", "dev"] \ No newline at end of file diff --git a/docker/Dockerfile.prod b/docker/Dockerfile.prod new file mode 100644 index 0000000..568de55 --- /dev/null +++ b/docker/Dockerfile.prod @@ -0,0 +1,13 @@ +FROM node:14-alpine + +WORKDIR /app + +COPY package*.json yarn.lock* ./ + +RUN yarn + +COPY ./ ./ + +RUN yarn build + +CMD ["yarn", "start"] \ No newline at end of file diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml new file mode 100644 index 0000000..c3eada7 --- /dev/null +++ b/docker/docker-compose.dev.yml @@ -0,0 +1,13 @@ +version: '3.8' + +services: + app: + container_name: hacktoberfest_projects_dev + build: + context: ../ + dockerfile: docker/Dockerfile.dev + ports: + - 3000:3000 + volumes: + - ../:/app + - /app/node_modules diff --git a/docker/docker-compose.prod.yml b/docker/docker-compose.prod.yml new file mode 100644 index 0000000..c35eebc --- /dev/null +++ b/docker/docker-compose.prod.yml @@ -0,0 +1,10 @@ +version: '3.8' + +services: + app: + container_name: hacktoberfest_projects_prod + build: + context: ../ + dockerfile: docker/Dockerfile.prod + ports: + - 3000:3000 From de68a6bbe82e217875a2f5f00dbcddbb044c54d5 Mon Sep 17 00:00:00 2001 From: Pedro Pablo Pastene Date: Wed, 11 Oct 2023 01:47:42 -0300 Subject: [PATCH 03/11] Update on docker-compose.dev --- Makefile | 20 +++++++++++++------- docker/docker-compose.dev.yml | 1 + 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index b5096bf..cf402af 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,23 @@ -build-development: +build-dev: docker-compose -f docker/docker-compose.dev.yml build --no-cache -run-development: +run-dev: docker-compose -f docker/docker-compose.dev.yml up -d -stop-development: +stop-dev: docker-compose -f docker/docker-compose.dev.yml down -build-production: +rm-dev: + docker-compose -f docker/docker-compose.dev.yml down -v + +build-prod: docker-compose -f docker/docker-compose.prod.yml build --no-cache -run-production: +run-prod: docker-compose -f docker/docker-compose.prod.yml up -d -stop-production: - docker-compose -f docker/docker-compose.prod.yml down \ No newline at end of file +stop-prod: + docker-compose -f docker/docker-compose.prod.yml down + +rm-prod: + docker-compose -f docker/docker-compose.prod.yml down -v \ No newline at end of file diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index c3eada7..68bbd21 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -2,6 +2,7 @@ version: '3.8' services: app: + restart: on-failure container_name: hacktoberfest_projects_dev build: context: ../ From fc53282d0f023e4e0d5736bbc985d11b174e3e3c Mon Sep 17 00:00:00 2001 From: Pedro Pablo Pastene Date: Thu, 12 Oct 2023 01:51:14 -0300 Subject: [PATCH 04/11] Adding Docker usage with the project --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index b4a4c63..fe261b7 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,10 @@ Start the server pnpm dev ``` +### Using Docker + +This project provides a development and production Dockerfiles for your needs and a docker-compose to deploy locally the project with the required configuration. The development Dockerfile creates a volume pointing to /node_modules so you can match the files between your machine and the container, while the production Dockerfile will simply compile the code. There's a Makefile to build, run, stop the containers and remove their volumes if needed, or you can execute the commands directly from the project's root. + ## Tech Stack - [Next.js](https://nextjs.org/) From 8b71ec5c705e4bf8d23650af772d09ff3762e54a Mon Sep 17 00:00:00 2001 From: Pedro Pablo Pastene Date: Thu, 12 Oct 2023 01:53:22 -0300 Subject: [PATCH 05/11] Removing restart property for dev compose --- docker/docker-compose.dev.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 68bbd21..c3eada7 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -2,7 +2,6 @@ version: '3.8' services: app: - restart: on-failure container_name: hacktoberfest_projects_dev build: context: ../ From aa65456ad4480379a2f0ae71649be2ec8fef2c7f Mon Sep 17 00:00:00 2001 From: Pedro Pablo Pastene Date: Thu, 12 Oct 2023 01:53:38 -0300 Subject: [PATCH 06/11] Adding restart property for prod compose --- docker/docker-compose.prod.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/docker-compose.prod.yml b/docker/docker-compose.prod.yml index c35eebc..6091425 100644 --- a/docker/docker-compose.prod.yml +++ b/docker/docker-compose.prod.yml @@ -6,5 +6,6 @@ services: build: context: ../ dockerfile: docker/Dockerfile.prod + restart: on-failure ports: - 3000:3000 From b9f03af029a13a19b8193ff2a20e5185e123c163 Mon Sep 17 00:00:00 2001 From: Pedro Pablo Pastene Date: Fri, 13 Oct 2023 23:33:49 -0300 Subject: [PATCH 07/11] Remove of detatched option --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 6c860d5..498b571 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ build-dev: docker-compose -f docker/docker-compose.dev.yml build --no-cache run-dev: - docker-compose -f docker/docker-compose.dev.yml up -d + docker-compose -f docker/docker-compose.dev.yml up stop-dev: docker-compose -f docker/docker-compose.dev.yml down @@ -14,7 +14,7 @@ build-prod: docker-compose -f docker/docker-compose.prod.yml build --no-cache run-prod: - docker-compose -f docker/docker-compose.prod.yml up -d + docker-compose -f docker/docker-compose.prod.yml up stop-prod: docker-compose -f docker/docker-compose.prod.yml down From cc8e5151718d69f64287a219a8c0a9fd7a1a4238 Mon Sep 17 00:00:00 2001 From: Pedro Pablo Pastene Date: Fri, 13 Oct 2023 23:34:09 -0300 Subject: [PATCH 08/11] Add files to skip in Docker --- .dockerignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.dockerignore b/.dockerignore index 175a3ab..52d9508 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,7 @@ /node_modules +/.pnp +.pnp.js + /docker npm-debug.log* @@ -8,4 +11,5 @@ yarn-error.log* .vercel .gitignore .github -.next \ No newline at end of file +.next +.prettierrc \ No newline at end of file From b030e685e248043e0b3a0c6043840b41aae053b9 Mon Sep 17 00:00:00 2001 From: Pedro Pablo Pastene Date: Fri, 13 Oct 2023 23:34:36 -0300 Subject: [PATCH 09/11] Add the watch option for the development setup --- next.config.mjs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/next.config.mjs b/next.config.mjs index 1cad4e1..e0eb930 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -3,6 +3,14 @@ await import('./env.mjs'); /** @type {import('next').NextConfig} */ const config = { reactStrictMode: true, + swcMinify: true, + webpack: (config, context) => { + config.watchOptions = { + poll: 1000, + aggregateTimeout: 300 + } + return config + }, async redirects() { return [ { From d6da84a6cd7aee5ee323a3ff898d5c2bdb3e6fb9 Mon Sep 17 00:00:00 2001 From: Pedro Pablo Pastene Date: Fri, 13 Oct 2023 23:34:50 -0300 Subject: [PATCH 10/11] Update on the development deployment --- docker/Dockerfile.dev | 20 +++++++++++++++----- docker/docker-compose.dev.yml | 4 ++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index edc57be..30a1e94 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -1,11 +1,21 @@ -FROM node:14-alpine +FROM node:18-slim AS base + +RUN npm i -g pnpm + +FROM base AS dependencies + +COPY package*.json pnpm-lock.yaml ./ + +RUN pnpm install + +FROM base AS builder WORKDIR /app -COPY package*.json yarn.lock* ./ +COPY . . -RUN yarn +COPY --from=dependencies /node_modules ./node_modules -COPY ./ ./ +FROM builder AS dev -CMD ["yarn", "dev"] \ No newline at end of file +CMD ["pnpm", "dev"] \ No newline at end of file diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index c3eada7..11bf2bd 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -6,8 +6,12 @@ services: build: context: ../ dockerfile: docker/Dockerfile.dev + target: dev + environment: + - NODE_ENV=development ports: - 3000:3000 volumes: - ../:/app - /app/node_modules + - /app/.next From c0a9337016326cdc761cfe6623e618bb6e5cfe24 Mon Sep 17 00:00:00 2001 From: Pedro Pablo Pastene Date: Fri, 13 Oct 2023 23:35:03 -0300 Subject: [PATCH 11/11] Update on the production deployment --- docker/Dockerfile.prod | 39 ++++++++++++++++++++++++++++------ docker/docker-compose.prod.yml | 1 + 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/docker/Dockerfile.prod b/docker/Dockerfile.prod index 568de55..853f175 100644 --- a/docker/Dockerfile.prod +++ b/docker/Dockerfile.prod @@ -1,13 +1,40 @@ -FROM node:14-alpine +FROM node:18-alpine AS base + +RUN npm i -g pnpm + +FROM base AS dependencies + +COPY package*.json pnpm-lock.yaml ./ + +RUN pnpm install + +FROM base AS builder WORKDIR /app -COPY package*.json yarn.lock* ./ +COPY . . + +COPY --from=dependencies /node_modules ./node_modules + +RUN pnpm build + +FROM builder AS prod + +ENV NODE_ENV production + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder /app/public ./public + +RUN mkdir .next +RUN chown nextjs:nodejs .next -RUN yarn +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static -COPY ./ ./ +USER nextjs -RUN yarn build +EXPOSE 3000 -CMD ["yarn", "start"] \ No newline at end of file +CMD ["pnpm", "start"] \ No newline at end of file diff --git a/docker/docker-compose.prod.yml b/docker/docker-compose.prod.yml index 6091425..a38e4bd 100644 --- a/docker/docker-compose.prod.yml +++ b/docker/docker-compose.prod.yml @@ -6,6 +6,7 @@ services: build: context: ../ dockerfile: docker/Dockerfile.prod + target: prod restart: on-failure ports: - 3000:3000