
In this video, I will begin by introducing myself. Then I will explain the curriculum that we will be following throughout this course, and finally, what you are expected to gain after completing the content.
I created this course since a lot of individuals, especially fresh graduates and junior engineers are unsure of how to start a career in Fullstack and DevOps Engineering, in addition to the high demand in these two fields. Upon completing this course, I expect that you will have a basic understanding of:
- Web Applications in general: What they are, why we need them, and how they are developed and deployed.
- Containers and Docker. You should be able to containerize applications and perform basic deployments of containers.
- Cloud Computing in general and Amazon Web Services in particular.
- And finally, you should be equipped with the basic concepts of DevOps.
In summary, this course aims to teach you the basic information needed to kickstart your career in Fullstack or DevOps. What differentiates this course is that it focuses a lot on understanding concepts and ideas, and thought process, which will allow you to further expand this knowledge on your own, or hopefully in more advanced courses.
DevOps, SysOps, DevSecOps, CloudOps, are all catchy and trendy buzzwords that are circulating all over the world and the tech realm. A simple search for such keywords will return thousands of people and companies "applying" them one way or the other.
Unfortunately, as with most trends, numerous definitions and variations arise, confusing the general public, creating irrelevant job positions and career paths, and leading to inefficient Software Development Lifecycles, further complicating everything!
In this lecture, I define what DevOps really is by discussing:
- The evolution of the software industry.
- Some of the most popular software delivery models.
- and finally, what is DevOps, and what are DevOps Engineers
One way to interact with the Operating System is through the Graphical User Interface. However, this is not the only way. As a matter of fact, most Linux servers online cannot be accessed through a GUI. An alternative is using the Command Line Interface, which allows the user to interact with the Operating System through commands. The Linux Shell is then a program that takes these commands from the user and sends them to the Operating System to Process.
In this lecture, we go over some of the Linux commands, especially those that we will use in this course.
Currently, thousands of applications are deployed and managed every day on dynamically created network resources. Technology advancement allowed for most of these operations to be carried out quickly and efficiently through processes and automation tools. Fullstack and DevOps Engineers are two of the main pillars of realizing this software delivery.
Computers in the '60s were the size of a room. As opposed to today, data exchange between computers was not a walk in the park. In fact, to access data stored on a computer, one had to either physically travel to the computer’s site, or have the magnetic tapes holding data shipped through the traditional mailing system. Imagine the hassle!
However, in order to appreciate the present, it is essential to go back to the beginning, and understand what is everything and why!
In this session, we will:
1. Go back in history and understand what the internet, the world wide web, and client-server architecture actually are.
2. Understand the basics of name resolution and Load balancing
In this demo, we are going to deploy a simple HTML website on an AWS EC2 Ubuntu Machine. To do so, we are going to:
Create a simple HTML page.
Create the networking and compute resources on AWS.
Install the Apache2 webserver.
Deploy the HTML page.
Configure the webserver to serve the application on port 80.
In this demo, we are going to deploy a simple HTML website on an AWS EC2 Ubuntu Machine. To do so, we are going to:
Create a simple HTML page.
Create the networking and compute resources on AWS.
Install the Apache2 webserver.
Deploy the HTML page.
Configure the webserver to serve the application on port 80.
In the previous demos, we deployed 2 HTML applications on one EC2 machine. One application is served on port 80, while the other one is served on port 81.
Instead of serving the applications using the IP address of the machine, and on different ports, we will use domain names, and both applications will be served on port 80.
Application1 will be served using domain name: myfirstapp.com
Application2 will be served using domain name: mysecondapp.com
So far, we have learned to deploy and serve websites using Apache webservers. Moreover, we leveraged the power of load balancing in order to scale the website when needed.
Unfortunately, life is not this straightforward. As a matter of fact, with great innovation comes great complexity. With the internet and technological advancement, websites are the simplest forms of applications created and deployed. Web applications, on the other hand, are more complicated to design, develop, deploy, and maintain.
This lecture provides a deep dive into web applications with the aim to understand their nature, importance, characteristics, and challenges.
In this video, I will discuss:
The differences between websites and applications.
The HTTP Protocol.
And the Web application Layers, components, and architecture.
To better understand load balancing, we are going to:
Create three Ubuntu EC2 machines on AWS.
Create two simple HTML pages.
Deploy each application on one VM.
Create and configure a load balancer on the third VM, and instruct it to distribute the load on the two machines.
After learning different concepts about web applications, such as the differences between websites and web applications, and web application layers, components, and architecture, we are going to focus in this video on the application server side.
In this video, we are going to discuss different database concepts, and then, we will discuss the NK-backend service, which we will deploy on AWS in the next video.
To better understand how an application is deployed and serves traffic over the internet, in this demo, we will deploy the nk-backend service and its database on an AWS EC2 machine, and explore some of its APIs by communicating with them using the Postman API client. The following steps will be completed:
Create an AWS EC2 virtual machine.
Configure the virtual machine with the necessary prerequisites.
Deploy the database and connect to it using a client.
Deploy the backend application.
Perform API requests to validate the deployment.
Currently, there exist multiple infrastructure types to deploy and manage web applications. Each option possesses its own advantages, disadvantages, and use cases. Moreover, a combination of more than one type can be used together to create the desired infrastructure.
In this lecture, we discuss 4 of the most popular infrastructure types: Physical servers, Virtual machines, Containers, and Serverless.
With the rapid evolution of the software industry in general, developing and deploying web applications is not as straightforward as writing the code and deploying it on remote servers. As a matter of fact, today’s software development lifecycle requires the collaboration of different teams (e.g., developers, designers, managers, etc), working on different tools and technologies to serve the challenging application requirements and meet the customer needs in an organized and optimized way. Such collaboration may prove to be extremely complex and costly if not properly managed.
Docker is a containerization software that aids in simplifying the workflow, by enabling a portable and consistent application that can be deployed rapidly anywhere, thus allowing software development teams to operate the application in a more optimized way.
This lecture explains different container tools and terminologies, namely Container Images, Containers, Container Registries, Dockerfiles, and Container Data Management. Moreover, Docker is introduced and used to reinforce the information learned with examples and scenarios.
To better understand the difference between the concepts explained, we will attempt to deploy a simple HTML application on an Ubuntu EC2 machine. Then we will containerize and redeploy it. The following steps will be performed:
Create the networking and compute resources on AWS.
Deploy a simple HTML application on an AWS EC2 machine.
Containerize the application.
Store the image on AWS Elastic Container Registry.
Deploy the containerized application.
Now that we learned the basics of containers and Docker, we will take it to the next level in this demo. We will containerize and deploy the NK-backend application that we previously deployed on an Ubuntu VM. To do so, we will deploy the containerized version of the Arango database (with data persistence), as well as the NK Backend Service. The following steps will be completed:
Deploy the Containerized version of ArangoDB without data persistence.
Enable data persistence using Docker volumes.
Build the backend service using a Dockerfile.
Deploy the containerized version of the backend service.
Perform API requests to validate the deployment.
Web application development is a technology field that is rapidly evolving and growing. Traditionally, applications were designed and implemented using a Monolithic architectural style, with which the application was developed and deployed as a single component, divided into multiple modules. Monolithic applications are very easy to develop and deploy. However, such an architectural pattern becomes a burden once the application becomes too large.
With the emergence of Cloud Computing, and the concept of the on-demand provisioning of resources, a more suitable architectural pattern was required. Microservices rapidly gained popularity, and became a widely used architectural pattern, especially for applications deployed on the cloud.
The purpose of this project is to introduce the basics of web development from an architectural and deployment perspective. As a matter of fact, software engineers today are required to collaborate together across departments (e.g., Developers, QA, System Administrators, etc), rather than work in silos.
Many individuals, especially fresh graduates and junior engineers, are unsure how to start a career in Fullstack and DevOps Engineering.
This course is composed of two modules:
Web Applications.
Infrastructure and Application Deployment.
Each module comprises several lectures made of a theoretical part, in which certain concepts are explained, and a practical part, consisting of exercises and demos, to apply the knowledge learned, and to make sense of the information acquired. Amazon Web Services will be used in the demos, which will give you a great overview of cloud computing in general and AWS in particular. Finally, there will be a section that contains quizzes and a course project, to test everything you have learned.
Upon completing this course, you will have a basic understanding of:
- Web Applications Concepts: What they are, why we need them, and how they are developed and deployed.
- Containers and Docker: The ability to containerize applications and perform basic deployments of containers.
- Cloud Computing and Amazon Web Services: Creation of networking and compute resources.
- Basic DevOps Concepts: Networking and compute requirements, application deployment, application containerization.
In summary, this course aims to teach you the basic information needed to kickstart your career in Fullstack or DevOps. What differentiates this course is that it focuses a lot on understanding concepts, ideas, and thought process, which will allow you to further expand this knowledge on your own, or hopefully in more advanced courses.