A video series for beginners Playlist is HERE
Episode specific notes, excercises etc are HERE. I will add notes, exercises I think will be useful to you. I may make videos about them in future. Let me know if anyone would like that.
This roadmap needs rewriting and needs to organize it better
You can open an issue if you have something to discuss
This is a roadmap I have planned, and this could change any moment as I continue to make videos
- How does a simple website work
- What is a website. How it works from local machine
- What is a server - How does the internet work (IP addresses, Ports etc)
- What is DNS (quick intro)
- Basics of Linux - Setting up simple web server
- History of Unix, Linux and the differences
- Virtualization - Installing Debian 10 on VirtualBox
- SSH - Remote logging, Key Exchange, Key based authentication etc
- User management in Linux - quick guide - sudo / root
- Installing package using apt-get - nginx
- Learn VIM
- Starting or stopping services using systemctl
- Checking for processes using
ps - Checking for listening ports using netstat
- Checking open ports using netcat from the outside
- checking the logs for errors
- Before proceeding with nginx config - File system hierarchy in Linux
- Nginx configuration - Checking for errors
- What is HTTP - what are headers
- Host header and virtual hosting in Nginx
- Getting things onto the internet
- Getting a domain, a free domain
- Managing DNS for a domain. what it means
- Getting our website onto digitalocean server
- A more complicated web application - WordPress
- What is WordPress - what does it need
- What is an application server vs web server : HERE
- What is php, php-fpm and why do we need it
- What is a database and why do we need it - Intro to MySQL
- Installing and setting up WordPress
- Scaling wordpress - Why we need LoadBalancers
- Keeping our files versioned - Git
- What is git and why we need it
- Basic commands in Git
- Doing less work with Configuration management - Ansible
- What is Configuration management and why do we need it
- Basics of ansible
- Creating our ansible playbook for our Nginx server
- Back to a simple nodejs application
- This is only for demo - create a very simple app
- Keeping it in version control
- What is Jenkins, what can it do for us
- Automating our deployments - new version gets deployed on git push (Jenkins)
- Making sure our systems stay up - Monitoring
- The need for monitoring, what can it do for us
- Installing sensu for simple monitoring (HTTP and process)
- Getting more serious - Caching
- What is caching
- More about the HTTP protocol and headers
- Caching servers - Nginx
- Separate advanced caching with varnish ?
- Enable caching for our node application
- Automated cache busting as part of deployment
- Securing our servers with Firewall
- What is a firewall and what can it do
- Introduction to iptables
- Keep your stuff backed up
- Why we need backup
- How to backup individual stuff (MySQL)
- Evolving to Docker
- What are containers - what are we trying to solve
- Installing docker
- Getting started with docker containers
- Creating our own docker images
- Containerizing our node application
- Using Jenkins with docker
- Evolving to Kubernetes
- What is Kubernetes - what are we trying to solve
- Installing and getting started with minikube
- Basics of Kubernetes
- Moving our app to Kubernetes
- Better monitoring with Prometheus
- Prometheus, Alertmanager getting started
- Plotting our graphs with Grafana
- Moving to Cloud
- What, why of Cloud
- Google Cloud
- AWS
- Creating our infrastructure using Terraform
I have based this on a goal which is to setup a webserver, and learning Linux in the process of doing so. And the idea goes something like this
To get our website up, we need:
- A Linux server
- History of Unix, Birth of Linux
- Virtualization
- Install Debian 10 on virtualbox
- Accessing the server remotely
- Shell
- SSH
- SSH Key exchange - Diffie Hellman Key Exchange concept
- How key based SSH login is setup
- Navigating our shiny new server
- cd, ls etc, basic commands
- File system structure
- Creating files and folders
- echo, mkdir, cat etc
- vim, nano
- Create a user for our webserver
- User management
- Permissions
- Installing our webserver
- Webservers
- Package management using
apt
- Starting our webserver
- Managing services using
systemctl
- Checking if our server works
- Process management using
ps,killetc curl,netstat,netcatetcsystemctl status
- Configuring Nginx
- HTTP Headedrs
- VirtualHost - Creating two virtualhosts
- Using
/etc/hostsfile - Nginx config
- Checking log files -
tail,less grep
- More useful commands
find,lsof,df,du,dig
- Basic bash scripting
- Fundamentals of bash scripting - loops and conditions
- pipes, sed, awk etc
- Script to backup our website
- Script to alert if our website is down