The goal of this class is to equip students with not only theory but also technical skills that are applicable to real world problems. To accomplish this, we will follow a project-based learning approach, where students start with a top-down project idea and gradually acquire the necessary knowledge to implement this project over the duration of the course.
Project ideaPerception
This class differs from other classes. We are focusing on the system infrastructure aspect of cloud computing. Therefore, software implementation is somewhat secondary.
The project idea should evolve around a full stack deployment of an an application framework that involves multiple components (at least two or more). In a realistic deployment, these components will be setup on different physical computers and communicate with one another via network protocols. The deployment process of these components, in this class, will teach students the concept of infrastructure as code and improve their administrative automation and scripting skills.
Project Requirements
General requirements
All projects will be done using containerization. No direct physical installation will be accepted under any circumstances.
During development, projects can be done on personal computers using Docker Desktop. However, final project demonstration must be carried out on CloudLab.
Team Size: 1 member
C-level technical requirements
Architecture: Minimum of two components (e.g., 1 Web App + 1 Database, or 1 Producer + 1 Consumer).
Implementation: Simple docker-compose setup connecting these two services.
Constraint: You must write at least one custom Dockerfile (you cannot just link two existing public images like WordPress + MySQL; you must build at least one part of the stack).
Documentation: Detailed README.md explaining how to launch the stack.
B-level technical requirements
Everything from the C-level requirements
Registry: Push your custom image to the Docker Hub registry (public or private).
CI/CD: Implement a GitHub Actions pipeline that builds your custom image automatically upon a push to the repository.
Automation: The CloudLab deployment must pull the image from the registry rather than building it locally.
Documentation: Detailed README.md explaining how the stack was created and how to launch the stack.
A-level technical requirements
Full CI/CD Loop: The GitHub Action must not only build the image but trigger a deployment update on the CloudLab runner (Self-Hosted Runner) so the running container updates live.
Security Best Practices: Implement Defense in Depth features from Lecture 12:
Run the container as a non-root user.
Drop unused Linux capabilities (e.g., CAP_SYS_ADMIN) in the Compose file.
Implement resource limits (CPU/Memory) in the Compose file to demonstrate cgroup understanding
Documentation: Extensive README.md explaining how the stack was created, explanation of technical justification, and how to launch the stack.Extensive discussion of these technical implementations in the README.md.
I want this project to be something that will wow your technical interviewers.
Project Deliverables
All project deliverables will be uploaded in a public repository that is also a CloudLab launch repository. Proper folder organization is paramount and will be taken into consideration for grading purposes.
Deliverable 1
The repository should contain the followings:
Your professional resume (no page limit).
First sections of your README.md file:
Vision: A diagram showing your 2 components and how they talk to each other (e.g., REST API, TCP).
Proposal: Briefly describe which base images (e.g., Python, Node, Alpine) you plan to use.
Deliverable 2 (tentatively after Spring Break)
The repository is updated with all the latest progress of your project (Dockerfiles, scripts, compose files, etc)
Update the next sections of README.md file:
Build Process: Explain your Dockerfile line-by-line. Why did you choose that base image?.
Networking: Explain how your containers communicate (e.g., Bridge network, DNS resolution by container name)
Deliverable 3
Repository with all necessary files for deployment on Cloud Lab.
A 5-minute recording demonstrating a live deployment demo.
Final Report: Complete documentation in README.md.
Documentation Requirements (strict)
READMD.md with proper Markdown syntax only. No other format will be considered.
Correct grammar, vocabulary, and clear and concise sentences are required.
Project Ideas (Suitable for 1 Person)
To keep the workload manageable, consider these simple architectures:
The Visitor Counter
Component 1 (Python/Node): A simple web server that displays “Visitors: X”.
Component 2 (Redis): A database storing the integer X.
Infrastructure Challenge: Ensure the Python app crashes gracefully if Redis is not ready (health checks).
The Text Hasher (Async)
Component 1: A script that generates random strings every 5 seconds.
Component 2: A script that calculates the MD5 hash of those strings and logs them to a volume.
Infrastructure Challenge: Use a shared Docker Volume so both containers can access the log file.
The Static Site + API
Component 1 (Nginx): Serves a static HTML file.
Component 2 (Go/Python): A backend API that the HTML file queries via Javascript.
Infrastructure Challenge: Configure Nginx as a reverse proxy to the backend container.