TL;DR (Azure)
Azure Quick Deployment Guide
Deploy Hivel on your own Azure account using a Virtual Machine for compute and Azure Database for PostgreSQL (Flexible Server) for the database. This condensed guide covers the same steps in the same order without omitting any part of the deployment process. Refer to the full Azure Setup Guide for additional context, detailed explanations, or troubleshooting guidance.
Prerequisites
Important: Your VM and database run on Azure, but Hivel's Docker images and installer package are distributed via AWS (ECR and S3). You need both Azure CLI and AWS CLI, plus credentials for both platforms, to complete this guide.
If you lack any of these, contact support@hivel.ai before starting. Deployment cannot complete without them.
Step 1: Provision an Azure Virtual Machine
In Azure Portal:
Create a new Virtual Machine with:
Image: Ubuntu Server 22.04 LTS
VM size: Standard_D4s_v5 (4 vCPU, 16GB RAM) or larger. For high integration or commit volume, consult Hivel before finalizing sizing
Storage: 50GB Premium SSD managed disk
Network Security Group: allow inbound on ports 22, 80, 443, 3000, 4317 (required only while integrating Claude Code), and 5432
Note the VM's public and private IP address
Step 2: Install Required Software
On the VM, via SSH:
Required versions: Docker >= 26.0, Docker Compose >= 2.25.0, any current Azure CLI 2.x, any current AWS CLI v2.x. Log out and back in for the Docker group change to take effect.
If
docker psstill asks forsudo, runnewgrp dockeror reboot the VM.
Step 3: Configure the AWS CLI
On the VM:
Hivel's Docker images and installer package are hosted on AWS even though your infrastructure runs on Azure.
Expect a JSON object with Account, UserId, and Arn fields. If it fails with "Unable to locate credentials," re-run aws configure and check cat ~/.aws/credentials.
Step 4: Provision Azure Database for PostgreSQL
In Azure Portal:
Create Azure Database for PostgreSQL > Flexible Server with:
Version: PostgreSQL 12 or higher
Compute tier: General Purpose, Standard_D2s_v3 or larger
Storage: 20GB or more
Admin username:
postgres(fixed, do not change)Admin password: choose a strong password and save it
Configure server parameters: go to Server parameters, set
require_secure_transporttoOFF(this deployment uses network-level isolation as the security boundary), save. If marked "Static," restart the serverNote: server name/host (e.g.,
myserver.postgres.database.azure.com), port (usually 5432), admin username, admin passwordConfigure networking on the Networking page:
Private access (VNet Integration): recommended for production if the VM is in the same virtual network
Public access: with a firewall rule restricting access to the VM's public IP (rule name
allow-vm, start/end IP = VM's public IP)
Expected: server shows Available status.
Step 5: Create the insightly Database
On the VM (or Azure Portal):
insightly is Hivel's fixed database name, not a placeholder to rename.
If you only have console access, use Azure Portal > your PostgreSQL server > Query editor (preview), connect with admin credentials, and run CREATE DATABASE insightly;.
If creation fails: a connection timeout means the firewall rule hasn't been added (recheck Step 4); an SSL-related error means sslmode=require was omitted.
Step 6: Download the Installer and License Files
On the VM:
Confirm with ls that deploy.sh, config/, license/, services/, and scripts/ are present. Get your exact S3 bucket path or pre-signed URL from Hivel support. If download fails with "Access Denied," your AWS credentials lack S3 permission; confirm with Hivel which credentials to use or request a pre-signed URL.
Copy license files:
Locate your license files (they may not be in the
license/directory initially), then copy them to/opt/hivel-onprem/license/:
Step 7: Test AWS ECR Access
On the VM:
Hivel's Docker images are stored in AWS ECR at 730335373269.dkr.ecr.ap-south-1.amazonaws.com.
Expected: Login Succeeded. deploy.sh handles ECR authentication automatically from here on.
Using your own ECR instead is an advanced path: push Hivel's images to your own AWS repositories and update image URLs in services/vm/docker-compose.yml plus ECR_REGISTRY/AWS_REGION variables in deploy.sh. Only do this if your organization requires images in your own infrastructure.
Step 8: Configure the Environment File: Phase 1 (Migration Credentials)
On the VM:
Set the database variables to your PostgreSQL server's admin credentials:
If credentials are stored in Azure Key Vault:
Passwords containing
()[]$&|;#<>*or spaces must be wrapped in single quotes. A literal$must be written as$$even inside single quotes because Docker Compose interpolates$VAR. A literal single quote in the password is not allowed; choose a different password if needed.
Step 9: Verify Database Connectivity
On the VM:
Expected result: an insightly=# prompt with no errors. Do not continue until this works.
Step 10: Run the Database Migration
On the VM:
This runs once only, before any other services start. Verify .env currently holds Phase 1 (admin) credentials first; running migration with limited privileges will fail.
Wait 1 to 2 minutes for completion, then verify:
Success: exit code 0, logs containing "Successfully applied X migration(s)" and "user <user> created", container status "Exited (0)". Do not proceed if migration failed or rerun on an already-initialized database.
Step 11: Switch the Environment File to Application Credentials: Phase 2
On the VM:
Update these values:
The default application username and password are created by flyway-migration. If you customized the password before running migration, use that same password here. All services from this point on connect using this application user, not the server admin account.
Step 12: Deploy All Services
On the VM:
Available deploy.sh commands:
For specific service guidance, contact support@hivel.ai. Deploying with Docker Compose directly is available as an advanced alternative if you need custom orchestration.
Step 13: Set Up Log Rotation
On the VM:
This creates /var/log/hivel/, adds a daily cron job at midnight, and configures rotation for all Docker containers with 7-day retention. Logs live at /var/log/hivel/<service-name>/<service-name>-YYYY-MM-DD.log.
Step 14: Verify the Deployment
On the VM, then a browser:
All containers should show Up/healthy, and each endpoint should return a healthy response.
Then access the app via one of these options:
Direct VM public IP (testing/pilots only, no load balancing or HTTPS unless you also do Step 15):
http://<vm-public-ip>:3000Azure Load Balancer (stable, no custom domain or HTTPS yet): create a Standard Load Balancer, configure a backend pool pointing to the VM on ports 80 and 3000, configure health probes and load balancing rules, access via the Load Balancer's public IP or DNS name
Azure DNS + Load Balancer (recommended for production): create a Load Balancer or Application Gateway, create an Azure DNS zone for your domain, create an A record pointing to it, configure an SSL/TLS certificate (Application Gateway or Key Vault-managed). Access via
https://your-domain.com. Alternatively, use Caddy (Step 15) for a lighter-weight HTTPS solution on smaller deployments
Deployment is complete when: all containers are healthy, every endpoint returns healthy, the app is reachable at your configured address, and at least one integration (Jira/GitHub/GitLab) is connected and shows data after Step 16.
Step 15 (Optional but Recommended): Enable HTTPS with Caddy
In Azure Portal, then on the VM:
Modern browsers restrict crypto.randomUUID, used on the sign-up page, to secure contexts (HTTPS or localhost). This is a lighter-weight alternative to standing up a full Load Balancer or Application Gateway, suitable for smaller deployments and pilots.
In Azure Portal: create an A record pointing your subdomain (e.g., hivel.yourcompany.com) at the VM's public IP. Use an Azure Static Public IP so the address doesn't change on restart.
In the VM's Network Security Group: add inbound rules for port 80 (source Any, required for Let's Encrypt's HTTP-01 validation) and port 443 (source Any, or your office/VPN CIDR).
On the VM:
Wait for a log line confirming the certificate was obtained, then open https://hivel.yourcompany.com in a browser. Expect a trusted certificate with no warnings.
No domain yet? Use a temporary self-signed certificate for testing only; see the full DNS Setup guide's Option B, then upgrade once you have a domain.
Step 16: Sign Up and Connect Integrations
In a browser, at the Hivel UI:
Go to
http://<vm-public-ip>:3000/signup(or your HTTPS domain), enter your email, create a password, and complete email verificationLog in. You'll be redirected to the Company Profile Creation page
Fill in your organization's details, select an approval method for new users, and continue to the Integration page
Connect the tools you need:
GitLab: your GitLab domain URL, the access-token user's name and email, your GitLab access token, API version
/api/v4. Verify under Settings > Repository; you should see repositories being analyzedJira: your Jira URL (Cloud:
https://yourcompany.atlassian.net), the access-token user's name and email, your Jira access token, API version/rest/api/3/SonarQube: your SonarQube instance URL and access token
See Integrations for the full list of supported integrations.
🔗IntegrationsInitial data sync time depends on the volume of historical data. For issues during setup, see Troubleshooting or contact support@hivel.ai.
TroubleshootingDeployment complete. See the full Azure Setup Guide for detailed instructions.
Last updated