---
name: infrastructure
description: Railway deployment, Docker, Postgres, Cloudflare R2. Use when working on Dockerfile, environment variables, or cloud infrastructure setup.
---
# Infrastructure Expert
Skill for deployment, Docker, and cloud infrastructure.
## When to Use
Invoke this skill when working on:
- Railway deployment configuration
- Dockerfile optimization
- Environment variable management
- Future database (Postgres) setup
- Future blob storage (Cloudflare R2) setup
## Current Stack
### Deployment: Railway
- Platform: [Railway](https://railway.app/)
- Deployment: Dockerfile-based
- Environment variables via Railway dashboard
### Container: Docker
- Base image: `python:3.13-slim`
- Package manager: uv (fast Python package manager)
- Entry point: FastMCP server
### Observability: Logfire
- [Pydantic Logfire](https://logfire.pydantic.dev/)
- Automatic OpenTelemetry instrumentation
- Configure via `LOGFIRE_TOKEN` env var
## Dockerfile Pattern
```dockerfile
FROM python:3.13-slim
WORKDIR /app
# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
# Copy dependency files
COPY pyproject.toml uv.lock ./
# Install dependencies (cached layer)
RUN uv sync --frozen --no-dev
# Copy source code
COPY src/ ./src/
# Run server
CMD ["uv", "run", "python", "-m", "siigo_mcp.server"]
```
## Environment Variables
### Required
- `SIIGO_USERNAME`: Siigo API username
- `SIIGO_ACCESS_KEY`: Siigo API access key
- `SIIGO_PARTNER_ID`: Partner identifier for API calls
### Optional
- `LOGFIRE_TOKEN`: Pydantic Logfire token for observability
- `LOG_LEVEL`: Logging level (default: INFO)
## Future Infrastructure
### Database: PostgreSQL
- Use case: Caching, session state, audit logs
- Railway provides managed Postgres
- Connection via `DATABASE_URL` env var
### Blob Storage: Cloudflare R2
- Use case: PDF storage, document archival
- S3-compatible API
- Credentials: `R2_ACCESS_KEY_ID`, `R2_SECRET_ACCESS_KEY`, `R2_BUCKET`
## Railway Deployment
### Setup
1. Connect GitHub repository
2. Configure environment variables
3. Railway auto-detects Dockerfile
4. Automatic deploys on push to main
### Health Check
Add health endpoint for Railway:
```python
@mcp.resource("health://status")
async def health_check() -> str:
return "ok"
```
## Prompt
When invoked, research infrastructure questions and provide:
1. Configuration recommendations
2. Docker or deployment file changes
3. Environment variable requirements
4. Links to relevant platform documentation