
Deploy Kuzzle | (Just Updated) Backend API with Elasticsearch, Admin Password Generated, Data Survives Redeploys
Kuzzle backend API with Elasticsearch and Redis, secrets generated
elasticsearch
Just deployed
/usr/share/elasticsearch/data
redis
Just deployed
/data
kuzzle
Just deployed
Deploy and Host Kuzzle on Railway
Kuzzle is an open-source backend: a document store API over Elasticsearch with realtime subscriptions, users, roles and permissions built in. This template deploys Kuzzle with its own Elasticsearch and Redis, with the admin password and token secret generated for you.
About Hosting Kuzzle
The template starts three services: kuzzle (public HTTPS API), elasticsearch (private, persistent volume) and redis (private, password protected, persistent volume). On first boot Kuzzle creates an admin user with the generated KUZZLE_ADMIN_PASSWORD and restricts the anonymous role, so nothing is writable without logging in.
Machine-readable contract:
public_url: https://${RAILWAY_PUBLIC_DOMAIN of service kuzzle}
internal_url: http://kuzzle.railway.internal:8080
health: GET /_healthCheck (200 when ready)
login: POST /_login/local
admin_user: admin
credentials: KUZZLE_ADMIN_PASSWORD (service kuzzle), REDIS_PASSWORD (service redis)
storage: elasticsearch.railway.internal:9200 (private, no auth)
anonymous: restricted (401 on user and admin routes)
port: 8080 (HTTP)
Working check, run after the deploy turns green:
curl -s https:///_healthCheck
# {"status":200,...}
JWT=$(curl -s -X POST https:///_login/local \
-H 'content-type: application/json' \
-d '{"username":"admin","password":""}' | jq -r .result.jwt)
curl -s -X POST https:///myindex/_create -H "Authorization: Bearer $JWT"
curl -s -X PUT https:///myindex/mycoll -H "Authorization: Bearer $JWT" \
-H 'content-type: application/json' -d '{}'
curl -s -X POST https:///myindex/mycoll/_create?refresh=wait_for \
-H "Authorization: Bearer $JWT" -H 'content-type: application/json' -d '{"note":"hello"}'
Elasticsearch and Redis data live on volumes, so documents survive redeploys.
Why Deploy Kuzzle 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 Kuzzle 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.
- Kuzzle, Elasticsearch and Redis wired together in one click
- Admin password, token secret and Redis password generated automatically
- Anonymous access locked down on first boot
- Data kept on persistent volumes
- Images pinned by digest, so redeploys do not change versions
Common Use Cases
- Backend for web and mobile apps with realtime subscriptions
- IoT and sensor data ingestion with search
- Document store with a ready-made HTTP API for AI agents
- Prototype and production backends without writing server code
Dependencies for Kuzzle Hosting
Deployment Dependencies
Implementation Details
All three services run their official images, pinned by digest, with start commands that set the Railway-specific bindings (port, private hosts, passwords, volume ownership). Rotate the admin password by editing KUZZLE_ADMIN_PASSWORD on the kuzzle service and redeploying; the bootstrap resets the admin user on each boot.
Template Content
