diff --git a/docs/QUICK-DEPLOYMENT-GUIDE.md b/docs/QUICK-DEPLOYMENT-GUIDE.md new file mode 100644 index 0000000..5822a8f --- /dev/null +++ b/docs/QUICK-DEPLOYMENT-GUIDE.md @@ -0,0 +1,323 @@ +# Quick Deployment Guide - Van Images naar Productie 🚀 + +Je Docker images zijn klaar! Hier is een snelle guide om ze te deployen. + +## 🎯 Snelle Keuze: Welke Deployment Optie? + +**Voor 20 gebruikers, productie:** +→ **Azure App Service** (Managed, eenvoudig, ~€20/maand) + +**Voor test/development:** +→ **VM met Docker Compose** (Flexibel, snel op te zetten) + +**Voor enterprise/scale:** +→ **Azure Kubernetes Service** (Complex, maar krachtig) + +--- + +## ⚡ Optie 1: Azure App Service (Aanbevolen) - 15 minuten + +### Stap 1: Maak App Service Plan aan + +```bash +# Resource Group (als nog niet bestaat) +az group create --name rg-cmdb-gui --location westeurope + +# App Service Plan (Basic B1 - voldoende voor 20 gebruikers) +az appservice plan create \ + --name plan-cmdb-gui \ + --resource-group rg-cmdb-gui \ + --sku B1 \ + --is-linux +``` + +### Stap 2: Maak Web Apps aan + +```bash +# Backend Web App +az webapp create \ + --name cmdb-backend-prod \ + --resource-group rg-cmdb-gui \ + --plan plan-cmdb-gui \ + --deployment-container-image-name zdlas.azurecr.io/zuyderland-cmdb-gui/backend:latest + +# Frontend Web App +az webapp create \ + --name cmdb-frontend-prod \ + --resource-group rg-cmdb-gui \ + --plan plan-cmdb-gui \ + --deployment-container-image-name zdlas.azurecr.io/zuyderland-cmdb-gui/frontend:latest +``` + +### Stap 3: Configureer ACR Authentication + +```bash +# Enable managed identity +az webapp identity assign \ + --name cmdb-backend-prod \ + --resource-group rg-cmdb-gui + +az webapp identity assign \ + --name cmdb-frontend-prod \ + --resource-group rg-cmdb-gui + +# Grant ACR pull permissions +az acr update \ + --name zdlas \ + --admin-enabled true + +# Configure ACR credentials +az webapp config container set \ + --name cmdb-backend-prod \ + --resource-group rg-cmdb-gui \ + --docker-custom-image-name zdlas.azurecr.io/zuyderland-cmdb-gui/backend:latest \ + --docker-registry-server-url https://zdlas.azurecr.io \ + --docker-registry-server-user $(az acr credential show --name zdlas --query username -o tsv) \ + --docker-registry-server-password $(az acr credential show --name zdlas --query passwords[0].value -o tsv) + +az webapp config container set \ + --name cmdb-frontend-prod \ + --resource-group rg-cmdb-gui \ + --docker-custom-image-name zdlas.azurecr.io/zuyderland-cmdb-gui/frontend:latest \ + --docker-registry-server-url https://zdlas.azurecr.io \ + --docker-registry-server-user $(az acr credential show --name zdlas --query username -o tsv) \ + --docker-registry-server-password $(az acr credential show --name zdlas --query passwords[0].value -o tsv) +``` + +### Stap 4: Configureer Environment Variabelen + +```bash +# Backend environment variables +az webapp config appsettings set \ + --name cmdb-backend-prod \ + --resource-group rg-cmdb-gui \ + --settings \ + NODE_ENV=production \ + PORT=3001 \ + JIRA_BASE_URL=https://jira.zuyderland.nl \ + JIRA_SCHEMA_ID=your-schema-id \ + SESSION_SECRET=your-secure-secret \ + FRONTEND_URL=https://cmdb-frontend-prod.azurewebsites.net + +# Frontend environment variables +az webapp config appsettings set \ + --name cmdb-frontend-prod \ + --resource-group rg-cmdb-gui \ + --settings \ + VITE_API_URL=https://cmdb-backend-prod.azurewebsites.net/api +``` + +### Stap 5: Configureer SSL (Gratis via App Service) + +```bash +# App Service heeft automatisch SSL via *.azurewebsites.net +# Voor custom domain: +az webapp config hostname add \ + --webapp-name cmdb-frontend-prod \ + --resource-group rg-cmdb-gui \ + --hostname cmdb.zuyderland.nl + +# Bind SSL certificate +az webapp config ssl bind \ + --name cmdb-frontend-prod \ + --resource-group rg-cmdb-gui \ + --certificate-thumbprint \ + --ssl-type SNI +``` + +### Stap 6: Start de Apps + +```bash +az webapp start --name cmdb-backend-prod --resource-group rg-cmdb-gui +az webapp start --name cmdb-frontend-prod --resource-group rg-cmdb-gui +``` + +**Je applicatie is nu live op:** +- Frontend: `https://cmdb-frontend-prod.azurewebsites.net` +- Backend API: `https://cmdb-backend-prod.azurewebsites.net/api` + +--- + +## 🖥️ Optie 2: VM met Docker Compose - 20 minuten + +### Stap 1: Maak VM aan + +```bash +az vm create \ + --resource-group rg-cmdb-gui \ + --name vm-cmdb-gui \ + --image Ubuntu2204 \ + --size Standard_B2s \ + --admin-username azureuser \ + --generate-ssh-keys \ + --public-ip-sku Standard +``` + +### Stap 2: SSH naar VM en installeer Docker + +```bash +# SSH naar VM +ssh azureuser@ + +# Installeer Docker +curl -fsSL https://get.docker.com -o get-docker.sh +sudo sh get-docker.sh +sudo usermod -aG docker $USER +newgrp docker + +# Installeer Docker Compose +sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose +sudo chmod +x /usr/local/bin/docker-compose +``` + +### Stap 3: Login naar ACR + +```bash +# Installeer Azure CLI (als nog niet geïnstalleerd) +curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash +az login + +# Login naar ACR +az acr login --name zdlas + +# OF gebruik credentials +az acr credential show --name zdlas +docker login zdlas.azurecr.io -u -p +``` + +### Stap 4: Clone Repository en Deploy + +```bash +# Clone repository +git clone +cd zuyderland-cmdb-gui + +# Maak .env.production aan +nano .env.production +# (Plak je environment variabelen) + +# Update docker-compose.prod.acr.yml (ACR naam is al correct: zdlas) + +# Start containers +docker-compose -f docker-compose.prod.acr.yml up -d + +# Check status +docker-compose -f docker-compose.prod.acr.yml ps +docker-compose -f docker-compose.prod.acr.yml logs -f +``` + +### Stap 5: Configureer Nginx en SSL + +```bash +# Installeer certbot voor Let's Encrypt +sudo apt update +sudo apt install certbot python3-certbot-nginx -y + +# Configureer SSL +sudo certbot --nginx -d cmdb.zuyderland.nl +``` + +--- + +## 🔍 Verificatie + +**Test of alles werkt:** + +```bash +# Check backend health +curl https://your-backend-url/api/health + +# Check frontend +curl https://your-frontend-url + +# Check container logs +docker-compose -f docker-compose.prod.acr.yml logs backend +docker-compose -f docker-compose.prod.acr.yml logs frontend +``` + +--- + +## 🔄 Updates Deployen + +**Wanneer je code pusht naar `main`:** +1. Pipeline bouwt automatisch nieuwe images +2. Images worden gepusht naar ACR met nieuwe tag +3. Pull nieuwe images: + ```bash + # VM met Docker Compose + docker-compose -f docker-compose.prod.acr.yml pull + docker-compose -f docker-compose.prod.acr.yml up -d + + # App Service (automatisch via Continuous Deployment) + az webapp restart --name cmdb-backend-prod --resource-group rg-cmdb-gui + ``` + +--- + +## 📝 Environment Variabelen Template + +**Maak `.env.production` aan:** + +```bash +# Backend +NODE_ENV=production +PORT=3001 + +# Jira +JIRA_BASE_URL=https://jira.zuyderland.nl +JIRA_SCHEMA_ID=your-schema-id +JIRA_PAT=your-pat-token +# OF OAuth +JIRA_OAUTH_CLIENT_ID=your-client-id +JIRA_OAUTH_CLIENT_SECRET=your-client-secret +JIRA_OAUTH_CALLBACK_URL=https://your-domain/api/auth/callback + +# Session +SESSION_SECRET=$(openssl rand -hex 32) + +# AI (Optioneel) +ANTHROPIC_API_KEY=your-key +OPENAI_API_KEY=your-key + +# Database (als PostgreSQL) +DATABASE_URL=postgresql://user:pass@host:5432/db + +# Frontend +VITE_API_URL=https://your-backend-url/api +``` + +**⚠️ BELANGRIJK:** Gebruik Azure Key Vault voor secrets in productie! + +--- + +## 🎯 Volgende Stappen + +1. **Kies deployment optie** (App Service of VM) +2. **Configureer environment variabelen** +3. **Deploy en test** +4. **Configureer SSL/TLS** +5. **Setup monitoring** +6. **Documenteer voor team** + +--- + +## 📚 Meer Informatie + +- **Volledige Deployment Guide**: `docs/DEPLOYMENT-NEXT-STEPS.md` +- **Production Deployment**: `docs/PRODUCTION-DEPLOYMENT.md` +- **Azure Deployment Summary**: `docs/AZURE-DEPLOYMENT-SUMMARY.md` + +--- + +## ✅ Success Checklist + +- [ ] Images geverifieerd in ACR +- [ ] Deployment optie gekozen +- [ ] Environment variabelen geconfigureerd +- [ ] Applicatie gedeployed +- [ ] SSL/TLS geconfigureerd +- [ ] Health checks werken +- [ ] Monitoring ingesteld +- [ ] Team geïnformeerd + +**Veel succes met de deployment! 🚀**