Files
turbovault-app/docs/DEPLOYMENT.md
2026-03-29 02:55:42 -04:00

2.8 KiB

Deployment Guide

Deploy TurboVault to Kubernetes.

Prerequisites

  • Kubernetes cluster
  • kubectl configured
  • PostgreSQL database (already set up)

Quick Deploy

# 1. Build image (auto-builds via GitHub Actions)
git tag v1.0.0
git push origin v1.0.0

# 2. Configure secrets
cp k8s/secrets.yaml.example k8s/secrets.yaml
nano k8s/secrets.yaml

# 3. Deploy
./scripts/deploy-k8s.sh

Configuration

1. Update Image

Edit k8s/deployment.yaml and k8s/migrate-job.yaml:

image: ghcr.io/ryankazokas/turbovault-app:v1.0.0

2. Database Connection

Edit k8s/configmap.yaml:

DATABASE_HOST: "your-postgres-host"
DATABASE_NAME: "turbovault_production"
DATABASE_USERNAME: "turbovault"

3. Secrets

Edit k8s/secrets.yaml:

# Generate Rails secret
rails secret

# Add to secrets.yaml:
SECRET_KEY_BASE: "output_from_rails_secret"
DATABASE_PASSWORD: "your_postgres_password"

# Optional (for IGDB):
IGDB_CLIENT_ID: "your_igdb_client_id"
IGDB_CLIENT_SECRET: "your_igdb_client_secret"

Manual Deployment

kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/secrets.yaml
kubectl apply -f k8s/migrate-job.yaml
kubectl wait --for=condition=complete --timeout=300s job/turbovault-migrate -n turbovault
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml
kubectl apply -f k8s/ingress.yaml

Update Deployment

# Build new version
git tag v1.1.0
git push origin v1.1.0

# Update deployment
kubectl set image deployment/turbovault \
  turbovault=ghcr.io/ryankazokas/turbovault-app:v1.1.0 \
  -n turbovault

# Watch rollout
kubectl rollout status deployment/turbovault -n turbovault

SSL/TLS

Update k8s/ingress.yaml with your domain and TLS configuration.

For Let's Encrypt with cert-manager:

metadata:
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  tls:
  - hosts:
    - turbovault.yourdomain.com
    secretName: turbovault-tls

Scaling

# Scale replicas
kubectl scale deployment turbovault --replicas=3 -n turbovault

# Auto-scaling
kubectl autoscale deployment turbovault \
  --cpu-percent=70 \
  --min=2 \
  --max=10 \
  -n turbovault

Monitoring

# Check status
kubectl get pods -n turbovault

# View logs
kubectl logs -f -l app=turbovault -n turbovault

# Check resources
kubectl top pods -n turbovault

Troubleshooting

View pod details

kubectl describe pod -l app=turbovault -n turbovault

Test database connection

kubectl exec -it deployment/turbovault -n turbovault -- \
  rails runner "puts ActiveRecord::Base.connection.execute('SELECT 1').first"

View environment

kubectl exec -it deployment/turbovault -n turbovault -- env | grep DATABASE