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

# Installation

> Step-by-step guide to deploy Verilock Identity on your infrastructure

## Prerequisites

Before you begin, ensure you have:

<Steps>
  <Step title="Docker installed">
    Docker Engine 24+ and Docker Compose v2+ are required.

    ```bash theme={null}
    docker --version   # Docker version 24.0+
    docker compose version  # Docker Compose version v2.20+
    ```

    <Tabs>
      <Tab title="Ubuntu/Debian">
        ```bash theme={null}
        curl -fsSL https://get.docker.com | sh
        sudo usermod -aG docker $USER
        ```
      </Tab>

      <Tab title="RHEL/CentOS">
        ```bash theme={null}
        sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
        sudo systemctl enable --now docker
        ```
      </Tab>

      <Tab title="macOS">
        ```bash theme={null}
        brew install --cask docker
        ```
      </Tab>
    </Tabs>
  </Step>

  <Step title="License key">
    A valid Verilock license key (`vrl_...`). Get one from the [Portal](https://verilock.io/portal/pricing).
  </Step>
</Steps>

## Quick Install

### 1. Download the bundle

Download from the [Portal Downloads](https://verilock.io/portal/downloads) page, or manually:

```bash theme={null}
mkdir verilock && cd verilock
```

### 2. Configure environment

Copy and edit the environment file:

```bash theme={null}
cp .env.selfhost .env
nano .env
```

<Warning>
  **Change all default passwords** before deploying to production. At minimum, update:

  * `DB_PASSWORD`
  * `REDIS_PASSWORD`
  * `MINIO_SECRET_KEY` and `AWS_SECRET_ACCESS_KEY` (must match)
</Warning>

**Required settings:**

| Variable               | Description                 | Example                   |
| ---------------------- | --------------------------- | ------------------------- |
| `VERILOCK_LICENSE_KEY` | Your license key            | `vrl_a6cd48bd...`         |
| `APP_URL`              | Public URL of your instance | `https://kyc.company.com` |
| `DB_PASSWORD`          | PostgreSQL password         | Use a strong password     |
| `REDIS_PASSWORD`       | Redis password              | Use a strong password     |

**Optional settings:**

| Variable      | Description                      | Default |
| ------------- | -------------------------------- | ------- |
| `APP_PORT`    | Port to expose the app           | `8080`  |
| `MAIL_MAILER` | Mail driver (smtp, ses, mailgun) | `smtp`  |

### 3. Start the services

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

This will:

1. Pull all required Docker images
2. Start PostgreSQL, Redis, MinIO, and the AML engine
3. Run database migrations automatically
4. Cache configuration
5. Start the application with queue workers

<Info>
  First startup takes 2-5 minutes as images are downloaded and the database is initialized.
</Info>

### 4. Verify the deployment

```bash theme={null}
# Check all containers are running
docker compose ps

# Check application health
curl http://localhost:8080/up

# View application logs
docker compose logs app -f
```

You should see:

```
==========================================
 Verilock Identity — Ready
 Version: 1.0.0
==========================================
```

### 5. Access the application

Open `http://localhost:8080` (or your configured `APP_URL`) in your browser.

* **Dashboard**: `/dashboard` — Create your first admin account
* **API**: `/api/v1/` — Ready to accept API calls
* **Developer Docs**: `/developer` — Built-in API documentation

## Post-Install

<CardGroup cols={2}>
  <Card title="Create API Keys" icon="key" href="/self-hosted/configuration#api-keys">
    Generate API keys to start integrating
  </Card>

  <Card title="Configure Mail" icon="envelope" href="/self-hosted/configuration#mail">
    Set up email for OTP and notifications
  </Card>

  <Card title="Set Up SSL" icon="lock" href="/self-hosted/ssl">
    Configure HTTPS with a reverse proxy
  </Card>

  <Card title="Configure Storage" icon="hard-drive" href="/self-hosted/configuration#storage">
    Set up document storage
  </Card>
</CardGroup>
