One Hostinger VPS, every project

Second post in “Tools I build with.” Every project you’ve seen on this site runs on one rented server. This is the foundation the rest of the series sits on, so it’s worth understanding before any installation commands get involved.

One server, one bill

Every app, website or tool I have built is hosted on this one VPS, rented from Hostinger. One monthly bill, and the only other recurring cost is a domain for each website. No per-project charges, no stack of separate hosting accounts to manage.

This is perfect if you want to have different landing pages to target different audiences, or just exist online and grow with AI without spending a fortune on the huge website-building platforms.

That structural choice shapes every other tool decision in this series. If you’re weighing up running everything on a rented server versus paying a separate online service for each project, read the rest of this before choosing.

Decide the direction first

Before copying the setup, decide what you actually need.

  • Does your website have to stay online when a data centre goes down? Automatic switching between locations, a formal uptime promise from the host? Then a single VPS is not your answer and this post is informational only. Go managed cloud, something like AWS, Google Cloud or Azure.
  • Do you need compliance certifications? HIPAA, SOC 2, regulated financial data? Same answer. Running your own server means running your own security audits, which is a lot of work.
  • Do you need a website that loads equally fast from three continents at once? Same answer.

If you said yes to any of those, stop here. For everyone else, a single VPS is probably the simplest and cheapest thing to choose. The rest of this post walks through the pieces that make it work.

What a VPS is

A VPS (Virtual Private Server) is a Linux computer you rent. You get the only login to it. Nobody else is running anything on it. It sits in a data centre, it’s always on, and you reach it over the internet.

Think of it as a laptop you rent that never closes.

What SSH is

SSH stands for Secure Shell. It’s the thing that lets you sit in front of your laptop and type commands on the rented server, safely, over the internet.

You have two keys:

  • A public key that you copy onto the server, once.
  • A private key that stays on your laptop and never leaves.

When you connect, the server checks that your private key matches the public one it has on file. If yes, you’re in. If not, nothing happens.

From then on, it’s as if you were typing on the server directly.

  • ls lists the server’s files.
  • docker ps lists what’s running on it.
  • apt update updates the server itself.

The one safety rule that matters most: anyone holding your private key is you, to the server. Treat it like a house key, not a password. Keep it on your own computer only, never posted online, never pasted into a chat, never in a screenshot. Ever.

That one sentence is the difference between self-hosting safely and accidentally handing your server to a stranger.

What Docker is

Docker packages each project as a container: a sealed box containing the app plus everything it needs to run. The exact Python version, the exact Node version, the exact database, the exact settings.

Why sealed matters: new projects can’t break old ones. A container sharing the server with twenty others can’t reach into their files, processes or dependencies. If one misbehaves, only that one container is affected.

Docker Compose is one text file per project that says “here are the containers for this project and how they talk to each other.” Add a new project, write that file. Remove a project, delete the file and one command cleans it up.

That’s the piece that makes the setup work. Dozens of containers can live on one server without the configuration turning into a tangled mess.

What Traefik is

Traefik is the front door. It listens on the standard web ports (HTTP and HTTPS) and decides, based on the domain name in the request, which container the traffic should go to. It also handles HTTPS certificates automatically via Let’s Encrypt, so no manual certificate setup is ever needed.

In practice: adding a new project is writing its docker-compose.yml with a couple of Traefik lines at the bottom, and the project is live on its domain with HTTPS within minutes. No certificate work, no routing files to edit by hand.

How Claude Code reaches the server

This is where it stops being abstract. A typical session:

  1. Open Claude Code on your laptop, inside a project folder.
  2. That project’s CLAUDE.md file contains one instruction: “To reach the server, use this SSH command.”
  3. Claude Code uses the SSH setup already on your laptop (the private key, the server’s address) to connect.
  4. Ask things in plain English: “what containers are running?”, “rebuild the journal container”, “show the last 50 lines of the contact form’s logs.” Claude runs the matching ssh … command and reports back.

The private keys never leave your laptop. Claude Code doesn’t see them. It knows the address of the server; your laptop’s SSH software handles the secure handshake using keys you set up once. That separation matters.

For the permission settings used with Claude Code (what to pre-approve, what to keep checking manually), the previous post in this series covers it in detail.

What to be aware of before copying this

  • Full access to the server is powerful and lossy. Deleting the wrong folder on your laptop is a bad day. Doing the same on the server can take every live project offline at once.
  • “Just give the AI full access” is not the recommendation here. Claude Code reaches this server because the permission list has been set up carefully. Copy the tool choice, decide your own permission list separately. Never pre-approve anything that writes to a database real people use.
  • One server is one point of failure. Backups. Daily. Scripted. Saved somewhere else. A later post in this series covers the exact setup. Until then: if the VPS dies and there is no backup, the project dies with it.
  • Hostinger is a good default, not the only one. DigitalOcean, Hetzner, Vultr, Linode and Contabo all rent servers too. Hostinger’s advantage here is that the dashboard is simple enough that forgotten settings are findable in thirty seconds. Iterate on the provider if the first one annoys you.

Cost, roughly

Tens of dollars per month, not hundreds. One Hostinger VPS in their KVM range carries every app, website and tool on this site. The only recurring cost on top of the VPS bill is a domain per website, renewed one-by-one as each site is registered.

Exact pricing shifts, so rather than publish a number that rots, the referral links below lead to the current list. The tier this journal runs on is two levels up from their cheapest, and that has been overkill so far. Your direction may call for a smaller tier, or a bigger one. Start the server, leave it running for a couple of days, check how much of its memory and processor are actually used, and decide from there.

The receipt

All the links below come with 20% off at checkout, plus a 30-day money-back guarantee.

VPS (the setup this post covers):

  • KVM 1: the entry VPS. Good for trying Docker and hosting one or two small sites.
  • KVM 2: one step up. A realistic starter if several projects are planned from the outset.

Both VPS links land on a 12-month term by default; the tier can be changed at checkout.

Shared hosting (simpler websites, no custom code):

  • Hostinger shared hosting plans: the simpler, cheaper option. Right if what you need is a website (WordPress, a static site, a landing page) without running Docker or server-side code.

All three links use the same referral code. Using any of them supports this journal at no extra cost to you.

What’s next in the series

  • Markdown pyramid. A small add-on (skill) for Claude Code that keeps it from reading every note in a project on every session.
  • Service account + campaign planning. How to let a small Python script write to a Google Sheet, used in this series to plan the episodes.
  • …and more tools ahead, each tied to a real project as its receipt.

Subscribe below to get each one when it’s published.