How to Self-Host Huly in 2026: Complete Setup Guide
What Huly Is
Huly (25K+ GitHub stars) is an all-in-one project management platform that combines what typically requires multiple separate tools:
- Issue tracking (Linear/Jira alternative): Projects, issues, sprints, roadmaps
- Docs and wikis (Notion alternative): Collaborative documents, structured knowledge base
- Team messaging (Slack alternative): Channels, direct messages, threading
- HR and processes: Team management, office hours, time tracking
Self-hosting Huly means all your team's project data, documents, and communication stays on your infrastructure. No per-seat SaaS fees for multiple tools.
What makes Huly different from alternatives: Most project management tools specialize. Huly is deliberately opinionated about being everything a development team needs in one place — you don't need separate subscriptions for issue tracking, docs, and chat.
Server Requirements
Huly is resource-heavy compared to simpler project management tools. This is because it bundles multiple services (database, search engine, real-time collaboration).
Minimum Requirements
- 2 vCPUs
- 4GB RAM
- 20GB storage
Recommended
- 4 vCPUs
- 8GB RAM
- 40GB storage
Recommended Servers (Hetzner)
| Team Size | Server | RAM | Monthly |
|---|---|---|---|
| 1-5 users | CPX21 | 4GB | $6.50 |
| 5-20 users | CPX31 | 8GB | $10 |
| 20+ users | CPX41 | 16GB | $19 |
Warning: Running Huly on less than 4GB RAM results in degraded performance and potential container crashes. If your server is at minimum spec, monitor memory usage closely.
Step 1: Prepare Your Server
# Update system packages
sudo apt update && sudo apt upgrade -y
# Install Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
# Verify Docker installation
docker --version
docker compose version
Step 2: Clone the Huly Self-Host Repository
Huly maintains a dedicated repository for self-hosting that contains the Docker Compose configuration and setup scripts.
git clone https://github.com/hcengineering/huly-selfhost.git
cd huly-selfhost
Step 3: Run the Setup Script
Huly's setup script generates your configuration files:
chmod +x setup.sh
./setup.sh
The script prompts you for:
- Host (domain or IP): Enter your domain (e.g.,
huly.yourdomain.com) or server IP - HTTP port: Default 80 (or your preferred port)
- Port: Default 8083 for internal service
The script generates:
huly.conf: Your configuration file with all settingsnginx.conf: Nginx configuration for routing
After setup, verify huly.conf contains your correct settings:
cat huly.conf
Step 4: Configure Nginx
If Nginx is installed on your host (outside Docker):
sudo ln -s $(pwd)/nginx.conf /etc/nginx/sites-enabled/huly.conf
sudo nginx -t
sudo systemctl reload nginx
If you're using Docker-based Nginx or Caddy as a reverse proxy, skip this step and configure your proxy manually (see Step 8).
Step 5: Start Huly
docker compose up -d
Huly starts several containers:
mongodb: Document database (core data storage)elastic: Elasticsearch (full-text search)minio: S3-compatible file storage (document attachments)huly-front: Web frontendhuly-account: Authentication and accounts servicehuly-collaboration: Real-time collaboration (CRDT)huly-transactor: Event processinghuly-rekoni: Document processingnginx: Internal routing
Initial startup takes 3-10 minutes as Elasticsearch initializes and containers reach healthy state.
Monitor startup:
docker compose logs -f
Look for log entries indicating each service is ready. The elastic container takes the longest to initialize.
Step 6: Verify Services Are Running
docker compose ps
All containers should show "running" status. Common issues:
Elasticsearch failing: Likely an OS-level setting. Fix:
sudo sysctl -w vm.max_map_count=262144
echo 'vm.max_map_count=262144' | sudo tee -a /etc/sysctl.conf
Then restart: docker compose restart elastic
MongoDB failing: Check disk space (df -h). MongoDB needs sufficient free space to initialize.
Memory issues: If containers keep restarting, your server may not have enough RAM. Upgrade to a larger instance.
Step 7: Access Huly
Navigate to http://your-server-ip (or the domain you configured).
Create the First Account
The first account you create becomes the workspace owner. Register with:
- Your email address
- A strong password
- Your name
Initial Workspace Configuration
After logging in:
- Create your first workspace: Give it your team or company name
- Invite team members: Settings → Members → Invite
- Create your first project: Projects → New Project
Step 8: Set Up HTTPS (Required for Team Use)
For team collaboration, HTTPS is essential — browsers block some real-time features on HTTP.
Option A: Caddy (Simplest)
Install Caddy on your host:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install caddy
/etc/caddy/Caddyfile:
huly.yourdomain.com {
reverse_proxy localhost:80
}
sudo systemctl restart caddy
Caddy automatically handles SSL certificates via Let's Encrypt.
Option B: Nginx + Certbot on Host
If you installed Nginx on the host (from Step 4), add SSL:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d huly.yourdomain.com
Certbot automatically configures SSL and sets up auto-renewal.
Update Huly Configuration After HTTPS
After setting up HTTPS, run the setup script again with your HTTPS URL, or manually edit huly.conf:
# In huly.conf, update HOST to your domain
HOST=huly.yourdomain.com
Then restart:
docker compose up -d
Step 9: Configure Email (Optional)
Email is needed for:
- Invitation emails when adding team members
- Password reset
- Notifications
SMTP Configuration
Edit huly.conf to add SMTP settings:
SMTP_HOST=smtp.yourprovider.com
SMTP_PORT=587
SMTP_USER=your@email.com
SMTP_PASS=yourpassword
SMTP_SENDER=huly@yourdomain.com
Then restart the account service:
docker compose restart huly-account
Free SMTP options:
- Brevo (Sendinblue): 300 emails/day free
- Mailgun: 1,000 emails/month free for 3 months
- AWS SES: $0.10 per 1,000 emails after free tier
Step 10: Configure Audio/Video Calls (Optional)
Huly's audio and video calling runs on LiveKit infrastructure.
Option A: Use Huly's LiveKit (Easiest)
By default, Huly uses Huly's shared LiveKit infrastructure for calls. No configuration needed.
Option B: Self-Host LiveKit
For full data sovereignty or high usage:
- Deploy LiveKit on a separate server:
# LiveKit Cloud alternative: self-host LiveKit OSS
docker run --rm -it \
-p 7880:7880 \
-p 7881:7881 \
-p 7882:7882/udp \
-v $PWD/livekit.yaml:/livekit.yaml \
livekit/livekit-server \
--config /livekit.yaml \
--node-ip YOUR_SERVER_IP
- Configure in
huly.conf:
LIVEKIT_HOST=wss://livekit.yourdomain.com
LIVEKIT_API_KEY=your-api-key
LIVEKIT_API_SECRET=your-secret
Managing Your Huly Instance
Update Huly
Huly releases updates regularly:
cd huly-selfhost
git pull
docker compose pull
docker compose up -d
Always check the release notes at github.com/hcengineering/huly-selfhost/releases before updating.
Backup
Huly stores data in Docker volumes. Back up:
MongoDB (all application data):
docker exec huly-mongodb-1 mongodump --out /backup/$(date +%Y%m%d)
docker cp huly-mongodb-1:/backup/$(date +%Y%m%d) /opt/backups/huly/
MinIO (file uploads):
# Use rclone to backup MinIO to S3
rclone sync minio-source:huly s3-remote:your-backup-bucket/huly
Elasticsearch (search indices): Can be rebuilt from MongoDB, so lower priority for backup.
Add Users
Team members are invited by email:
- Settings → Members
- Invite Member → Enter email
- The invited user receives a link to set up their account
Huly for Teams: What to Configure First
Workspace Structure
- Create Spaces for different team areas (Engineering, Design, Marketing)
- Within each Space, create Projects for active work
- Set up issue Categories and Priorities matching your workflow
Issue Tracking Workflow
Configure your team's workflow states:
- Settings → Classes → Issue → Add custom states
Default states: Todo → In Progress → Won't Fix / Cancelled → Done
Customize to match your team's workflow (e.g., add "In Review", "Blocked", "QA").
Communication
Huly's messaging replaces Slack for internal team communication:
- Channels: Team-wide announcements, engineering discussions
- Direct messages: Individual conversations
- Issue comments: Discussion anchored to specific issues
Cost Comparison
SaaS Equivalent Costs (Per Month, 10 Users)
| Tool | Purpose | Monthly |
|---|---|---|
| Linear Business | Issue tracking | $160 |
| Notion Team | Docs + wiki | $80 |
| Slack Pro | Team messaging | $75 |
| Total | $315/month |
Huly Self-Hosted
| Component | Monthly |
|---|---|
| Hetzner CPX31 (8GB) | $10 |
| Domain + SSL | ~$1 |
| Total | $11/month |
Annual savings: $315 × 12 - $11 × 12 = $3,648/year for a 10-person team.
The tradeoff is self-hosting operational overhead (updates, backups, monitoring). For most small teams, this is 1-2 hours per month.
Find More All-in-One Platforms
Browse all Linear, Notion, and Slack alternatives on OSSAlt — compare Huly, Plane, Outline, Docmost, and every other open source project management and collaboration platform with deployment guides.