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

# Digital Ocean

> Deploy Onyx on Digital Ocean Droplets

<Steps>
  <Step title="Create a Droplet">
    Create a Droplet with the appropriate resources. For this guide,
    we will use a recommended configuration with Docker pre-installed.

    <Note>
      Read our [Resourcing guide](/deployment/getting_started/resourcing) for more details.
    </Note>

    * Give your Droplet a descriptive name like `onyx-prod`
    * Select a region close to your users
    * Select the `Docker` image from the *Marketplace* tab
    * Choose a Droplet size with at least 4 vCPUs and 16GB RAM
    * Configure storage following the Resourcing Guide
    * Add your SSH key for secure access
  </Step>

  <Step title="Create the Droplet">
    Click **Create Droplet** and then view your Droplet details.

    <Tip>
      Save the **Public IP address** of the Droplet!
    </Tip>

    <img className="rounded-image" src="https://mintcdn.com/danswer/CYnFh-BbVhq-Scr6/assets/deployment/setup_guides/do/InstanceIp.png?fit=max&auto=format&n=CYnFh-BbVhq-Scr6&q=85&s=64ca76f450aa6d0f74ba00c77b153e3d" alt="Digital Ocean Public IP Address" width="2694" height="190" data-path="assets/deployment/setup_guides/do/InstanceIp.png" />
  </Step>

  <Step title="Point domain to the instance">
    <Note>
      If you don't have a domain, buy one from a DNS provider like [GoDaddy](https://www.godaddy.com/)
      or just skip HTTPS for now.
    </Note>

    To point our domain to the new instance, we need to add an `A` and `CNAME` record to our DNS provider.

    The `A` record should be the subdomain that you would like to use for the Onyx instance like `prod`.

    The `CNAME` record should be the same name with the `www.` in front resulting in `www.prod` pointing to the full
    domain like `prod.onyx.app`.

    <img className="rounded-image" src="https://mintcdn.com/danswer/bNCAyv_0mlX0VYMw/assets/deployment/arecord.png?fit=max&auto=format&n=bNCAyv_0mlX0VYMw&q=85&s=9fbd656a327d2671940f8be76191d32c" alt="DNS A Record Configuration" width="1597" height="605" data-path="assets/deployment/arecord.png" />

    <img className="rounded-image" src="https://mintcdn.com/danswer/bNCAyv_0mlX0VYMw/assets/deployment/cname.png?fit=max&auto=format&n=bNCAyv_0mlX0VYMw&q=85&s=486c85de9161b822a19b63ea5e7c4d9a" alt="DNS CNAME Record Configuration" width="1610" height="409" data-path="assets/deployment/cname.png" />
  </Step>

  <Step title="Install Onyx requirements">
    Since we selected the Docker Marketplace image, Docker and Docker Compose are already installed.

    We just need to install `git`:

    ```bash theme={null}
    sudo apt update
    sudo apt install -y git
    ```
  </Step>

  <Step title="Install and Configure Onyx">
    To install Onyx, we'll need to clone the repo and set the necessary environment variables.

    ```bash theme={null}
    git clone --depth 1 https://github.com/onyx-dot-app/onyx.git

    cd onyx/deployment/docker_compose
    cp env.prod.template .env
    cp env.nginx.template .env.nginx
    ```

    Fill out the `.env` and `.env.nginx` files.

    ```bash .env expandable theme={null}
    WEB_DOMAIN=<YOUR_DOMAIN>  # Something like "onyx.app"

    # If your email is something like "chris@onyx.app", then this should be "onyx.app"
    # This prevents people outside your company from creating an account
    VALID_EMAIL_DOMAINS=<YOUR_COMPANIES_EMAIL_DOMAIN>

    # See our auth guides for options here
    AUTH_TYPE=
    ```

    ```bash .env.nginx theme={null}
    DOMAIN=<YOUR_DOMAIN>  # Something like "onyx.app"
    ```
  </Step>

  <Step title="Launch Onyx">
    Running the `init-letsencrypt.sh` script will get us a SSL certificate from letsencrypt and launch the Onyx stack.

    ```bash theme={null}
    ./init-letsencrypt.sh
    ```

    <Warning>
      You will hit an error if you fail the letsencrypt workflow more than 5 times.
      You will need to wait 72 hours or request a new domain.
    </Warning>

    If you are skipping the HTTPS setup, start Onyx manually:

    ```bash theme={null}
    docker compose -f docker-compose.dev.yml -p onyx-stack up -d --build --force-recreate
    ```

    <Note>
      Give Onyx a few minutes to start up.

      You can monitor the progress with `docker logs onyx-stack-api_server-1 -f`.
    </Note>

    You can access Onyx from the instance Public IPv4 or from the domain you set up earlier!
  </Step>
</Steps>

## Next Steps

<CardGroup cols={2}>
  <Card title="Configure Authentication" icon="shield-check" href="/deployment/authentication/basic">
    Set up authentication for your Onyx deployment with OAuth, OIDC, or SAML.
  </Card>

  <Card title="More Onyx Configuration Options" icon="gear" href="/deployment/configuration/configuration">
    Learn about all available configuration options for your Onyx deployment.
  </Card>
</CardGroup>
