---
title: "Deploy OmniRoute Hardened AI Gateway"
description: "OmniRoute AI gateway pinned past CVE-2026-88062, login + API keys enforced"
category: "AI/ML"
url: https://railway.com/deploy/omniroute-hardened-ai-gateway
---

# Deploy OmniRoute Hardened AI Gateway

OmniRoute AI gateway pinned past CVE-2026-88062, login + API keys enforced

**[Deploy OmniRoute Hardened AI Gateway on Railway](https://railway.com/template/omniroute-hardened-ai-gateway)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/omniroute-hardened-ai-gateway/manifest.json

- **Creator:** Protemplate
- **Category:** AI/ML
- **Total deploys:** 2

## Template content

### OmniRoute https://raw.githubusercontent.com/diegosouzapw/OmniRoute/v3.8.51/public/icon-512.png

- **Image:** diegosouzapw/omniroute@sha256:77b38c546e1c74add83d73cd2c752342c364c0565fb0cc21eb4792e9c0a5cb79
- **Start command:** `sh -c 'cd /app; echo Y29uc3QgZnMgPSByZXF1aXJlKCJmcyIpOwpjb25zdCBEQVRBID0gcHJvY2Vzcy5lbnYuREFUQV9ESVIgfHwgIi9hcHAvZGF0YSI7CmNvbnN0IE1BUksgPSBEQVRBICsgIi8ucmFpbHdheS10ZW1wbGF0ZS1wcm92aWRlci1sb2NrZG93biI7CmNvbnN0IEJBU0UgPSAiaHR0cDovLzEyNy4wLjAuMToiICsgKHByb2Nlc3MuZW52LlBPUlQgfHwgIjIwMTI4Iik7CmNvbnN0IEJMT0NLID0gWwogICJvcGVuY29kZSIsICJkdWNrZHVja2dvLXdlYiIsICJjbG91ZGZsYXJlLXBsYXlncm91bmQiLCAidmVvYWlmcmVlLXdlYiIsICJ1bmNsb3NlYWkiLCAiYWlob3JkZSIsCiAgImRldmluLWNsaS1hZ2VudGljIiwgImF1Z2dpZSIsICJ6Y29kZSIsICJjb2RleC1hcHAtc2VydmVyIiwgImR1Y2tkdWNrZ28tZnJlZSIsICJjb250ZXh0NyIsCl07CmNvbnN0IE5PX0FOT05fRkFMTEJBQ0sgPSBbImtpbG9jb2RlIiwgInBvbGxpbmF0aW9ucyIsICJvcGVuY29kZS16ZW4iLCAib3BlbmNvZGUtZ28iXTsKY29uc3QgbG9nID0gKG0pID0+IGNvbnNvbGUubG9nKCJbcmFpbHdheS10ZW1wbGF0ZV0gIiArIG0pOwpjb25zdCBzbGVlcCA9IChtcykgPT4gbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgbXMpKTsKY29uc3QgbWVyZ2UgPSAoY3VyLCBhZGQpID0+IFsuLi5uZXcgU2V0KFsuLi4oQXJyYXkuaXNBcnJheShjdXIpID8gY3VyIDogW10pLCAuLi5hZGRdKV07Cgphc3luYyBmdW5jdGlvbiBsb2dpbigpIHsKICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykgewogICAgdHJ5IHsKICAgICAgY29uc3QgciA9IGF3YWl0IGZldGNoKEJBU0UgKyAiL2FwaS9hdXRoL2xvZ2luIiwgewogICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgIGhlYWRlcnM6IHsgImNvbnRlbnQtdHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiB9LAogICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcGFzc3dvcmQ6IHByb2Nlc3MuZW52LklOSVRJQUxfUEFTU1dPUkQgfSksCiAgICAgIH0pOwogICAgICBpZiAoci5vaykgcmV0dXJuIHIuaGVhZGVycy5nZXRTZXRDb29raWUoKS5tYXAoKGMpID0+IGMuc3BsaXQoIjsiKVswXSkuam9pbigiOyAiKTsKICAgICAgbG9nKCJsb2dpbiByZXR1cm5lZCAiICsgci5zdGF0dXMgKyAiLCByZXRyeWluZyIpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBsb2coImxvZ2luIGVycm9yICIgKyBlLm1lc3NhZ2UgKyAiLCByZXRyeWluZyIpOwogICAgfQogICAgYXdhaXQgc2xlZXAoNTAwMCk7CiAgfQogIHRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHNpZ24gaW4gd2l0aCBJTklUSUFMX1BBU1NXT1JEIik7Cn0KCmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7CiAgaWYgKGZzLmV4aXN0c1N5bmMoTUFSSykpIHJldHVybiBsb2coInByb3ZpZGVyIGxvY2tkb3duIGFscmVhZHkgYXBwbGllZCBvbiBhbiBlYXJsaWVyIGJvb3QiKTsKICBpZiAoIXByb2Nlc3MuZW52LklOSVRJQUxfUEFTU1dPUkQpIHJldHVybiBsb2coIklOSVRJQUxfUEFTU1dPUkQgaXMgbm90IHNldCwgcHJvdmlkZXIgbG9ja2Rvd24gc2tpcHBlZCIpOwogIGxldCB1cCA9IGZhbHNlOwogIGZvciAobGV0IGkgPSAwOyBpIDwgMTIwICYmICF1cDsgaSsrKSB7CiAgICB0cnkgewogICAgICB1cCA9IChhd2FpdCBmZXRjaChCQVNFICsgIi9oZWFsdGh6IikpLm9rOwogICAgfSBjYXRjaCB7fQogICAgaWYgKCF1cCkgYXdhaXQgc2xlZXAoNTAwMCk7CiAgfQogIGlmICghdXApIHRocm93IG5ldyBFcnJvcigic2VydmVyIG5ldmVyIHJlcG9ydGVkIHJlYWR5IG9uIC9oZWFsdGh6Iik7CiAgY29uc3QgY29va2llID0gYXdhaXQgbG9naW4oKTsKICBjb25zdCBoZWFkZXJzID0geyAiY29udGVudC10eXBlIjogImFwcGxpY2F0aW9uL2pzb24iLCBjb29raWUgfTsKICBjb25zdCBjdXJyZW50ID0gYXdhaXQgKGF3YWl0IGZldGNoKEJBU0UgKyAiL2FwaS9zZXR0aW5ncyIsIHsgaGVhZGVycyB9KSkuanNvbigpOwogIGNvbnN0IGJvZHkgPSB7CiAgICBibG9ja2VkUHJvdmlkZXJzOiBtZXJnZShjdXJyZW50LmJsb2NrZWRQcm92aWRlcnMsIEJMT0NLKSwKICAgIG5vQXV0aEZhbGxiYWNrRGlzYWJsZWRQcm92aWRlcnM6IG1lcmdlKGN1cnJlbnQubm9BdXRoRmFsbGJhY2tEaXNhYmxlZFByb3ZpZGVycywgTk9fQU5PTl9GQUxMQkFDSyksCiAgICBleGNsdWRlVG9zQXZvaWQ6IHRydWUsCiAgfTsKICBjb25zdCByID0gYXdhaXQgZmV0Y2goQkFTRSArICIvYXBpL3NldHRpbmdzIiwgeyBtZXRob2Q6ICJQQVRDSCIsIGhlYWRlcnMsIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpIH0pOwogIGlmICghci5vaykgdGhyb3cgbmV3IEVycm9yKCJQQVRDSCAvYXBpL3NldHRpbmdzICIgKyByLnN0YXR1cyArICIgIiArIChhd2FpdCByLnRleHQoKSkuc2xpY2UoMCwgMjAwKSk7CiAgZnMud3JpdGVGaWxlU3luYyhNQVJLLCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAiXG4iKTsKICBsb2coImJsb2NrZWQgIiArIEJMT0NLLmxlbmd0aCArICIga2V5bGVzcyBwcm92aWRlcnMsIGRpc2FibGVkIGFub255bW91cyBmYWxsYmFjayBvbiAiICsKICAgIE5PX0FOT05fRkFMTEJBQ0subGVuZ3RoICsgIiBnYXRld2F5cywgZXhjbHVkZVRvc0F2b2lkPXRydWUiKTsKfQoKbWFpbigpLmNhdGNoKChlKSA9PiBsb2coInByb3ZpZGVyIGxvY2tkb3duIEZBSUxFRCAoc2VydmVyIGtlZXBzIHJ1bm5pbmcpOiAiICsgZS5tZXNzYWdlKSk7Cg== | base64 -d > /tmp/provider-lockdown.cjs; node /tmp/provider-lockdown.cjs & exec /app/check-permissions.sh node dev/run-standalone.mjs'`
- **Health check:** /healthz
- **Public domain:** Yes

## Documentation

# Deploy and Host OmniRoute Hardened AI Gateway on Railway

OmniRoute is an open-source (MIT) AI gateway: one OpenAI-compatible endpoint in front of hundreds of LLM providers, with combos, quota-aware fallback, prompt compression, per-app API keys and a web dashboard. It works with Claude Code, Codex, Cursor, Cline and any OpenAI SDK.

## About Hosting OmniRoute Hardened AI Gateway

This template runs the official OmniRoute v3.8.51 image, pinned by digest to the tag build that fixes CVE-2026-88062 (a critical remote code execution in the ACP custom-agent endpoint). The plain `3.8.51` and `latest` tags currently resolve to an older pre-release on amd64, which is why the digest pin matters. A Railway volume at `/app/data` holds the SQLite database, so providers, keys and settings survive redeploys, and Railway health checks `/healthz` on port 20128.

Security is on from the first request. The admin password is generated and seeded at boot, so there is no open setup window. Every `/v1` call needs an API key, and one is generated for you. On first boot the template also blocks every keyless provider OmniRoute would otherwise route with zero setup (several of them scrape consumer web apps) and keeps `auto` combos away from providers upstream flags as terms-of-service risks. Nothing routes until you add a provider with your own key.

## Common Use Cases

- **One endpoint for every model**: OpenAI, Anthropic, Gemini, OpenRouter, Groq, DeepSeek, Mistral and more behind a single base URL
- **Coding agents**: point Claude Code, Codex, Cursor or Cline at your gateway with one key
- **Fallback and load balancing**: combos that retry across providers and accounts when quotas run out
- **Per-app keys**: separate API keys with model restrictions and usage limits
- **Private gateway for other Railway services**: keep provider keys out of your app containers

## Dependencies for OmniRoute Hardened AI Gateway Hosting

- **Railway volume** at `/app/data` (included)
- **Provider API keys**: your own, added in the dashboard after deploy (none are bundled or enabled)
- **Hobby plan or higher**: OmniRoute needs about 2 GB of RAM

### Deployment Dependencies

- [OmniRoute GitHub repository](https://github.com/diegosouzapw/OmniRoute)
- [Docker guide](https://github.com/diegosouzapw/OmniRoute/blob/main/docs/guides/DOCKER_GUIDE.md)
- [Self-host guide](https://github.com/diegosouzapw/OmniRoute/blob/main/docs/getting-started/SELF_HOST_GUIDE.md)
- [CVE-2026-88062 advisory](https://github.com/diegosouzapw/OmniRoute/security/advisories/GHSA-hf57-cqmx-p4gr)

### Implementation Details

Key variables (secrets are generated at deploy):

```env
PORT=20128
OMNIROUTE_HOSTNAME=::
DATA_DIR=/app/data
RAILWAY_RUN_UID=0
INITIAL_PASSWORD=${{secret(32)}}
REQUIRE_API_KEY=true
OMNIROUTE_API_KEY=sk-${{secret(48)}}
JWT_SECRET=${{secret(64)}}
API_KEY_SECRET=${{secret(64,"abcdef0123456789")}}
STORAGE_ENCRYPTION_KEY=${{secret(64,"abcdef0123456789")}}
OMNIROUTE_PUBLIC_BASE_URL=https://${{RAILWAY_PUBLIC_DOMAIN}}
AUTH_COOKIE_SECURE=true
```

**First steps after deploy**

1. Wait for `/healthz` to return `ok`.
2. Open your Railway domain and sign in with `INITIAL_PASSWORD` from the service variables. Anonymous visitors cannot reach the dashboard or the management API.
3. Add a provider under **Providers** with your own API key.
4. Call `https:///v1/chat/completions` with `Authorization: Bearer `, or create per-app keys under **API Keys**.

Keep **Require login** on, keep one replica (SQLite), and never rotate `STORAGE_ENCRYPTION_KEY` or `API_KEY_SECRET` after first boot. If you add a custom domain, update `OMNIROUTE_PUBLIC_BASE_URL` and `NEXT_PUBLIC_BASE_URL`. Web-session providers (pasted browser cookies for consumer chat apps) and subscription OAuth providers are available in the dashboard but likely break those services' terms; the template enables none of them.

## Why Deploy OmniRoute Hardened AI Gateway 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 OmniRoute Hardened AI Gateway on Railway, you get a patched, health-checked AI gateway with persistent storage, generated secrets, managed SSL, and private networking to the rest of your Railway project.


## Similar templates

- [Chat Chat](https://railway.com/deploy/-WWW5r) — Chat Chat, your own unified chat and search to AI platform.
- [stella](https://railway.com/deploy/stella) — Self-host stella with web, API, Postgres, Redis, and object storage.
- [Hermes Agent | OpenClaw Alternative with Dashboard](https://railway.com/deploy/hermes-agent-or-openclaw-alternative-wit) — Self-Hosted Hermes AI Agent for Telegram, Discord & Slack

Open this page in a browser: https://railway.com/deploy/omniroute-hardened-ai-gateway
