Deployment guide

Host Kaneo on a VPS: Minimalist Open-Source Project Management

Deploy on a VPS Cloud →

Tutorial

Host Kaneo on a VPS: Minimalist Open-Source Project Management

Self-hosting10 min read5 steps

Jira bills per seat, Linear locks features behind paid tiers, Trello limits columns on the free plan. Kaneo (MIT, 7.9 k+ stars, v2.16.2 — released August 10 2026) takes a different approach: a minimalist project manager you self-host on your own VPS. Kanban boards, GitHub Milestones integration and webhooks — without the views you'll never use or the per-seat fees.

Contents· Why choose a minimalist project manager1/11
  1. 01Why choose a minimalist project manager
  2. 02What you get with self-hosted Kaneo
  3. 03Prerequisites
  4. 04Deploy Kaneo on your VPS
  5. 05Advanced configuration: multi-workspace and team isolation
  6. 06Webhooks for CI/CD automation
  7. 07PostgreSQL backup and restore
  8. 08Updating Kaneo to a new version
  9. 09Configuring SMTP for email notifications
  10. 10Troubleshooting: the most common errors
  11. 11Kaneo, Plane and Huly: which one to self-host?

Why choose a minimalist project manager

SaaS project management tools tend to grow heavier with every release: new views, AI dashboards and reporting modules that bury the features you actually use. Kaneo starts from the opposite assumption: most teams only need a Kanban board and a link to their code repository. By self-hosting it, you take full ownership — your tasks in a PostgreSQL database on your VPS, exportable as SQL at any time, without a premium plan to unlock webhooks or without quota history.

What you get with self-hosted Kaneo

  • Drag-and-drop Kanban boards — create columns, add tasks and track progress at a glance.
  • GitHub Milestones sync — connect your GitHub App to automatically mirror milestones as projects and issues as tasks.
  • Webhook destinations — trigger outbound HTTP calls on every task state change to notify Slack or your CI.
  • MIT licence — no commercial restrictions, free to fork and adapt.
  • Just two containers — Node.js app and PostgreSQL 16, total memory footprint under 400 MB.
  • SMTP-free login — email and password by default, no verification link step.
  • Multi-workspace support — isolate projects by client or team in separate workspaces.

Prerequisites

A ServOrbit VPS with Ubuntu 24.04 and at least 1 GB of RAM is sufficient for a small team. Kaneo is lightweight: the Hono (Node.js) API and the Vue.js SPA together consume under 200 MB at idle; PostgreSQL 16 adds around 300 MB. Docker and Docker Compose are provisioned automatically by AWX on deployment. A domain name is not required — Kaneo works behind the URL assigned by ServOrbit — but a dedicated subdomain (e.g. projects.your-domain.com) makes sharing easier.

Deploy Kaneo on your VPS

  1. One-click deployment from the ServOrbit Marketplace

    Go to Marketplace → Collaboration & Productivity → Kaneo in your ServOrbit control panel and click Deploy. AWX installs Docker, generates database and authentication secrets, configures nginx and starts both containers (app + PostgreSQL) in under 2 minutes.

  2. Create the first admin account

    Open the Kaneo URL in your browser. A sign-up form appears — this is the first-run setup. Enter your name, email address and a password. The first user automatically receives administrator rights on the default workspace.

  3. Create a workspace and your first project

    After signing in you land on the workspace home. Click New Project, give it a name and choose a colour. Add your first task by clicking + in the Kanban column of your choice. Assign it, add a description and a due date if needed.

  4. Connect GitHub (optional)

    If your code lives on GitHub, install the Kaneo GitHub App from Settings → Integrations. Once authorised, Kaneo syncs GitHub Milestones as projects and issues as tasks. Webhooks can automatically update a task's state when a Pull Request is merged.

  5. Set up notification webhooks (optional)

    In Settings → Webhooks, add your Slack Incoming Webhook URL or ticketing system endpoint. Kaneo sends a JSON POST on every state change — useful for notifying the team without polling.

Close registration as soon as your team is set up: in Settings → General, disable the 'Allow registrations' option. Without this step, anyone who knows the URL can create an account. For code-first teams who prefer commits over stories, connect the GitHub App and let PRs merge tasks automatically — zero manual board updates.

Advanced configuration: multi-workspace and team isolation

Kaneo supports multiple workspaces on a single instance. Each workspace has its own projects, members and webhooks — useful for isolating clients or teams on one VPS without running multiple deployments.

To create a second workspace, click the selector in the top-left of the interface and choose 'New Workspace'. Members of one workspace have no access to others: the isolation is at the application level, not just visual. You can host client A's projects and client B's projects on the same server, each with their own boards and separate GitHub integrations.

If you need custom fields on tasks, check the official Kaneo documentation before relying on them: custom fields are on the roadmap, but availability may vary by deployed version. Review the release notes for your current version on the Kaneo GitHub repository before designing a workflow that depends on them.

Webhooks for CI/CD automation

Kaneo's webhooks are one of its most direct advantages for development teams. On every task state change — column move, assignment, comment — Kaneo sends a POST JSON to the URL of your choice.

Common use cases:

- Slack notification: add your channel's Incoming Webhook URL to receive an alert whenever a task moves to 'In Progress' or 'Done'.
- CI pipeline trigger: forward the event to your CI system (GitHub Actions, Gitea Actions, Jenkins) to automatically start a build or deployment when a task reaches a target column.
- External system sync: the endpoint can point to any REST API — reporting tool, ticket database, or a n8n webhook to orchestrate complex workflows.

The Kaneo payload structure is documented in the official repository. Test your endpoints with a service like webhook.site before wiring them into production, to verify the format matches what your CI expects.

PostgreSQL backup and restore

Kaneo stores all its data in PostgreSQL 16. Regular backups are essential: without them, a failed update or volume corruption could cost you your entire task history.

Automating backups with cron and rclone

A two-step approach — daily local dump, then copy to remote object storage:

# /etc/cron.d/kaneo-backup
0 3 * * * root docker exec kaneo-db pg_dump -U kaneo kaneo | gzip > /var/backups/kaneo/$(date +\%Y\%m\%d).sql.gz
5 3 * * * root rclone copy /var/backups/kaneo/ s3:my-bucket/kaneo/ --max-age 30d

Replace kaneo-db with your actual PostgreSQL container name (docker ps to check) and kaneo with the credentials configured at deployment time.

Restoring a backup

# Stop the application before restoring
docker stop kaneo-app
# Restore the dump into the PostgreSQL container
gunzip -c /var/backups/kaneo/20260901.sql.gz | docker exec -i kaneo-db psql -U kaneo kaneo
# Restart
docker start kaneo-app

Keep at least 7 local dumps and 30 days of remote copies. Test a restore on a separate environment before you need it — a dump that cannot be restored is no better than no backup at all.

Updating Kaneo to a new version

Kaneo publishes its releases on GitHub. The update procedure is standard for a Docker Compose deployment:

# Pull the updated image
docker compose pull
# Restart containers with the new image
docker compose up -d
# Verify containers are running
docker compose ps

Before any update, take a full backup (see the previous section). Read the release notes for the new version on GitHub: some updates include database migrations that run automatically when the container starts. If a migration fails, the application container logs (docker logs kaneo-app) will show the details.

If you deployed via the ServOrbit Marketplace, a template update in your control panel may trigger a redeployment with the next version — check your plan's documentation.

Configuring SMTP for email notifications

By default, Kaneo does not require an SMTP server: sign-up uses email and password without a verification link. This simplifies the initial deployment but limits email notifications (password reset, task alerts).

If your Kaneo version supports SMTP configuration, the settings live in the environment variables of the deployed docker-compose.yml:

SMTP_HOST=smtp.your-domain.com
SMTP_PORT=587
[email protected]
SMTP_PASSWORD=your-password
[email protected]

If your ServOrbit instance includes a professional email plan, use the SMTP settings from your outbound mailbox. After changing environment variables, restart the containers with docker compose up -d. Test sending from the admin interface before closing public registration.

Troubleshooting: the most common errors

Container restarts in a loop on first start

Most common cause: a missing or malformed secret in the environment file. Check the application container logs (docker logs kaneo-app) — the error usually names the missing variable. Secrets are generated automatically on Marketplace deployment; on a manual install, make sure JWT_SECRET, DATABASE_URL and COOKIE_SECRET are defined.

Interface loads but login fails with 'Invalid credentials'

The first account created is the administrator. If you restarted the container without removing the PostgreSQL volume, the account already exists: try logging in with the credentials entered at first sign-up. If the volume was deleted, create a new account from the interface.

Webhooks do not fire

Check that the destination URL is reachable from the Kaneo container (not localhost on the host VPS — use an external IP or a domain name). Test with curl -X POST https://your-endpoint.com/webhook -d '{}' from within the container to confirm connectivity.

GitHub sync stops after a few hours

The GitHub App requires the callback URL to be reachable over HTTPS from the internet. Check that your SSL certificate is valid (certbot renew --dry-run) and that port 443 is open on your VPS.

Performance degrades with many tasks

On a 1 GB RAM VPS, PostgreSQL can become a bottleneck as data volume grows. Increase shared_buffers in the PostgreSQL configuration or upgrade to a plan with 2 GB of RAM. Kaneo is not designed for thousands of simultaneously active tasks — that is a deliberate design choice, not a defect.

Kaneo, Plane and Huly: which one to self-host?

Scroll the table

CriterionKaneoPlaneHuly
LicenceMITAGPL-3.0 (self-hosted)EPL-2.0
Containers required2 (app + PostgreSQL)5–7 (API, worker, Redis, RabbitMQ, MinIO…)6–8 (API, Collaborator, MongoDB, MinIO, Elastic…)
Recommended RAM1 GB (works)2–4 GB minimum4–8 GB recommended
Kanban boardsYesYes (Cycles, Modules)Yes (Issues, Planner)
GitHub integrationMilestones + webhooksIssue import, GitLab tooIssues, PRs, branches
Gantt viewsNoYesYes (Planner)
Built-in chatNoNoYes (Chunter)
Documentation / wikiNoPagesChunter + Documents
Deployment complexityVery lowMediumHigh
Ideal forCode-first teams, Kanban onlyStructured product teamsReplacing Linear + Notion + Slack

The right choice depends on what you want to replace. Kaneo replaces a Trello or lightweight Kanban with minimal setup friction. Plane replaces a simplified Jira, with cycles and modules. Huly replaces a broader stack (Linear + Notion + Slack) but requires a more powerful machine and a longer configuration. On a 1 GB VPS, only Kaneo runs comfortably — Plane can start at 2 GB, Huly needs at least 4 GB to stay stable.

Deploy Kaneo on your own server

Self-host Kaneo on a ServOrbit VPS — MIT open source, no subscription, all your project management on your own infrastructure.

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