Compare commits

1 Commits
Author SHA1 Message Date
Vadher 688075238a removed db.json for cloud deployment 2026-07-19 17:20:56 +05:30
6 changed files with 44 additions and 93 deletions
-6
View File
@@ -1,6 +0,0 @@
node_modules
npm-debug.log
.git
.gitignore
.env
Dockerfile
-8
View File
@@ -1,8 +0,0 @@
FROM node:22-alpine
WORKDIR /app
RUN npm install -g npm@latest
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
+12 -35
View File
@@ -388,11 +388,6 @@ The `backend/database` directory can be mounted as a Docker volume so that `urls
--- ---
# A 1-Line Setup:
```bash
docker compose up
```
# Deployment Sketch # Deployment Sketch
## Current MVP Deployment ## Current MVP Deployment
@@ -487,44 +482,26 @@ For a production-ready deployment, I would separate the application into managed
| Registered URLs | | Monitoring History | | Registered URLs | | Monitoring History |
+---------------------+ +----------------------+ +---------------------+ +----------------------+
``` ```
## Infrastructure-as-Code (Hypothetical)
If deployed on AWS, the infrastructure could be provisioned using Terraform. ## Infrastructure-as-Code (Example)
```hcl A minimal Docker-based deployment could be provisioned using Docker Compose:
provider "aws" {
region = "ap-south-1"
}
resource "aws_instance" "url_monitor" { ```yaml
ami = "ami-xxxxxxxx" version: "3.9"
instance_type = "t3.micro"
tags = { services:
Name = "url-health-monitor" url-health-monitor:
} build: .
} ports:
- "3000:3000"
restart: unless-stopped
volumes:
- ./backend/database:/app/backend/database
``` ```
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. 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 # Future Improvements
- Delete registered URLs - Delete registered URLs
View File
+7 -8
View File
@@ -9,7 +9,7 @@ const { init, broadcast } = require("./utils/utils");
const urlPath = path.join(__dirname, "database", "urls.json"); const urlPath = path.join(__dirname, "database", "urls.json");
dotenv.config(); dotenv.config();
const checkAllUrl = async (Store) => { const checkAllUrl = async () => {
try { try {
const urls = await fs.readFile(urlPath, "utf8"); const urls = await fs.readFile(urlPath, "utf8");
const parsedUrls = JSON.parse(urls); const parsedUrls = JSON.parse(urls);
@@ -18,10 +18,10 @@ const checkAllUrl = async (Store) => {
parsedUrls.map(async (url) => { parsedUrls.map(async (url) => {
const response = await checkUrl(url); const response = await checkUrl(url);
broadcast(response); broadcast(response);
Store.push(response); // Store.push(response);
}), }),
); );
StoreRecord(Store); // StoreRecord(Store);
broadcast({ type: "checking" }); broadcast({ type: "checking" });
} catch (err) { } catch (err) {
console.error("WebSocket polling error:", err.message); console.error("WebSocket polling error:", err.message);
@@ -33,16 +33,15 @@ const checkAllUrl = async (Store) => {
}; };
async function setupWebSocket(wss) { async function setupWebSocket(wss) {
init(wss); init(wss);
let Store = []; // let Store = [];
wss.on("connection", (ws) => { wss.on("connection", (ws) => {
checkAllUrl(Store); checkAllUrl();
}); });
setInterval( setInterval(
async () => { async () => {
Store = []; // Store = [];
checkAllUrl(Store); checkAllUrl();
}, },
process.env.TIME || 60 * 1000, process.env.TIME || 60 * 1000,
); );
-11
View File
@@ -1,11 +0,0 @@
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