Skip to content

Final Project Submission - kevingeorge@mulearn - #137

Open
KevinGeorge100 wants to merge 43 commits into
gtech-mulearn:mainfrom
KevinGeorge100:main
Open

Final Project Submission - kevingeorge@mulearn#137
KevinGeorge100 wants to merge 43 commits into
gtech-mulearn:mainfrom
KevinGeorge100:main

Conversation

@KevinGeorge100

@KevinGeorge100 KevinGeorge100 commented Apr 4, 2026

Copy link
Copy Markdown

🚀 Final Project: My First Scalable Web App

This project demonstrates deploying a containerized web application using Docker and Kubernetes (KIND), showcasing scalability and self-healing capabilities.

✅ Features:

  • Dockerized web app
  • Kubernetes deployment with 3 replicas
  • NodePort service exposure
  • Environment variable injection (STUDENT_NAME)
  • Self-healing (pod recreation)

🧪 Verification:

  • Multiple pods running successfully
  • Service exposed and accessed via browser
  • Deleted one pod → Kubernetes recreated it automatically
    📸 Screenshots included

Copilot AI review requested due to automatic review settings April 4, 2026 18:34

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds submission artifacts for kevingeorge@mulearn, including Kubernetes manifests to deploy/expose Nginx (Task-4), a static portfolio page + submission links (Task-3), and a simple Dockerized Python “Hello World” loop (Task-2).

Changes:

  • Add Kubernetes Deployment and NodePort Service manifests for Nginx (Task-4).
  • Add Task-3 static site (index.html) and submission metadata (submission.md).
  • Add Task-2 Dockerfile and Python script for a basic running container.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
kevingeorge@mulearn/Task-4/service.yaml Adds a NodePort Service exposing Nginx on port 30007.
kevingeorge@mulearn/Task-4/deployment.yaml Adds an Nginx Deployment (currently has a YAML indentation/structure issue).
kevingeorge@mulearn/Task-3/submission.md Adds links for Task-3 repo, live site, and Actions runs.
kevingeorge@mulearn/Task-3/index.html Adds a single-page portfolio demonstrating CI/CD + Pages deployment.
kevingeorge@mulearn/Task-2/script.py Adds a simple loop printing “Hello World” for container output.
kevingeorge@mulearn/Task-2/Dockerfile Adds a minimal Python container build/run definition.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +16 to +19
- name: nginx
image: nginx
ports:
- containerPort: 80

Copilot AI Apr 4, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Pod template YAML indentation is invalid: containers is a mapping key but the list item (- name: nginx) is indented at the same level, and ports has the same issue. This manifest will fail to apply/parse. Adjust indentation so the container list is nested under containers, and the port list is nested under ports.

Suggested change
- name: nginx
image: nginx
ports:
- containerPort: 80
- name: nginx
image: nginx
ports:
- containerPort: 80

Copilot uses AI. Check for mistakes.
spec:
containers:
- name: nginx
image: nginx

Copilot AI Apr 4, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Deployment uses the unpinned nginx image tag (defaults to latest), which can change over time and make the exercise non-reproducible. Prefer pinning to a specific version tag (and optionally a digest) so the deployed content is stable.

Suggested change
image: nginx
image: nginx:1.27.0

Copilot uses AI. Check for mistakes.
Comment on lines +526 to +547
<a class="proof-card" href="https://github.com/KevinGeorge100/Shipyard-Foundations" target="_blank">
<div class="proof-left">
<div class="proof-label">Repository</div>
<div class="proof-val">KevinGeorge100/Shipyard-Foundations</div>
</div>
<div class="proof-arrow">↗</div>
</a>
<a class="proof-card" href="https://github.com/KevinGeorge100/Shipyard-Foundations/actions" target="_blank">
<div class="proof-left">
<div class="proof-label">Actions Workflow</div>
<div class="proof-val">View pipeline runs →</div>
</div>
<div class="proof-arrow">↗</div>
</a>
<a class="proof-card" href="https://linkedin.com/in/kwingeorge" target="_blank">
<div class="proof-left">
<div class="proof-label">LinkedIn</div>
<div class="proof-val">linkedin.com/in/kwingeorge</div>
</div>
<div class="proof-arrow">↗</div>
</a>
<a class="proof-card" href="https://github.com/gtech-mulearn/shipyard-foundations" target="_blank">

Copilot AI Apr 4, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These external links open in a new tab via target="_blank" but don’t set rel="noopener noreferrer", which allows the opened page to access window.opener (tabnabbing risk). Add rel="noopener noreferrer" to each target="_blank" link in this section.

Suggested change
<a class="proof-card" href="https://github.com/KevinGeorge100/Shipyard-Foundations" target="_blank">
<div class="proof-left">
<div class="proof-label">Repository</div>
<div class="proof-val">KevinGeorge100/Shipyard-Foundations</div>
</div>
<div class="proof-arrow"></div>
</a>
<a class="proof-card" href="https://github.com/KevinGeorge100/Shipyard-Foundations/actions" target="_blank">
<div class="proof-left">
<div class="proof-label">Actions Workflow</div>
<div class="proof-val">View pipeline runs →</div>
</div>
<div class="proof-arrow"></div>
</a>
<a class="proof-card" href="https://linkedin.com/in/kwingeorge" target="_blank">
<div class="proof-left">
<div class="proof-label">LinkedIn</div>
<div class="proof-val">linkedin.com/in/kwingeorge</div>
</div>
<div class="proof-arrow"></div>
</a>
<a class="proof-card" href="https://github.com/gtech-mulearn/shipyard-foundations" target="_blank">
<a class="proof-card" href="https://github.com/KevinGeorge100/Shipyard-Foundations" target="_blank" rel="noopener noreferrer">
<div class="proof-left">
<div class="proof-label">Repository</div>
<div class="proof-val">KevinGeorge100/Shipyard-Foundations</div>
</div>
<div class="proof-arrow"></div>
</a>
<a class="proof-card" href="https://github.com/KevinGeorge100/Shipyard-Foundations/actions" target="_blank" rel="noopener noreferrer">
<div class="proof-left">
<div class="proof-label">Actions Workflow</div>
<div class="proof-val">View pipeline runs →</div>
</div>
<div class="proof-arrow"></div>
</a>
<a class="proof-card" href="https://linkedin.com/in/kwingeorge" target="_blank" rel="noopener noreferrer">
<div class="proof-left">
<div class="proof-label">LinkedIn</div>
<div class="proof-val">linkedin.com/in/kwingeorge</div>
</div>
<div class="proof-arrow"></div>
</a>
<a class="proof-card" href="https://github.com/gtech-mulearn/shipyard-foundations" target="_blank" rel="noopener noreferrer">

Copilot uses AI. Check for mistakes.
Comment on lines +5 to +6
COPY . .

Copilot AI Apr 4, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This image runs as root by default and also uses COPY . . (which can unintentionally include local caches/credentials without a .dockerignore). Consider adding a non-root USER and narrowing the copy (or adding a .dockerignore) to reduce the container’s attack surface.

Suggested change
COPY . .
COPY script.py ./
RUN addgroup --system appgroup \
&& adduser --system --ingroup appgroup appuser \
&& chown -R appuser:appgroup /app
USER appuser

Copilot uses AI. Check for mistakes.
Comment on lines +1 to +4
apiVersion: v1
kind: Service
metadata:
name: nginx-service

Copilot AI Apr 4, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR title/description indicate this is a Task-4 (Kubernetes) submission, but this PR also adds Task-2 (Docker) and Task-3 (GitHub Pages site) files. Either split into separate PRs per task or update the PR title/description to reflect all included tasks so reviewers know the full scope.

Copilot uses AI. Check for mistakes.
Added README.md for Kubernetes Deployment project with KIND.
Added a README.md to outline DevOps learning journey and tasks.
Added badges for Docker, Kubernetes, GitHub Actions, and project status.
@KevinGeorge100 KevinGeorge100 changed the title Task-4 Submission - kevingeorge@mulearn Final Project Submission - kevingeorge@mulearn Apr 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants