diff --git a/.github/.env b/.github/.env new file mode 100644 index 00000000..7b7f0293 --- /dev/null +++ b/.github/.env @@ -0,0 +1 @@ +MONGO_PASSWORD=KkqJ2XWRK2VpibrT diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 377ea928..9adf428c 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -1,4 +1,4 @@ -name: Deploy Node Application +name: Deploy Node Application on ec2 on: push: @@ -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 \ No newline at end of file + run: docker run -d --name=nodejs-app-container-divineoath -p 3000:3000 luciferdev966/my-docker-repo + - name: Look on Container + run: docker ps diff --git a/Dockerfile b/Dockerfile index 49fbe5f9..4128449a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,5 +3,5 @@ WORKDIR /app COPY package.json ./ RUN npm install COPY . . -EXPOSE 4000 -CMD [ "npm", "run", "start" ] \ No newline at end of file +EXPOSE 3000 +CMD [ "npm", "run", "start" ] diff --git a/index.js b/index.js index 8b28c932..8474f674 100644 --- a/index.js +++ b/index.js @@ -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); }); - \ No newline at end of file diff --git a/mongoC.js b/mongoC.js index 7c8631d7..dd93e04a 100644 --- a/mongoC.js +++ b/mongoC.js @@ -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:@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; \ No newline at end of file +run().catch(console.dir); +export default client;