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.
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