---
title: "Deploy Restate"
description: "Restate 1.7 durable execution server with authenticated gateway."
category: "Automation"
url: https://railway.com/deploy/restate
---

# Deploy Restate

Restate 1.7 durable execution server with authenticated gateway.

**[Deploy Restate on Railway](https://railway.com/template/restate)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/restate/manifest.json

- **Creator:** Agaz Self-Host
- **Category:** Automation

## Template content

### restate https://github.com/restatedev.png

- **Image:** restatedev/restate:1.7.12
- **Health check:** /health

### gateway https://raw.githubusercontent.com/caddyserver/website/5c921006aae4feb2184782ae528c2bb09a07e04f/src/resources/images/favicon.png

- **Image:** caddy:2.11.4-alpine
- **Start command:** `sh -c 'export RESTATE_ADMIN_PASSWORD_HASH="$(caddy hash-password --plaintext "$RESTATE_ADMIN_PASSWORD")" && printf "%s\n" "$CADDYFILE" > /tmp/Caddyfile && exec caddy run --config /tmp/Caddyfile --adapter caddyfile'`
- **Health check:** /healthz
- **Public domain:** Yes

## Documentation

# Deploy and Host Restate on Railway

Restate is a durable execution engine for building resilient services, workflows and agents. Your code, written with the Restate SDKs for TypeScript, Java, Kotlin, Go, Python or Rust, runs as normal HTTP services, and Restate journals every step so that handlers survive crashes, retries and restarts with exactly-once semantics.

## About Hosting Restate

This template deploys Restate Server v1.7.12 as a single node with its log and state on a Railway volume, plus a Caddy gateway with two public domains. The ingress domain requires a bearer token and is where clients invoke your services. The admin domain serves the Restate UI and admin API behind basic auth. Restate itself stays private and uses a fixed node name, so its data survives redeploys. Deploy your service code as another Railway service and register it with the admin API. The Hobby plan fits development and small production loads.

## Common Use Cases

- Durable workflows and sagas that survive crashes without a separate queue
- Reliable background jobs, retries and timers in TypeScript, Java, Go or Python
- Long-running AI agents with durable steps and human-in-the-loop waits

## Dependencies for Restate Hosting

- `restatedev/restate:1.7.12` (official image) with a volume at `/restate-data`
- `caddy:2.11.4-alpine` (official image) as the gateway

### Deployment Dependencies

- [Restate documentation](https://docs.restate.dev/)
- [Restate v1.7.12 release](https://github.com/restatedev/restate/releases/tag/v1.7.12)
- [Restate SDKs](https://docs.restate.dev/develop/)
- [Railway volumes](https://docs.railway.com/reference/volumes)

### Implementation Details

| Service | Image | Networking | Storage |
| --- | --- | --- | --- |
| restate | `restatedev/restate:1.7.12` | private: ingress 8080, admin 9070 | volume at `/restate-data` |
| gateway | `caddy:2.11.4-alpine` | public ingress domain (8080) and admin domain (9071) | none |

Register a service deployed on Railway and call it:

```bash
curl -u "admin:$RESTATE_ADMIN_PASSWORD" https:///deployments \
  -H "Content-Type: application/json" -d '{"uri": "http://my-service.railway.internal:9080"}'
curl https:///Greeter/greet -H "Authorization: Bearer $RESTATE_INGRESS_TOKEN" \
  -H "Content-Type: application/json" -d '"Railway"'
```

Services inside the project can call `${{restate.RESTATE_PRIVATE_INGRESS_URL}}` directly.

| Variable | Service | Default | Purpose |
| --- | --- | --- | --- |
| `RESTATE_NODE_NAME` | restate | `restate-1` | Stable node identity across redeploys |
| `RESTATE_INGRESS_TOKEN` | gateway | generated | Bearer token for the public ingress |
| `RESTATE_ADMIN_USERNAME` / `_PASSWORD` | gateway | `admin` / generated | UI and admin API login |

Notes:

- Do not remove `RESTATE_NODE_NAME`: Railway hostnames change on every deploy, and a new node name would not match the stored metadata.
- Restate needs to reach your services; the private network works for services in the same project.

This is a community-maintained deployment package and does not imply affiliation with or endorsement by the Restate project or its maintainers.

## Why Deploy Restate 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 Restate 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

- [N8N Main + Worker](https://railway.com/deploy/n8n-main-worker) — Deploy and Host N8N with Inactive worker.
- [Evolution API with n8n](https://railway.com/deploy/evolution-api-with-n8n) — Automate WhatsApp workflows with Evolution API, n8n, and Postgres.
- [Postgres Backup](https://railway.com/deploy/postgres-s3-backups) — Cron-based PostgreSQL backup to bucket storage

Open this page in a browser: https://railway.com/deploy/restate
