---
title: "Deploy Kaneo v2: Project Management - Jira & Linear Alternative"
description: "Open source Kanban with time tracking. File uploads work out of the box."
category: "Other"
url: https://railway.com/deploy/kaneo-v2-self-hosted-project-management-
---

# Deploy Kaneo v2: Project Management - Jira & Linear Alternative

Open source Kanban with time tracking. File uploads work out of the box.

**[Deploy Kaneo v2: Project Management - Jira & Linear Alternative on Railway](https://railway.com/template/kaneo-v2-self-hosted-project-management-)**

- **Creator:** ProCode
- **Category:** Other
- **Total deploys:** 2

## Template content

### Postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### SeaweedFS https://github.com/seaweedfs.png

- **Image:** chrislusf/seaweedfs:4.43
- **Start command:** `sh -c 'printf "%s" "$S3_IDENTITIES_JSON" > /data/s3-identities.json && exec /usr/bin/weed -logtostderr=true mini -dir=/data -s3.config=/data/s3-identities.json -bucket=$S3_BUCKET -s3.port=$PORT'`
- **Public domain:** Yes

### Kaneo https://github.com/usekaneo.png

- **Image:** ghcr.io/usekaneo/kaneo:latest
- **Health check:** /api/health
- **Public domain:** Yes

## Documentation

# Deploy and Host Kaneo on Railway

Kaneo is open source project management: Kanban boards, backlogs, sprints, time tracking, labels and
comments, self-hosted on infrastructure you control. It replaces Jira, Linear and Trello for teams
who do not want per-seat pricing or their roadmap sitting in a vendor's database.

This template runs the latest Kaneo v2 image against managed PostgreSQL, with object storage included
so screenshots / attachments work out of the box.

## About Hosting Kaneo

Kaneo v2 ships one container: nginx serves the built React frontend and reverse-proxies `/api/` to
the Node API beside it, on port 5173. It needs a PostgreSQL database and applies its own migrations
at boot.

Other Kaneo templates skip storage (Kaneo uploads files to S3-compatible object storage,
and that normally requires provisioning an S3 storage bucket and configuring CORS
before anyone can attach screenshots / etc into tasks.) This template ships with S3 storage (SeaweedFS),
so you get a fully working Kaneo deployment without additional work. (Note: Switching to external S3 storage is simple, instructions below).

## Common Use Cases

- **Replacing a per-seat Jira or Linear subscription** for a small team: same board, backlog and
  sprint workflow, cost that does not scale with headcount.
- **Client and agency project tracking** that has to sit on infrastructure you control, under your
  own domain, for contractual or data-residency reasons.
- **A private roadmap** for a startup or open source project, with public signup closed once the
  team is in.

## Dependencies for Kaneo Hosting

- PostgreSQL: every workspace, project, task, comment, time entry, user and session, on a persistent
  volume.
- SeaweedFS: S3-compatible object storage for files and images attached to
  tasks and comments, on its own persistent volume. Kaneo keeps the object key in PostgreSQL and the bytes here.

### Deployment Dependencies

- [Kaneo](https://kaneo.app)
- [Documentation](https://kaneo.app/docs)
- [Source on GitHub (MIT)](https://github.com/usekaneo/kaneo)

### Implementation Details

The `Kaneo` service runs `ghcr.io/usekaneo/kaneo:latest`.

The `Postgres` service is Railway's managed PostgreSQL 18 with a volume at `/var/lib/postgresql/data`.

The `SeaweedFS` service runs `chrislusf/seaweedfs:4.41` in `mini` mode, and creates its bucket on first start.

**Storage needs public URL:** Kaneo hands your browser a presigned URL and the browser uploads
straight to storage, so the S3 endpoint is public by necessity.

**How to Upgrade:** redeploy the `Kaneo` service. It tracks `latest`, so a redeploy pulls the current
release, and Kaneo applies its own migrations on start. To hold a specific version instead, set the
image tag to that release. Release notes: [github.com/usekaneo/kaneo/releases](https://github.com/usekaneo/kaneo/releases).
Note: Volumes attach to one container at a time, so redeploys cause a short outage.

## 📌 How to Use Kaneo After Deployment

1. Wait for all three services to finish deploying.
2. Open the `Kaneo` service, go to Settings, Networking, and click the generated
   `*.up.railway.app` domain. Add a custom domain here instead if you have one.
3. Create the first account on the sign-in page. It becomes your workspace owner.
4. Create a workspace, then a project, and start adding tasks.
5. Once your team has signed up, set `DISABLE_REGISTRATION` to `true` on the `Kaneo` service to close
   public signup. It ships as `false` so the first account can be created.

## Is Kaneo Free?

Kaneo is MIT licensed, with no paid tier, seat limit or feature gate in the self-hosted build. You
pay for the infrastructure and nothing else; there are no third-party API costs. Kaneo also sells a
hosted version at [cloud.kaneo.app](https://cloud.kaneo.app) and the maintainer takes sponsorship at
[github.com/sponsors/andrejsshell](https://github.com/sponsors/andrejsshell). If self-hosting saves
your team a subscription, supporting them is encouraged.

## Monthly Cost of Self-Hosting Kaneo on Railway

It cost me about 6$/month (and 4$ / month with external storage) - your mileage may vary.

## Kaneo vs Jira, Linear and Trello

|                    | Kaneo (self-hosted) | Jira             | Linear       | Trello       |
| ------------------ | ------------------- | ---------------- | ------------ | ------------ |
| Pricing            | Infrastructure only | Per seat         | Per seat     | Per seat     |
| Your data          | Your database       | Vendor cloud     | Vendor cloud | Vendor cloud |
| Source             | MIT, open           | Closed           | Closed       | Closed       |
| Kanban and backlog | Yes                 | Yes              | Yes          | Boards only  |
| Time tracking      | Built in            | Add-on           | Limited      | Power-up     |
| Self-hosting       | Yes                 | Data Center tier | No           | No           |

## FAQ

**How do I back up Kaneo?**

- Run `pg_dump` on the `Postgres` service or use Railway's database backups.
- Copy the S3 bucket (`SeaweedFS` or external) with any S3 client using the credentials on that service.

**Can I use my own domain?**
Yes. Add it on the `Kaneo` service under Settings, Networking, wait for the DNS records it shows you
to resolve, then redeploy the service. Kaneo picks the new domain up on its own.

**Does my data survive a redeploy or a version bump?**
Yes. Everything is in PostgreSQL / SeaweedFS, on persistent volumes.

## Optional features to enable if needed

To add any of the below features, configure the environment variables specified.

### Email

Workspace invitations, notification delivery, email-otp sign-in.

```
SMTP_HOST
SMTP_PORT
SMTP_SECURE
SMTP_USER
SMTP_PASSWORD
SMTP_FROM
```

By default, this also switches sign-in to emailed verification codes - to keep email/password sign in, disable with `DISABLE_EMAIL_OTP_SIGN_IN=true`.
Read more: [SMTP configuration](https://kaneo.app/docs/core/installation/environment-variables#smtp-configuration)

### GitHub Single sign-on (and more)

Add a Sign in with GitHub button. (For other providers like Google and more, read docs below.)

```
GITHUB_OAUTH_CLIENT_ID
GITHUB_OAUTH_CLIENT_SECRET
```

Note: Create a GitHub **OAuth App** first and set its redirect URI to: `https://YOUR_DOMAIN/api/auth/callback/github`.

Read more: [GitHub provider](https://kaneo.app/docs/core/social-providers/github),
[Google](https://kaneo.app/docs/core/social-providers/google),
[Custom OAuth/OIDC](https://kaneo.app/docs/core/social-providers/custom-oauth)

### Using your own object storage instead of the bundled one

File uploads already work, so this is only for pointing Kaneo at Cloudflare R2, AWS S3 etc.
Set these on the `Kaneo` service, replacing the references that point at `SeaweedFS`, then
delete the `SeaweedFS` service and its volume.

```
S3_ENDPOINT
S3_BUCKET
S3_REGION
S3_ACCESS_KEY_ID
S3_SECRET_ACCESS_KEY
S3_FORCE_PATH_STYLE=false #true for path-style providers like MinIO
```

Note 1: your browser uploads straight to the bucket with a presigned PUT, so the endpoint must be
reachable from your users' browsers **and the bucket needs a CORS rule allowing your Kaneo domain**.
Most providers need this set once with `aws s3api put-bucket-cors` or their dashboard.

Note 2: leave both key variables unset to use an AWS IAM role instead. Setting only one is an error.

Read more: [Object storage and uploads](https://kaneo.app/docs/core/installation/object-storage-and-image-uploads) ·
[Storage backends](https://kaneo.app/docs/core/installation/storage-backends)

### Repository sync with GitHub or Gitea

Two-way sync between tasks and issues, link pull requests, and move a task when a branch is pushed
or a PR merges.

This uses a **GitHub App** - follow the setup guide below.

```
GITHUB_APP_ID
GITHUB_APP_NAME
GITHUB_PRIVATE_KEY
GITHUB_WEBHOOK_SECRET
```

Read more: [GitHub App setup](https://kaneo.app/docs/core/integrations/github/setup),
[Gitea](https://kaneo.app/docs/core/integrations/gitea/setup)

### Multiple replicas

Scale the `Kaneo` service past one replica. WebSocket updates fall back to an in-memory adapter on a
single replica, which is what this template runs, so this is only needed if you scale out.

```
REDIS_URL
```

Redis Sentinel and Cluster are supported too.
Read more: [Environment variables](https://kaneo.app/docs/core/installation/environment-variables)

## Features that need no configuration

- **MCP server.** Every Kaneo instance exposes a Streamable HTTP endpoint at
  `https://YOUR_DOMAIN/api/mcp`, so Claude, Cursor and other MCP clients can read and manage your
  workspaces, projects, tasks, comments and labels. Nothing to install and nothing to set.
  [Kaneo MCP server](https://kaneo.app/docs/core/integrations/mcp)
- **Chat notifications.** Slack, Discord and Telegram all work through incoming webhooks configured
  inside Kaneo, with no bot token, OAuth flow or environment variable.
  [Slack](https://kaneo.app/docs/core/integrations/slack) ·
  [Discord](https://kaneo.app/docs/core/integrations/discord) ·
  [Telegram](https://kaneo.app/docs/core/integrations/telegram) ·
  [Outgoing webhooks](https://kaneo.app/docs/core/integrations/outgoing-webhooks)
- **File and image uploads.** Paste an image into a task description or comment, or attach a PDF,
  CSV or ZIP. The bundled storage service is wired up and its bucket is created on first start.
- **A REST API and API keys**. [Reference](https://kaneo.app/docs/api-reference/introduction)

## Why Deploy Kaneo on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your
infrastructure so you don't have to deal with configuration, while allowing you to vertically
and horizontally scale it.

By deploying Kaneo on Railway, you are one step closer to supporting a complete full-stack
application with minimal burden. Host your servers, databases, AI agents, and more on Railway.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — [Jul'26] Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/kaneo-v2-self-hosted-project-management-
