githubEdit

Deployment

Gyrinx is deployed on Google Cloud Platform using Cloud Run for the application and Cloud SQL for the database. The deployment process is fully automated through GitHub and Google Cloud Build.

Architecture Overview

spinner

Deployment Pipeline

Automatic Deployment

  1. Code Push - Developer pushes to main branch

  2. GitHub Actions - Runs tests and checks

  3. Cloud Build Trigger - Automatically triggered on main branch changes

  4. Container Build - Docker image built from Dockerfile

  5. Deploy to Cloud Run - New image deployed automatically

  6. Database Migrations - Run automatically on container startup

Build Configuration

cloudbuild.yaml

steps:
  # Build Docker image
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/gyrinx:$COMMIT_SHA', '.']

  # Push to Container Registry
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/$PROJECT_ID/gyrinx:$COMMIT_SHA']

  # Deploy to Cloud Run
  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['run', 'deploy', 'gyrinx',
           '--image', 'gcr.io/$PROJECT_ID/gyrinx:$COMMIT_SHA',
           '--region', 'europe-west2',
           '--platform', 'managed']

Environment Configuration

Production Settings

  • Database: Cloud SQL PostgreSQL

  • Static Files: Served by WhiteNoise

  • Security: HTTPS enforced, secure headers

  • Scaling: Automatic based on traffic

Environment Variables

Database Management

Migrations

Migrations run automatically when the container starts:

Database Backups

  • Automatic Backups: Cloud SQL provides automatic daily backups

  • Point-in-time Recovery: Available for disaster recovery

  • Manual Backups: Can be triggered before major deployments

Database Access

Monitoring and Observability

Cloud Run Monitoring

  • Metrics: Request count, latency, memory usage

  • Logs: Application logs and access logs

  • Alerts: Configured for high error rates and latency

Health Checks

Alerting

  • Discord Integration: Alerts sent to #ops channel

  • Error Tracking: 500 errors and exceptions

  • Performance Monitoring: Slow requests and high memory usage

Security

HTTPS and SSL

  • Automatic SSL: Cloud Run provides automatic SSL certificates

  • Security Headers: Configured in Django settings

  • CSRF Protection: Enforced for all POST requests

Access Control

  • IAM Roles: Principle of least privilege

  • Service Accounts: Separate accounts for different services

  • Secret Management: Environment variables for sensitive data

Security Scanning

  • Container Scanning: Automatic vulnerability scanning

  • Dependency Updates: Regular security updates

  • Code Analysis: GitHub Security Advisories

Performance Optimization

Cloud Run Configuration

Database Performance

  • Connection Pooling: Configured in Django settings

  • Read Replicas: Available for read-heavy workloads

  • Query Optimization: Regular performance monitoring

Disaster Recovery

Backup Strategy

  1. Database Backups: Daily automatic backups with 7-day retention

  2. Point-in-time Recovery: Up to 7 days

  3. Code Repository: Git provides complete history

  4. Container Images: Stored in Container Registry

Recovery Procedures

Deployment Checklist

Pre-deployment

Post-deployment

Troubleshooting

Common Issues

Migration Failures

Container Start Failures

Database Connection Issues

Performance Issues

  • Monitor Cloud Run metrics for CPU/memory usage

  • Check database query performance

  • Review Django debug toolbar output locally

Cost Optimization

Resource Management

  • Auto-scaling: Scales to zero when not in use

  • Right-sizing: Monitor resource usage and adjust limits

  • Database Sizing: Regular review of database performance tiers

Monitoring Costs

  • Budget Alerts: Set up billing alerts

  • Resource Usage: Regular review of Cloud Console metrics

  • Optimization Opportunities: Identify unused resources

Future Improvements

Staging Environment

  • Consider adding a staging environment for testing

  • Could use Cloud Run with separate database

  • Automated testing on staging before production

Advanced Monitoring

  • Application Performance Monitoring (APM)

  • Real User Monitoring (RUM)

  • Error tracking with detailed stack traces

CI/CD Enhancements

  • Canary deployments

  • Blue-green deployments

  • Automated rollback on failures

Last updated