How do I self-host a project management tool with Docker?
Short answer
To self-host Kaneo, run the application and PostgreSQL with Docker Compose, configure your public URL and secrets, and put a TLS reverse proxy in front. The installation guide specifies at least 2 GB of RAM and 10 GB of disk space. Plan for ongoing updates, database backups, and storage for uploaded files.
Last updated 24 September 2026. Written by the Kaneo team, who also build one of the tools mentioned.
What you need
The documented minimum is 2 GB of RAM and 10 GB of disk space, with Docker 20.10 or newer and Docker Compose V2. Allow more capacity for your workload, database growth, and uploaded files.
Docker Engine with the Compose plugin, a DNS record pointing at the server, and ports 80 and 443 open. Everything else runs inside the compose network.
A backup destination that is not the same machine. Object storage, another VPS, or a home NAS over a tunnel. A backup on the server you are backing up is a rehearsal, not a backup.
The compose file
Kaneo runs as one application container alongside PostgreSQL. The container serves both the API and the web app on port 5173, so the reverse proxy has a single upstream.
Use the maintained compose.yml in the Docker Compose guide. It defines PostgreSQL, a persistent database volume, the Kaneo application, and health checks. Configure the environment file before starting the services; for production, pin an image version so updates are deliberate.
If you would rather not write it yourself, the drim CLI sets up Kaneo, PostgreSQL, and HTTPS in one step: run drim setup on a fresh server and answer the prompts.
The maintained compose.yml with persistent storage and health checks.
Every setting, including database URL, base URLs, and OIDC configuration.
Start the stack, inspect its status, and check that the application is available.
S3-compatible storage for attachments and avatars, including MinIO on your own hardware.
The four things people get wrong
TLS as an afterthought. Put Caddy, Traefik, or nginx in front from the first day, not after someone has typed a password over plain HTTP. Caddy needs about four lines for automatic certificates.
Back up both PostgreSQL and any object storage used for uploads. Choose a schedule based on how much work your team can afford to lose, store copies off the application server, and test restoring them before you need them.
Pinning to latest and never updating, or updating blind. Pin a version tag, read the release notes, and take a database dump before upgrading. Kaneo's migrations run automatically on start and are written to work on existing installations, but a dump costs nothing.
Skipping single sign-on because it looks like work. Connecting Google, GitHub, Discord, or your own OIDC provider takes minutes in Kaneo and is free on every build, and it removes an entire class of password problems.
Is self-hosting worth it?
Self-hosting makes sense when you need control over infrastructure and data, and someone can own maintenance. Include server capacity, storage, backups, and that maintenance time when comparing costs with a managed service.
It is not worth it if nobody wants to own updates and backups. That is a real job, small but recurring. If no one wants it, a managed cloud is the honest answer, and Kaneo Cloud is $4 a month for one person or $5 per user a month for a team, running the same MIT-licensed software you could host yourself.
Frequently asked
What are the minimum requirements to self-host Kaneo?
The installation guide specifies Docker 20.10 or newer, Docker Compose V2, at least 2 GB of RAM, and 10 GB of disk space. The Compose setup includes PostgreSQL. Redis is optional for a single API instance.
Can I run it on a Raspberry Pi or a home server?
Yes, for a small team. The requirements are modest. Put it behind a tunnel or a reverse proxy with TLS rather than exposing ports directly, and keep backups somewhere other than the same SD card.
Does Kaneo run on Kubernetes?
Yes. There is an official Helm chart in the repository under charts/kaneo, which covers the API, web app, database configuration, and ingress.
How do updates work?
Pull the new image tag and restart the stack. Database migrations run on startup and are written to work against existing installations. Take a database dump first, as with anything.