---
title: "Deploy Odysseus | (Just Updated) PewDiePie AI Workspace Whose Web Search Works"
category: "AI/ML"
url: https://railway.com/deploy/odysseus-v102-or-pewdiepie-ai-workspace-
---

# Deploy Odysseus | (Just Updated) PewDiePie AI Workspace Whose Web Search Works

**[Deploy Odysseus | (Just Updated) PewDiePie AI Workspace Whose Web Search Works on Railway](https://railway.com/template/odysseus-v102-or-pewdiepie-ai-workspace-)**

- **Creator:** SuperSlowSloth
- **Category:** AI/ML

## Template content

### ntfy

- **Image:** binwiederhier/ntfy:v2.15.0
- **Start command:** `/bin/sh -c 'exec ntfy serve --cache-file /var/cache/ntfy/cache.db --base-url "$NTFY_BASE_URL" --listen-http :8080'`

### odysseus

- **Image:** ghcr.io/bon5co/odysseus-railway:latest
- **Health check:** /api/health
- **Public domain:** Yes

### searxng

- **Image:** ghcr.io/bon5co/odysseus-railway-searxng:latest

### chroma

- **Image:** chromadb/chroma:1.0.21

## Documentation

# Deploy and Host Odysseus on Railway

Odysseus is the open-source, self-hosted AI workspace from PewDiePie's
`archdaemon` project — multi-provider chat, an agent system with tools,
persistent memory and skills, Deep Research, side-by-side model comparison,
document editing, RAG over your own uploads, notes, tasks, email and calendar,
in one mobile-friendly app. You bring your own model through any
OpenAI-compatible API, and every conversation stays on infrastructure you
control.

This template deploys Odysseus v1.0.2 from the **official upstream image**,
with a SearXNG that actually answers the app's search calls.

## About Hosting Odysseus

Odysseus is not a single container. The web app needs a vector store for its
memory and RAG (ChromaDB), a metasearch engine for web search and Deep Research
(SearXNG), and a push server for reminders and agent notifications (ntfy). This
template wires all four over Railway's private network, gives the app, the
vector store and the push cache persistent volumes, exposes only the
authenticated web UI publicly, and seeds the admin account from a generated
password before the first request is ever served.

Two things are done differently here, and both are measurable:

- **The official image, pinned by digest.** Every other Odysseus listing on
  Railway either builds the app from a personal fork on your build minutes or
  runs an unofficial rebuild. The most-deployed one advertises an August update
  while its fork's last commit is 2026-06-09 — **892 upstream commits** behind,
  including roughly ten `fix(security)` commits (webhook SSRF and DNS-rebinding
  guards, sensitive-file deny-list matching, session-owner scoping). The
  wrapper image here is `FROM` the upstream image, pinned by digest, and adds
  only the three Railway-specific fixes described below.
- **Web search that returns results instead of 403.** Odysseus queries SearXNG
  with `format=json`. The stock SearXNG image ships `search.formats: [html]`
  only, so an unmodified SearXNG answers **HTTP 403** to every web search and
  Deep Research call while its own container stays perfectly healthy. The
  SearXNG image here installs the settings file upstream Odysseus ships for
  exactly that reason. Verified on the live deploy: a search through the app
  returns ranked results.

The other Railway fixes in the wrapper image:

- **The listener follows Railway's injected `$PORT`.** Upstream's command
  hardcodes `--port 7000`. Railway's HTTP healthcheck dials the injected port,
  not the domain's target port, so a fixed listener means a healthchecked
  service never goes healthy.
- **A real healthcheck.** Every other Odysseus listing publishes no
  healthcheck path at all, so a half-broken boot still reports SUCCESS. This
  one probes `/api/health`, which upstream leaves outside the auth middleware.
- **`@playwright/mcp` is warmed into the npx cache at build time.** Upstream
  installs it over the network on first start; on Railway that cache lives on
  the ephemeral layer, so the download repeats on every deploy and the
  Built-in: Browser MCP server is missing until it finishes.
- **ntfy stays private.** It is reachable only over Railway's private network.
  An ntfy server with a public domain and no auth lets anyone who finds the URL
  read and publish to your notification topics.

## Why Deploy Odysseus on Railway

Instead of a ChatGPT Plus or Claude Pro subscription with its own caps, you run
the workspace yourself and pay only your model provider. Railway handles the
four-service orchestration, private networking, TLS and volumes that would
otherwise be a Docker Compose file, a reverse proxy and a certificate renewal
you maintain. Railway also gives new accounts a free trial when signing up with
GitHub, so the whole stack can be launched and tried in minutes.

### Railway vs other hosting for Odysseus

| Provider | With Railway | With the other provider |
|---|---|---|
| **DigitalOcean** | Four services, private networking, volumes and HTTPS from one deploy | A droplet, Docker Compose, Nginx and certbot to maintain yourself |
| **AWS** | Flat usage pricing, no VPC/ECS/IAM wiring | Capable, but multi-container orchestration you configure |
| **Hetzner** | Managed restarts, logs, metrics, persistent storage | A cheap VPS and every operational task on you |

## Common Use Cases

- A private ChatGPT/Claude-style workspace shared with a small team.
- Chat across OpenAI, OpenRouter, Anthropic-compatible gateways or a remote
  Ollama endpoint from one interface, with your keys.
- Deep Research over a self-hosted search engine, with no per-query search bill.
- RAG: upload documents and query them through Chroma-backed memory.
- Agent workflows with tools, skills, reminders and scheduled tasks.

## Dependencies for Odysseus Hosting

- The Odysseus web app (FastAPI/uvicorn), on a persistent volume at `/app/data`
- ChromaDB for vector memory, on a persistent volume at `/data`
- SearXNG for web search and Deep Research, JSON output enabled
- ntfy for notifications, private, on a persistent volume at `/var/cache/ntfy`
- An API key for whichever LLM provider you use — added in the app's Settings
  page after login, not at deploy time

### Deployment Dependencies

- Odysseus: https://github.com/pewdiepie-archdaemon/odysseus
- Wrapper images: https://github.com/bon5co/odysseus-railway and
  https://github.com/bon5co/odysseus-railway-searxng
- ChromaDB: https://docs.trychroma.com
- SearXNG: https://docs.searxng.org
- ntfy: https://docs.ntfy.sh

### First login

The template generates `ODYSSEUS_ADMIN_PASSWORD` for you. After the deploy
finishes, open the `odysseus` service → Variables, copy that value, and log in
at the public URL as `admin`. Change it from the app's Settings page, then add
your model provider key there. Public signup is disabled by default.

## Implementation Details

```text
odysseus  -> public web app, volume /app/data, healthcheck /api/health
chroma    -> private vector store, volume /data
searxng   -> private metasearch, JSON output enabled
ntfy      -> private push server, volume /var/cache/ntfy
```

Only `odysseus` gets a public domain. The app's SQLite database, `auth.json`,
uploads, generated images, skills and the embedding-model cache all live under
`/app/data`, so they survive redeploys; the ChromaDB collections live on their
own volume. The upstream entrypoint is preserved rather than replaced by a
start command, because it repairs the ownership of the volume Railway mounts as
uid 0 and runs first-time setup before dropping privileges.


## 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/odysseus-v102-or-pewdiepie-ai-workspace-
