Reference
Deployment
Deploy all services to Railway via Docker images on ghcr.io.
All services deploy as Docker images pushed to GitHub Container Registry (ghcr.io, private). Railway pulls images from ghcr.io.
Prerequisites
Install tools
- Docker Desktop with
buildxenabled - Supabase CLI (for database migrations)
Authenticate with ghcr.io
Create a GitHub Personal Access Token with write:packages scope, then:
echo $GITHUB_TOKEN | docker login ghcr.io -u YOUR_GITHUB_USERNAME --password-stdinConfigure Railway
For each service in your Railway project, set the image source:
- Go to Settings → Source
- Select Docker Image
- Enter the image (e.g.
ghcr.io/yannickarmspach/sherpa-agent:latest) - Add registry credentials (ghcr.io username + PAT)
Deploy commands
| Command | What it does |
|---|---|
pnpm agent:deploy | Build & push Agent Docker image |
pnpm console:deploy | Build & push Console Docker image |
pnpm website:deploy | Build & push Website Docker image |
pnpm worker:deploy | Build & push Worker Docker image |
pnpm supabase:deploy | Push database migrations to production |
Images
| Service | Image | Port |
|---|---|---|
| Agent | ghcr.io/yannickarmspach/sherpa-agent:latest | 3000 |
| Console | ghcr.io/yannickarmspach/sherpa-console:latest | 3001 |
| Website | ghcr.io/yannickarmspach/sherpa-website:latest | 3002 |
| Worker | ghcr.io/yannickarmspach/sherpa-worker:latest | — |
Supabase is hosted on supabase.com, not deployed as a Docker image. Use pnpm supabase:deploy to push migrations.
Environment variables
Each service needs its own environment variables configured in Railway. See the production docs for each:
Dockerfiles
| Service | Dockerfile | Build |
|---|---|---|
| Agent | services/docker/Dockerfile | Multi-stage with Claude + Basecamp CLIs |
| Console | apps/console/Dockerfile | Multi-stage, Vite SSR build |
| Website | apps/website/Dockerfile | Multi-stage, Vite SSR build |
| Worker | apps/worker/Dockerfile | Lightweight, tsx runtime |