From 9e51e316b01abc458887b9c229787dec694e55b2 Mon Sep 17 00:00:00 2001 From: Brandon Ellis Date: Fri, 7 Nov 2025 13:18:17 -0500 Subject: [PATCH 1/4] Simplify devcontainer setup --- .devcontainer/Dockerfile | 29 ---------- .devcontainer/devcontainer.json | 31 ++++++++--- .devcontainer/docker-compose.yml | 90 -------------------------------- 3 files changed, 24 insertions(+), 126 deletions(-) delete mode 100644 .devcontainer/Dockerfile delete mode 100644 .devcontainer/docker-compose.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 8cbdc70..0000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM mcr.microsoft.com/devcontainers/javascript-node:20 - -# Install MySQL client, Redis CLI, mongosh, and MongoDB database tools -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - default-mysql-client \ - git \ - gnupg \ - lsb-release \ - procps \ - redis-tools \ - wget && \ - wget https://downloads.mongodb.com/compass/mongosh-2.1.1-linux-x64.tgz && \ - tar -zxvf mongosh-2.1.1-linux-x64.tgz && \ - cp -R mongosh-2.1.1-linux-x64/bin/* /usr/local/bin/ && \ - rm -rf mongosh-2.1.1-linux-x64.tgz mongosh-2.1.1-linux-x64 && \ - mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor -o /etc/apt/keyrings/mongodb.gpg && \ - echo "deb [signed-by=/etc/apt/keyrings/mongodb.gpg] http://repo.mongodb.org/apt/debian $(lsb_release -cs)/mongodb-org/7.0 main" | \ - tee /etc/apt/sources.list.d/mongodb-org-7.0.list && \ - apt-get update && \ - apt-get install -y --no-install-recommends mongodb-database-tools && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - -ENV SHELL=/bin/bash -WORKDIR /workspace diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4d3d466..95f0f14 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,12 +1,19 @@ { - "name": "MERN Stack with Redis and MySQL Development", - "dockerComposeFile": "docker-compose.yml", - "service": "app", - "workspaceFolder": "/workspace", + "name": "MERN Stack Development", + "image": "mcr.microsoft.com/devcontainers/javascript-node:20", "features": { - "ghcr.io/devcontainers/features/git:1": {} + "ghcr.io/devcontainers/features/git:1": {}, + "ghcr.io/devcontainers/features/mongodb:1": { + "version": "7" + }, + "ghcr.io/devcontainers/features/redis:1": {}, + "ghcr.io/devcontainers/features/mysql:1": { + "version": "8.0", + "mysqlDatabase": "mern_db", + "mysqlUser": "root", + "mysqlPassword": "password" + } }, - "customizations": { "vscode": { "settings": { @@ -31,7 +38,17 @@ ] } }, - + "containerEnv": { + "NODE_ENV": "development", + "MONGO_URI": "mongodb://localhost:27017/mern_app", + "REDIS_URI": "redis://localhost:6379", + "MONGODB_HOST": "localhost", + "REDIS_HOST": "localhost", + "MYSQL_HOST": "localhost", + "MYSQL_USER": "root", + "MYSQL_PASSWORD": "password", + "MYSQL_DATABASE": "mern_db" + }, "forwardPorts": [3000, 5000, 27017, 6379, 3306], "remoteUser": "node" } diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml deleted file mode 100644 index 130d296..0000000 --- a/.devcontainer/docker-compose.yml +++ /dev/null @@ -1,90 +0,0 @@ -version: "3.8" - -services: - app: - build: - context: . - dockerfile: Dockerfile - volumes: - - ..:/workspace:cached - command: sleep infinity - environment: - - NODE_ENV=development - - MONGO_URI=mongodb://mongo:27017/mern_app - - REDIS_URI=redis://redis:6379 - - MONGODB_HOST=mongo - - REDIS_HOST=redis - - MYSQL_HOST=mysql - - MYSQL_USER=root - - MYSQL_PASSWORD=password - - MYSQL_DATABASE=mern_db - depends_on: - mongo: - condition: service_healthy - redis: - condition: service_healthy - mysql: - condition: service_healthy - networks: - - mern-network - - mongo: - image: mongo:7.0 - restart: unless-stopped - volumes: - - mongo-data:/data/db - ports: - - "27017:27017" - networks: - - mern-network - healthcheck: - test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] - interval: 10s - timeout: 5s - retries: 5 - start_period: 30s - - redis: - image: redis:7.2-alpine - restart: unless-stopped - volumes: - - redis-data:/data - ports: - - "6379:6379" - command: redis-server --appendonly yes --save 60 1 - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 5s - timeout: 3s - retries: 5 - networks: - - mern-network - - mysql: - image: mysql:8.0 - restart: unless-stopped - volumes: - - mysql-data:/var/lib/mysql - ports: - - "3306:3306" - environment: - - MYSQL_ROOT_PASSWORD=password - - MYSQL_DATABASE=mern_db - healthcheck: - test: - ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-ppassword"] - interval: 10s - timeout: 5s - retries: 5 - start_period: 30s - networks: - - mern-network - -networks: - mern-network: - driver: bridge - -volumes: - mongo-data: - redis-data: - mysql-data: From 7ca4570bdb6637009106e11ab9c6bcc80c7268be Mon Sep 17 00:00:00 2001 From: Brandon Ellis Date: Fri, 7 Nov 2025 13:26:44 -0500 Subject: [PATCH 2/4] Use javascript-node-mongo template image --- .devcontainer/Dockerfile | 29 ---------- .devcontainer/devcontainer.json | 28 +++++++--- .devcontainer/docker-compose.yml | 90 -------------------------------- 3 files changed, 21 insertions(+), 126 deletions(-) delete mode 100644 .devcontainer/Dockerfile delete mode 100644 .devcontainer/docker-compose.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 8cbdc70..0000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM mcr.microsoft.com/devcontainers/javascript-node:20 - -# Install MySQL client, Redis CLI, mongosh, and MongoDB database tools -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - default-mysql-client \ - git \ - gnupg \ - lsb-release \ - procps \ - redis-tools \ - wget && \ - wget https://downloads.mongodb.com/compass/mongosh-2.1.1-linux-x64.tgz && \ - tar -zxvf mongosh-2.1.1-linux-x64.tgz && \ - cp -R mongosh-2.1.1-linux-x64/bin/* /usr/local/bin/ && \ - rm -rf mongosh-2.1.1-linux-x64.tgz mongosh-2.1.1-linux-x64 && \ - mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor -o /etc/apt/keyrings/mongodb.gpg && \ - echo "deb [signed-by=/etc/apt/keyrings/mongodb.gpg] http://repo.mongodb.org/apt/debian $(lsb_release -cs)/mongodb-org/7.0 main" | \ - tee /etc/apt/sources.list.d/mongodb-org-7.0.list && \ - apt-get update && \ - apt-get install -y --no-install-recommends mongodb-database-tools && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - -ENV SHELL=/bin/bash -WORKDIR /workspace diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4d3d466..279fcb6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,12 +1,16 @@ { - "name": "MERN Stack with Redis and MySQL Development", - "dockerComposeFile": "docker-compose.yml", - "service": "app", - "workspaceFolder": "/workspace", + "name": "MERN Stack Development", + "image": "ghcr.io/devcontainers/templates/javascript-node-mongo:4.0.2", "features": { - "ghcr.io/devcontainers/features/git:1": {} + "ghcr.io/devcontainers/features/git:1": {}, + "ghcr.io/devcontainers/features/redis:1": {}, + "ghcr.io/devcontainers/features/mysql:1": { + "version": "8.0", + "mysqlDatabase": "mern_db", + "mysqlUser": "root", + "mysqlPassword": "password" + } }, - "customizations": { "vscode": { "settings": { @@ -31,7 +35,17 @@ ] } }, - + "containerEnv": { + "NODE_ENV": "development", + "MONGO_URI": "mongodb://localhost:27017/mern_app", + "REDIS_URI": "redis://localhost:6379", + "MONGODB_HOST": "localhost", + "REDIS_HOST": "localhost", + "MYSQL_HOST": "localhost", + "MYSQL_USER": "root", + "MYSQL_PASSWORD": "password", + "MYSQL_DATABASE": "mern_db" + }, "forwardPorts": [3000, 5000, 27017, 6379, 3306], "remoteUser": "node" } diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml deleted file mode 100644 index 130d296..0000000 --- a/.devcontainer/docker-compose.yml +++ /dev/null @@ -1,90 +0,0 @@ -version: "3.8" - -services: - app: - build: - context: . - dockerfile: Dockerfile - volumes: - - ..:/workspace:cached - command: sleep infinity - environment: - - NODE_ENV=development - - MONGO_URI=mongodb://mongo:27017/mern_app - - REDIS_URI=redis://redis:6379 - - MONGODB_HOST=mongo - - REDIS_HOST=redis - - MYSQL_HOST=mysql - - MYSQL_USER=root - - MYSQL_PASSWORD=password - - MYSQL_DATABASE=mern_db - depends_on: - mongo: - condition: service_healthy - redis: - condition: service_healthy - mysql: - condition: service_healthy - networks: - - mern-network - - mongo: - image: mongo:7.0 - restart: unless-stopped - volumes: - - mongo-data:/data/db - ports: - - "27017:27017" - networks: - - mern-network - healthcheck: - test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] - interval: 10s - timeout: 5s - retries: 5 - start_period: 30s - - redis: - image: redis:7.2-alpine - restart: unless-stopped - volumes: - - redis-data:/data - ports: - - "6379:6379" - command: redis-server --appendonly yes --save 60 1 - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 5s - timeout: 3s - retries: 5 - networks: - - mern-network - - mysql: - image: mysql:8.0 - restart: unless-stopped - volumes: - - mysql-data:/var/lib/mysql - ports: - - "3306:3306" - environment: - - MYSQL_ROOT_PASSWORD=password - - MYSQL_DATABASE=mern_db - healthcheck: - test: - ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-ppassword"] - interval: 10s - timeout: 5s - retries: 5 - start_period: 30s - networks: - - mern-network - -networks: - mern-network: - driver: bridge - -volumes: - mongo-data: - redis-data: - mysql-data: From d918a49edc950d8cac3e8527f8e5e21a9ce65418 Mon Sep 17 00:00:00 2001 From: Brandon Ellis Date: Fri, 7 Nov 2025 18:54:25 +0000 Subject: [PATCH 3/4] Fix dev container to use updated docker --- .devcontainer/Dockerfile | 31 +++++++++++ .devcontainer/devcontainer.json | 30 +++-------- .devcontainer/docker-compose.yml | 90 ++++++++++++++++++++++++++++++++ 3 files changed, 129 insertions(+), 22 deletions(-) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/docker-compose.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..2615954 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,31 @@ +FROM mcr.microsoft.com/devcontainers/javascript-node:1-22-bookworm + +# Install MongoDB command line tools - though mongo-database-tools not available on arm64 +ARG MONGO_TOOLS_VERSION=6.0 +RUN . /etc/os-release \ + && curl -sSL "https://www.mongodb.org/static/pgp/server-${MONGO_TOOLS_VERSION}.asc" | gpg --dearmor > /usr/share/keyrings/mongodb-archive-keyring.gpg \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mongodb-archive-keyring.gpg] http://repo.mongodb.org/apt/debian ${VERSION_CODENAME}/mongodb-org/${MONGO_TOOLS_VERSION} main" | tee /etc/apt/sources.list.d/mongodb-org-${MONGO_TOOLS_VERSION}.list \ + && apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get install -y \ + mongodb-mongosh \ + ca-certificates \ + curl \ + default-mysql-client \ + git \ + gnupg \ + lsb-release \ + procps \ + redis-tools \ + wget \ + && if [ "$(dpkg --print-architecture)" = "amd64" ]; then apt-get install -y mongodb-database-tools; fi \ + && apt-get clean -y && rm -rf /var/lib/apt/lists/* + +# [Optional] Uncomment if you want to install an additional version of node using nvm +# ARG EXTRA_NODE_VERSION=10 +# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}" + +# [Optional] Uncomment if you want to install more global node modules +# RUN su node -c "npm install -g " + +ENV SHELL=/bin/bash +WORKDIR /workspace diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 279fcb6..7bf799e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,16 +1,12 @@ { - "name": "MERN Stack Development", - "image": "ghcr.io/devcontainers/templates/javascript-node-mongo:4.0.2", + "name": "MERN Stack with Redis and MySQL Development", + "dockerComposeFile": "docker-compose.yml", + "service": "app", + "workspaceFolder": "/workspace", "features": { - "ghcr.io/devcontainers/features/git:1": {}, - "ghcr.io/devcontainers/features/redis:1": {}, - "ghcr.io/devcontainers/features/mysql:1": { - "version": "8.0", - "mysqlDatabase": "mern_db", - "mysqlUser": "root", - "mysqlPassword": "password" - } + "ghcr.io/devcontainers/features/git:1": {} }, + "customizations": { "vscode": { "settings": { @@ -35,17 +31,7 @@ ] } }, - "containerEnv": { - "NODE_ENV": "development", - "MONGO_URI": "mongodb://localhost:27017/mern_app", - "REDIS_URI": "redis://localhost:6379", - "MONGODB_HOST": "localhost", - "REDIS_HOST": "localhost", - "MYSQL_HOST": "localhost", - "MYSQL_USER": "root", - "MYSQL_PASSWORD": "password", - "MYSQL_DATABASE": "mern_db" - }, + "forwardPorts": [3000, 5000, 27017, 6379, 3306], "remoteUser": "node" -} +} \ No newline at end of file diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 0000000..9013bf7 --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,90 @@ +version: "3.8" + +services: + app: + build: + context: . + dockerfile: Dockerfile + volumes: + - ..:/workspace:cached + command: sleep infinity + environment: + - NODE_ENV=development + - MONGO_URI=mongodb://mongo:27017/mern_app + - REDIS_URI=redis://redis:6379 + - MONGODB_HOST=mongo + - REDIS_HOST=redis + - MYSQL_HOST=mysql + - MYSQL_USER=root + - MYSQL_PASSWORD=password + - MYSQL_DATABASE=mern_db + depends_on: + mongo: + condition: service_healthy + redis: + condition: service_healthy + mysql: + condition: service_healthy + networks: + - mern-network + + mongo: + image: mongo:7.0 + restart: unless-stopped + volumes: + - mongo-data:/data/db + ports: + - "27017:27017" + networks: + - mern-network + healthcheck: + test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + + redis: + image: redis:7.2-alpine + restart: unless-stopped + volumes: + - redis-data:/data + ports: + - "6379:6379" + command: redis-server --appendonly yes --save 60 1 + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 5s + timeout: 3s + retries: 5 + networks: + - mern-network + + mysql: + image: mysql:8.0 + restart: unless-stopped + volumes: + - mysql-data:/var/lib/mysql + ports: + - "3306:3306" + environment: + - MYSQL_ROOT_PASSWORD=password + - MYSQL_DATABASE=mern_db + healthcheck: + test: + ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-ppassword"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + networks: + - mern-network + +networks: + mern-network: + driver: bridge + +volumes: + mongo-data: + redis-data: + mysql-data: \ No newline at end of file From 3329b2c22a6084f2a8cd29b9bfba3d5cd977fbdf Mon Sep 17 00:00:00 2001 From: Brandon Ellis Date: Fri, 7 Nov 2025 14:11:00 -0500 Subject: [PATCH 4/4] add missing patch-package needed --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index f314bd3..54f4959 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "author": "", "license": "MIT", "devDependencies": { - "concurrently": "^8.0.1" + "concurrently": "^8.0.1", + "patch-package": "^8.0.1" } }