Get Started

Your first self-hosting step

No crash course, no computer science degree. Just the seven steps between you and your first self-hosted app. Set aside a relaxed afternoon, and budget for a domain (~$15/year) and a little off-site backup storage (~$5/month) on top of the server. The "a few euros a month" pitch is the floor, not the typical cost.

Before you start

You don't need to understand exactly what every command does before you run it, any more than you need to understand a combustion engine to drive a car. What used to take hours in a manual is now a copilot conversation: paste any error message you run into into ChatGPT or Claude, and ask what it means and how to proceed. That's exactly why this topic is open to everyone now.

One honest caveat, up front: once this is running, nobody else is patching it, watching it, or backing it up. Plenty of people manage that fine as a low-effort hobby, but go in with your eyes open, and don't skip steps 3 and 7 just because they're less exciting than step 5.

The seven steps

01

Rent a server

With a provider like Hetzner you rent a virtual server (VPS), for a few euros a month. The smallest configuration is plenty to start with. Pick Ubuntu as the operating system (it's the standard, and the one most guides are written for), and when you're asked for an SSH key, take the extra two minutes to add one instead of skipping it. Don't have one yet? Open your terminal and run ssh-keygen (press Enter to accept every default), then paste the contents of the file it creates ending in .pub. That one small step means you'll log in with a secure key from the very first boot, never a password. Within minutes you get an IP address: a number that makes your server reachable on the internet from now on.

02

Connect to it

You connect to your server via SSH: a secure remote connection to a terminal, essentially a command line on a computer that's thousands of kilometers away. On a Mac, the built-in Terminal app is enough; on Windows, try Windows Terminal. Because you added your key in step one, this needs no password at all: ssh root@your-ip-address. That's it. You're now "on" your server. (Logging in as root directly is fine to get started with; the server basics deep dive explains the safer long-term setup: a separate user account and the sudo command, which is also where this project gets its name.)

03

Turn on a firewall

Before anything else runs here, close every door you're not using: ufw allow OpenSSH followed by ufw enable turns on Ubuntu's built-in firewall and blocks every incoming connection except the one you're using right now. It takes ten seconds, and it's the single highest-value security step on this page. Most self-hosting horror stories start with a service that got left wide open to the entire internet.

04

Install Docker

Docker packages every app into a ready-made, isolated "container," including everything it needs to run. Instead of setting up software by hand, you download ready-made blueprints and start them. Installation is a single command Docker provides itself: docs.docker.com/engine/install. Containers keep apps tidy and separate from each other, but they don't form an unbreakable wall. Keep them updated the same way you'd update anything else. One gotcha worth knowing early: Docker writes its own firewall rules and can quietly open a port straight through the UFW firewall you just set up in step 3. The fix, a reverse proxy instead of exposed ports, is coming in the "From server to your own address" deep dive. Also, fair warning: Docker itself is where a lot of newcomers to self-hosting get stuck. If this step trips you up, that's normal, not a sign you're bad at this. Lean on the AI prompts below.

05

Start your first app

Now it gets concrete. Most open-source tools ship a ready-made docker-compose.yml: a short text file describing which containers to start. You copy it, adjust a password, and start it with one command: docker compose up -d. Pick something low-stakes for your first try. Vikunja for task lists is manageable, quick to get running, and immediately useful. Save higher-stakes tools like a password manager for later, once backups and updates feel routine.

06

Try it out

Open http://your-ip-address:PORT in your browser and there's your app, live, on your own server. Still without a pretty address and without HTTPS, but it's running. And it's yours. The next deep dive, "From server to your own address" (coming soon), shows how to turn this into a real, secure address with your own domain.

07

Back it up

Nothing here is backing itself up yet. That's on you now, not a vendor. The simplest habit: turn on your provider's automated snapshots (Hetzner charges roughly 20% of the server's price per month for this) or copy your data somewhere else on a schedule. Whatever you choose, the classic rule still holds: three copies, on two different types of storage, with one of them somewhere else entirely. A full walkthrough is coming as its own deep dive. For now, just don't skip this step because it's less exciting than step 5.

Using AI as your copilot

Two ways to use this: set the ground rules once, then reach for specific prompts as problems come up.

Set the ground rules once

Before step 1, paste this as your first message in a new chat with ChatGPT or Claude. Most chat apps don't actually let you set a true "system prompt," but pasting this first does almost the same job: it sets expectations for the whole conversation that follows.

"I'm a complete beginner self-hosting open-source apps on a small Ubuntu VPS with Docker. Act as a patient, safety-first copilot for this project: explain any command in plain language before suggesting I run it, and proactively flag anything that would expose a service to the internet, weaken a firewall, use a weak or default password, or skip backups, even if I didn't ask about security specifically. Default to secure choices (SSH keys over passwords, a reverse proxy over exposed ports) and tell me when you're not fully sure something is safe, rather than guessing confidently. Ask what OS and setup I already have before giving instructions."

Reach for these as problems come up

"I'm connected to an Ubuntu server via SSH and I'm getting this error: [paste error]. What does it mean, and how do I fix it?"
"Explain step by step what this command does before I run it: [paste command]"
"I want to install [app name] with Docker Compose on my server. Give me a working docker-compose.yml and explain the key lines."

Two things worth knowing before you lean on this. First, treat an AI-suggested command the way you'd treat a stranger's advice on a forum. It can sound completely confident while being wrong, and it will sometimes "fix" a problem by suggesting you disable your firewall or expose a port to the whole internet. Read a command before you run it, especially anything involving rm, chmod 777, or a firewall. Second, never paste a real password, API key, or token into a chat window, even just to explain an error. Strip it out first, the same way you would before posting a log on a public forum.

Not your path?

If this still feels like too much terminal, PikaPods gives you the same open tools with no server of your own. If you want to go deeper, your own hardware at home is the next step after this one. Both paths are briefly explained on the overview page.

Understand what's happening behind the scenes: Server basics