Deploying to Railway
Guide for deploying Python services to Railway.
Prerequisites
Install Railway CLI
npm install -g @railway/cli
Login
railway login
Basic Workflow
- Link Project
cd /path/to/service railway link
Select workspace and project (or create new)
- Add PostgreSQL (if needed)
railway add
Select: Database → Postgres
IMPORTANT: Standard Postgres does NOT have pgvector. For vector search:
-
Delete standard Postgres
-
Add service from template: https://railway.com/deploy/pgvector-latest
- Set Environment Variables
railway variables set KEY="value"
Reference another service's variable:
railway variables set 'DATABASE_URL=${{Postgres.DATABASE_URL}}' railway variables set 'DATABASE_URL=${{pgvector.DATABASE_URL}}'
- Deploy
railway up --detach
- Get Domain
railway domain
Returns: https://service-production.up.railway.app
Multi-Service Pattern (API + Worker)
Deploy API Service
railway link # Link to main service railway up --detach
Add Worker Service
railway add --service worker railway service link worker railway variables set 'DATABASE_URL=${{pgvector.DATABASE_URL}}' railway variables set OPENAI_API_KEY="$OPENAI_API_KEY"
Set start command in dashboard or railway.toml
railway up --detach
Gotchas
-
pgvector not available - Use pgvector template, not standard Postgres
-
Interactive prompts - Some commands need interactive mode (run manually)
-
Variable references - Use ${{ServiceName.VARIABLE}} syntax
-
Dockerfile required - For custom Python services, include Dockerfile
-
Procfile - Railway can use Procfile for multi-process apps
Useful Commands
railway status # Current project/service railway variables # List environment variables railway logs # View service logs railway service status # Deployment status railway redeploy --yes # Force redeploy
Example Dockerfile
FROM python:3.11-slim
WORKDIR /app
RUN apt-get update && apt-get install -y libpq-dev gcc && rm -rf /var/lib/apt/lists/*
COPY pyproject.toml ./ COPY myapp/ ./myapp/
RUN pip install --no-cache-dir .
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "--workers", "2", "myapp.app:app"]