Best DevOps Projects For Practical Learning

devops projects for learning

This blog is for you if you are looking for the best devops projects for learning and practice. It contains a curated list of real-world devops project scenarios that will help you learn the concepts and well as gain experience with DevOps tools.

All the projects are based on real-time learning which includes the following.

  1. Project Architecture
  2. Project Workflow
  3. Full Infrastructure source code in GitHub
  4. Project Demonstration.

Based on my 10+ years of experience working as a cloud and DevOps engineer, all of these DevOps projects are structured to provide practical learning opportunities. Each project includes a list of concepts that are useful for real-world DevOps implementations and DevOps Engineer interviews.

DevOps Projects Github Repository

All the code for the projects listed in this guide is present in the Github DevOps projects repository. It contains all the CLI commands, configuration management codes, IaC codes, and much more. You can clone the repo using the following command.

git clone https://github.com/techiescamp/devops-projects

List of DevOps Projects For Learning

If you are a fresh graduate or an experienced person looking to start your DevOps journey, it is very important to learn the basics. The following set of projects will help you learn some of the core IT fundamentals and DevOps real-world to help you prepare for DevOps engineer interviews.

Note: You dont need to spend any money for the labs for theses projects. You can use vagrant based VMs locally or use $1000+ free cloud credits on AWS, Google Cloud, Digital Ocean, Linode, Vultur etc

Project 1: Setup a Static Website Using Nginx

This project aims to help you learn to set up a static website using Nginx and configure DNS to make the website publicly accessible.

Project TasksKey Concepts Covered
1. Buy a domain name from a domain Registrar
2. Spin up a Ubuntu server.
3. SSH into the server and install Nginx
4. Download freely available HTML website files.
5. Using SCP, copy the website files to the Nginx website directory.
6. Validate the website using the server IP address.
7. In your DNS account, create an A record and add the Elastic IP.
8. Use the dig command to verify the DNS records.
9. Using DNS verify the website setup.
10. Create a Letsencryp certificate for the DNS and configure it on the Nginx server.
11. Validate the website SSL using the OpenSSL utility.
1. DNS
2. Linux
3. Webserver
4. Nginx
5. Dig command
5. SSL (Letsencrypt)
6. OpenSSL command.

Optionally you can try using a self-signed SSL certificate to understand the difference between self-signed and trusted SSL certificates.

Project 2: Setup Multiple Static Websites on a Single Server Using Nginx Virtual Hosts

In this project, you will learn the concept of subdomains and hosting multiple websites on a single server using Nginx Virtual Host configuration.

Project TasksKey Concepts Covered
1. Create two subdomains
2. Install and configure Nignx on a server
3. Create two website directories with two different website templates.
4. Configure the Virtual host to point two subdomains to two different website directories.
5. Add the IP of the server as A record to the two subdomains.
6. Validate the setup accessing the subdomains.
7. Create a wildcard Letsencrypt SSL certificate for the root Domain.
8. Configure wildcard SSL on Nginx for two websites.
9. Validate the subdomain websites’ SSL using OpenSSL utility.
1. Subdomains
2. Nginx Virtual Hosts routing.
3. Wildcard SSL (letsencrypt)

Project 3: Setup Load Balancing for Static Website Using Nignx

This project aims at learning Layer 7 load balancing and load balancing algorithms using Nginx as a Load Balancer.

Project Taskskey Concepts Covered
1. Deploy three servers
2. Set up static websites on two servers using Nginx. Make a small change in the index.html file of one of the websites to differentiate between two servers.
3. Set up Nginx on the third server. It will act as a load balancer.
4. Configure Nginx to load and balance traffic between two static websites.
5. Add the Nginx Load balancer IP to the DNS A record.
6. Try accessing the website. Every time you reload the website you should see a different index.html.
7. Try different Nginx load-balancing algorithms and options.
8. Understand L7 load balancing.
1. Load balancing
2. Load balancing algorithms
4. L7 Load balancing

Project 4: Setup WordPress Website Using LAMP Stack

The aim of this project is to learn about Dynamic websites that use Databases. Here you will learn to work with a Relational Database, apache web server, and PHP language.

Project TasksKey Concepts Covered
1. Deploy a Ubuntu server
2. Set up the LAMP stack on the server.
3. Configure WordPress Application
4. Map the IP address to the DNS A record.
5. Access the DNS and validate the WordPress website setup.
1. Basic Database setup and administration.
2. Setting up open-source PHP application.

DevOps basics can be learned by setting up a simple WordPress blog for yourself as shown in the following architecture.

devops project to setup self hosted WordPress blog

You can gain practical experience with the following:

  1. DNS records: A, CNAME, MX, TXT, and more.
  2. Content Delivery Network: Cloudflare.
  3. Web Server Configuration: Apache.
  4. Reverse Proxy Configuration: Nginx.
  5. Application configurations: WordPress (PHP).
  6. Database Management: MySQL.
  7. SMTP Settings: for email delivery.
  8. Server/Data Backup: WordPress Backup, MySQL Backup.
  9. Custom Domain Email: Zoho Mail.

Here’s what it will cost you:

A Domain Name – you can get it for very cheap from Godaddy (~$1)

Everything else is free. You can then use the blog to publish your learnings.

Project 5: Setup Service Discovery Using Nginx & Consul

Service discovery is an important concept every DevOps Engineer should learn. It is the concept of discovering service information in real time. It involves a centralized service registry that maintains information about available services

Service discovery is of two types

  1. βœ… π—–π—Ήπ—Άπ—²π—»π˜ 𝗦𝗢𝗱𝗲 π—¦π—²π—Ώπ˜ƒπ—Άπ—°π—² π——π—Άπ˜€π—°π—Όπ˜ƒπ—²π—Ώπ˜†: In this model, the request goes to a service registry to get the information available for backend services. For example, an application connects to a service registry to get information about the database endpoint.
  2. βœ… π—¦π—²π—Ώπ˜ƒπ—²π—Ώ 𝗦𝗢𝗱𝗲 π—¦π—²π—Ώπ˜ƒπ—Άπ—°π—² π——π—Άπ˜€π—°π—Όπ˜ƒπ—²π—Ώπ˜†: In this model, the request goes to a load balancer and the load balancer uses the service registry to get the information of the backend servers. The example is shown in the image.

If you implement this project, it will serve as a solid foundation for all the service discovery-based implementations on both VM and container-based implementations.

Devops project to learn service discovery concepts using consul

To understand service discovery practically, here is what you can do.

  1. Setup Hashicorp Consul (Service registry)
  2. Setup Nginx load balancer with consul agent to query the consul server (Service registry)
  3. Configure the nginx.conf as a consul template (Go template) to retrieve backend IPs/Configs in real-time from the service registry.
  4. Set up backend servers for the load balancer and update the IPs to the service registry.
  5. Validate the setup by checking if the load balancer is able to serve the traffic by reading backend information from the service registry.
  6. If you change/update any backend info on the service registry, the consul agent running on the load balancer identifies it and updates the info in the nginx.conf file.

π—‘π—Όπ˜π—²: This is just a short and practical workflow to understand service discovery. In real projects, more automation is involved in the registry update and retrieval process.

Project 6: Create an API Based Application

Programming is a requirement for DevOps engineers now. Be it for implementations or interviews, it is a must-have knowledge. One way to develop an interest for learning programming is by developing an application. During each module completion, you will have a sense of satisfaction, and your confidence level to learn programming will improve.

My suggestion would be to develop an API-based application using Python Flask or FastAPI to practically understand REST APIs, database connection configuration, and a little bit of UI (HTML & Javascript)

Project 7: Deploy Scalable Java Application on AWS

In this project, you will learn to build and deploy a Java application on the AWS platform.

Project Code: Scalable Java Application on AWS Code

Project TasksKey Concepts Covered
1. Build a Java application
2. Use Packer & Ansible to build the AMI With application code, cloudwatch agent for application logging, prometheus JMX exporter for application metrics, and consul agent to register service information.
3. Use Terraform to provision MySQL RDS instance and to store the MySQL username and password in the AWS secrets manager
4. Provision Load Balancer
5. Provision Autoscaling Group with Launch template that uses AMI built by packer and attaches it to Loadbalancer.
6. In the ec2 user data use the boto3 script to retrieve the RDS password in realtime that could be used by the application.
7. Verify the application by accessing it using the Load Balancer endpoint.
8. Verify application logs in Cloudwatch
9. Verify application metrics in Prometheus.
10. Test application autoscaling
11. Creating monitoring dashboards on Cloudwatch.
1. Java application build.
2. Immutable infrastructure model for java application
3. AWS cloudwatch custom logging
4. AWS Autoscaling
5. AWS Loadbalancer
6. AWS secrets manager.
7. IaC using Packer, Terraform and Ansible.
8. Consul for service discovery
9. Prometheus for application monitoring

Here is the project architecture.

DevOps Project to deploy a scalable java application on AES.

Project 8: One-Way and Mutual SSL/TLS Implementation

The Idea of this project is to learn the concepts of oneway and mutual SSL/TLS implementations.

For practical learning, you can start with One Way SSL

Only the server must have a digital certificate in One-way SSL to establish a secure connection.

  1. Deploy an Nginx website over a valid domain name.
  2. Next, you can set up Let’s Encrypt SSL, a certificate authority that provides free SSL/TLS certificates.
  3. You can also set up a wildcard domain and configure Let’s Encrypt to understand wildcard DNS and SSL.

Another concept to learn is Mutual TLS, which is common in most distributed systems. For example, Kubernetes components interact via mTLS.

Also, you will encounter this concept in server mesh implementations.

mTLS (Mutual TLS) is a security protocol that allows both client and server to authenticate each other using certificates. To learn Mutual TLS, you can generate client and server certificates using OpenSSL.

Next, you can create a simple Python Flask API that requires SSL and a client program that makes a request to the Flask API using its certificates.

Finally, you can verify that the request succeeds and that the client and server exchange SSL/TLS certificates.

devops project to learn one way and mutual SSL/TLS

Need for Devops Real World Projects

One of the problems faced by aspiring devops engineers is a lack of hands-on knowledge doing DevOps projects. Often, it becomes a big hurdle in getting a DevOps engineer role or moving into a different domain in DevOps itself. You can overcome this issue by working on real-time projects.

Devops real-time projects help you gain experience with DevOps tools, infrastructure design, and troubleshooting. Moreover while working on projects, you will be able to apply and gain an understanding of Linux, scripting, and other fundamental devops concepts. This way you can confidently attend DevOps interviews.

I have segregated the projects into different categories in terms of beginner, IAC, cloud, and containers. Based on your experience level and understanding of the tool you can pick the projects.

Conclusion

The best way to learn DevOps is by doing practical projects. The idea is to understand the core fundamentals of each implementation. Even though the implementation could differ from organization to organization, the best underlying concepts, workflows and best practices remain almost the same.

In DevOps interviews, companies expect real-time project experience with tools. However, if you have strong knowledge of the tools, even without project experience, they might consider you.

Also, this blog will be constantly updated with more project workflows for real-time learning and production scenarios.

Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like