Deploy Odysseus
odysseus from pewdiepie. Self-hosted AI workspace. odyseus
chroma
Just deployed
/data
Just deployed
/var/cache/ntfy
searxng
Just deployed
/etc/searxng
odysseus
Just deployed
/app/data
Deploy and Host Odysseus on Railway
Odysseus is a self-hosted AI workspace for chat, agents, tools, documents, memory, research, email, and model integrations. This Railway template deploys Odysseus with supporting services so you can run the web UI online while connecting it to external LLM APIs or a remote OpenAI-compatible endpoint.
About Hosting Odysseus
This template deploys a multi-service Odysseus stack on Railway: the main Odysseus app, ChromaDB for vector storage, SearXNG for web search, and ntfy for notifications. The services communicate over Railway private networking, while only the Odysseus web app is exposed publicly by default. Persistent volumes are used so application data, uploads, vectors, and service state survive redeploys. This template is intended for cloud-hosted Odysseus usage with external model providers such as OpenAI, OpenRouter, Anthropic-compatible gateways, or a remote Ollama/OpenAI-compatible server. It is not meant to run heavy local LLM inference inside Railway.
Common Use Cases
- Host a private AI workspace with chat, memory, tools, and document search.
- Use Odysseus with external LLM APIs instead of running local models.
- Run web research workflows through the bundled private SearXNG service.
- Upload documents and query them through Chroma-backed RAG.
- Test agent workflows, reminders, notifications, email tools, and MCP-style integrations.
Dependencies for Odysseus Hosting
- Odysseus web app
- ChromaDB vector database
- SearXNG metasearch engine
- ntfy notification service
- Railway persistent volumes
- External LLM API key or remote OpenAI-compatible/Ollama endpoint
Deployment Dependencies
Relevant links:
- Odysseus project: https://github.com/pewdiepie-archdaemon/odysseus
- Odysseus website: https://pewdiepie-archdaemon.github.io/odysseus/
- Chroma Docker deployment: https://cookbook.chromadb.dev/running/running-chroma/
- SearXNG settings: https://docs.searxng.org/admin/settings/index.html
- ntfy configuration: https://docs.ntfy.sh/config/
Implementation Details
This template creates four Railway services:
odysseus -> public web app, persistent volume mounted at /app/data
chroma -> private ChromaDB service, persistent volume mounted at /data
searxng -> private SearXNG service with JSON search enabled
ntfy -> private notification service, persistent volume mounted at /var/cache/ntfy
Only the odysseus service should have a public domain by default. The chroma, searxng, and ntfy services should remain private and communicate with Odysseus through Railway private networking.
First Login: Where to Find the Username and Password
After deploying the template, open your Railway project and select the odysseus service.
Go to:
odysseus service -> Variables
Find these variables:
ODYSSEUS_ADMIN_USER="admin"
ODYSSEUS_ADMIN_PASSWORD="${{secret(32)}}"
Railway generates the real password from ${{secret(32)}} when the template is deployed. In the Railway UI, the generated value is available in the Variables tab for the odysseus service. Use:
Username: value of ODYSSEUS_ADMIN_USER
Password: value of ODYSSEUS_ADMIN_PASSWORD
Then open the public Odysseus URL and log in with those credentials.
If you change ODYSSEUS_ADMIN_PASSWORD after the first successful setup, it may not reset an already-created admin account because Odysseus stores auth data in the persistent /app/data volume. For a fresh template deployment, the generated variables are the credentials to use for the first login.
Recommended Default Model
After first login, go to the Odysseus model/provider settings and configure an external LLM provider.
For the best first experience with tools and memory, set Claude Sonnet 4.6 as the default model if it is available through your provider. Sonnet is generally a better default than Haiku for tool-heavy workflows such as Memory MCP, RAG, agents, and multi-step tasks.
Haiku can be faster and cheaper, but it may answer directly instead of calling tools in some setups. If you are testing Memory MCP, prefer Sonnet 4.6 first, then switch to Haiku later only after confirming your tools work.
Recommended first model setup:
Default model: Claude Sonnet 4.6
Use for: chat, agents, Memory MCP, RAG, tool use
Avoid for first Memory MCP test: Haiku
Memory MCP Test
After setting a capable default model such as Claude Sonnet 4.6, test Memory MCP from the Odysseus chat.
Send:
Call the tool mcp__memory__manage_memory with action "add", category "fact", and text "My Railway Odysseus template is working."
Then send:
Call the tool mcp__memory__manage_memory with action "search" and text "Railway Odysseus template".
Expected result: Odysseus should add the memory, then retrieve it from memory search.
If the model replies that it has no memory access, check that tools/agent mode are enabled in the UI and use Sonnet 4.6 instead of Haiku for the test.
Recommended Odysseus Variables
AUTH_ENABLED="true" # enable authentication
LOCALHOST_BYPASS="false" # disable localhost auth bypass for public deployments
ODYSSEUS_ADMIN_USER="admin" # initial admin username
ODYSSEUS_ADMIN_PASSWORD="${{secret(32)}}" # generated admin password shown in Railway Variables
DATABASE_URL="sqlite:///./data/app.db" # SQLite database stored under /app/data
CHROMADB_HOST="${{chroma.RAILWAY_PRIVATE_DOMAIN}}" # private Chroma hostname
CHROMADB_PORT="8000" # internal Chroma port
SEARXNG_INSTANCE="http://${{searxng.RAILWAY_PRIVATE_DOMAIN}}:8080" # private SearXNG URL
NTFY_BASE_URL="http://${{ntfy.RAILWAY_PRIVATE_DOMAIN}}:80" # private ntfy URL
ALLOWED_ORIGINS="https://${{odysseus.RAILWAY_PUBLIC_DOMAIN}}" # public Odysseus origin
SECURE_COOKIES="true" # secure cookies over Railway HTTPS
LLM_HOST="localhost" # compatibility default; not used for local inference on Railway
FASTEMBED_MODEL="sentence-transformers/all-MiniLM-L6-v2" # default embedding model
FASTEMBED_CACHE_PATH="/app/data/fastembed" # persistent FastEmbed cache
CLEANUP_INTERVAL_HOURS="24" # background cleanup interval
ODYSSEUS_INPROCESS_POLLERS="1" # enable internal pollers
ODYSSEUS_INPROCESS_TASKS="1" # enable internal task scheduler
ODYSSEUS_SCRIPT_HOST="localhost" # internal script host
PUID="1000" # non-root runtime user ID
PGID="1000" # non-root runtime group ID
PLAYWRIGHT_BROWSERS_PATH="/ms-playwright" # Playwright browser path inside the image
NODE_OPTIONS="--max-old-space-size=4096" # Node.js memory limit for MCP/Playwright
Optional provider variables can be added when needed:
OPENAI_API_KEY="" # optional OpenAI API key
OLLAMA_BASE_URL="" # optional remote Ollama URL
RESEARCH_LLM_ENDPOINT="" # optional Deep Research LLM endpoint
TAVILY_API_KEY="" # optional Tavily Search API key
SERPER_API_KEY="" # optional Serper Search API key
DATA_BRAVE_API_KEY="" # optional Brave Search API key
GOOGLE_API_KEY="" # optional Google API key
GOOGLE_PSE_CX="" # optional Google Programmable Search Engine ID
HF_TOKEN="" # optional Hugging Face token
HUGGING_FACE_HUB_TOKEN="" # optional Hugging Face Hub token
EMBEDDING_URL="" # optional OpenAI-compatible embeddings endpoint
EMBEDDING_MODEL="" # optional embedding model for EMBEDDING_URL
LLM_HOSTS="" # optional additional LLM hosts
After Deployment
- Open the public Odysseus URL.
- Log in using the credentials from the
odysseusservice Variables tab. - Add your preferred external model provider in the Odysseus UI.
- Set Claude Sonnet 4.6 as the default model if available.
- Test a simple prompt, for example:
Reply only: OK_RAILWAY. - Test Memory MCP with Sonnet 4.6 before trying Haiku.
- Test web search through SearXNG.
- Upload a small document and test RAG.
- Redeploy Odysseus and confirm that your data persists.
For mobile ntfy notifications, expose the ntfy service publicly and update the ntfy base URL to the public Railway domain. The default template keeps ntfy private, which is enough for internal Odysseus notification delivery.
Why Deploy Odysseus 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 Odysseus 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.
Template Content
