From Zero to Ghost, WordPress, or n8n in One Command

neo install scaffolds a ready-to-deploy project for ten common self-hosted apps — it never touches your server directly.

5 min read v0.22.0

What neo install actually does

It's easy to assume neo install ghost installs Ghost on your server. It doesn't — it scaffolds a project folder on your machine:

neo install ghost

You're asked for a folder (default ./ghost), and Neo writes three files there:

File Mode Contents
docker-compose.yml 0644 The app image plus any bundled database, wired up
.neo.yml 0644 Deploy config: name, domain, port
.env 0600 Generated secrets — database passwords, app keys

Nothing reaches a server until you run neo deploy inside that folder. You get an ordinary project you can read, edit, and commit before anything goes live.

The ten templates

ghost, wordpress, gitea, plausible, umami, chatwoot, n8n, miniflux, vaultwarden, uptime-kuma — each pinned to an explicit image version, never :latest, so a redeploy can't silently move you to a new major release. Bumping the version is a deliberate edit to the tag in docker-compose.yml.

Why secrets are generated per install

Run neo install ghost twice into two folders and you get two different database passwords. The scaffold is genuinely yours — nothing is shared between installs, and .env is written owner-only for that reason. Keep .env out of git; commit the other two.

From here to production

cd ghost
neo deploy --domain blog.example.com

Bundled databases run in a container on the same box as the app — fine for a blog or an internal tool. For real user data, point the template's DATABASE_URL at a managed database or a Neo shared service instead, so the database survives independently of the app container.

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

Get started free