From adf653d0ee3de7ec34f9d787fb1ef57bd396e997 Mon Sep 17 00:00:00 2001 From: Akshay Vadher Date: Sun, 19 Jul 2026 20:05:28 +0530 Subject: [PATCH] final commit --- .dockerignore | 6 ++++++ .env | 2 ++ Dockerfile | 8 ++++++++ README.md | 49 ++++++++++++++++++++++++++++++++++------------ docker-compose.yml | 11 +++++++++++ 5 files changed, 63 insertions(+), 13 deletions(-) create mode 100644 .dockerignore create mode 100644 .env create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..bf62ff3 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +node_modules +npm-debug.log +.git +.gitignore +.env +Dockerfile \ No newline at end of file diff --git a/.env b/.env new file mode 100644 index 0000000..5d6d8ba --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +PORT=3000 +TIME=60000 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..412638c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM node:22-alpine +WORKDIR /app +RUN npm install -g npm@latest +COPY package*.json ./ +RUN npm install +COPY . . +EXPOSE 3000 +CMD ["npm", "start"] \ No newline at end of file diff --git a/README.md b/README.md index f36a9f4..3b5446d 100644 --- a/README.md +++ b/README.md @@ -388,6 +388,11 @@ The `backend/database` directory can be mounted as a Docker volume so that `urls --- +# A 1-Line Setup: + +```bash +docker compose up +``` # Deployment Sketch ## Current MVP Deployment @@ -482,26 +487,44 @@ For a production-ready deployment, I would separate the application into managed | Registered URLs | | Monitoring History | +---------------------+ +----------------------+ ``` +## Infrastructure-as-Code (Hypothetical) -## Infrastructure-as-Code (Example) +If deployed on AWS, the infrastructure could be provisioned using Terraform. -A minimal Docker-based deployment could be provisioned using Docker Compose: +```hcl +provider "aws" { + region = "ap-south-1" +} -```yaml -version: "3.9" +resource "aws_instance" "url_monitor" { + ami = "ami-xxxxxxxx" + instance_type = "t3.micro" -services: - url-health-monitor: - build: . - ports: - - "3000:3000" - restart: unless-stopped - volumes: - - ./backend/database:/app/backend/database + tags = { + Name = "url-health-monitor" + } +} ``` -In a production cloud environment, the JSON files would be replaced by a managed PostgreSQL or MongoDB database, Docker images would be deployed automatically through a CI/CD pipeline, and HTTPS would be provided by the cloud platform. +The application Docker image would be deployed to the EC2 instance, with: +- Docker running the Node.js application +- Nginx acting as a reverse proxy +- HTTPS enabled using Let's Encrypt +- Monitoring data stored in PostgreSQL or MongoDB instead of JSON files + +In a production cloud environment, the JSON files would be replaced by a managed PostgreSQL or MongoDB database, Docker images would be deployed automatically through a CI/CD pipeline, and HTTPS would be provided by the cloud platform. +## Deployment Notes + +For a production deployment, I would: + +- Build a Docker image using GitHub Actions. +- Push the image to Docker Hub or GitHub Container Registry. +- Provision infrastructure using Terraform. +- Deploy the container to AWS EC2, ECS, or Google Cloud Run. +- Store monitoring data in PostgreSQL or MongoDB. +- Configure HTTPS using a cloud load balancer or Nginx. +- Use CloudWatch or Prometheus/Grafana for monitoring and logging. # Future Improvements - Delete registered URLs diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..03ad899 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,11 @@ +services: + url-health-monitor: + build: . + container_name: url-health-monitor + ports: + - "3000:3000" + env_file: + - .env + restart: unless-stopped + volumes: + - ./backend/database:/app/backend/database \ No newline at end of file