Tutorial

Huly: replace Linear, Notion and Slack on your VPS

Automation7 min read8 steps

Running a development team often means juggling three or four separate SaaS subscriptions: an issue tracker, a wiki, a chat tool, a sprint board. Huly brings all of this into a single application under the EPL-2.0 licence, self-hosted on your own VPS. One server, zero seat fees, and your data stays inside your infrastructure.

Contents· Why consolidate issues, docs and chat into one tool1/10
  1. 01Why consolidate issues, docs and chat into one tool
  2. 02What Huly consolidates in your infrastructure
  3. 03Exact requirements: what Huly actually consumes
  4. 04Deploy Huly on a VPS in five steps
  5. 05Post-installation: backup, monitoring and version updates
  6. 06Set up backup, monitoring and updates
  7. 07Troubleshooting: four common errors and their fixes
  8. 08Common errors and fixes
  9. 09Which teams does Huly suit best?
  10. 10Huly vs Linear + Notion + Slack: what you gain and what you take on

Why consolidate issues, docs and chat into one tool

A Linear subscription, a Notion workspace, a Slack plan and GitHub Projects can easily add up to €40–80 per developer per month. Beyond cost, each tool creates a silo: a decision made in chat is never linked to the issue it triggered, and the wiki lives separately from the kanban board. Huly is released under the EPL-2.0 licence, which is highly permissive for self-hosting and allows commercial deployment without any per-seat royalty.

What Huly consolidates in your infrastructure

  • Issues and sprints — create tickets, organise them into sprints and roadmaps with built-in Kanban boards, all without leaving the application.
  • Wiki and documentation — write structured pages directly in Huly; docs are versioned and linked to the relevant projects.
  • Real-time chat — channel and thread-based messaging with built-in video calls, replacing Slack without an additional subscription.
  • Bidirectional GitHub sync — Huly issues are mirrored in GitHub and vice-versa; GitHub pull requests appear automatically in their linked issues.
  • Time tracking — log time spent on each issue directly from the interface, with no third-party extension needed.

Exact requirements: what Huly actually consumes

Huly is a resource-intensive application. The official huly-selfhost repository specifies a hard minimum of 2 vCPU and 8 GB RAM — below this threshold, services may fail to start or stop responding under load. For a production deployment with an active team, 4 vCPU and 16 GB RAM are recommended. On the storage side, plan for at least 20 GB of Docker volume space: Elasticsearch alone can occupy 4–6 GB after a few weeks of indexing, and the file store (MinIO) grows with attachments. The stack runs several concurrent services — front, account, transactor, workspace, collaborator, elasticsearch, cockroachdb, redpanda and minio. A ServOrbit Power VPS (4 vCPU, 8 GB RAM) handles teams of up to fifteen people; move to the Pro tier (8 GB+) for thirty or more.

Deploy Huly on a VPS in five steps

  1. Clone the official repository

    Fetch the configuration from the public repository: git clone https://github.com/hcengineering/huly-selfhost.git && cd huly-selfhost. The repository includes compose.yml and the setup.sh script, which generates the nginx configuration and .env file automatically.

  2. Run the setup script

    Run ./setup.sh and enter your subdomain address (e.g. huly.example.com). The script generates huly_v7.conf containing the version (HULY_VERSION), JWT secrets, MinIO credentials and volume paths. Enable the nginx configuration with sudo ln -s $(pwd)/nginx.conf /etc/nginx/sites-enabled/huly.conf && sudo nginx -s reload.

  3. Start the services with Docker Compose

    Bring up the full stack with docker compose up -d. On first start, Elasticsearch and CockroachDB initialise their data stores; allow two to three minutes before the interface becomes available. Check container status with docker compose ps — all services should show as running.

  4. Configure the HTTPS reverse proxy

    The setup.sh script already generates an nginx configuration with TLS. If you use Caddy or Traefik, point the reverse proxy to the internal port of the front service (default 8083). Make sure WebSockets are correctly proxied via the Upgrade and Connection headers — without them, real-time messaging and video calls will not work.

  5. Create the first workspace and invite your team

    Open your subdomain in a browser, create an administrator account, then generate your first workspace. From the workspace settings, send email invitations to your team members. No seats are counted: you only pay for the storage and bandwidth consumed on your VPS.

To enable GitHub synchronisation, go to Settings → Integrations in your Huly workspace. Connect your GitHub organisation in a few clicks via OAuth. Issues created in Huly then appear automatically in the matching repository, and GitHub pull requests are linked to their corresponding issues — no webhook configuration required.

Post-installation: backup, monitoring and version updates

Once Huly is running, three maintenance tasks are worth setting up immediately.

Set up backup, monitoring and updates

  1. Automate backups

    The repository ships two ready-to-use scripts: backup-create.sh and backup-restore.sh. Run ./backup-create.sh from the huly-selfhost folder to archive all volumes (CockroachDB, Elasticsearch, MinIO). Schedule the script via cron — for example 0 3 * * * /opt/huly-selfhost/backup-create.sh >> /var/log/huly-backup.log 2>&1 for a daily backup at 3 am. Store archives off the VPS (S3, Hetzner bucket or a remote disk). For major migrations (e.g. v0.6.x → v0.7.x), always consult MIGRATION.md before restoring.

  2. Monitor container health

    Set up a simple alert by running docker compose ps in a cron job every five minutes, or deploy a lightweight tool such as Uptime Kuma (itself available as a self-hosted app on the same VPS). Prioritise monitoring the account, transactor and elasticsearch services — these are responsible for the most visible failures. Logs for each service are available via docker compose logs -f <service-name>.

  3. Update to a new version

    Before each update, read MIGRATION.md for the target version. If the section says "No changes required", the procedure is straightforward: edit HULY_VERSION in huly_v7.conf with the new tag (e.g. v0.7.426), then run git pull && docker compose pull && docker compose up -d. For a major upgrade (0.6.x → 0.7.x), follow the documented migration steps carefully, especially around section v0.7.204 — a direct in-place upgrade locks MongoDB data in a way that is difficult to reverse.

Troubleshooting: four common errors and their fixes

The most common issues when deploying Huly all share the same root cause: a service that has not finished initialising, or an incomplete network configuration.

Common errors and fixes

  • Sign-up fails silently when creating an account. Likely cause: the account service is unreachable or misconfigured. Check its logs with docker compose logs -f account — a callback URL error or a connection problem to CockroachDB will appear clearly. Make sure HULY_HOST in your configuration exactly matches the published subdomain.
  • Elasticsearch does not start (exit code 137 or OOMKilled). Cause: insufficient memory. Elasticsearch requires at least 4 GB of RAM for itself at startup. If your VPS is running low, add ES_JAVA_OPTS=-Xms1g -Xmx1g to the environment section of the elasticsearch service in compose.yml to cap its Java heap at 1 GB — at the cost of some search performance.
  • MinIO inaccessible — attachments fail to load. Cause: volume permission issues or an internal DNS resolution problem between containers. Check that the minio service is in a running state with docker compose ps. If uploaded files disappear after a restart, verify that the volume path in huly_v7.conf is a valid absolute path on the host, and that permissions are correct (chown -R 1000:1000 /var/huly/files).
  • WebSockets not working — messaging and video calls are frozen. Cause: the reverse proxy is not forwarding Upgrade: websocket and Connection: Upgrade headers. In nginx, add explicitly proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; inside the location block. With Caddy, the reverse_proxy directive handles WebSockets automatically in recent versions.

Which teams does Huly suit best?

Huly is a good fit for agencies and technical teams of 5 to 50 people who want to reduce their SaaS footprint without losing features. It also suits teams handling sensitive data for whom keeping communications and documentation on-premises is a regulatory or contractual requirement. If per-seat subscription costs are becoming a growth bottleneck, a single VPS is enough to cover the full collaborative toolset.

Huly vs Linear + Notion + Slack: what you gain and what you take on

Scroll the table

Monthly cost (10-person team)~€600 (combined subscriptions)~€30 (ServOrbit VPS)
Data hostingWith SaaS vendorsOn your own infrastructure
Server maintenanceNoneUpdates + backups to manage
CustomisationLimited to pricing tiersFull (open source EPL-2.0)
Resources requiredBrowser onlyVPS 2 vCPU / 8 GB RAM minimum

To go further with workflow automation, Huly can be paired with a self-hosted CI/CD pipeline. See our guide on Woodpecker CI and Forgejo to set up a complete pipeline on the same VPS.

Run Huly on a ServOrbit VPS

ServOrbit offers VPS plans from 4 GB to 16 GB of RAM: from the VPS Power upwards, they host a Docker Compose stack like Huly. Deploy in minutes and keep full control of your team's data.

Need help?

Browse our help center and FAQ, or reach our team — callback, WhatsApp or email. Support in French, English and Arabic.

Message us on WhatsAppopens in a new tab