> ## Documentation Index
> Fetch the complete documentation index at: https://docs.openmote.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Self-hosting

> Run Roomote on your own server with the one-command installer or Docker Compose.

Roomote is designed to run well on a single host behind a Caddy reverse proxy.
The canonical, always up-to-date operator guide lives in
[`SELF_HOSTING.md`](https://github.com/RooCodeInc/OpenRoomote/blob/develop/SELF_HOSTING.md)
in the repository; this page summarizes the public setup path and the checks
that usually matter first.

Start here when you want an operator-managed deployment for your team. By the
end of setup, you should have a reachable Roomote URL, sign-in, a
source-control provider, an inference provider, at least one environment, and a
first reviewable Roomote task.

## One-command install

SSH into a fresh Ubuntu or Debian amd64 server (4 GB+ RAM) and run:

```sh theme={null}
curl -fsSL https://raw.githubusercontent.com/RooCodeInc/OpenRoomote/develop/deploy/install.sh | bash
```

The installer brings up the full stack from published images and prints a setup
link. Open it in a browser and the wizard walks you through the rest: sign-in
provider, source-control provider, inference provider and API key,
communications provider, repositories, and a first task.

No DNS setup is needed to try it out; pass `--domain roomote.example.com` for a
production install on your own domain.

## Setup checklist

Have these ready before the wizard asks for them:

* a public HTTPS URL for the deployment, especially when source-control or chat
  callbacks need to reach it
* a sign-in provider for the people who will use the deployment
* a source-control provider account with permission to install or configure the
  app for the repositories Roomote should reach
* an inference provider API key, such as OpenRouter, Anthropic, or OpenAI
* a communications provider workspace, such as Slack, Microsoft Teams, or
  Telegram, if your team wants to start work from chat
* at least one repository that can become the first Roomote environment

## Day-2 operations

The installer also sets up the `roomote` host CLI for common operations:

```sh theme={null}
roomote upgrade   # pull and roll out newer images
roomote backup    # back up the database and configuration
roomote logs      # tail service logs
```

## Deployment modes

* **One-command install** — `deploy/install.sh` on an existing server, using
  published GHCR images.
* **Local development** — `pnpm dev` runs the services from your checkout with
  PM2 for fast source edits.
* **Production Compose with Caddy** — `docker-compose.production.yml` adds a
  Caddy container as the HTTPS entrypoint for your app and preview domains, and
  runs the containerized stack in production mode with per-install secrets
  (locally or on a server).

## Requirements

* An inference provider API key (OpenRouter, Anthropic, OpenAI, and others).
* A GitHub account — the setup wizard creates the GitHub App for you.
* For Slack, Microsoft Teams, and Telegram: a workspace where you can install
  an app; the setup wizard prefills the Slack app manifest for you.

## Verify the deployment

After setup, run a small task that uses the first environment. A healthy
deployment should let you:

* sign in from the public Roomote URL
* connect source control and see the expected repositories
* create or select an environment
* start a task from the dashboard or chat
* inspect the task transcript, logs, and any generated diff or artifact
* open a preview when the task starts a web app

## Common issues

* **Callbacks fail.** Confirm the deployment has a public HTTPS URL and that
  the source-control or communications provider is using that exact URL.
* **The first task cannot clone a repository.** Check source-control
  installation scope and repository permissions.
* **The agent cannot run useful commands.** Add missing services, environment
  variables, setup commands, or tool versions to the environment.
* **Chat messages do not reach Roomote.** Confirm the app is installed, invited
  to the channel, and using the current callback URL.
