Hosting a real app from start to finish
Let's run the whole path once, top to bottom, so you can see how the pieces connect instead of as separate lessons. First the map, then the same run as one sitting with real commands, using Memos, a small notes app that actually holds data, so the backup step means something.
The path, as a map
- Know what you're aiming at. Pick one app you actually want, ideally something low-stakes for the first run. If you need ideas, that's what I host and the apps I'd start with.
- Get a machine. A cheap mini PC, or an old PC you already own. See picking a server.
- Choose and install the OS. Debian or Ubuntu Server, then flash it, install it, turn on SSH, and pin its address so the server sits at a fixed IP on your network.
- Connect in. SSH from your own computer and update the system, using the handful of commands from the Linux lesson.
- Install Docker. One script and you're ready to run anything. See meeting Docker.
- Run the app. A folder, a compose file, and
docker compose up -d, then open it atserver-ip:port. - Make sure the data is safe. Confirm the app maps a volume for its data so an update can't wipe it.
- Set up backups. Automate a copy of your
~/appsfolders and test a restore before you trust the app with anything important. - Reach it from anywhere. Use it at home first, then add Tailscale to get to it from your phone without exposing anything.
The same run, as one sitting
Steps one to three are the physical part, choosing a machine and getting the OS onto it, and their lessons walk every screen. From the first SSH prompt onward, here's the entire rest of the path as real commands. This run installs Memos (its compose file comes straight from the official docs). Connect and get current:
ssh yourname@192.168.1.50
sudo apt update && sudo apt upgradeGive the app a home and write its compose file:
mkdir -p ~/apps/memos && cd ~/apps/memos
nano docker-compose.ymlservices:
memos:
image: neosmemo/memos:stable
container_name: memos
ports:
- "5230:5230"
volumes:
- ./data:/var/opt/memos
restart: unless-stoppedStart it and open it:
docker compose up -dIn a browser, go to http://192.168.1.50:5230 (your server's IP, port 5230), create the admin account, and jot a first note. Notice the compose file already passed the safety check from the map: the ./data volume line means your notes live on the server's disk, not inside the container.
Back it up with the rsync line from the backups lesson, and do the two-minute restore test while the stakes are still zero. Then, if you want your notes on the go, tailscale up on the server, the app on your phone, and Memos opens from anywhere at the Tailscale address. That's the entire loop: nine steps on the map, maybe twenty minutes at the keyboard once the OS is installed.
The habit that keeps it alive
A home server mostly runs itself, but a short monthly routine catches problems while they're small. Mine is about fifteen minutes:
- Update the system:
sudo apt update && sudo apt upgrade. - Update apps you care about: in each app's folder,
docker compose pull && docker compose up -d. - Glance at the safety nets: is Uptime Kuma green, and does the backup drive show fresh files from last night?
- Check disk space:
df -hshows how full each disk is; keep an eye on the/line, and start cleaning up or planning a bigger disk when it passes about 80%.
Where to go from here
That's the entire beginner path. From here, more apps are just repeats of the same loop, and the "advanced" topics, reverse proxies, a NAS for storage, Proxmox, public access with a domain, are things you'll pick up naturally when a specific need shows up, not before.
You've gone from "self-hosting sounds hard" to running, backing up, and reaching your own apps from anywhere. That's the whole game. Everything else is just more of what you already know. When you want your next app, the directory is a good place to browse.