Skip to main content

Self Host 101 - Run Multiple Apps with Caddy | DNS, Static Sites, Reverse Proxies and Let's Encrypt

In this video CJ shows you how to setup DNS records for domains and subdomains with Cloudflare and how to set up, configure and host multiple types of applications with Caddy Server.

Watch the 1st video on setting up a VPS here: https://www.youtube.com/watch?v=Q1Y_g0wMwww Watch the 2nd video where CJ answers your questions here: https://www.youtube.com/watch?v=wZ9kmBnwX54 View all the Self Host 101 videos here: https://www.youtube.com/playlist?list=PLLnpHn493BHHAxTeLNUZEDLYc8uUwqGXa


00:00 Intro
00:56 Domain Purchase and DNS Setup
02:43 Creating DNS Records
04:32 Query DNS Records with dig
07:50 www subdomain record, CNAME records and TEXT records
10:19 Email forwarding and a catch-all address
11:23 DNS Resources
12:13 SSH to your VPS with a Domain Name
13:08 Responding to HTTP Requests from our Server
16:27 Web Server Software
18:12 Why do we need a Web Server?
19:05 How To Navigate The Caddy Docs
21:32 Caddy Architecture / reloading configuration
22:35 Install Caddy
24:17 Set up https for the root domain
25:39 Redirect IP to the root domain
27:21 Multiple Caddyfile Setup
31:41 Redirect www subdomain to root domain
34:15 Set up /var/www folder
39:05 Transfer files to the server with scp
40:35 Sync a folder with rsync
42:31 Clone a public git repo
44:44 Hide files from Caddy file_server
46:08 handle_errors in the Caddyfile
47:46 Clone private git repos with an SSH deploy key
52:16 Install node.js with nvm
54:03 Set up Holidays API Example
56:37 Create a reverse_proxy with Caddy 1:
00:45 Manage long running processes with pm2 1:
04:07 Run a TypeScript node.js API 1:
09:52 Run a static website that has a build process 1:
14:44 Caddyfile concepts and Logging 1:
17:12 Common Caddyfile patterns including SPA redirects 1:
18:15 Thanks!

DNS on Wikipedia - https://en.wikipedia.org/wiki/Domain_Name_System Cloudflare DNS - https://www.cloudflare.com/application-services/products/dns/ dig (command) - https://en.wikipedia.org/wiki/Dig_(command)

Cloudflare Email Routing - https://www.cloudflare.com/developer-platform/email-routing/

How DNS Works Zine - https://wizardzines.com/zines/dns/ Mess with DNS - https://messwithdns.net/ a simple DNS lookup tool - https://dns-lookup.jvns.ca/

netcat - https://en.wikipedia.org/wiki/Netcat

Comparison of web server software - https://en.wikipedia.org/wiki/Comparison_of_web_server_software Apache HTTP - https://httpd.apache.org/ nginx - https://nginx.org/en/ traefik proxy - https://traefik.io/traefik/ Caddy Server - https://caddyserver.com/ Listen to Syntax Episode 340 - https://syntax.fm/show/340/servers-with-matt-from-caddy

Caddyfile Reference - https://caddyserver.com/docs/caddyfile Caddy Architecture - https://caddyserver.com/docs/architecture Keep Caddy Running - https://caddyserver.com/docs/running#using-the-service

Install Caddy - https://caddyserver.com/docs/install

Caddyfile root - https://caddyserver.com/docs/caddyfile/directives/root Caddyfile file_server - https://caddyserver.com/docs/caddyfile/directives/file_server Caddyfile redir - https://caddyserver.com/docs/caddyfile/directives/redir Caddyfile Common Patterns redirect www - https://caddyserver.com/docs/caddyfile/patterns#redirect-www-subdomain

ln (command) - https://en.wikipedia.org/wiki/Ln_(Unix)

chown command - https://en.wikipedia.org/wiki/Chown

Caddyfile file_server hide - https://caddyserver.com/docs/caddyfile/directives/file_server#hide Caddyfile handle_errors - https://caddyserver.com/docs/caddyfile/directives/handle_errors

Generate an SSH key - https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent Github deploy keys - https://docs.github.com/en/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys

Node Version Manager - https://github.com/nvm-sh/nvm

Caddyfile reverse_proxy - https://caddyserver.com/docs/caddyfile/directives/reverse_proxy

Run node.js with systemd - https://nodesource.com/blog/running-your-node-js-app-with-systemd-part-1/ pm2 - https://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/

Caddyfile concepts - https://caddyserver.com/docs/caddyfile/concepts How logging works in Caddy - https://caddyserver.com/docs/logging Caddyfile SPA redirect - https://caddyserver.com/docs/caddyfile/patterns#single-page-apps-spas

Example sites: notlocalhost.net - https://github.com/w3cj/notlocalhost.net/ Holidays API - https://github.com/codinggarden/holidays Express API Starter TS - https://github.com/w3cj/express-api-starter-ts Big Timer - https://github.com/CodingGarden/react-big-timer