diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +node_modules/ diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..5cccacc --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,9 @@ +FROM node:lts-slim + +WORKDIR /app + +COPY package*.json . +RUN npm install +COPY . . +EXPOSE 3000 +CMD [ "npm", "run", "server" ] \ No newline at end of file diff --git a/Dockerfile.prod b/Dockerfile.prod new file mode 100644 index 0000000..c0c8ec7 --- /dev/null +++ b/Dockerfile.prod @@ -0,0 +1,17 @@ +FROM node:lts-slim AS build + +WORKDIR /app + +COPY package*.json . +RUN npm install +COPY . . + +FROM node:lts-slim AS production + +WORKDIR /app + +COPY --from=build /app /app/ + +EXPOSE 3000 + +CMD [ "npm", "run", "server" ] diff --git a/README.md b/README.md index 84e11e0..ed857ce 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,26 @@ To run only the backend: ```bash npm run server ``` +# Docker for developement(optional) +``` +docker-compose up --build +``` +``` +docker-compose down +``` +# Docker for production +Modify docker-compose.yml + +Change the dockerfile line in the build section to Dockerfile.prod: + +``` +services: + app: + build: + context: . + dockerfile: Dockerfile.prod # Use the production Dockerfile + ... +``` ## Build & Deploy diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..5d4b297 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,41 @@ +services: + app: + build: + context: . + dockerfile: Dockerfile.dev + ports: + - "${PORT}:${PORT}" + environment: + - NODE_ENV=${NODE_ENV} + - PORT=${PORT} + - JWT_SECRET=${JWT_SECRET} + - RAZORPAY_KEY_ID=${RAZORPAY_KEY_ID} + - RAZORPAY_KEY_SECRET=${RAZORPAY_KEY_SECRET} + - PAGINATION_MAX_LIMIT=${PAGINATION_MAX_LIMIT} + - EMAIL_HOST=${EMAIL_HOST} + - EMAIL_PORT=${EMAIL_PORT} + - EMAIL_USER=${EMAIL_USER} + - EMAIL_PASS=${EMAIL_PASS} + - EMAIL_FROM=${EMAIL_FROM} + restart: always + depends_on: + - mongo + networks: + - backend + + mongo: + image: mongo:latest + ports: + - "27017:27017" + volumes: + - mongo_data:/data/db + restart: always + networks: + - backend + +volumes: + mongo_data: + +networks: + backend: + driver: bridge \ No newline at end of file