---
title: "Deploy World Monitor Self-Hosted"
description: "World Monitor global intelligence dashboard, 143 feeds live with no keys"
category: "Analytics"
url: https://railway.com/deploy/world-monitor-self-hosted
---

# Deploy World Monitor Self-Hosted

World Monitor global intelligence dashboard, 143 feeds live with no keys

**[Deploy World Monitor Self-Hosted on Railway](https://railway.com/template/world-monitor-self-hosted)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/world-monitor-self-hosted/manifest.json

- **Creator:** Protemplate
- **Category:** Analytics
- **Total deploys:** 3

## Template content

### worldmonitor https://raw.githubusercontent.com/koala73/worldmonitor/main/public/favico/android-chrome-512x512.png

- **Source:** https://github.com/protemplate/worldmonitor
- **Start command:** `sh -c 'echo IyEvYmluL3NoCnNldCAtZQpta2RpciAtcCAvdG1wL3dtLWJpbgpjYXQgPiAvdG1wL3dtLWJpbi9lbnZzdWJzdCA8PCdFT0YnCiMhL2Jpbi9zaApyZWFsPSIiCmZvciBwIGluIC91c3IvYmluL2VudnN1YnN0IC91c3IvbG9jYWwvYmluL2VudnN1YnN0IC9iaW4vZW52c3Vic3Q7IGRvCiAgaWYgWyAteCAiJHAiIF07IHRoZW4gcmVhbD0iJHAiOyBicmVhazsgZmkKZG9uZQpbIC1uICIkcmVhbCIgXSB8fCB7IGVjaG8gImVudnN1YnN0IG5vdCBmb3VuZCIgPiYyOyBleGl0IDEyNzsgfQpvdXQ9IiQoIiRyZWFsIiAiJEAiKSIgfHwgZXhpdCAkPwpjYXNlICIkb3V0IiBpbgogIConWzo6XTo4MDgwJyopIHByaW50ZiAnJXNcbicgIiRvdXQiIDs7CiAgKikgcHJpbnRmICclc1xuJyAiJG91dCIgfCBzZWQgJ3MvbGlzdGVuIDgwODA7L2xpc3RlbiA4MDgwOyBsaXN0ZW4gWzo6XTo4MDgwOy8nIDs7CmVzYWMKRU9GCmNobW9kICt4IC90bXAvd20tYmluL2VudnN1YnN0CmV4cG9ydCBQQVRIPSIvdG1wL3dtLWJpbjokUEFUSCIKZXhlYyAvYXBwL2VudHJ5cG9pbnQuc2gK | base64 -d > /tmp/start.sh && exec sh /tmp/start.sh'`
- **Health check:** /api/sidecar-health

### ais-relay https://raw.githubusercontent.com/koala73/worldmonitor/main/public/favico/android-chrome-512x512.png

- **Source:** https://github.com/protemplate/worldmonitor
- **Health check:** /health
- **Public domain:** Yes

### seeders https://raw.githubusercontent.com/koala73/worldmonitor/main/public/favico/android-chrome-512x512.png

- **Source:** https://github.com/protemplate/worldmonitor
- **Start command:** `sh -c 'echo IyEvYmluL3NoCiMgc2VlZGVycyBzZXJ2aWNlIHN0YXJ0IGNvbW1hbmQgKGJhc2U2NC1lbWJlZGRlZCBpbiBzZXJpYWxpemVkLWNvbmZpZy5qc29uKS4gUE9TSVggc2guCiMgVXBzdHJlYW0gc2VsZi1ob3N0aW5nIHJ1bnMgc2NyaXB0cy9zZWVkLSoubWpzIGZyb20gdGhlIEhPU1Qgb24gYSBjcm9uLiBSYWlsd2F5IGhhcyBubyBob3N0LCBzbyB0aGlzCiMgbG9uZy1ydW5uaW5nIGxvb3AgZG9lcyB0aGUgc2FtZSBqb2IgaW5zaWRlIHRoZSBwcm9qZWN0OiBpdCB3cml0ZXMgcHVibGljIGRhdGFzZXRzIGludG8gUmVkaXMgdGhyb3VnaAojIHJlZGlzLXJlc3QsIHRoZW4gc2xlZXBzLgojICAgU0VFRF9NT0RFPWNvcmUgKGRlZmF1bHQpOiBydW4gdGhlIHNlZWRlcnMgbmFtZWQgaW4gU0VFREVSUyAoY29tbWEgc2VwYXJhdGVkLCBubyAic2VlZC0iIHByZWZpeCwgbm8KIyAgICAgICAiLm1qcyIpLCBTRUVEX1BBUkFMTEVMIGF0IGEgdGltZS4gVGhlIGRlZmF1bHQgbGlzdCBpcyBldmVyeSBzZWVkZXIgdmVyaWZpZWQgb24gUmFpbHdheSBvbgojICAgICAgIDIwMjYtMDktMzAgdG8gcHVibGlzaCByZWFsIGRhdGEgd2l0aCBOTyBBUEkga2V5cyAoc2VlIFJFU0VBUkNILm1kIGZvciBob3cgaXQgd2FzIG1lYXN1cmVkKS4KIyAgIFNFRURfTU9ERT1hbGw6IHVwc3RyZWFtJ3Mgc2NyaXB0cy9ydW4tc2VlZGVycy5zaCAoYWxsIH4yMTQsIHNlcXVlbnRpYWwsIG1hbnkgbmVlZCBrZXlzKS4KIyBTRUVEX1BBUkFMTEVMIGFib3ZlIDMgc3RhcnRzIHRvIHRyaXAgcHVibGljIEFQSSByYXRlIGxpbWl0cyAoT3Blbi1NZXRlbyBhbnN3ZXJlZCA0MjkgYXQgNikuCnNldCAtdQo6ICIke1VQU1RBU0hfUkVESVNfUkVTVF9VUkw6P1VQU1RBU0hfUkVESVNfUkVTVF9VUkwgaXMgcmVxdWlyZWR9Igo6ICIke1VQU1RBU0hfUkVESVNfUkVTVF9UT0tFTjo/VVBTVEFTSF9SRURJU19SRVNUX1RPS0VOIGlzIHJlcXVpcmVkfSIKY2QgL2FwcApJTlRFUlZBTD0iJHtTRUVEX0lOVEVSVkFMX1NFQ09ORFM6LTE4MDB9IgpDQVA9IiR7U0VFRF9USU1FT1VUOi02MDB9IgpQQVI9IiR7U0VFRF9QQVJBTExFTDotM30iCgojIE9uZSBzZWVkZXIgdW5kZXIgYSBwb3J0YWJsZSB0aW1lIGNhcCAobm8gZGVwZW5kZW5jeSBvbiB0aW1lb3V0KDEpKTsgcHJpbnRzIE9LIG9yIEZBSUwuCmNhdCA+IC90bXAvc2VlZC1vbmUuc2ggPDwnT05FJwpuYW1lPSIkMSI7IENBUD0iJDIiOyBmPSIuL3NlZWQtJG5hbWUubWpzIgpbIC1mICIkZiIgXSB8fCB7IGVjaG8gIltzZWVkZXJzXSAkbmFtZTogbm8gc3VjaCBzZWVkZXIgdXBzdHJlYW0sIHNraXBwZWQiOyBleGl0IDA7IH0Kbm9kZSAiJGYiID4gIi90bXAvc2VlZC0kbmFtZS5sb2ciIDI+JjEgJiBwaWQ9JCEKKCBzbGVlcCAiJENBUCI7IGtpbGwgLTkgIiRwaWQiIDI+L2Rldi9udWxsICkgJiB3PSQhCndhaXQgIiRwaWQiOyByYz0kPwpraWxsICIkdyIgMj4vZGV2L251bGwKaWYgWyAiJHJjIiA9IDAgXTsgdGhlbiBlY2hvICJbc2VlZGVyc10gJG5hbWU6IE9LIgplbHNlIGVjaG8gIltzZWVkZXJzXSAkbmFtZTogRkFJTCByYz0kcmMgKCQodGFpbCAtbiAxICIvdG1wL3NlZWQtJG5hbWUubG9nIiB8IHRyIC1kICdccicgfCBjdXQgLWMxLTE2MCkpIjsgZmkKT05FCgojIFdhaXQgZm9yIHJlZGlzLXJlc3QgKGl0IGFuc3dlcnMgNDAxIHdpdGhvdXQgdGhlIGJlYXJlciB0b2tlbiwgMjAwIHdpdGggaXQpLgppPTAKdW50aWwgbm9kZSAtZSAiZmV0Y2gocHJvY2Vzcy5lbnYuVVBTVEFTSF9SRURJU19SRVNUX1VSTCsnL3BpbmcnLHtoZWFkZXJzOntBdXRob3JpemF0aW9uOidCZWFyZXIgJytwcm9jZXNzLmVudi5VUFNUQVNIX1JFRElTX1JFU1RfVE9LRU59fSkudGhlbihyPT5wcm9jZXNzLmV4aXQoci5vaz8wOjEpLCgpPT5wcm9jZXNzLmV4aXQoMSkpIjsgZG8KICBpPSQoKGkrMSkpOyBbICIkaSIgLWdlIDYwIF0gJiYgeyBlY2hvICJbc2VlZGVyc10gcmVkaXMtcmVzdCBzdGlsbCB1bnJlYWNoYWJsZSwgdHJ5aW5nIGFueXdheSI7IGJyZWFrOyB9CiAgc2xlZXAgNQpkb25lCgpjeWNsZT0wCndoaWxlIHRydWU7IGRvCiAgY3ljbGU9JCgoY3ljbGUrMSkpCiAgZWNobyAiW3NlZWRlcnNdIGN5Y2xlICRjeWNsZSBzdGFydGluZyAoU0VFRF9NT0RFPSR7U0VFRF9NT0RFOi1jb3JlfSwgcGFyYWxsZWwgJFBBUikiCiAgaWYgWyAiJHtTRUVEX01PREU6LWNvcmV9IiA9ICJhbGwiIF07IHRoZW4KICAgIFNFRURfVElNRU9VVD0iJENBUCIgc2ggLi9ydW4tc2VlZGVycy5zaAogIGVsc2UKICAgIGVjaG8gIiR7U0VFREVSUzotfSIgfCB0ciAnLCcgJ1xuJyB8IHNlZCAncy9bWzpzcGFjZTpdXS8vZycgfCBncmVwIC4gXAogICAgICB8IHhhcmdzIC1QICIkUEFSIiAtSXt9IHNoIC90bXAvc2VlZC1vbmUuc2gge30gIiRDQVAiID4gL3RtcC9zZWVkLWN5Y2xlLmxvZyAyPiYxCiAgICBjYXQgL3RtcC9zZWVkLWN5Y2xlLmxvZwogICAgZWNobyAiW3NlZWRlcnNdIGN5Y2xlICRjeWNsZSBkb25lOiAkKGdyZXAgLWMgJzogT0skJyAvdG1wL3NlZWQtY3ljbGUubG9nKSBvaywgJChncmVwIC1jICc6IEZBSUwnIC90bXAvc2VlZC1jeWNsZS5sb2cpIGZhaWxlZCIKICBmaQogIGVjaG8gIltzZWVkZXJzXSBzbGVlcGluZyAke0lOVEVSVkFMfXMiCiAgc2xlZXAgIiRJTlRFUlZBTCIKZG9uZQo= | base64 -d > /tmp/seeders.sh && exec sh /tmp/seeders.sh'`

### redis-rest https://avatars.githubusercontent.com/u/1529926?v=4

- **Source:** https://github.com/protemplate/worldmonitor
- **Start command:** `sh -c 'echo IyEvYmluL3NoCnNldCAtZQpjYXQgPiAvdG1wL2R1YWxzdGFjay5tanMgPDwnRU9GJwppbXBvcnQgbmV0IGZyb20gJ25vZGU6bmV0JzsKY29uc3QgbGlzdGVuID0gbmV0LlNlcnZlci5wcm90b3R5cGUubGlzdGVuOwpuZXQuU2VydmVyLnByb3RvdHlwZS5saXN0ZW4gPSBmdW5jdGlvbiAoLi4uYXJncykgewogIGlmIChhcmdzWzFdID09PSAnMC4wLjAuMCcpIGFyZ3NbMV0gPSAnOjonOwogIHJldHVybiBsaXN0ZW4uYXBwbHkodGhpcywgYXJncyk7Cn07CkVPRgpleGVjIG5vZGUgLS1pbXBvcnQ9ZmlsZTovLy90bXAvZHVhbHN0YWNrLm1qcyAvYXBwL3JlZGlzLXJlc3QtcHJveHkubWpzCg== | base64 -d > /tmp/start.sh && exec sh /tmp/start.sh'`

### Redis https://avatars.githubusercontent.com/u/1529926?v=4

- **Image:** redis:7.4.11-alpine
- **Start command:** `sh -c 'exec docker-entrypoint.sh redis-server --requirepass "$REDIS_PASSWORD" --maxmemory "$REDIS_MAXMEMORY" --maxmemory-policy allkeys-lru --save 60 1 --dir /data --bind :: 0.0.0.0'`

### worldmonitor-gateway https://avatars.githubusercontent.com/u/12955528?v=4

- **Image:** caddy:2.11.4-alpine
- **Start command:** `sh -c 'echo IyEvYmluL3NoCnNldCAtZQo6ICIke1BPUlQ6P1BPUlQgaXMgcmVxdWlyZWR9Igo6ICIke1VQU1RSRUFNOj9VUFNUUkVBTSBpcyByZXF1aXJlZH0iCkFVVEg9IiIKaWYgWyAiJHtQVUJMSUNfREFTSEJPQVJEOi1mYWxzZX0iID0gInRydWUiIF07IHRoZW4KICBlY2hvICJbZ2F0ZXdheV0gUFVCTElDX0RBU0hCT0FSRD10cnVlOiBzZXJ2aW5nIFdvcmxkIE1vbml0b3IgV0lUSE9VVCBhIGxvZ2luIHByb21wdCIKZWxzZQogIDogIiR7VUlfVVNFUk5BTUU6P1VJX1VTRVJOQU1FIGlzIHJlcXVpcmVkfSIKICA6ICIke1VJX1BBU1NXT1JEOj9VSV9QQVNTV09SRCBpcyByZXF1aXJlZH0iCiAgSEFTSD0iJChjYWRkeSBoYXNoLXBhc3N3b3JkIC0tcGxhaW50ZXh0ICIkVUlfUEFTU1dPUkQiKSIKICBBVVRIPSIgICAgYmFzaWNfYXV0aCB7CiAgICAgICRVSV9VU0VSTkFNRSAkSEFTSAogICAgfSIKZmkKY2F0ID4gL2V0Yy9jYWRkeS9DYWRkeWZpbGUgPDxFT0YKewogIGF1dG9faHR0cHMgb2ZmCiAgYWRtaW4gb2ZmCiAgc2VydmVycyB7CiAgICBwcm90b2NvbHMgaDEgaDJjCiAgfQp9CjokUE9SVCB7CiAgaGFuZGxlIC9nYXRld2F5LWhlYWx0aCB7CiAgICByZXNwb25kICJvayIgMjAwCiAgfQogIGhhbmRsZSB7CiRBVVRICiAgICByZXZlcnNlX3Byb3h5ICRVUFNUUkVBTSB7CiAgICAgIGhlYWRlcl91cCAtQXV0aG9yaXphdGlvbgogICAgfQogIH0KfQpFT0YKZXhlYyBjYWRkeSBydW4gLS1jb25maWcgL2V0Yy9jYWRkeS9DYWRkeWZpbGUgLS1hZGFwdGVyIGNhZGR5ZmlsZQo= | base64 -d > /tmp/start.sh && exec sh /tmp/start.sh'`
- **Health check:** /gateway-health
- **Public domain:** Yes

## Documentation

# Deploy and Host World Monitor Self-Hosted on Railway

World Monitor is a real time global intelligence dashboard. One interactive map brings together earthquakes, wildfires, weather alerts, natural disasters, conflict and protest events, ship and flight tracking, GPS jamming, markets, prediction markets, crypto, cyber threats and an AI ranked news digest, with country briefs and an MCP server for agents.

## About Hosting World Monitor Self-Hosted

This template runs the complete self-hosted stack from the upstream Docker setup instead of a frontend that forwards to the hosted API. Your dashboard reads from your own Redis, filled by your own relay and seeders. It deploys six services: the World Monitor app (nginx plus the Node API sidecar), a login gateway, the relay that handles live feeds, news RSS and market data, an Upstash compatible REST proxy, Redis with a persistent volume, and a seeders service that refreshes public datasets every 30 minutes. The dashboard arrives populated with no API keys at all: the seeders service runs 143 of upstream's 214 data feeds by default, each one measured on Railway to publish real data without a key. The World Monitor services are built from a pinned fork of upstream (`protemplate/worldmonitor`, branch `railway-stable`), because upstream publishes no images for the self-hosted stack, several security fixes are newer than the last release tag, and following upstream's moving `main` directly would let a broken upstream commit break new deploys. Every secret is generated at deploy and every service is wired over Railway's private network.

## Common Use Cases

- **Team situation room**: a private, login protected world view for analysts, newsrooms, security and risk teams
- **Geopolitical and supply chain monitoring**: conflicts, chokepoints, shipping, energy and markets on one map
- **Agent data source**: point Claude or other MCP clients at `/api/mcp` with your operator key
- **Keyless public data dashboard**: earthquakes, weather, natural events, prediction markets and crypto with no API keys at all

## Dependencies for World Monitor Self-Hosted Hosting

- **Redis**: included, with a persistent volume
- **API keys**: none required. Optional keys (Groq or OpenRouter for AI summaries, aisstream.io for ships, NASA FIRMS for wildfires, FRED, EIA, ACLED, Finnhub) unlock more layers

### Deployment Dependencies

- [World Monitor on GitHub](https://github.com/koala73/worldmonitor)
- [Upstream self hosting guide](https://github.com/koala73/worldmonitor/blob/main/SELF_HOSTING.md)
- [aisstream.io](https://aisstream.io) for the free ship tracking key

### Implementation Details

First steps after deploy:

1. Wait for the builds to finish. The app image compiles the frontend, so the first deploy takes several minutes.
2. Open the `worldmonitor-gateway` domain and sign in with `UI_USERNAME` and `UI_PASSWORD` from that service's variables.
3. Give the `seeders` service about ten minutes for its first full cycle; panels fill in as it runs. To enable a feed that needs a key, add the key, then append that seeder's name to `SEEDERS`.
4. Add optional API keys on the service that uses them and redeploy that service.

Key variables:

```env
# worldmonitor-gateway
UI_USERNAME=admin
UI_PASSWORD=${{secret(24)}}
PUBLIC_DASHBOARD=false          # true removes the login prompt

# worldmonitor
WORLDMONITOR_VALID_KEYS=wm_${{secret(40,"abcdef0123456789")}}   # X-WorldMonitor-Key for API and MCP
UPSTASH_REDIS_REST_URL=http://${{redis-rest.RAILWAY_PRIVATE_DOMAIN}}:${{redis-rest.PORT}}
WS_RELAY_URL=https://${{ais-relay.RAILWAY_PUBLIC_DOMAIN}}
GROQ_API_KEY=                   # optional, AI summaries

# ais-relay
RELAY_SHARED_SECRET=${{secret(64,"abcdef0123456789")}}
AISSTREAM_API_KEY=              # optional, live ships

# seeders
SEED_MODE=core                  # all runs every upstream seeder
SEED_PARALLEL=3                 # seeders at once; above 3 public APIs rate limit
SEED_INTERVAL_SECONDS=1800
```

The dashboard has no login of its own, so it sits behind a Caddy basic auth gateway by default. The relay has a public domain because the app's SSRF guard only accepts public addresses for it; every non public relay route requires the shared secret.

World Monitor is licensed AGPL-3.0: if you modify it and serve the modified version to others over a network, you must publish your source.

## Why Deploy World Monitor Self-Hosted 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 World Monitor Self-Hosted 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

- [Typesense PHP](https://railway.com/deploy/typesense-php) — official PHP client against Railway
- [Typesense vs Meilisearch](https://railway.com/deploy/typesense-vs-meilisearch) — self-hosted Typesense vs Meilisearch
- [Matomo Analytics + MariaDB](https://railway.com/deploy/matomo-analytics-mariadb) — Privacy-friendly analytics with MariaDB and persistent volumes.

Open this page in a browser: https://railway.com/deploy/world-monitor-self-hosted
