> For the complete documentation index, see [llms.txt](https://docs.hivel.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hivel.ai/self-managed-hivel-deployment/virtual-private-cloud/aws/dns-setup-aws/setup-and-prerequisites.md).

# Setup and Prerequisites

DNS Setup (AWS)

## Overview

Enable HTTPS for the Hivel Web UI using Caddy, a lightweight reverse proxy. This guide covers prerequisites and two setup paths:

* **Option A (Recommended):** Domain + Let's Encrypt for production
* **Option B (Temporary):** Self-signed certificate for testing

***

## Why HTTPS Is Needed?

The Hivel UI container serves traffic on port 3000 over plain HTTP. Modern browsers restrict certain security-sensitive APIs-such as `crypto.randomUUID`, used on sign-up and KYC pages-to secure contexts only (HTTPS or localhost).

Accessing the UI directly via `http://<vm-public-ip>:3000` does not satisfy this requirement, resulting in a `crypto.randomUUID is not a function` error on affected pages.

[Caddy](https://caddyserver.com/) is a lightweight reverse proxy that terminates TLS in front of the UI container, forwarding decrypted traffic to port 3000 internally. It runs as a Docker container, so no additional software installation is needed-Docker is already a prerequisite for this deployment.

***

## General Prerequisites (Both Options)

* VM is up and running with the Hivel UI container healthy on port 3000 (see Verification and Access)
* Docker is installed on the VM (already required)
* SSH access to the VM

***

## Option-Specific Prerequisites

### **Option A (Domain + Let's Encrypt):**

* You have or can obtain a domain or subdomain (e.g., `hivel.yourcompany.com`)
* You can add DNS A records for your domain
* Go to: Option A: Domain + Let's Encrypt

### **Option B (Self-Signed HTTPS – Temporary Testing Only):**

* For testing before domain/DNS setup is complete
* **Not recommended for client-facing production use** - browsers will show an untrusted-certificate warning
* Go to: Option B: Self-Signed.

***

#### Next Steps

**For testing/development:** Use [Option B](/self-managed-hivel-deployment/virtual-private-cloud/aws/dns-setup-aws/setup-and-prerequisites/advanced-temporary-option-b-no-domain-yet-self-signed.md) .

**For production or when a domain becomes available:** Upgrade to [Option A](/self-managed-hivel-deployment/virtual-private-cloud/aws/dns-setup-aws/setup-and-prerequisites/recommended-option-a-domain-+-lets-encrypt.md): Domain + Let's Encrypt (see [Upgrading from Option B to Option A](/self-managed-hivel-deployment/virtual-private-cloud/aws/dns-setup-aws/setup-and-prerequisites/upgrading-from-option-b-to-option-a.md) for migration steps).

{% columns %}
{% column %} <a href="/self-managed-hivel-deployment/virtual-private-cloud/aws/dns-setup-aws.md" class="button primary" data-icon="backward">Back to DNS Setup</a>
{% endcolumn %}

{% column %}

{% endcolumn %}

{% column %} <a href="/self-managed-hivel-deployment/virtual-private-cloud/aws/dns-setup-aws/setup-and-prerequisites/recommended-option-a-domain-+-lets-encrypt.md" class="button primary" data-icon="forward">Option A - Domain + Let's Encrypt</a>
{% endcolumn %}
{% endcolumns %}
