# Installing the Engine

> Set up private workers on your hardware.

**URL:** https://inference.sh/docs/private/installing
**Last updated:** 2026-09-24

---

Set up private workers on your hardware.

---

## Requirements

### Linux

- Ubuntu 20.04+ recommended
- Docker installed and running
- NVIDIA GPU with drivers (for GPU tasks)
- Outbound internet access

### macOS

On macOS, the engine uses a **bare runtime** by default — it runs the visor worker as a native process without Docker. Apple Silicon GPU tasks use Metal (MPS) when the app supports it.

Docker is not required on macOS unless you set `runtime: docker` in the engine config. Linux production deployments should continue to use Docker.

---

## Install

```bash
curl -fsSL https://engine.inference.sh/install.sh | sh
```

The installer places the `inferencesh-engine` binary in `~/.local/bin` (user install) or `/usr/local/bin` (root install) and creates an `engine` alias symlink. Ensure the install directory is on your `PATH`.

If Docker is not installed yet on Linux:

```bash
engine setup docker
```

---

## Configure

On first start, the engine prompts for an API key when `api_key` is missing from config. You can also pre-configure `~/.config/inferencesh/engine.yml` before starting — see [Configuration](/docs/private/config).

```yaml
# ~/.config/inferencesh/engine.yml
api_url: https://api.inference.sh
api_key: inf_your_key
name: my-server
```

Get an API key with **`engines:write`** scope at [settings → workspace → api keys](https://app.inference.sh/settings/team/keys).

---

## Start

```bash
engine serve
```

`engine serve` and bare `engine` both run the worker daemon. Pass flags such as `--name`, `--api-key`, and `--api-url` to override config for a single run.

---

## Verify

Check [Engines](https://app.inference.sh/engines) in the web app.

Your engine should appear as online.

---

## Run as service

For production, run the daemon under a process manager. Example systemd unit (`/etc/systemd/system/inferencesh-engine.service`):

```ini
[Unit]
Description=inference.sh engine
After=network-online.target docker.service

[Service]
Type=simple
User=inferencesh
ExecStart=/usr/local/bin/inferencesh-engine serve
Restart=on-failure
Environment=INFSH_NO_AUTOUPDATE=1

[Install]
WantedBy=multi-user.target
```

Adjust `User`, `ExecStart`, and paths to match your install. Then:

```bash
sudo systemctl daemon-reload
sudo systemctl enable inferencesh-engine
sudo systemctl start inferencesh-engine
```

---

## Updating the engine

The engine checks `dist.inference.sh` for new releases on startup and can update automatically. To upgrade safely from the web app or your own code, see [Engines API](/docs/api/rest/engines).

On the host:

```bash
engine update                  # latest release
engine update --version v1.10.15   # specific version
engine rollback               # previous version (if saved)
```

Disable startup auto-update with `--disable-auto-update` or `INFSH_NO_AUTOUPDATE=1`.

---

## Next

→ [Configuration](/docs/private/config)
