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

# GCP

> Deploy Onyx on GCP Compute Engine

**Make sure your Google Cloud Platform account has the necessary permissions to create a VM instance.**

<Steps>
  <Step title="Create a VM instance">
    Create a VM instance with the appropriate resources. For this guide,
    we will use the recommended `e2-standard-4` 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 `Debian GNU/Linux 12` boot disk
    * Select the `e2-standard-4` machine type
    * Select `Allow HTTPS traffic` in the **Firewall** section
    * Configure storage following the Resourcing Guide

    <img className="rounded-image" src="https://mintcdn.com/danswer/CYnFh-BbVhq-Scr6/assets/deployment/setup_guides/gcp/CreateVmInstance.png?fit=max&auto=format&n=CYnFh-BbVhq-Scr6&q=85&s=fea2428c768964645bc0177fce46555a" alt="Create VM Instance" width="1043" height="314" data-path="assets/deployment/setup_guides/gcp/CreateVmInstance.png" />

    <img className="rounded-image" src="https://mintcdn.com/danswer/CYnFh-BbVhq-Scr6/assets/deployment/setup_guides/gcp/Instance.png?fit=max&auto=format&n=CYnFh-BbVhq-Scr6&q=85&s=96bca5d462e38cbfb40785d90f4d7ebe" alt="Instance Settings" width="744" height="947" data-path="assets/deployment/setup_guides/gcp/Instance.png" />

    <img className="rounded-image" src="https://mintcdn.com/danswer/CYnFh-BbVhq-Scr6/assets/deployment/setup_guides/gcp/Firewall.png?fit=max&auto=format&n=CYnFh-BbVhq-Scr6&q=85&s=679209c36390317bb7af8039965af307" alt="Firewall Settings" width="822" height="437" data-path="assets/deployment/setup_guides/gcp/Firewall.png" />
  </Step>

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

    <Tip>
      Save the **External IP** of the instance!
    </Tip>
  </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 Debian GNU/Linux 12, run the following:

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

    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    ```

    If using CentOS, Red Hat Linux, or similar, run the following:

    ```bash theme={null}
    sudo yum update -y

    sudo yum install docker -y
    sudo service docker start

    sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose

    sudo yum install 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>
