Skip to content

MBASIC Kubernetes Deployment - Quick Reference

What Was Created

Complete deployment system for MBASIC web UI on DigitalOcean Kubernetes at https://mbasic.awohl.com

Files Created

docs/dev/
└── KUBERNETES_DEPLOYMENT_PLAN.md   # Comprehensive deployment guide

deployment/
├── deploy.sh                        # Automated deployment script
├── landing-page/
│   └── index.html                  # Static landing page
└── README.md                        # Deployment instructions

k8s/
├── namespace.yaml                   # Namespace: mbasic
├── redis-deployment.yaml            # Redis for sessions
├── landing-page-deployment.yaml     # Nginx static page
├── mbasic-deployment.yaml           # MBASIC web pods (3-10)
├── mbasic-configmap.yaml            # Configuration
├── mbasic-secrets.yaml.example      # Credentials template
└── ingress.yaml                     # SSL + routing

src/
└── bot_protection.py                # hCaptcha + rate limiting

Dockerfile                           # Production container
.dockerignore                        # Build optimization

Architecture

https://mbasic.awohl.com
    ├── / → Landing Page
    │       (Static nginx, project info)
    └── /ide/ → MBASIC Web IDE
            (Load-balanced, 3-10 pods)
            ├── Redis (sessions)
            └── MySQL (error logging)

Quick Deployment

# 1. Prerequisites
doctl kubernetes cluster create mbasic-cluster --region nyc1 --node-pool "name=workers;size=s-2vcpu-4gb;count=3"
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/do/deploy.yaml

# 2. Set up database
# Create MySQL via DO dashboard, run: mysql < config/setup_mysql_logging.sql

# 3. Configure secrets
cp k8s/mbasic-secrets.yaml.example k8s/mbasic-secrets.yaml
# Edit with real credentials

# 4. Deploy
./deployment/deploy.sh v1.0

# 5. Configure DNS
# Point mbasic.awohl.com → [LOAD_BALANCER_IP from deploy output]

Bot Protection

hCaptcha Integration: - Free tier: 10,000 requests/month - Shows CAPTCHA on first visit - 24-hour verified session - Stored in Redis

Rate Limiting: - 10 requests/minute per IP - Configured in nginx-ingress - Prevents API abuse

Cost

DigitalOcean Monthly: - 3x nodes ($12): $36 - Load balancer: $12 - Managed MySQL: 15 - **Total: ~63**

Budget option: $36 (in-cluster MySQL)

Scaling

  • Min: 3 pods
  • Max: 10 pods
  • Auto-scale: CPU > 70% or Memory > 80%
  • Manual: kubectl scale deployment mbasic-web --replicas=5 -n mbasic

Monitoring

# View pods
kubectl get pods -n mbasic

# View logs
kubectl logs -f deployment/mbasic-web -n mbasic

# Check errors (from pod)
kubectl exec -it deployment/mbasic-web -n mbasic -- python3 utils/view_error_logs.py --summary

# Check autoscaling
kubectl get hpa -n mbasic

Security

  • ✅ HTTPS/SSL (Let's Encrypt)
  • ✅ Bot protection (hCaptcha)
  • ✅ Rate limiting (nginx)
  • ✅ Non-root containers
  • ✅ Resource limits
  • ✅ Encrypted secrets

URLs

Before Launch Checklist

  • Create Kubernetes cluster
  • Create container registry
  • Set up MySQL database
  • Get hCaptcha keys
  • Configure secrets file
  • Update registry URL in deploy.sh
  • Test locally with Docker
  • Deploy to production
  • Configure DNS
  • Verify SSL certificate
  • Test bot protection
  • Load test (50-100 concurrent users)
  • Announce to vintage computing forums

Rollback

# Quick rollback
kubectl rollout undo deployment/mbasic-web -n mbasic

# Or scale to zero
kubectl scale deployment mbasic-web --replicas=0 -n mbasic

Support