diff --git a/.github/workflows/blank.yml b/.github/workflows/blank.yml new file mode 100644 index 0000000..01502b1 --- /dev/null +++ b/.github/workflows/blank.yml @@ -0,0 +1,36 @@ +# This is a basic workflow to help you get started with Actions + +name: CI + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the "main" branch + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v4 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. diff --git a/.github/workflows/second.yml b/.github/workflows/second.yml new file mode 100644 index 0000000..90bac38 --- /dev/null +++ b/.github/workflows/second.yml @@ -0,0 +1,14 @@ +name: Second CI + +on: + push + + jobs: + build: + runs-on: ubuntu-latest + + + + steps: + - name: Say Hello + run: echo "Hello From Second" diff --git a/Full-Stack-AI-DevOps-Masterclass b/Full-Stack-AI-DevOps-Masterclass new file mode 160000 index 0000000..d19adb2 --- /dev/null +++ b/Full-Stack-AI-DevOps-Masterclass @@ -0,0 +1 @@ +Subproject commit d19adb20086a5642e425b2a90eb9046c28549024 diff --git a/docker/app1-hello/docker-compose.yml b/docker/app1-hello/docker-compose.yml new file mode 100644 index 0000000..2670935 --- /dev/null +++ b/docker/app1-hello/docker-compose.yml @@ -0,0 +1,16 @@ +services: + hello-py: + build: ./python + image: ritesh07p/hello-python:1.0 + ports: + - "3000:3000" + environment: + - ENV_VALUE=${ENV_VALUE} + + hello-node: + build: ./node + image: ritesh07p/hello-node:1.0 + ports: + - "3001:3000" + environment: + - ENV_VALUE=${ENV_VALUE} diff --git a/docker/app1-hello/node/Dockerfile b/docker/app1-hello/node/Dockerfile new file mode 100644 index 0000000..b416a62 --- /dev/null +++ b/docker/app1-hello/node/Dockerfile @@ -0,0 +1,7 @@ +FROM node:26-slim +WORKDIR /app +COPY package*.json ./ +RUN npm install --production +COPY . . +EXPOSE 3000 +CMD [ "node", "app.js" ] \ No newline at end of file diff --git a/docker/app1-hello/python/Dockerfile b/docker/app1-hello/python/Dockerfile new file mode 100644 index 0000000..1c2f4c1 --- /dev/null +++ b/docker/app1-hello/python/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3.10-slim +WORKDIR /app +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt +COPY . . +EXPOSE 3000 +CMD [ "python", "main.py" ] diff --git a/docker/app2-tax-calculator/node/service-a/app.yaml b/docker/app2-tax-calculator/node/service-a/app.yaml new file mode 100644 index 0000000..33c1f7b --- /dev/null +++ b/docker/app2-tax-calculator/node/service-a/app.yaml @@ -0,0 +1,36 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: tax-service-a + labels: + app: tax-service-a +spec: + replicas: 2 + selector: + matchLabels: + app: tax-service-a + template: + metadata: + labels: + app: tax-service-a + spec: + containers: + - name: tax-service-a + image: embarkx/tax-service-a:latest # <-- changed image name + ports: + - containerPort: 3000 # <-- matches default port from docs + env: + - name: TAX_SERVICE_URL + value: http://tax-service-b:4000 +--- +apiVersion: v1 +kind: Service +metadata: + name: tax-service-a +spec: + selector: + app: tax-service-a + type: LoadBalancer + ports: + - port: 80 # external port exposed by the Service + targetPort: 3000 # must match containerPort inside the pod diff --git a/docker/app2-tax-calculator/node/service-b/app.yaml b/docker/app2-tax-calculator/node/service-b/app.yaml new file mode 100644 index 0000000..ad27c8f --- /dev/null +++ b/docker/app2-tax-calculator/node/service-b/app.yaml @@ -0,0 +1,36 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: tax-service-b + labels: + app: tax-service-b +spec: + replicas: 2 + selector: + matchLabels: + app: tax-service-b + template: + metadata: + labels: + app: tax-service-b + spec: + containers: + - name: tax-service-b + image: embarkx/tax-service-b:stable # <-- image for Service B + ports: + - containerPort: 4000 # default exposed port + env: + - name: PORT + value: "4000" # required env variable +--- +apiVersion: v1 +kind: Service +metadata: + name: tax-service-b +spec: + selector: + app: tax-service-b + type: LoadBalancer + ports: + - port: 4000 # external port exposed by the Service + targetPort: 4000 # must match containerPort inside the pod diff --git a/docker/app2-tax-calculator/node/service-b/index.js b/docker/app2-tax-calculator/node/service-b/index.js deleted file mode 100644 index 4f80b2d..0000000 --- a/docker/app2-tax-calculator/node/service-b/index.js +++ /dev/null @@ -1,12 +0,0 @@ -const express = require("express"); -const app = express(); -const HOSTNAME = process.env.HOSTNAME || require('os').hostname(); -const TAX_TABLE = { IN: 18, US: 8, EU: 20 }; - -app.get("/tax", (req, res) => { - const country = (req.query.country || "DEFAULT").toUpperCase(); - const tax = TAX_TABLE[country] ?? 10; - res.json({ service: "B", country, tax, container: HOSTNAME }); -}); - -app.listen(4000, () => console.log("Tax Service B running on 4000")); diff --git a/docker/app2-tax-calculator/node/service-b/package.json b/docker/app2-tax-calculator/node/service-b/package.json deleted file mode 100644 index 7cbb56d..0000000 --- a/docker/app2-tax-calculator/node/service-b/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "tax-b", - "version": "1.0.0", - "main": "index.js", - "dependencies": { "express": "^5.2.1" } -} diff --git a/docker/app2-tax-calculator/python/service-a/Dockerfile b/docker/app2-tax-calculator/python/service-a/Dockerfile new file mode 100644 index 0000000..1c2f4c1 --- /dev/null +++ b/docker/app2-tax-calculator/python/service-a/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3.10-slim +WORKDIR /app +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt +COPY . . +EXPOSE 3000 +CMD [ "python", "main.py" ] diff --git a/docker/k8s/nginx/app.yaml b/docker/k8s/nginx/app.yaml new file mode 100644 index 0000000..92294bc --- /dev/null +++ b/docker/k8s/nginx/app.yaml @@ -0,0 +1,33 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: myapp + labels: + app: myapp +spec: + replicas: 2 + selector: + matchLabels: + app: myapp + template: + metadata: + labels: + app: myapp + spec: + containers: + - name: myapp + image: nginx:latest + ports: + - containerPort: 80 +--- +apiVersion: v1 +kind: Service +metadata: + name: myapp +spec: + selector: + app: myapp + type: LoadBalancer + ports: + - port: 80 # external port exposed by the Service + targetPort: 80 # must match containerPort inside the pod diff --git a/docker/app2-tax-calculator/node/service-a/index.js b/docker/k8s/nginx/index.js similarity index 100% rename from docker/app2-tax-calculator/node/service-a/index.js rename to docker/k8s/nginx/index.js diff --git a/docker/app2-tax-calculator/node/service-a/package.json b/docker/k8s/nginx/package.json similarity index 100% rename from docker/app2-tax-calculator/node/service-a/package.json rename to docker/k8s/nginx/package.json diff --git a/docker/k8s/yamal/app.yaml b/docker/k8s/yamal/app.yaml new file mode 100644 index 0000000..3b20620 --- /dev/null +++ b/docker/k8s/yamal/app.yaml @@ -0,0 +1,32 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: myapp +spec: + replicas: 2 + selector: + matchLabels: + app: myapp + template: + metadata: + labels: + app: myapp + spec: + containers: + - name: myapp + image: nginx + ports: + - containerPort: 80 +--- +apiVersion: v1 +kind: Service +metadata: + name: myapp +spec: + selector: + app: myapp + type: NodePort + ports: + - port: 80 + targetPort: 80 + nodePort: 32000 diff --git a/docker/k8s/yamal/service.yaml b/docker/k8s/yamal/service.yaml new file mode 100644 index 0000000..c5f738d --- /dev/null +++ b/docker/k8s/yamal/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: myapp +spec: + selector: + app: myapp + type: NodePort + ports: + - port: 80 + targetPort: 80 + nodePort: 32000