142 lines
3.5 KiB
Markdown
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/
|
|
```
|