Files
cannaiq/backend/k8s/README.md
2025-11-28 19:45:44 -07:00

142 lines
3.5 KiB
Markdown

# Kubernetes Deployment Guide for Dutchie Backend
## Prerequisites
1. Access to your remote Kubernetes cluster
2. `kubectl` configured to connect to your cluster
3. Docker installed locally (to build the image)
4. Access to a Docker registry (Docker Hub, Google Container Registry, etc.)
## Step-by-Step Deployment
### 1. Build and Push Docker Image
```bash
# Navigate to backend directory
cd /home/kelly/dutchie-menus/backend
# Build the Docker image
docker build -t your-registry/dutchie-backend:latest .
# Log in to your Docker registry (example for Docker Hub)
docker login
# Push the image
docker push your-registry/dutchie-backend:latest
```
### 2. Update Kubernetes Manifests
Edit the following files with your actual values:
**k8s/secret.yaml** - Add your database and service credentials
**k8s/deployment.yaml** - Replace `YOUR_REGISTRY/dutchie-backend:latest` with your actual image name
### 3. Deploy to Kubernetes
```bash
# Connect to your remote cluster (method depends on your provider)
# Example for GKE:
# gcloud container clusters get-credentials YOUR_CLUSTER --region YOUR_REGION
# Example for AWS EKS:
# aws eks update-kubeconfig --name YOUR_CLUSTER --region YOUR_REGION
# Verify connection
kubectl cluster-info
# Apply the manifests
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/secret.yaml
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml
# Check deployment status
kubectl get deployments
kubectl get pods
kubectl get services
```
### 4. Get Your Public IP
```bash
# Wait for LoadBalancer to provision (this may take 2-5 minutes)
kubectl get service dutchie-backend --watch
# Once EXTERNAL-IP shows an IP address (not <pending>), that's your public IP
kubectl get service dutchie-backend
```
The output will look like:
```
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dutchie-backend LoadBalancer 10.0.45.123 203.0.113.45 80:30123/TCP 2m
```
Your API will be available at: `http://203.0.113.45` (use your actual EXTERNAL-IP)
### 5. Update WordPress Plugin
Update the "Dutchie Menus Settings" in your WordPress site:
- **API URL**: `http://YOUR_EXTERNAL_IP` (or `https://your-domain.com` if you set up DNS)
### 6. Verify Deployment
```bash
# Check pod logs
kubectl logs -l app=dutchie-backend --tail=100
# Test the health endpoint
curl http://YOUR_EXTERNAL_IP/health
```
## Updating the Deployment
When you make changes to your code:
```bash
# 1. Build new image with a tag
docker build -t your-registry/dutchie-backend:v1.1 .
docker push your-registry/dutchie-backend:v1.1
# 2. Update deployment
kubectl set image deployment/dutchie-backend backend=your-registry/dutchie-backend:v1.1
# 3. Check rollout status
kubectl rollout status deployment/dutchie-backend
```
## Troubleshooting
```bash
# View pod logs
kubectl logs -l app=dutchie-backend --tail=100 --follow
# Describe pod (shows events and errors)
kubectl describe pod -l app=dutchie-backend
# Get into a pod shell
kubectl exec -it $(kubectl get pod -l app=dutchie-backend -o jsonpath='{.items[0].metadata.name}') -- sh
# Check service
kubectl describe service dutchie-backend
```
## Setting up HTTPS (Optional but Recommended)
For production, you should use HTTPS. Options:
1. **Ingress with cert-manager** (recommended for most cases)
2. **Cloud provider's load balancer with SSL certificate**
3. **Cloudflare in front of your LoadBalancer**
Let me know if you need help setting up HTTPS!
## Clean Up
To remove everything:
```bash
kubectl delete -f k8s/
```