Turning a Bare VPS into a Neo Server

Lesson 3 of 10: one command checks the OS, installs Docker, and starts Caddy — your server is now ready for neo deploy.

3 min read

Neo 101 · Lesson 3 of 10

Turning a Bare VPS into a Neo Server

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10

One command

neo init root@your-server-ip

That's the entire setup step. Neo connects over SSH, checks the OS is one it supports (Ubuntu 24.04+, Debian, Fedora 39+, or a 9+ RHEL-family distro — CentOS, RHEL, AlmaLinux, Rocky), installs Docker if it isn't there already, creates a Docker network named neo, and starts a single container — neo-caddy — that handles reverse proxying and automatic HTTPS for everything you deploy later. It also writes /etc/neo/state.json, a plain file that becomes the source of truth for what's running on this server.

It does a couple of other practical things too

Honesty over headline: init isn't only Docker and Caddy. It adds swap if the server has none, sized to the box's RAM so a small droplet doesn't fall over the first time it builds an image. And it deploys a managed SSH key, so future neo commands against this server don't prompt for a password every time.

Neither of these is hidden — they're just not the part worth leading with. For the complete, itemized list of every file and permission init touches, and exactly how to undo each one, see What neo init Actually Does (and Why That Restraint Is the Point). Worth reading before you point Neo at a production server for the first time; not required before this one.

What you have now

A server with Docker, Caddy, and nothing else running that wasn't there before. No app deployed yet — that's the next lesson.

Next: Your First Deploy: From Dockerfile to Live URL.

Try it yourself — Neo is free, with every feature unlocked.

Get started free