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

# Docker Compose Deployment

> Deploy Omni with Docker Compose for development or single-server production

Docker Compose is the simplest deployment option, all services are deployed on a single node.

For high availability, auto-scaling, or multi-region deployments, see [AWS Deployment with Terraform](/deployment/aws-terraform).

## Prerequisites

* Linux/macOS/Windows with WSL
* Docker 24.0+ with Compose v2 installed

| Resource | Recommended |
| -------- | ----------- |
| CPU      | 4 cores     |
| RAM      | 8 GB        |
| Storage  | 50 GB SSD   |

Memory and storage might need to be adjusted depending on the total data indexed.

## Step 1: Download Docker Compose Configuration

```bash theme={null}
# Create project directory
mkdir omni && cd omni

# Download the latest release
# See https://github.com/getomnico/omni/releases for available versions
curl -fsSL "https://github.com/getomnico/omni/releases/latest/download/omni-docker-compose.tar.gz" \
  -o omni-docker-compose.tar.gz
tar xzf omni-docker-compose.tar.gz
rm omni-docker-compose.tar.gz
```

<Tip>
  To download a specific version, replace `latest/download` with `download/v0.1.4` in the URL above.
</Tip>

## Step 2: Setup Environment

```bash theme={null}
cp .env.example .env
```

Edit `.env` and update the following variables:

```bash theme={null}
# Database (generate a secure password, e.g., openssl rand -base64 32)
DATABASE_PASSWORD=<your_db_password>

# Security (generate secure keys)
ENCRYPTION_KEY=$(openssl rand -hex 16)    # Must be at least 32 characters
ENCRYPTION_SALT=$(openssl rand -hex 8)    # Must be 16 characters

# Application
OMNI_DOMAIN=<your_domain_name>
APP_URL=https://<your_domain_name>
ACME_EMAIL=<your_email>

# Enabled Connectors
# Specify connector names as a comma-separated string
# Available: google, slack, atlassian, web, github, notion, hubspot, fireflies,
#            microsoft, filesystem, imap, linear, clickup, nextcloud, paperless
ENABLED_CONNECTORS=google,slack,web
```

See [Configuration Reference](/deployment/configuration) for all options.

## Step 3: Start Services

For convenience, define an alias:

```bash theme={null}
alias omni-compose="docker compose -f docker/docker-compose.yml --env-file .env"
```

Start Omni:

```bash theme={null}
omni-compose up -d
```

Monitor startup:

```bash theme={null}
omni-compose logs -f
omni-compose ps # all services should show "healthy"
```

Access at `https://<your_domain_name>`. First user becomes admin.

Once all services are healthy, follow the [Initial Setup](/deployment/initial-setup) guide to configure LLM providers, embeddings, and connectors.

### Self-hosted Local Inference

To run LLMs and/or embedding models locally alongside Omni, use the `docker-compose.local-inference.yml` overlay. It starts:

* A `llama.cpp` container serving an OpenAI-compatible LLM endpoint
* A HuggingFace TEI container serving an embedding endpoint

Start with local inference enabled:

```bash theme={null}
omni-compose -f docker/docker-compose.local-inference.yml up -d
```

Then in the admin panel, add an **OpenAI-compatible** LLM provider pointing at `http://llama-cpp:${LOCAL_INFERENCE_MODEL_PORT}`, and (optionally) the **Local** embedding provider at `http://embeddings:${LOCAL_EMBEDDINGS_PORT}/v1`.

The two containers are independent, so you can mix a cloud LLM with a local embedding model, or vice versa. GPU acceleration can be enabled by editing the overlay to pass through the appropriate device.

## Stopping Services

To stop all services:

```bash theme={null}
omni-compose down
```

To stop and remove all data (including the database):

```bash theme={null}
omni-compose down -v
```

<Warning>
  The `-v` flag will permanently delete all indexed data and settings.
</Warning>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Services won't start">
    Check Docker logs for errors:

    ```bash theme={null}
    omni-compose logs
    ```

    Common causes:

    * Port 3000 already in use
    * Missing environment variables
  </Accordion>

  <Accordion title="Cannot access the web UI">
    Verify the web service is running:

    ```bash theme={null}
    omni-compose ps omni-web
    ```

    Check if the port is accessible:

    ```bash theme={null}
    curl http://localhost:3000
    ```
  </Accordion>

  <Accordion title="Database connection errors">
    Ensure PostgreSQL is fully started:

    ```bash theme={null}
    omni-compose logs postgres
    ```

    Wait for the message: "database system is ready to accept connections"
  </Accordion>

  <Accordion title="AI responses not working">
    Check your LLM provider configuration in the admin panel:

    * Confirm whether you set the API keys
    * Review AI service logs:

    ```bash theme={null}
    omni-compose logs omni-ai
    ```
  </Accordion>
</AccordionGroup>

## Next Steps

<CardGroup cols={2}>
  <Card title="Initial Setup" icon="gear" href="/deployment/initial-setup">
    Configure LLMs, embeddings, and connectors
  </Card>

  <Card title="Connect Data Sources" icon="plug" href="/connectors/overview">
    Google, Slack, Confluence, etc.
  </Card>

  <Card title="Configuration Reference" icon="sliders" href="/deployment/configuration">
    All environment variables
  </Card>

  <Card title="User Management" icon="users" href="/admin/user-management">
    Add users and permissions
  </Card>
</CardGroup>
