
Full Stack for Front-End Engineers, v3
Learning Paths:
Topics:
Table of Contents
Introduction
Introduction
Jem introduces this course by sharing personal and professional background, course prerequisites, and social media handles. Modern computing, the concept of full stack engineering, and a brief overview of the course content are also discussed in this segment.What is a Full Stack Engineer
Jem asks the workshop audience for their definitions of a full stack engineer and discusses what a tech stack is. Examples of some popular tech stacks and Jem's definition of a full stack engineer are also provided in this lesson.
Command Line
Command Line Exercise
Jem discusses how the terminal and command line communicate with a computer, the benefits of using the command line, and demonstrates some common commands. Students are then instructed to in the command line create a "temp" directory that contains a "hello" file, list the directory contents, move out of the directory, and delete "temp".Command Line Solution
Jem walks through the solution to the command line exercise and demonstrates using the manual.VIM Exercise
Jem provides some commands to use in case you get lost in the command line and how to switch modes in VIM. Students are then instructed to navigate to the home directory, create a "temp" directory, open a "test" file in VIM, write in the "test" file, and save and exit.VIM Solution
Jem walks through the solution to the VIM exercise and provides some resources for more information on VIM.Shell Exercise
Jem discusses the application running in the terminal, the shell. Students are then instructed to open the shell config and add a line to make the shell tell you "good morning."Shell Solution
Jem walks through the solution to the shell exercise.
Server
Servers
Jem discusses a server as a computer that responds to a request and why servers are usually on dedicated hardware. The code to create a basic Node.js server is also provided in this segment.Create a Simple Node.js Server
Jem walks through creating a simple server using Node.js and demonstrates some helpful tools, including nvm and homebrew. A brief discussion regarding ports, localhost, and reserved IP addresses is also covered in this segment.Server Management
Jem discusses the limitations of local server hosting, server management, data centers, cloud computing, and virtualization. Most modern systems utilize cloud hosting providers instead of putting resources into managing servers in their own data centers.Buying a VPS
Jem walks through how to buy and set up a VPS on Digital Ocean. This segment also covers how to choose a region and the importance of choosing an operating system with long-term support.
Operating Systems
Operating Systems
Jem discusses Windows and Unix-based operating systems and the multiple types of unix subsystems. The different layers of an operating system, including hardware, kernel, shell, and user, are also briefly discussed in this segment.Security & Hashing
Jem discusses server authentication, possible problems with usernames and passwords, and ssh keys. Dictionary attacks, MD5 hashing, the command line tool OpenSSL, and a brief discussion regarding Awk are also covered in this segment.Hashing with Salt
Jem demonstrates hashing with SHA256 and discusses increasing password security further by adding salt to introduce randomness into the hashing function. A student's question regarding the advantages of SHA1 over MD5, where the salt comes from, and what hash Bcrypt uses are also covered in this segment.Setup SSH Keys for Login
Jem discusses SSH keys which consist of a sharable public key and a private key, and walks through how to create an SSH key. Adding an SSH key to the Digital Ocean droplet and the commands needed to login to the server are also covered in this segment.SSH Key Recap
Jem quickly reviews creating an SSH key and logging into a server with that key. Modifying the SSH config to define the identity file automatically and adding the private key to keychain are also covered in this segment.
The Internet
How the Internet Works
Jem discusses the broad question of how the internet works and walks through a simplified diagram of how a computer can use the internet to connect to a server. Terminology, including internet, intranet, LAN, and WAN are also covered in this segment.Network Tools Exercise
Students are instructed to check the status of a network host with ping, follow the path of a request using traceroute, and show the network status with netstat. A demonstration of each of these network tools is also provided in this segment.Internet & Networking Terminology
Jem discusses some of the terminologies used when referring to the internet and networking, including TCP, UDP, ICMP, and Packet. Examples of when UDP would be used instead of TCP are also discussed in this segment.DNS & URLs
Jem discusses the meaning and function of DNS, nameservers, and URL. An exercise in looking up domain names with nslookup and dig and a breakdown of the anatomy of a URL are also covered in this segment.Buying a Domain Name
Jem discusses some restrictions when purchasing domain names, demonstrates how to purchase a domain name through Namecheap, and how to connect that domain to the previously created droplet on Digital Ocean.Update & Restart Server
Jem walks through updating a new server's software and how to restart a server.Create a User
Jem discusses why running a server on the root is dangerous, and demonstrates how to create a new user, add a user to the "sudo" group, switch user, and check sudo access. Adding authorized ssh keys to the server is also covered in this segment.File Permissions
Jem walks through updating the file permission authorized keys and disabling logging into the root to prevent unauthorized access to the server.
Application Setup
Setup Nginx Web Server
Jem walks through installing the Nginx web server and using it to route server requests. A brief discussion regarding installing the latest Node.js source is also covered in this segment.Setup Proxy Pass
Jem walks through establishing the application file system and how to no longer require sudo by changing the application ownership and initializing a git repo.Virtual Server & PM2
Jem walks through setting up a virtual server block, answers a student's question regarding why nginx is being used and not Node.js, and installs the process manager PM2. PM2 will allow the server to continue running even if the terminal is closed and will restart the server if there is a server error.
Git
Git Exercise
Students are instructed to create a git repository, create an SSH key called gh_key, add the SSH key to GitHub, add the remote repo, ensure the new SSH key is used, and push the local repo to Github.Version Control & Git
Jem discusses version control using git and walks through connecting to GitHub the Git exercise. Helpful commands in case you get stuck are also provided in this segment.
Security
Security
Jem discusses potential security risks if someone gains unauthorized access to the server, including running through bandwidth caps, gaining access to GitHub and stealing information, and deleting auth log files to hide their tracks.View Open Ports with nmap
Jem discusses ports, how to view a list of well-known ports, and walks through installing and using nmap to view open ports.Firewall & ufw
Jem walks through managing port access with a firewall using the software ufw to allow access to ssh and http.Permissions & chmod
Jem discusses the meaning behind the numbers and various iterations of r, w, and x used when changing file permissions. A permissions cheat sheet is also provided in this segment.Unattended Upgrades
Jem quickly demonstrates how to keep applications up to date automatically using unattended-upgrades.
Continuous Integration & Deployment
Continuous Integration & Deployment
Jem discusses the need for continuous integration and continuous deployment when scaling applications. The differences between CI and CD, and the importance of testing are also covered in this segment.Cron for CI
Jem discusses creating a CI/CD using a Unix stopwatch and cron to execute a shell script that pulls production updates on a set interval. A walkthrough of creating a simple bash script and cron job is also covered in this segment.Logging, Streams, & Redirection
Jem discusses logs and different options for how to read them, including tail, head, less, and cat. Standard streams and redirection commands are also covered in this segment.find & grep
Jem demonstrates the syntax for searching for where a file name is and searching for file contents using the find and grep commands. A walk through of using both of these commands is also covered in this segment.Nginx Redirection & Gzip
Jem discusses redirection with Nginx, and compression with gzip, briefly demonstrates what compression is, and the difference between hashing and compression.Subdomains
Jem walks through how to create a subdomain, including creating the corresponding A record, creating the server, and updating the nginx.conf file to recognize the new subdomain. Subdomains can be restricted from public access, making them useful for development sites.
Realtime & Databases
Websockets Overview
Jem discusses real-time communication between the client and the server using websockets. Configuring nginx to allow connection to websockets and creating a new server with Express are also covered in this segment.Using Websockets with Express
Jem briefly discusses possible errors when cloning the GitHub repository and demonstrates enabling websockets on the previously created server using Express. Writing a broadcast function, broadcasting the number of clients, and welcoming new client connections are also covered in this segment..Creating a Websocket Connection
Jem demonstrates creating a websocket connection in the index.html, setting websocket protocols for both http and https, and setting where the websocket is connecting to. Updating the GitHub script to run npm install is also covered in this segment.Databases Overview
Jem discusses the benefits of using databases for data storage, including organization, scalability, and performance. An overview of relational compared to non-relational databases is also covered in this segment.SQLite
Jem walks through using SQLite to create a database that contains a visitor log for the websocket server. Since this example uses memory, the database will reset whenever the server stops.HTTPS Overview
Jem discusses HTTP, what data is contained in headers, different meanings of status codes, and securing the connection with HTTPS.Implementing HTTPS with Certbot
Jem walks through installing and using certbot to secure the server connection and implement HTTPS. Opening the correct port with uncomplicated firewall is also covered in this segment.Supporting HTTP/2
Jem discusses the different types of connections with HTTP/1.1 and HTTP/2. How to update the nginx server to HTTP2 is also covered in this segment.
Containers
Containers
Jem discusses microservices and monolith software architectures, containers, how containers relate to cloud computing, and container management services.Creating a Docker Container
Jem walks through how to create a docker container by installing docker using apt and creating a dockerfile.Orchestration & Load Balancing
Jem discusses container orchestration and services used to manage containers, including Kubernetes and balancing request loads across multiple servers. A discussion regarding the different types of scheduling algorithms is also covered in this segment.Adding a Load Balancer
Jem walks through adding a load balancer to allow nginx to decide which server to pass the connection to.