Full Stack for Front-End Engineers, v2
This course has been updated! We now recommend you take the Full Stack for Front-End Engineers, v3 course.
Table of Contents
IntroductionJem Young gives an overview of what front end is, what back end is, and what full stack is. Full stack means building an application from start to finish.
Why Full StackJem demonstrates how an understanding of full stack makes better engineers.
Command Line OverviewJem explains that the command line proficiency allows engineers to not have to rely on GUIs. Command line is also easier to script.
Command Line PracticeJem demonstrates common commands needed to use the command line, including cd, ls, pwd, mkdir, rmdir, and man.
ShellsJem explains the difference between a shell and a terminal, and states that the course will focus on bash, a unix shell.
Understanding the Internet
Understanding the InternetJem defines the internet as a series of globally and publically interconnected devices, and defines the intranet, which is a private internet.
IP Addresses & ProtocolsJem explains what an IP address is, explores different kinds of protocols, namely TCP and UDP, and demonstrates how to ping a website from the terminal.
Domain Name SystemJem explains the DNS domain name registration system and how domain names make the internet more accessible through nameservers. Subdomains are also discussed.
Trace Routes PracticeJem demonstrates how to use trace routes to observe the different server hops for a website, and explains that trace routes conduct ICMPs Internet Control Message Protocol.
PacketsJem explains that a packet is a folder containing data, metadata in the form of headers, and information about where the packet is coming from and where it is going.
Understanding Net NeutralityJem reviews what the internet is, and what net neutrality is, and why it is important to understand it.
VIM Overview & ModesJem explains what VI Improved, VIM, is, and gives an overview of basic VIM modes.
VIM PracticeJem demonstrates how to create and access a file, insert information, save, and quit in VIM.
Server ExerciseJem explains that servers can have different forms as long as they can take requests, and instructs the students to build a simple server using VIM through their terminal.
Server SolutionJem live codes the solution to the server building exercise.
Data Centers & the CloudJem explains what data centers are, and how servers work, then explains how the cloud works, and what an elastic cloud is.
Virtual Private Server SetupJem demonstrates how to create a cloud server on the DigitalOcean platform. This setup is essential to be able to follow along with the rest of the course.
Operating SystemsJem explains what a kernel is, what utilities are, and covers the two main operating systems: windows and unix, and introduces linux.
SSHJem explains that there are two ways of logging into servers, secure socket shell and username/password, and dives into how SSH works.
SSH Key PracticeJem demonstrates how to create an ssh key, save it on a DigitalOcean server, and how to use grep to find it.
Connecting to the ServerJem shows how to connect to a server using an SSH key.
Buying a Domain NameThe students are instructed to buy a domain. Jem explains how domains get resolved, what DNS records are, and what are CNAME and A record.
Domain SetupJem demonstrates how to create an A record, and a www record through the domain provider.
Server SetupJem demonstrates how to update the apt command line tool, how to upgrade it, and how to add a new user to the server.
User SetupJem demonstrates how to give superuser access to the server that was setup earlier.
Setting User PermissionsJem demonstrates how to add the SSH public key created previously to another file.
Disabling the Root UserJem demonstrates how to disable the root user through the new super admin user account created previously, and add the public key to a file in the server using VIM.
Nginx OverviewJem demonstrates how to install Nginx(engine x), an HTTP and reverse proxy server that helps route proxies.
Nginx ConfigurationJem demonstrates how the Nginx server is configured, how to create an HTML page, and how to make it the default page that will appear on the browser when connecting to the server.
Application ArchitectureJem explains the importance of an application's architecture and stack, and its consequences on an application's sustainability.
Application SetupJem demonstrates how to install the Express framework, move into the app directory, initialize an empty git repo, create a ui file, and update a file using VIM.
Proxy Passing TrafficJem explains that Nginx needs to be connected to the Express framework installed earlier, and demonstrates how to point Nginx to the correct port by using a proxy pass.
Process ManagerJem demonstrates how to install pm2, a Node process manager that helps to keep an application online and up to date, even when the server restarts.
Version Control with gitJem creates a repository, a new SSH key, adds the key to GitHub, and pushes code using an SSH connection.
Server Setup RecapJem reviews the different server setups taught during this section of the course, shares resources about installing an intrusion detection system, and about best practices when using the Express.js framework.
Standard Streams & RedirectionJem describes the different types of standard streams, standard output (stdout), standard input (stdin), and standard error (stderr). Redirection, namely, read, write, and append to file, is also discussed.
Finding Files & DirectoriesJem demonstrates how to use the bash command find to access directories, files, and print logs in the terminal.
Bash History TipsJem returns back to the server history, and shares new Bash commands to access the server log.
Searching File Contents with grep & zgrepJem demonstrates how to use grep to conduct a search inside a file.
Nginx Config Basics
Nginx RedirectJem compares temporary redirects with permanent redirects, and when to use them.
Nginx SubdomainJem explains that a subdomain is part of a main domain, and can be allocated to a specific section of the main server, and function on its own.
Nginx File CompressionJem explains what compressed files are, how Nginx automatically compresses files, and describes the positive effects of compression.
Why SecurityJem describes security best practices, and what types of attacks a hacker can try once they access a server.
Read Auth.logJem explains how to use MaxMind to track from which IP addresses from the auth.log are from.
Security ChecklistJem shares a security checklist to keep a server safe, and talks about the zero day attack, which results from unpatched system vulnerabilities.
Unattended UpgradesJem demonstrates how to enable unattended upgrades in a server to prevent some attacks.
Security EthicsJem discusses security ethics with the audience , and when or how to hold companies accountable for their bugs and security breaches.
FirewallsJem defines what a firewall is, and demonstrates how to install Nmap.
PortsJem defines what ports are, and shares what the best practices for ports are to keep a server secure.
Uncomplicated FirewallJem explains what uncomplicated firewalls are, demonstrates how to check a server's firewall status, enable ssh, and enable the firewall.
PermissionsJem demonstrates how to look into the server's permissions log.
Upgrade Node.jsJem demonstrates how to upgrade Node.js in the server, shares a resource that explains what a shell command does, and briefly reviews the security best practices he discussed in this section.
Defining HTTPJem defines what HTTP is, and why this is an important protocol for UI engineers.
HTTP Headers & CookiesJem defines the different headers that are included in an HTTP request, focuses on the header set-cookie, and explains why cookies are important elements of the web.
Custom Header & Status Code ExerciseJem defines the different status codes. The students are asked to create a custom header and status code.
Custom Header & Status Code SolutionJem shares the solution to the custom header and status code exercise.
HTTPSJem explains what HTTPS is, and what certificate authorities are.
Adding HTTPS to NGINXJem demonstrates how to enable https on a server using Certbot.
HTTP/2Jem explains what the requirements are to enable HTTP 2, and explains the main differences between HTTP and HTTP 2.
HTTP/3Jem introduces HTTP 3, and explains that it is not widely used yet.
Containers & MicroservicesJem introduces containers, microservices, and the relationship between the two.
Docker & OrchestrationJem introduces Docker, a container service, explains what orchestration is, and how it helps make the roll out of multiple containers run smoothly.
Load BalancersJem defines what load balancers are, and how they determine to which server they go to, using scheduling algorithms.
DeploymentJem shares a few resources that allow quicker deployment with the help of a configuration script.
Files & Databases OverviewJem explains why it is important to save data in a way that is queryable.
Database TypesJem compares relational databases and non-relational databases, explains their main differences, and describes the context in which each one is used.
RedisJem demonstrates how to install Redis on the server.
WebSocketsJem explains what websockets are, the difference between them and long polling, and explains that websockets will be used in this course's final project.
Chat Bot: ExerciseJem instructs the students to build a chat bot using websockets.
Chat Bot: SolutionJem live codes the solution to the chat bot exercise.