Railway deployment
A complete deployment uses up to six services. Provision only the connector infrastructure you need.
Service matrix
| Service | Source | Target port | Persistent volume |
|---|---|---|---|
| Postgres | Railway template | Managed | Managed |
| Redis | Railway template | Managed | Managed |
| Evolution | evoapicloud/evolution-api:v2.3.7 | 8080 | /evolution/instances |
| Telegram bridge | Repo root; /apps/telegram-bridge/Dockerfile | 8095 | None |
| PocketBase | Root services/pocketbase | 8090 | /pb_data |
| Web | Repo root; apps/web/Dockerfile | Railway assigned | None |
Postgres is needed for WhatsApp or Telegram. Redis and Evolution are WhatsApp-only. The bridge is Telegram-only. A PostgreSQL-connector-only deployment needs PocketBase and web.
The web app and Telegram bridge rely on the root lockfile and workspace manifest. Keep the root directory / and set their Dockerfile paths explicitly.
Volumes and ports
Attach /evolution/instances to Evolution and /pb_data to PocketBase. The images do not declare Docker volumes because Railway requires volumes configured in service settings.
Pin internal ports:
pocketbase: PORT=8090
evolution: SERVER_PORT=8080
telegram-bridge: TELEGRAM_BRIDGE_PORT=8095
web: Railway-assigned public PORT
Without the Evolution volume every deploy unpairs all WhatsApp accounts. Without the PocketBase volume you lose users, connections, token hashes, and configuration data.
Environment wiring
Use Railway references such as ${{Service.VAR}} for shared secrets and database URLs. This keeps rotated values synchronized.
- Match PocketBase administrator credentials between PocketBase and web.
- Point
NUXT_POCKETBASE_URLtopocketbase.railway.internal:8090. - Point
NUXT_EVOLUTION_URLto the Evolution private host on8080. - Give
NUXT_EVOLUTION_DATABASE_URLa dedicated read-only credential, not the Postgres owner URL. - Point
NUXT_TELEGRAM_URLto the bridge private host on8095. - Set
NUXT_PUBLIC_APP_URLto the public web origin. - Set
NUXT_WEBHOOK_URLto the public Evolution webhook URL.
Keep the Telegram bridge and web app at one replica. Multiple bridge processes compete for sessions; multiple web replicas run duplicate in-process alert sweeps.
First-run checks
- Confirm PocketBase logs include
superuser ready. - Confirm migrations apply from the image without a manual schema step.
- Open the web domain and create an account.
- Check each private service health endpoint from its consumer.
- Create one connection and call a read-only status tool.
- Confirm connector URLs use the correct public origin.