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.
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.
Try it yourself — Neo is free, with every feature unlocked.
Get started free