TL;DR (On-Premises)
On-Premises Quick Deployment Guide
Deploy Hivel on your own infrastructure (bare metal, VM, or any cloud instance) using Docker for services and self-managed PostgreSQL for the database. This condensed version covers all steps without omitting any part of the process.
Refer to the full On-Premises Setup Guide for additional context or troubleshooting.
Prerequisites
Step 1: Provision the Host
Location: Your hypervisor, data center, or cloud console (AWS, Azure, GCP, etc.)
Create a host with:
4 vCPU, 16GB RAM or larger
Ubuntu 22.04 LTS
50GB+ available disk storage
Open inbound ports: 22, 80, 3000, 4317 (only while integrating Claude Code), 5432
Record the host's private IP address (needed later)
Contact your Hivel representative if you expect high integration or commit volume.
Step 2: Install Docker, Docker Compose, AWS CLI, and PostgreSQL
Location: The host (via SSH)
Run:
Log out and back in for Docker group membership to take effect.
Required versions: Docker ≥ 26.0, Docker Compose ≥ 2.25.0, AWS CLI v2.x
If
docker psstill requiressudo, runnewgrp dockeror reboot, then retry.
Step 3: Configure AWS CLI
Location: The host
Run:
Expect a JSON response with Account, UserId, and Arn fields. If credential errors occur, check cat ~/.aws/credentials.
Step 4: Set Up PostgreSQL and Create the insightly Database
Location: The host (or a dedicated database host for production)
For production, Hivel recommends a dedicated database host with its own backup routine. Set up regular pg_dump cron jobs before production.
Run:
Supported versions: PostgreSQL 12, 13, 14, or 15
Set the superuser password:
Configure PostgreSQL for remote connections. Edit /etc/postgresql/<version>/main/postgresql.conf:
Edit /etc/postgresql/<version>/main/pg_hba.conf to allow connections only from your host:
Replace <HOST_PRIVATE_IP> with the private IP from Step 1. Restart and configure firewall:
Create the application database:
Verify connectivity:
Success: you see the insightly=# prompt with no errors.
Record for later: database host/IP, port 5432, superuser postgres, and the password you set.
Step 5: Download the Installer and Add the License File
Location: The host
Run:
Verify ls shows: deploy.sh, config/, license/, services/, and scripts/ directories.
If the AWS CLI download fails with "Access Denied," confirm with Hivel support that your credentials cover both ECR and S3 read access.
Copy your license files:
The source page says
cp license_signed.json docker-onprem-installer/license/, but the package you just extracted ishivel-onprem/(per the commands above), there is nodocker-onprem-installer/directory. Flagged for the docs team, the command above uses the current directory name.
Step 6: Test AWS ECR Access
Location: The host
Run:
Expected result: Login Succeeded.
If your organization prohibits direct AWS ECR access, you can mirror Hivel's images into your own private registry (Harbor, Nexus, GitLab Registry, etc.) instead, updating the ECR_REGISTRY and AWS_REGION variables in services/vm/docker-compose.yml and deploy.sh.
Step 7: Configure the Environment File, Phase 1 (Superuser Credentials)
Run on: the host
Set:
Password rules: Wrap passwords containing
()[]$&|;#<>*or spaces in single quotes. Write literal$as$$. Literal single quotes are not allowed.
Step 8: Test the Database Connection
Location: The host
Run:
Expect: insightly=# prompt with no errors. Do not continue until this works.
Step 9: Run the Database Migration
Location: The host
This runs once only, before any other services start. Confirm .env contains Phase 1 (superuser) credentials:
Ensure Docker is ready:
If docker run hello-world still fails, log out and back in, then retry. Once Docker works, run the migration:
Wait 1 to 2 minutes for completion, then verify:
Success: exit code 0, logs showing "Successfully applied X migration(s)" and application user created, container status "Exited (0)". Do not proceed if migration failed.
Step 10: Switch the Environment File to Application Credentials (Phase 2)
Location: The host
Run:
Update:
The application user and default password are created automatically by flyway-migration (Hivel provides the default password separately). Change the password before production and never commit a real password to source control.
Step 11: Deploy All Services
Location: The host
Run:
Contact support@hivel.ai for the full list of services.
Verify all services are up:
Available deploy.sh commands:
For manual control, use Docker Compose directly instead of deploy.sh (advanced option).
Step 12: Set Up Log Rotation
Location: The host
Run:
This creates /var/log/hivel/, adds a daily cron job at midnight, and configures 7-day log retention. Logs appear at /var/log/hivel/<service-name>/<service-name>-YYYY-MM-DD.log.
Step 13: Verify the Deployment
Location: The host (command line), then a browser
Run:
All containers should show Up/healthy and each endpoint should return a healthy response.
In your browser, access the app using one option:
Direct host IP (testing only, no HTTPS):
http://<host-ip>:3000Your own load balancer/reverse proxy (advanced): place one in front on ports 80 and 3000
Caddy with automatic HTTPS (recommended for production): see Step 14
Deployment is complete when: all containers are healthy, all endpoints return healthy responses, the UI loads with no console errors, and at least one integration (Jira, GitHub, or GitLab) is connected and shows data after Step 15.
Step 14 (Optional but Recommended): Enable HTTPS with Caddy
Locations: DNS provider → Firewall/security group → The host
The Hivel UI serves plain HTTP on port 3000. Browsers restrict crypto.randomUUID (used on the sign-up page) to secure contexts (HTTPS or localhost). Accessing http://<host-ip>:3000 directly will fail sign-up.
In your DNS provider:
Create an A record pointing your subdomain (e.g., hivel.yourcompany.com) to the host's public/reachable IP.
In your firewall/security group: Open port 80 (for Let's Encrypt HTTP-01 validation) and port 443 (HTTPS).
On the host via SSH:
Wait for a log line confirming the certificate was obtained. Open https://hivel.yourcompany.com in a browser.
No domain yet? Use a self-signed certificate for testing only (never production). Replace the domain block with
tls internal. See the full guide's HTTPS Setup with Caddy page (Option B) for details on upgrading to a real domain later.
Manage the container later:docker logs -f caddy, docker restart caddy, docker stop caddy, docker rm -f caddy .The app remains reachable on :3000 directly. Certificates persist in the caddy_data volume.
Step 15: Sign Up and Connect Integrations
Location: A browser, against the Hivel UI
Go to
http://<host-ip>:3000/signup(or your HTTPS domain).Enter your email, create a password, and verify your email address.
Log 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.
On the Integration Setup page, connect the tools you need.
Integration examples:
GitLab: your GitLab domain URL, access-token user's name and email, your GitLab access token, API version
/api/v4. Verify under Settings > Repository in Hivel; you should see repositories being analyzed.Jira: your Jira URL (Cloud:
https://yourcompany.atlassian.net), 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 the Integrations page for the full list of supported integrations.
🔗IntegrationsInitial data sync time depends on historical data volume. For issues, see the full guide's Troubleshooting section or contact support@hivel.ai.
TroubleshootingDeployment complete. See the full On-Premises Setup Guide for additional details.
Last updated