> ## 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.

# Azure

> Deploy Onyx on Azure Virtual Machines

<Steps>
  <Step title="Create a VM instance">
    Create a VM instance with the appropriate resources. For this guide,
    we will use the recommended `Standard_D4s_v3` instance.

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

    * Give your instance a descriptive name like `onyx-prod`
    * Select the `Ubuntu Server 20.04 LTS` image
    * Select the `Standard_D4s_v3` size
    * Select `Allow selected ports` and check `HTTPS (443)` in the *Inbound port rules* section
    * Configure storage following the Resourcing Guide

    <img className="rounded-image" src="https://mintcdn.com/danswer/CYnFh-BbVhq-Scr6/assets/deployment/setup_guides/azure/create-vm.png?fit=max&auto=format&n=CYnFh-BbVhq-Scr6&q=85&s=1fbbc41873eff4ca3b30144a43e84caa" alt="Create VM Instance" width="5108" height="2474" data-path="assets/deployment/setup_guides/azure/create-vm.png" />

    <img className="rounded-image" src="https://mintcdn.com/danswer/CYnFh-BbVhq-Scr6/assets/deployment/setup_guides/azure/create-vm-2.png?fit=max&auto=format&n=CYnFh-BbVhq-Scr6&q=85&s=8a7e041b416f73087e0f33652cf71b64" alt="Instance Settings" width="5108" height="2474" data-path="assets/deployment/setup_guides/azure/create-vm-2.png" />

    <img className="rounded-image" src="https://mintcdn.com/danswer/CYnFh-BbVhq-Scr6/assets/deployment/setup_guides/azure/create-vm-3.png?fit=max&auto=format&n=CYnFh-BbVhq-Scr6&q=85&s=e7685d3ba825507141e8ec63114e3867" alt="Network Settings" width="5108" height="2474" data-path="assets/deployment/setup_guides/azure/create-vm-3.png" />
  </Step>

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

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

    <img className="rounded-image" src="https://mintcdn.com/danswer/CYnFh-BbVhq-Scr6/assets/deployment/setup_guides/azure/instance-ip.png?fit=max&auto=format&n=CYnFh-BbVhq-Scr6&q=85&s=c39e5e7128e761edc1e7ee7e17fb6e24" alt="Azure Public IP Address" width="2234" height="859" data-path="assets/deployment/setup_guides/azure/instance-ip.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">
    Onyx requires `git`, `docker`, and `docker compose`.

    To install these on Ubuntu Server 20.04 LTS, run the following:

    ```bash theme={null}
    sudo apt-get update
    sudo apt-get install -y ca-certificates curl

    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 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>
