---
title: "Deploy Latitude AI Agent Observability"
description: "Latitude AI agent observability with closed signup and first-login inbox"
category: "Observability"
url: https://railway.com/deploy/latitude-ai-agent-observability
---

# Deploy Latitude AI Agent Observability

Latitude AI agent observability with closed signup and first-login inbox

**[Deploy Latitude AI Agent Observability on Railway](https://railway.com/template/latitude-ai-agent-observability)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/latitude-ai-agent-observability/manifest.json

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

## Template content

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

- **Image:** redis:7.4.11-alpine
- **Start command:** `sh -c 'exec docker-entrypoint.sh redis-server --requirepass "$REDIS_PASSWORD" --appendonly yes --maxmemory-policy noeviction --dir /data --bind :: 0.0.0.0'`

### ClickHouse https://devicons.railway.app/i/clickhouse.svg

- **Image:** clickhouse/clickhouse-server:26.2
- **Start command:** `bash -c 'mkdir -p /etc/clickhouse-server/config.d && echo PGNsaWNraG91c2U+CiAgICA8bGlzdGVuX2hvc3Q+Ojo8L2xpc3Rlbl9ob3N0PgogICAgPGxpc3Rlbl90cnk+MTwvbGlzdGVuX3RyeT4KICAgIDxsb2dnZXI+CiAgICAgICAgPGxldmVsPndhcm5pbmc8L2xldmVsPgogICAgICAgIDxjb25zb2xlPnRydWU8L2NvbnNvbGU+CiAgICA8L2xvZ2dlcj4KICAgIDxxdWVyeV9sb2c+CiAgICAgICAgPHR0bD5ldmVudF9kYXRlICsgSU5URVJWQUwgMyBEQVkgREVMRVRFPC90dGw+CiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz42MDAwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPgogICAgPC9xdWVyeV9sb2c+CiAgICA8dHJhY2VfbG9nIHJlbW92ZT0iMSIvPgogICAgPHRleHRfbG9nIHJlbW92ZT0iMSIvPgogICAgPG1ldHJpY19sb2cgcmVtb3ZlPSIxIi8+CiAgICA8YXN5bmNocm9ub3VzX21ldHJpY19sb2cgcmVtb3ZlPSIxIi8+CiAgICA8bGF0ZW5jeV9sb2cgcmVtb3ZlPSIxIi8+CiAgICA8cXVlcnlfbWV0cmljX2xvZyByZW1vdmU9IjEiLz4KICAgIDxwcm9jZXNzb3JzX3Byb2ZpbGVfbG9nIHJlbW92ZT0iMSIvPgogICAgPHBhcnRfbG9nIHJlbW92ZT0iMSIvPgogICAgPGVycm9yX2xvZyByZW1vdmU9IjEiLz4KPC9jbGlja2hvdXNlPgo= | base64 -d > /etc/clickhouse-server/config.d/railway.xml && exec /entrypoint.sh'`

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

- **Image:** redis:7.4.11-alpine
- **Start command:** `sh -c 'exec docker-entrypoint.sh redis-server --protected-mode no --save "" --appendonly no --bind :: 0.0.0.0'`

### Mailpit https://avatars.githubusercontent.com/u/1463435?v=4

- **Image:** axllent/mailpit:v1.33.1
- **Health check:** /livez
- **Public domain:** Yes

### Web https://raw.githubusercontent.com/latitude-dev/latitude-llm/v0.3.126/docs/favicon.svg

- **Image:** latitudedata/web:0.3.126
- **Start command:** `sh -c 'echo IyEvYmluL3NoCiMgUmFpbHdheSBzdGFydCB3cmFwcGVyIGZvciB3ZWIgLyBhcGkgLyBpbmdlc3QgLyB3b3JrZXJzIC8gd29ya2Zsb3dzIChiYXNlNjQtZW1iZWRkZWQpLgojIFN0YW5kcyBpbiBmb3IgY29tcG9zZSdzIGRlcGVuZHNfb246IG1pZ3JhdGlvbnMgKHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseSk6IGJsb2NrIHVudGlsIHRoZQojIE1pZ3JhdGlvbnMgc2VydmljZSBhbnN3ZXJzIChzY2hlbWEgYXBwbGllZCwgVGVtcG9yYWwgcmVhY2hhYmxlKSwgdGhlbiBleGVjIHRoZSBpbWFnZSdzIG93biBDTUQuCnNldCAtZQo6ICIke01JR1JBVElPTlNfVVJMOj9NSUdSQVRJT05TX1VSTCBpcyByZXF1aXJlZH0iCnVudGlsIGN1cmwgLWZzUyAtbyAvZGV2L251bGwgLS1tYXgtdGltZSA1ICIkTUlHUkFUSU9OU19VUkwiOyBkbwogIGVjaG8gIndhaXRpbmcgZm9yIHRoZSBNaWdyYXRpb25zIHNlcnZpY2UgYXQgJE1JR1JBVElPTlNfVVJMIgogIHNsZWVwIDUKZG9uZQpleGVjICIkQCIK | base64 -d > /tmp/wait-migrations.sh && exec sh /tmp/wait-migrations.sh node --enable-source-maps --no-experimental-webstorage apps/web/.output/server/index.mjs'`
- **Health check:** /api/health
- **Public domain:** Yes

### Workflows https://raw.githubusercontent.com/latitude-dev/latitude-llm/v0.3.126/docs/favicon.svg

- **Image:** latitudedata/workflows:0.3.126
- **Start command:** `sh -c 'echo IyEvYmluL3NoCiMgUmFpbHdheSBzdGFydCB3cmFwcGVyIGZvciB3ZWIgLyBhcGkgLyBpbmdlc3QgLyB3b3JrZXJzIC8gd29ya2Zsb3dzIChiYXNlNjQtZW1iZWRkZWQpLgojIFN0YW5kcyBpbiBmb3IgY29tcG9zZSdzIGRlcGVuZHNfb246IG1pZ3JhdGlvbnMgKHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseSk6IGJsb2NrIHVudGlsIHRoZQojIE1pZ3JhdGlvbnMgc2VydmljZSBhbnN3ZXJzIChzY2hlbWEgYXBwbGllZCwgVGVtcG9yYWwgcmVhY2hhYmxlKSwgdGhlbiBleGVjIHRoZSBpbWFnZSdzIG93biBDTUQuCnNldCAtZQo6ICIke01JR1JBVElPTlNfVVJMOj9NSUdSQVRJT05TX1VSTCBpcyByZXF1aXJlZH0iCnVudGlsIGN1cmwgLWZzUyAtbyAvZGV2L251bGwgLS1tYXgtdGltZSA1ICIkTUlHUkFUSU9OU19VUkwiOyBkbwogIGVjaG8gIndhaXRpbmcgZm9yIHRoZSBNaWdyYXRpb25zIHNlcnZpY2UgYXQgJE1JR1JBVElPTlNfVVJMIgogIHNsZWVwIDUKZG9uZQpleGVjICIkQCIK | base64 -d > /tmp/wait-migrations.sh && exec sh /tmp/wait-migrations.sh node --enable-source-maps apps/workflows/dist/server.cjs'`
- **Health check:** /health

### Workers https://raw.githubusercontent.com/latitude-dev/latitude-llm/v0.3.126/docs/favicon.svg

- **Image:** latitudedata/workers:0.3.126
- **Start command:** `sh -c 'echo IyEvYmluL3NoCiMgUmFpbHdheSBzdGFydCB3cmFwcGVyIGZvciB3ZWIgLyBhcGkgLyBpbmdlc3QgLyB3b3JrZXJzIC8gd29ya2Zsb3dzIChiYXNlNjQtZW1iZWRkZWQpLgojIFN0YW5kcyBpbiBmb3IgY29tcG9zZSdzIGRlcGVuZHNfb246IG1pZ3JhdGlvbnMgKHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseSk6IGJsb2NrIHVudGlsIHRoZQojIE1pZ3JhdGlvbnMgc2VydmljZSBhbnN3ZXJzIChzY2hlbWEgYXBwbGllZCwgVGVtcG9yYWwgcmVhY2hhYmxlKSwgdGhlbiBleGVjIHRoZSBpbWFnZSdzIG93biBDTUQuCnNldCAtZQo6ICIke01JR1JBVElPTlNfVVJMOj9NSUdSQVRJT05TX1VSTCBpcyByZXF1aXJlZH0iCnVudGlsIGN1cmwgLWZzUyAtbyAvZGV2L251bGwgLS1tYXgtdGltZSA1ICIkTUlHUkFUSU9OU19VUkwiOyBkbwogIGVjaG8gIndhaXRpbmcgZm9yIHRoZSBNaWdyYXRpb25zIHNlcnZpY2UgYXQgJE1JR1JBVElPTlNfVVJMIgogIHNsZWVwIDUKZG9uZQpleGVjICIkQCIK | base64 -d > /tmp/wait-migrations.sh && exec sh /tmp/wait-migrations.sh node --enable-source-maps apps/workers/dist/server.cjs'`
- **Health check:** /health

### Ingest https://raw.githubusercontent.com/latitude-dev/latitude-llm/v0.3.126/docs/favicon.svg

- **Image:** latitudedata/ingest:0.3.126
- **Start command:** `sh -c 'echo IyEvYmluL3NoCiMgUmFpbHdheSBzdGFydCB3cmFwcGVyIGZvciB3ZWIgLyBhcGkgLyBpbmdlc3QgLyB3b3JrZXJzIC8gd29ya2Zsb3dzIChiYXNlNjQtZW1iZWRkZWQpLgojIFN0YW5kcyBpbiBmb3IgY29tcG9zZSdzIGRlcGVuZHNfb246IG1pZ3JhdGlvbnMgKHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseSk6IGJsb2NrIHVudGlsIHRoZQojIE1pZ3JhdGlvbnMgc2VydmljZSBhbnN3ZXJzIChzY2hlbWEgYXBwbGllZCwgVGVtcG9yYWwgcmVhY2hhYmxlKSwgdGhlbiBleGVjIHRoZSBpbWFnZSdzIG93biBDTUQuCnNldCAtZQo6ICIke01JR1JBVElPTlNfVVJMOj9NSUdSQVRJT05TX1VSTCBpcyByZXF1aXJlZH0iCnVudGlsIGN1cmwgLWZzUyAtbyAvZGV2L251bGwgLS1tYXgtdGltZSA1ICIkTUlHUkFUSU9OU19VUkwiOyBkbwogIGVjaG8gIndhaXRpbmcgZm9yIHRoZSBNaWdyYXRpb25zIHNlcnZpY2UgYXQgJE1JR1JBVElPTlNfVVJMIgogIHNsZWVwIDUKZG9uZQpleGVjICIkQCIK | base64 -d > /tmp/wait-migrations.sh && exec sh /tmp/wait-migrations.sh node --enable-source-maps apps/ingest/dist/server.cjs'`
- **Health check:** /health
- **Public domain:** Yes

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

- **Image:** pgvector/pgvector:0.8.7-pg16
- **Start command:** `sh -c 'echo IyEvYmluL3NoCiMgUmFpbHdheSBzdGFydCBjb21tYW5kIGZvciBQb3N0Z3JlcyAoYmFzZTY0LWVtYmVkZGVkKS4gUmVwbGFjZXMgdXBzdHJlYW0ncyBiaW5kLW1vdW50ZWQKIyBkb2NrZXIvaW5pdC1kYi5zaDogd3JpdGVzIHRoZSBpbml0IFNRTCB0aGF0IGNyZWF0ZXMgdGhlIHJlc3RyaWN0ZWQgUkxTIHJ1bnRpbWUgcm9sZSwgdGhlbgojIGhhbmRzIG9mZiB0byB0aGUgc3RvY2sgZW50cnlwb2ludCAod2hpY2ggZHJvcHMgcHJpdmlsZWdlcyBhbmQgb25seSBydW5zIGluaXQgc2NyaXB0cyBvbiBhbgojIGVtcHR5IGRhdGEgZGlyZWN0b3J5KS4gVGhlIHJvbGUgbXVzdCBleGlzdCBCRUZPUkUgbWlncmF0aW9ucyBydW46IG1pZ3JhdGlvbgojIDIwMjYwMzEwMDkwOTA5X3NldHVwLXJ1bnRpbWUtZGItdXNlciBvbmx5IGdyYW50cyB0byBsYXRpdHVkZV9hcHAgd2hlbiB0aGUgcm9sZSBleGlzdHMuCnNldCAtZXUKOiAiJHtQT1NUR1JFU19EQjo/UE9TVEdSRVNfREIgaXMgcmVxdWlyZWR9Igo6ICIke1BPU1RHUkVTX1JVTlRJTUVfVVNFUjo/UE9TVEdSRVNfUlVOVElNRV9VU0VSIGlzIHJlcXVpcmVkfSIKOiAiJHtQT1NUR1JFU19SVU5USU1FX1BBU1NXT1JEOj9QT1NUR1JFU19SVU5USU1FX1BBU1NXT1JEIGlzIHJlcXVpcmVkfSIKY2F0ID4gL2RvY2tlci1lbnRyeXBvaW50LWluaXRkYi5kLzEwLWxhdGl0dWRlLXJ1bnRpbWUtdXNlci5zcWwgPDxTUUwKQ1JFQVRFIFVTRVIgJHtQT1NUR1JFU19SVU5USU1FX1VTRVJ9IFdJVEggUEFTU1dPUkQgJyR7UE9TVEdSRVNfUlVOVElNRV9QQVNTV09SRH0nOwpHUkFOVCBDT05ORUNUIE9OIERBVEFCQVNFICIke1BPU1RHUkVTX0RCfSIgVE8gJHtQT1NUR1JFU19SVU5USU1FX1VTRVJ9OwpTUUwKZXhlYyBkb2NrZXItZW50cnlwb2ludC5zaCBwb3N0Z3JlcyAtYyB3YWxfbGV2ZWw9bG9naWNhbCAtYyBtYXhfY29ubmVjdGlvbnM9MzAwIC1jICJsaXN0ZW5fYWRkcmVzc2VzPSoiCg== | base64 -d > /tmp/postgres-start.sh && exec sh /tmp/postgres-start.sh'`

### Temporal https://avatars.githubusercontent.com/u/56493103?v=4

- **Image:** temporalio/auto-setup:1.29.7

### Migrations https://raw.githubusercontent.com/latitude-dev/latitude-llm/v0.3.126/docs/favicon.svg

- **Image:** latitudedata/migrations:0.3.126
- **Start command:** `sh -c 'echo IyEvYmluL3NoCiMgUmFpbHdheSBzdGFydCBjb21tYW5kIGZvciB0aGUgTWlncmF0aW9ucyBzZXJ2aWNlIChiYXNlNjQtZW1iZWRkZWQpLgojIFVwc3RyZWFtIHJ1bnMgbWlncmF0aW9ucyBhcyBhIG9uZS1zaG90IGNvbnRhaW5lciB0aGF0IHRoZSBhcHBzIHdhaXQgb24gd2l0aAojIGRlcGVuZHNfb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseS4gUmFpbHdheSBoYXMgbm8gc3VjaCBvcmRlcmluZyBhbmQgYSBjb250YWluZXIgdGhhdAojIGV4aXRzIG5ldmVyIHJlcG9ydHMgYSBoZWFsdGh5IGRlcGxveW1lbnQsIHNvIHRoaXMgc2VydmljZToKIyAgIDEuIHJldHJpZXMgdGhlIGltYWdlJ3Mgb3duIG1pZ3JhdGlvbiBjb21tYW5kcyB1bnRpbCBQb3N0Z3JlcyBhbmQgQ2xpY2tIb3VzZSBhY2NlcHQgdGhlbQojICAgMi4gd2FpdHMgZm9yIFRlbXBvcmFsIHRvIGxpc3RlbgojICAgMy4gc3RheXMgdXAgYW5zd2VyaW5nIDIwMCBvbiAkUE9SVDogdGhlICJtaWdyYXRpb24gZ2F0ZSIgZXZlcnkgYXBwIHdhaXRzIGZvciBiZWZvcmUgc3RhcnRpbmcKc2V0IC11CjogIiR7UE9SVDo/UE9SVCBpcyByZXF1aXJlZH0iCjogIiR7VEVNUE9SQUxfSE9TVDo/VEVNUE9SQUxfSE9TVCBpcyByZXF1aXJlZH0iCm49MAp1bnRpbCBwbnBtIC0tZmlsdGVyIEBwbGF0Zm9ybS9kYi1wb3N0Z3JlcyBwZzptaWdyYXRlICYmIHBucG0gLS1maWx0ZXIgQHBsYXRmb3JtL2RiLWNsaWNraG91c2UgY2g6dXA7IGRvCiAgbj0kKChuICsgMSkpCiAgaWYgWyAiJG4iIC1nZSA2MCBdOyB0aGVuIGVjaG8gIm1pZ3JhdGlvbnMgc3RpbGwgZmFpbGluZyBhZnRlciAkbiBhdHRlbXB0cywgZ2l2aW5nIHVwIjsgZXhpdCAxOyBmaQogIGVjaG8gImRhdGFzdG9yZXMgbm90IHJlYWR5IG9yIG1pZ3JhdGlvbiBmYWlsZWQgKGF0dGVtcHQgJG4gb2YgNjApLCByZXRyeWluZyBpbiA1cyIKICBzbGVlcCA1CmRvbmUKZWNobyAiUG9zdGdyZXMgYW5kIENsaWNrSG91c2UgbWlncmF0aW9ucyBhcHBsaWVkIgp1bnRpbCBub2RlIC0taW5wdXQtdHlwZT1jb21tb25qcyAtZSAnY29uc3Qgcz1yZXF1aXJlKCJuZXQiKS5jb25uZWN0KDcyMzMscHJvY2Vzcy5lbnYuVEVNUE9SQUxfSE9TVCk7cy5zZXRUaW1lb3V0KDMwMDApO3Mub24oImNvbm5lY3QiLCgpPT5wcm9jZXNzLmV4aXQoMCkpO3Mub24oImVycm9yIiwoKT0+cHJvY2Vzcy5leGl0KDEpKTtzLm9uKCJ0aW1lb3V0IiwoKT0+cHJvY2Vzcy5leGl0KDEpKSc7IGRvCiAgZWNobyAid2FpdGluZyBmb3IgVGVtcG9yYWwgYXQgJFRFTVBPUkFMX0hPU1Q6NzIzMyIKICBzbGVlcCA1CmRvbmUKIyBhdXRvLXNldHVwIHJlZ2lzdGVycyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgYSBmZXcgc2Vjb25kcyBhZnRlciB0aGUgZnJvbnRlbmQgc3RhcnRzIGxpc3RlbmluZwpzbGVlcCAxNQplY2hvICJtaWdyYXRpb24gZ2F0ZSBvcGVuIG9uIHBvcnQgJFBPUlQiCmV4ZWMgbm9kZSAtLWlucHV0LXR5cGU9Y29tbW9uanMgLWUgJ3JlcXVpcmUoImh0dHAiKS5jcmVhdGVTZXJ2ZXIoKHEscyk9PntzLndyaXRlSGVhZCgyMDAseyJjb250ZW50LXR5cGUiOiJ0ZXh0L3BsYWluIn0pO3MuZW5kKCJtaWdyYXRlZFxuIil9KS5saXN0ZW4oTnVtYmVyKHByb2Nlc3MuZW52LlBPUlQpLCI6OiIpJwo= | base64 -d > /tmp/migrations-start.sh && exec sh /tmp/migrations-start.sh'`
- **Health check:** /

### SeaweedFS https://raw.githubusercontent.com/seaweedfs/seaweedfs/4.47/note/seaweedfs.png

- **Image:** chrislusf/seaweedfs:4.47
- **Start command:** `sh -c 'echo IyEvYmluL3NoCiMgUmFpbHdheSBzdGFydCBjb21tYW5kIGZvciBTZWF3ZWVkRlMgKGJhc2U2NC1lbWJlZGRlZCkuIFVwc3RyZWFtJ3MgZG9ja2VyL3NlYXdlZWRmcy9pbml0LnNoCiMgKGNyZWF0ZSB0aGUgYnVja2V0IG9uY2UgdGhlIFMzIGdhdGV3YXkgaXMgdXApIHBsdXMgYW4gczMuanNvbiBpZGVudGl0eSBzbyB0aGUgUzMgQVBJIG5lZWRzCiMgY3JlZGVudGlhbHMgKHVwc3RyZWFtJ3MgYnVuZGxlZCBTZWF3ZWVkRlMgYWNjZXB0cyBhbm9ueW1vdXMgcmVxdWVzdHMpLgpzZXQgLWV1CjogIiR7UzNfQUNDRVNTX0tFWTo/UzNfQUNDRVNTX0tFWSBpcyByZXF1aXJlZH0iCjogIiR7UzNfU0VDUkVUX0tFWTo/UzNfU0VDUkVUX0tFWSBpcyByZXF1aXJlZH0iCkJVQ0tFVD0iJHtTM19CVUNLRVQ6LWxhdGl0dWRlfSIKbWtkaXIgLXAgL2V0Yy9zZWF3ZWVkZnMgL2RhdGEKY2F0ID4gL2V0Yy9zZWF3ZWVkZnMvczMuanNvbiA8PEpTT04KeyJpZGVudGl0aWVzIjpbeyJuYW1lIjoibGF0aXR1ZGUiLCJjcmVkZW50aWFscyI6W3siYWNjZXNzS2V5IjoiJHtTM19BQ0NFU1NfS0VZfSIsInNlY3JldEtleSI6IiR7UzNfU0VDUkVUX0tFWX0ifV0sImFjdGlvbnMiOlsiQWRtaW4iLCJSZWFkIiwiV3JpdGUiLCJMaXN0IiwiVGFnZ2luZyJdfV19CkpTT04KKAogIHVudGlsIGVjaG8gInMzLmJ1Y2tldC5saXN0IiB8IHdlZWQgc2hlbGwgPi9kZXYvbnVsbCAyPiYxOyBkbyBzbGVlcCAyOyBkb25lCiAgaWYgZWNobyAiczMuYnVja2V0Lmxpc3QiIHwgd2VlZCBzaGVsbCB8IGF3ayAne3ByaW50ICQxfScgfCBncmVwIC1xeCAiJEJVQ0tFVCI7IHRoZW4KICAgIGVjaG8gImJ1Y2tldCAkQlVDS0VUIGFscmVhZHkgZXhpc3RzIgogIGVsc2UKICAgIGVjaG8gInMzLmJ1Y2tldC5jcmVhdGUgLW5hbWUgJEJVQ0tFVCIgfCB3ZWVkIHNoZWxsCiAgZmkKKSAmCmV4ZWMgd2VlZCBzZXJ2ZXIgLWRpcj0vZGF0YSAtaXA9IiQoaG9zdG5hbWUgLWkpIiAtdm9sdW1lLm1heD02NCAtczMgLXMzLnBvcnQ9ODMzMyAtczMuY29uZmlnPS9ldGMvc2Vhd2VlZGZzL3MzLmpzb24K | base64 -d > /tmp/seaweedfs-start.sh && exec sh /tmp/seaweedfs-start.sh'`

### API https://raw.githubusercontent.com/latitude-dev/latitude-llm/v0.3.126/docs/favicon.svg

- **Image:** latitudedata/api:0.3.126
- **Start command:** `sh -c 'echo IyEvYmluL3NoCiMgUmFpbHdheSBzdGFydCB3cmFwcGVyIGZvciB3ZWIgLyBhcGkgLyBpbmdlc3QgLyB3b3JrZXJzIC8gd29ya2Zsb3dzIChiYXNlNjQtZW1iZWRkZWQpLgojIFN0YW5kcyBpbiBmb3IgY29tcG9zZSdzIGRlcGVuZHNfb246IG1pZ3JhdGlvbnMgKHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseSk6IGJsb2NrIHVudGlsIHRoZQojIE1pZ3JhdGlvbnMgc2VydmljZSBhbnN3ZXJzIChzY2hlbWEgYXBwbGllZCwgVGVtcG9yYWwgcmVhY2hhYmxlKSwgdGhlbiBleGVjIHRoZSBpbWFnZSdzIG93biBDTUQuCnNldCAtZQo6ICIke01JR1JBVElPTlNfVVJMOj9NSUdSQVRJT05TX1VSTCBpcyByZXF1aXJlZH0iCnVudGlsIGN1cmwgLWZzUyAtbyAvZGV2L251bGwgLS1tYXgtdGltZSA1ICIkTUlHUkFUSU9OU19VUkwiOyBkbwogIGVjaG8gIndhaXRpbmcgZm9yIHRoZSBNaWdyYXRpb25zIHNlcnZpY2UgYXQgJE1JR1JBVElPTlNfVVJMIgogIHNsZWVwIDUKZG9uZQpleGVjICIkQCIK | base64 -d > /tmp/wait-migrations.sh && exec sh /tmp/wait-migrations.sh node --enable-source-maps apps/api/dist/server.cjs'`
- **Health check:** /health

### API Gateway https://raw.githubusercontent.com/latitude-dev/latitude-llm/v0.3.126/docs/favicon.svg

- **Image:** caddy:2.11.8-alpine
- **Start command:** `sh -c ': "${PORT:?PORT is required}"; : "${UPSTREAM:?UPSTREAM is required}"; : "${BOOTSTRAP_TOKEN:?BOOTSTRAP_TOKEN is required}"; echo IyBBUEkgR2F0ZXdheTogdGhlIG9ubHkgcHVibGljIGVudHJ5IHRvIHRoZSBMYXRpdHVkZSBBUEkgKHRoZSBBUEkgc2VydmljZSBoYXMgbm8gZG9tYWluKS4KIyBVcHN0cmVhbSBzaGlwcyBQT1NUIC92MS9hY2NvdW50L2Jvb3RzdHJhcCB3aXRoIE5PIGF1dGhlbnRpY2F0aW9uIGFuZCBubyBzd2l0Y2ggdG8gdHVybiBpdCBvZmY6CiMgYW55b25lIHdobyBmaW5kcyB0aGUgVVJMIGdldHMgYSB0ZW1wb3Jhcnkgb3JnYW5pemF0aW9uLCBhIHByb2plY3QgYW5kIGFuIG9yZ2FuaXphdGlvbiB3aWRlIEFQSQojIGtleSwgYW5kIHdpdGggYmlsbGluZyBvZmYgKGV2ZXJ5IHNlbGYtaG9zdCkgY2FuIGluZ2VzdCB3aXRob3V0IGxpbWl0LiBUaGlzIGdhdGV3YXkgcmVmdXNlcyB0aGF0CiMgb25lIHJvdXRlIHVubGVzcyB0aGUgY2FsbGVyIHNlbmRzIHRoZSBYLUJvb3RzdHJhcC1Ub2tlbiBoZWFkZXIuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBwcm94aWVkIHVudG91Y2hlZC4KewoJYXV0b19odHRwcyBvZmYKCWFkbWluIG9mZgoJc2VydmVycyB7CgkJcHJvdG9jb2xzIGgxIGgyYwoJCSMga2VlcCB0aGUgY2xpZW50IElQIFJhaWx3YXkncyBlZGdlIHB1dHMgaW4gWC1Gb3J3YXJkZWQtRm9yICh0aGUgQVBJIHJhdGUgbGltaXRzIHBlciBJUCkKCQl0cnVzdGVkX3Byb3hpZXMgc3RhdGljIHByaXZhdGVfcmFuZ2VzIDEwMC42NC4wLjAvMTAKCX0KfQoKOnskUE9SVH0gewoJQGJvb3RzdHJhcF9kZW5pZWQgewoJCXBhdGggL3YxL2FjY291bnQvYm9vdHN0cmFwIC92MS9hY2NvdW50L2Jvb3RzdHJhcC8qCgkJbm90IGhlYWRlciBYLUJvb3RzdHJhcC1Ub2tlbiB7JEJPT1RTVFJBUF9UT0tFTn0KCX0KCglyb3V0ZSB7CgkJcmVzcG9uZCAvZ2F0ZXdheS1oZWFsdGggIm9rIiAyMDAKCQlyZXNwb25kIEBib290c3RyYXBfZGVuaWVkICJBY2NvdW50IGJvb3RzdHJhcCBpcyBkaXNhYmxlZCBvbiB0aGlzIGluc3RhbmNlLiBDcmVhdGUgQVBJIGtleXMgaW4gdGhlIHdlYiBVSSwgb3Igc2VuZCB0aGUgWC1Cb290c3RyYXAtVG9rZW4gaGVhZGVyLiIgNDAzCgkJcmV2ZXJzZV9wcm94eSB7JFVQU1RSRUFNfSB7CgkJCSMgL3YxL21jcCBzdHJlYW1zIGl0cyByZXNwb25zZXMKCQkJZmx1c2hfaW50ZXJ2YWwgLTEKCQl9Cgl9Cn0K | base64 -d > /etc/caddy/Caddyfile && exec caddy run --config /etc/caddy/Caddyfile --adapter caddyfile'`
- **Health check:** /gateway-health
- **Public domain:** Yes

## Documentation

# Deploy and Host Latitude AI Agent Observability on Railway

Latitude is an open source observability platform for AI agents. It ingests OpenTelemetry traces from your agents, groups them into sessions, finds where they fail, and lets you run evaluations, build datasets and query everything through a REST API or an MCP server.

## About Hosting Latitude

Latitude's self host stack is five application services (web, API, ingest, workers, workflows) and a migration job, backed by PostgreSQL with pgvector, ClickHouse, two Redis instances, Temporal and an S3 object store.

This template deploys that full stack, pinned to version 0.3.126, with every secret generated at deploy time. It also closes two gaps in the stock setup. Latitude signs users in with emailed magic links and ships no mail server, so the template includes a password protected Mailpit inbox where your first login link arrives. And upstream's API lets anyone create an organization and an API key without logging in, so the API sits behind a small gateway that refuses that route unless you send a secret header.

**Plan requirement:** Hobby plan or higher. ClickHouse, Temporal and the Node services need more memory than the Free and Trial plans allow.

## Common Use Cases

- **Agent tracing**: send OTLP traces from any framework and inspect spans, tool calls, cost and latency
- **Failure discovery**: signals and flaggers group recurring agent failures across sessions
- **Evaluations and datasets**: turn production traces into datasets and score them
- **Agent access**: let coding agents query traces through the built in MCP server

## Dependencies for Latitude Hosting

- **PostgreSQL with pgvector**: included
- **ClickHouse**: included (span and trace store)
- **Redis**: included, two instances (cache and job queue)
- **Temporal**: included, stored in the same PostgreSQL
- **SeaweedFS**: included (S3 object store)
- **Mailpit**: included (login link inbox until you add real email)
- **AI provider keys**: not needed to boot; required only for AI features such as evaluations and semantic search

### Deployment Dependencies

- [Latitude self hosting docs](https://docs.latitude.so/deployment)
- [Latitude configuration reference](https://docs.latitude.so/deployment/configuration)
- [Latitude GitHub repository](https://github.com/latitude-dev/latitude-llm)

### Implementation Details

First steps after deploy:

1. Fill `LAT_ALLOWED_EMAIL_DOMAIN` on the Web service when you deploy, for example `acme.com`. Only addresses at that domain can create accounts.
2. Wait until every service is green. The app services wait for the Migrations service.
3. Open the Web domain and enter your email.
4. Open the Mailpit domain, sign in with `MAILPIT_USERNAME` and `MAILPIT_PASSWORD` from the Mailpit service variables, and click the login link.
5. Create an API key in the UI and point your OpenTelemetry exporter at the Ingest domain.

Key environment variables:

```env
# Web
LAT_ALLOWED_EMAIL_DOMAIN=acme.com        # required
LAT_BETTER_AUTH_SECRET=${{secret(64,"abcdef0123456789")}}
LAT_MASTER_ENCRYPTION_KEY=${{secret(64,"abcdef0123456789")}}
LAT_WEB_URL=https://${{Web.RAILWAY_PUBLIC_DOMAIN}}
LAT_API_URL=https://${{API Gateway.RAILWAY_PUBLIC_DOMAIN}}
LAT_INGEST_URL=https://${{Ingest.RAILWAY_PUBLIC_DOMAIN}}

# Workers (optional, replaces Mailpit)
LAT_SMTP_HOST=  LAT_SMTP_USER=  LAT_SMTP_PASS=  LAT_SMTP_FROM=

# API Gateway
BOOTSTRAP_TOKEN=${{secret(48)}}
```

Treat the Mailpit password like an admin password: whoever reads that inbox can sign in as any user. After you configure real email on Workers you can delete the Mailpit service. Do not rotate `LAT_MASTER_ENCRYPTION_KEY` after first use.

## Why Deploy Latitude 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 Latitude on Railway, you get the complete agent observability stack with generated secrets, health checks, private networking between services, managed SSL, and an instance that strangers cannot sign up to.


## Similar templates

- [Rootprint](https://railway.com/deploy/rootprint-1) — Open-source logs and traces with full-text search on object-storage.
- [VPS Fleet Watch Hub with Beszel](https://railway.com/deploy/vps-fleet-watch-hub-with-beszel) — A persistent Beszel hub for external VPS agents and fleet alerts.
- [Pyroscope profiling](https://railway.com/deploy/pyroscope-profiling) — Protected continuous profiling with durable Pyroscope storage.

Open this page in a browser: https://railway.com/deploy/latitude-ai-agent-observability
