Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
MONGO_PASSWORD=KkqJ2XWRK2VpibrT
22 changes: 13 additions & 9 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Deploy Node Application
name: Deploy Node Application on ec2

on:
push:
Expand All @@ -12,21 +12,25 @@ jobs:
- name: Checkout source
uses: actions/checkout@v4
- name: Create .env file
run: echo "MONGO_PASSWORD=${{ secrets.MONGO_PASSWORD }}" >> .env
run: echo "MONGO_PASSWORD=${{ secrets.MONGO_PASSWORD }}">> .env
- name: Login to docker hub
run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
run: echo "dckr_pat_3TYf61TN206KewF0Jly-Ug133oE" | docker login -u luciferdev966 --password-stdin
- name: Build docker image
run: docker build -t integrationninjas/nodejs-app .
run: docker build -t luciferdev966/my-docker-repo .
- name: Publish image to docker hub
run: docker push integrationninjas/nodejs-app:latest
run: docker push luciferdev966/my-docker-repo

deploy:
needs: build
runs-on: self-hosted
steps:
- name: make owner to github-runner
run: sudo chown ubuntu:docker /var/run/docker.sock
- name: Pull image from docker hub
run: docker pull integrationninjas/nodejs-app:latest
- name: Delete old container
run: docker rm -f nodejs-app-container
run: docker pull luciferdev966/my-docker-repo
- name: remove container used before
run: docker rm -f nodejs-app-container-divineoath
- name: Run docker container
run: docker run -d -p 4000:4000 --name nodejs-app-container integrationninjas/nodejs-app
run: docker run -d --name=nodejs-app-container-divineoath -p 3000:3000 luciferdev966/my-docker-repo
- name: Look on Container
run: docker ps
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
EXPOSE 4000
CMD [ "npm", "run", "start" ]
EXPOSE 3000
CMD [ "npm", "run", "start" ]
64 changes: 37 additions & 27 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,46 +1,56 @@
import express from 'express';
import bodyParser from 'body-parser';

import db from "./mongoC.js";
import express from 'express';
import client from './mongoC.js';

const port = process.env.PORT || 4000;
const port = process.env.PORT || 3000;
const app = express();

// Middleware to set CORS headers
app.use((_req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', '*');

next();
});
});

// Parses the text as url encoded data
app.use(bodyParser.urlencoded({ extended: true }));

// Parses the text as json
app.use(bodyParser.json());
// Middleware to parse JSON request bodies
app.use(express.json()); // Replaces body-parser.json()

// Middleware to parse URL-encoded request bodies
app.use(express.urlencoded({ extended: true })); // Replaces body-parser.urlencoded()

// Route to test the server
app.get('/', (req, res) => {
res.send('Hello World, from express');
})

app.post('/addUser',async (req, res) => {
let collection = await db.collection("users");
let newDocument = req.body;
newDocument.date = new Date();
let result = await collection.insertOne(newDocument);
console.log("rreq"+req.body);
res.send(result).status(204);
});

app.get('/getUsers', async(req, res) => {
let collection = await db.collection("users");
let results = await collection.find({})

.toArray();
res.send(results).status(200);
// Route to add a user
app.post('/addUser', async (req, res) => {
try {
let collection = await client.collection("users");
let newDocument = req.body;
newDocument.date = new Date();
let result = await collection.insertOne(newDocument);
console.log("Request Body: ", req.body);
res.status(204).send(result); // Send status code 204 (No Content)
} catch (error) {
console.error("Error inserting user: ", error);
res.status(500).send("Error adding user");
}
});

// Route to get all users
app.get('/getUsers', async (req, res) => {
try {
let collection = await client.collection("users");
let results = await collection.find({}).toArray();
res.status(200).send(results); // Send status code 200 (OK)
} catch (error) {
console.error("Error fetching users: ", error);
res.status(500).send("Error fetching users");
}
});

// Start the server
app.listen(port, function () {
console.log("Server is listening at port:" + port);
});

61 changes: 47 additions & 14 deletions mongoC.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,51 @@
import { MongoClient } from "mongodb";
import dotenv from 'dotenv';

// Call dotenv.config() to load environment variables from .env file
dotenv.config();
// import mongodb from 'mongodb';
// const { MongoClient } = mongodb;
// import dotenv from 'dotenv';

// // Call dotenv.config() to load environment variables from .env file
// dotenv.config();


// //mongodb+srv://devavratsingh2002:<db_password>@cluster0.ml9lh.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0
// const connectionString = `mongodb+srv://integrationninjas:${password}@cluster0.ml9lh.mongodb.net/?retryWrites=true&w=majority&appName=dev-cluster`; // clustore url
// const client = new MongoClient(connectionString);
// let conn;
// try {
// conn = await client.connect();
// console.log("connection successful")
// } catch(e) {
// console.error(e);
// }
// let db = conn.db("integration_ninjas");
//export default db;

import mongodb from 'mongodb';
const { MongoClient,ServerApiVersion } = mongodb;
// import { ServerApiVersion } from 'mongodb';
const password = encodeURIComponent(process.env.MONGO_PASSWORD.trim());
const connectionString = `mongodb+srv://integrationninjas:${password}@ev-cluster.zk5mtjd.mongodb.net/?retryWrites=true&w=majority&appName=dev-cluster`; // clustore url
const client = new MongoClient(connectionString);
let conn;
try {
conn = await client.connect();
console.log("connection successful")
} catch(e) {
console.error(e);
const uri = "mongodb+srv://devavratsingh2002:${password}@cluster0.ml9lh.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0";

// Create a MongoClient with a MongoClientOptions object to set the Stable API version
const client = new MongoClient(uri, {
serverApi: {
version: ServerApiVersion.v1,
strict: true,
deprecationErrors: true,
}
});

async function run() {
try {
// Connect the client to the server (optional starting in v4.7)
await client.connect();
// Send a ping to confirm a successful connection
await client.db("admin").command({ ping: 1 });
console.log("Pinged your deployment. You successfully connected to MongoDB!");
} finally {
// Ensures that the client will close when you finish/error
await client.close();
}
}
let db = conn.db("integration_ninjas");
export default db;
run().catch(console.dir);
export default client;