---
title: "Deploy Omnara"
description: "Open-source managed agent platform: run AI agents on any model and machine"
category: "AI/ML"
url: https://railway.com/deploy/omnara
---

# Deploy Omnara

Open-source managed agent platform: run AI agents on any model and machine

**[Deploy Omnara on Railway](https://railway.com/template/omnara)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/omnara/manifest.json

- **Creator:** Auromations
- **Category:** AI/ML
- **Total deploys:** 4

## Template content

### redis https://devicons.railway.app/i/redis.svg

- **Image:** redis:8.2.1
- **Start command:** `/bin/sh -c "rm -rf /data/lost+found && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --appendonly yes"`

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

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

### omnara https://www.omnara.com/favicon.svg

- **Image:** ghcr.io/hmseeb/omnara-railway:0.2.10-r3
- **Health check:** /healthz
- **Public domain:** Yes

## Buckets

- **omnara-blobs**

## Documentation

# Deploy and Host Omnara on Railway

[Omnara](https://github.com/omnara-ai/omnara) is an open-source managed agent platform, a self-hostable alternative to Claude Managed Agents and OpenAI's Agents API. You launch agents through a REST API, a TypeScript SDK, a CLI or the dashboard, on any model you bring a key for, and they run commands on machines you connect: your laptop, a VM, or sandboxes from providers like E2B, Daytona and Modal.

## About Hosting Omnara

Omnara is a control plane: an API, workers that run the agent loop, a maintenance process and a web dashboard, backed by Postgres, Redis and object storage. Every step of every agent is saved in Postgres, so agents pick up where they left off after a restart.

This template runs the whole control plane on Railway. The API, workers, maintenance and dashboard share one container (upstream's unmodified v0.2.10 images, behind one nginx), next to Postgres 18, Redis and a Railway bucket. The instance belongs to you alone: only the admin email you enter can create an account.

## Common Use Cases

- Run coding, review or SRE agents from Slack, Discord, GitHub pull requests or a cron schedule
- Give your own product an agents API on any model, with the agent history in your own Postgres
- Let agents run commands on your laptop or servers with no inbound ports, through the `omnarad` daemon
- Share skills, secrets, memory stores and model providers across projects with per-tool approval rules

## Dependencies for Omnara Hosting

- Postgres 18 for agent state and the event log
- Redis for wakeups and rate limits
- A Railway bucket for attachments, tool outputs and skill archives
- A Railway volume for agent memory stores

### Deployment Dependencies

- Omnara source and docs: https://github.com/omnara-ai/omnara and https://docs.omnara.com
- Container image for this template: https://github.com/hmseeb/omnara-railway
- A model provider key (OpenAI, Anthropic, OpenRouter, Bedrock, or any compatible endpoint), added in the dashboard after deploying

### Implementation Details

**Logging in.** The deploy form asks for one thing, `OMNARA_ADMIN_EMAIL`. The template generates your password in `OMNARA_ADMIN_PASSWORD`, and the first boot creates your admin account with both. When the deploy is up, open the `omnara` service's **Variables** tab, copy `OMNARA_ADMIN_PASSWORD`, and log in at your public URL with that email and password. No email is sent and no mail server is needed.

**Changing the password.** Edit `OMNARA_ADMIN_PASSWORD` and redeploy; the new value replaces the old one. A password changed in the app stays until you edit the variable again. Upstream's rule applies: 12 or more characters with upper and lower case, a number and a symbol. A value that breaks the rule is skipped with `WARNING: OMNARA_ADMIN_PASSWORD was not applied` in the logs, and the previous password keeps working. Lost it? Set a new value and redeploy.

**Nobody else can sign up.** Upstream Omnara is multi-tenant with open signup. This template locks it to you: signup and password reset are switched off whenever the app is reachable, and your account is created by the container itself before it opens to the internet. This makes it a single-user instance: invitations would need the invitee to sign up. Give your apps and CI access with organization API keys from the dashboard instead.

**First steps in the dashboard.** A new instance has no models or machines. Add a model provider and a model, then connect a machine under **Machines** (it runs `omnarad`, which connects out to your Railway URL), and share both with your project. Then launch agents from the dashboard or point the CLI at your instance:

```sh
npx omnara config --api-url https://<your-domain>/api/v1 --issuer-url https://<your-domain>
npx omnara login
```

**Variables**

| Variable | What it does |
| --- | --- |
| `OMNARA_ADMIN_EMAIL` | Email of the admin account, the only account on the instance |
| `OMNARA_ADMIN_PASSWORD` | Admin password, generated per deploy. Edit and redeploy to change it |
| `OMNARA_PUBLIC_URL` | Public origin. Change to `https://your.domain` after adding a custom domain, then redeploy |
| `OMNARA_ENCRYPTION_KEY_HEX` | Encrypts stored secrets and provider keys. Changing it makes them unreadable |
| `OMNARA_SKILL_SIGNING_KEY_HEX` | Signs skill downloads for machines |
| `EXA_API_KEY` | Optional. Enables the built-in web search tool |

Any other upstream setting from the [configuration reference](https://docs.omnara.com/self-hosting/configuration) can be added as a variable on the `omnara` service.

**Troubleshooting**

- *Deploy fails with `OMNARA_BLOB_S3_... resolved empty (a known Railway bucket-template bug)`*: open the `omnara` service's Variables, re-save the named variable unchanged, and deploy again.
- *Changing `OMNARA_ADMIN_EMAIL` after the first boot*: the account keeps its original email, and `OMNARA_ADMIN_PASSWORD` changes are skipped until the variable matches it again. Log in with the original email.
- *Custom domain shows "not found"*: set `OMNARA_PUBLIC_URL` to the new domain and redeploy. The API answers only on the host in that variable.

**Scaling.** Workers are stateless. To run more agent turns at once, raise `OMNARA_WORKER_CAPACITY` (default 4) or give the service more resources. Keep one replica, because the memory volume belongs to one container.

## Why Deploy Omnara on Railway?

Omnara needs a public HTTPS address so machines, sandboxes, Slack and GitHub can reach it, plus a database, a cache and object storage. Railway gives you all of them in one click, wired together, with nothing to operate. Your agent history stays in your own Postgres.


## Similar templates

- [Chat Chat](https://railway.com/deploy/-WWW5r) — Chat Chat, your own unified chat and search to AI platform.
- [Möbius v0.1 Personal AI OS](https://railway.com/deploy/mobius-v01-personal-ai-os) — Self-hosted AI agent that builds and runs apps for you, with memory.
- [stella](https://railway.com/deploy/stella) — Self-host stella with web, API, Postgres, Redis, and object storage.

Open this page in a browser: https://railway.com/deploy/omnara
