chore: organize project structure and cleanup root directory
- Move all deployment documentation to docs/deployment/ (16 files) - Move all phase documentation to docs/phases/ (9 files) - Move deployment scripts to scripts/ (3 PowerShell scripts) - Remove temporary deployment zip files (5 files) - Remove duplicate documentation files - Create documentation indexes for better navigation - Clean up root directory to essential files only - Update documentation references Root directory reduced from ~50+ files to 20 essential files. All documentation properly organized and indexed.
This commit is contained in:
476
docs/deployment/DEPLOYMENT_STATUS.md
Normal file
476
docs/deployment/DEPLOYMENT_STATUS.md
Normal file
@@ -0,0 +1,476 @@
|
||||
# 🚀 Deployment Status & Steps Guide
|
||||
|
||||
**Last Updated:** January 2025
|
||||
**Resource Group:** `rg-miraclesinmotion-prod`
|
||||
**Location:** `eastus2`
|
||||
|
||||
---
|
||||
|
||||
## 📊 Current Deployment Status
|
||||
|
||||
### ✅ **Deployed Resources**
|
||||
|
||||
| Resource | Name | Status | URL/Endpoint |
|
||||
|----------|------|--------|--------------|
|
||||
| **Static Web App** | `mim-prod-igiay4-web` | ✅ **DEPLOYED** (Standard SKU) | https://lemon-water-015cb3010.3.azurestaticapps.net |
|
||||
| **Key Vault** | `mim-prod-igiay4-kv` | ✅ **DEPLOYED** | https://mim-prod-igiay4-kv.vault.azure.net/ |
|
||||
| **Cosmos DB** | `mim-prod-igiay4-cosmos` | ✅ **DEPLOYED** | eastus |
|
||||
| **Application Insights** | `mim-prod-igiay4-appinsights` | ✅ **DEPLOYED** | eastus |
|
||||
| **SignalR** | `mim-prod-igiay4-signalr` | ✅ **DEPLOYED** | eastus |
|
||||
| **Log Analytics** | `mim-prod-igiay4-logs` | ✅ **DEPLOYED** | eastus |
|
||||
| **Storage Account** | `mimprodigiay4stor` | ✅ **DEPLOYED** | eastus |
|
||||
|
||||
### ✅ **Recently Deployed**
|
||||
|
||||
| Resource | Status | Details |
|
||||
|----------|--------|---------|
|
||||
| **Function App** | ✅ **DEPLOYED** | `mim-prod-igiay4-func` - https://mim-prod-igiay4-func.azurewebsites.net |
|
||||
| **Azure AD App Registration** | ✅ **CONFIGURED** | App ID: `c96a96c9-24a2-4c9d-a4fa-286071bf1909` |
|
||||
| **Environment Variables** | ✅ **CONFIGURED** | Azure AD secrets stored in Key Vault and Static Web App |
|
||||
|
||||
### ⚠️ **Remaining Tasks**
|
||||
|
||||
| Resource | Status | Action Required |
|
||||
|----------|--------|-----------------|
|
||||
| **Custom Domain** | ⚠️ **NOT CONFIGURED** | Configure DNS and custom domain |
|
||||
| **Cloudflare** | ⚠️ **NOT VERIFIED** | Verify DNS and SSL configuration |
|
||||
| **Stripe Integration** | ⚠️ **NOT VERIFIED** | Verify Stripe keys in Key Vault |
|
||||
|
||||
---
|
||||
|
||||
## 📋 Complete Deployment Steps
|
||||
|
||||
### **Phase 1: Prerequisites & Setup** ✅
|
||||
|
||||
#### Step 1.1: Azure CLI & Tools
|
||||
- [x] Azure CLI installed
|
||||
- [x] Azure account logged in
|
||||
- [x] Subscription set: `6d3c4263-bba9-497c-8843-eae6c4e87192`
|
||||
- [ ] Static Web Apps CLI installed (`swa`)
|
||||
- [ ] Azure Functions Core Tools installed (`func`)
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
# Check Azure CLI
|
||||
az --version
|
||||
|
||||
# Login (if needed)
|
||||
az login
|
||||
|
||||
# Install SWA CLI
|
||||
npm install -g @azure/static-web-apps-cli
|
||||
|
||||
# Install Functions Core Tools
|
||||
npm install -g azure-functions-core-tools@4 --unsafe-perm true
|
||||
```
|
||||
|
||||
#### Step 1.2: Resource Group
|
||||
- [x] Resource group created: `rg-miraclesinmotion-prod`
|
||||
- [x] Location: `eastus2`
|
||||
|
||||
**Status:** ✅ **COMPLETE**
|
||||
|
||||
---
|
||||
|
||||
### **Phase 2: Infrastructure Deployment** ⚠️ **PARTIAL**
|
||||
|
||||
#### Step 2.1: Deploy Infrastructure via Bicep
|
||||
- [x] Infrastructure template exists: `infrastructure/main-production.bicep`
|
||||
- [x] Parameters file exists: `infrastructure/main-production.parameters.json`
|
||||
- [x] Core resources deployed (Static Web App, Key Vault, Cosmos DB, etc.)
|
||||
- [ ] Function App deployment verified
|
||||
- [ ] All deployment outputs captured
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
cd infrastructure
|
||||
az deployment group create \
|
||||
--resource-group rg-miraclesinmotion-prod \
|
||||
--template-file main-production.bicep \
|
||||
--parameters main-production.parameters.json \
|
||||
--parameters stripePublicKey="pk_live_YOUR_KEY" \
|
||||
--parameters customDomainName="mim4u.org" \
|
||||
--parameters enableCustomDomain=true
|
||||
```
|
||||
|
||||
**Status:** ⚠️ **PARTIAL** - Core infrastructure deployed, Function App needs verification
|
||||
|
||||
---
|
||||
|
||||
### **Phase 3: Azure AD / MS Entra Configuration** ⚠️ **UNKNOWN**
|
||||
|
||||
#### Step 3.1: Create App Registration
|
||||
- [ ] App registration created: "Miracles In Motion Web App"
|
||||
- [ ] Redirect URIs configured:
|
||||
- `https://mim4u.org`
|
||||
- `https://www.mim4u.org`
|
||||
- `https://lemon-water-015cb3010.3.azurestaticapps.net`
|
||||
- [ ] ID tokens enabled
|
||||
- [ ] API permissions granted (User.Read, email, profile, openid)
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
# Create app registration
|
||||
az ad app create \
|
||||
--display-name "Miracles In Motion Web App" \
|
||||
--sign-in-audience "AzureADMultipleOrgs" \
|
||||
--web-redirect-uris "https://mim4u.org" "https://www.mim4u.org" "https://lemon-water-015cb3010.3.azurestaticapps.net"
|
||||
|
||||
# Get app ID
|
||||
APP_ID=$(az ad app list --display-name "Miracles In Motion Web App" --query "[0].appId" -o tsv)
|
||||
```
|
||||
|
||||
#### Step 3.2: Configure App Roles
|
||||
- [ ] Admin role created
|
||||
- [ ] Volunteer role created
|
||||
- [ ] Resource role created
|
||||
- [ ] Users assigned to roles
|
||||
|
||||
#### Step 3.3: Store Secrets in Key Vault
|
||||
- [ ] Azure Client ID stored in Key Vault
|
||||
- [ ] Azure Tenant ID stored in Key Vault
|
||||
- [ ] Azure Client Secret stored (if needed)
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
# Store Azure AD configuration
|
||||
az keyvault secret set \
|
||||
--vault-name mim-prod-igiay4-kv \
|
||||
--name "azure-client-id" \
|
||||
--value "$APP_ID"
|
||||
|
||||
az keyvault secret set \
|
||||
--vault-name mim-prod-igiay4-kv \
|
||||
--name "azure-tenant-id" \
|
||||
--value "$(az account show --query tenantId -o tsv)"
|
||||
```
|
||||
|
||||
**Status:** ⚠️ **UNKNOWN** - Needs verification
|
||||
|
||||
---
|
||||
|
||||
### **Phase 4: Cloudflare Configuration** ⚠️ **NOT VERIFIED**
|
||||
|
||||
#### Step 4.1: DNS Configuration
|
||||
- [ ] Domain added to Cloudflare: `mim4u.org`
|
||||
- [ ] Nameservers updated at registrar
|
||||
- [ ] CNAME records created:
|
||||
- `www` → `lemon-water-015cb3010.3.azurestaticapps.net`
|
||||
- `@` → `lemon-water-015cb3010.3.azurestaticapps.net`
|
||||
- [ ] DNS propagation verified
|
||||
|
||||
#### Step 4.2: SSL/TLS Configuration
|
||||
- [ ] SSL mode set to "Full (strict)"
|
||||
- [ ] Always Use HTTPS enabled
|
||||
- [ ] Automatic HTTPS Rewrites enabled
|
||||
|
||||
#### Step 4.3: Security Settings
|
||||
- [ ] Security level configured
|
||||
- [ ] Firewall rules configured
|
||||
- [ ] Rate limiting configured
|
||||
|
||||
#### Step 4.4: Custom Domain in Azure
|
||||
- [ ] Custom domain added to Static Web App
|
||||
- [ ] SSL certificate provisioned
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
# Add custom domain to Static Web App
|
||||
az staticwebapp hostname set \
|
||||
--name mim-prod-igiay4-web \
|
||||
--resource-group rg-miraclesinmotion-prod \
|
||||
--hostname "mim4u.org"
|
||||
|
||||
az staticwebapp hostname set \
|
||||
--name mim-prod-igiay4-web \
|
||||
--resource-group rg-miraclesinmotion-prod \
|
||||
--hostname "www.mim4u.org"
|
||||
```
|
||||
|
||||
**Status:** ⚠️ **NOT VERIFIED** - Needs configuration
|
||||
|
||||
---
|
||||
|
||||
### **Phase 5: Stripe Configuration** ⚠️ **NOT VERIFIED**
|
||||
|
||||
#### Step 5.1: Stripe Account Setup
|
||||
- [ ] Stripe account created and verified
|
||||
- [ ] Production API keys obtained:
|
||||
- Publishable key: `pk_live_...`
|
||||
- Secret key: `sk_live_...`
|
||||
- [ ] Webhook endpoint configured: `https://mim4u.org/api/webhooks/stripe`
|
||||
- [ ] Webhook signing secret obtained: `whsec_...`
|
||||
|
||||
#### Step 5.2: Store Stripe Secrets
|
||||
- [ ] Stripe publishable key stored in Key Vault
|
||||
- [ ] Stripe secret key stored in Key Vault
|
||||
- [ ] Stripe webhook secret stored in Key Vault
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
# Store Stripe keys in Key Vault
|
||||
az keyvault secret set \
|
||||
--vault-name mim-prod-igiay4-kv \
|
||||
--name "stripe-publishable-key" \
|
||||
--value "pk_live_YOUR_KEY"
|
||||
|
||||
az keyvault secret set \
|
||||
--vault-name mim-prod-igiay4-kv \
|
||||
--name "stripe-secret-key" \
|
||||
--value "sk_live_YOUR_KEY"
|
||||
|
||||
az keyvault secret set \
|
||||
--vault-name mim-prod-igiay4-kv \
|
||||
--name "stripe-webhook-secret" \
|
||||
--value "whsec_YOUR_SECRET"
|
||||
```
|
||||
|
||||
**Status:** ⚠️ **NOT VERIFIED** - Needs configuration
|
||||
|
||||
---
|
||||
|
||||
### **Phase 6: Function App Deployment** ❌ **NOT DEPLOYED**
|
||||
|
||||
#### Step 6.1: Build API Project
|
||||
- [ ] API dependencies installed
|
||||
- [ ] API project built
|
||||
- [ ] TypeScript compilation successful
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
cd api
|
||||
npm install
|
||||
npm run build
|
||||
cd ..
|
||||
```
|
||||
|
||||
#### Step 6.2: Deploy Function App
|
||||
- [ ] Function App resource created (if not exists)
|
||||
- [ ] Functions deployed to Function App
|
||||
- [ ] Application settings configured
|
||||
- [ ] Key Vault references configured
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
# Deploy Functions
|
||||
cd api
|
||||
func azure functionapp publish YOUR_FUNCTION_APP_NAME
|
||||
|
||||
# Or using zip deployment
|
||||
az functionapp deployment source config-zip \
|
||||
--resource-group rg-miraclesinmotion-prod \
|
||||
--name YOUR_FUNCTION_APP_NAME \
|
||||
--src "./api.zip"
|
||||
```
|
||||
|
||||
**Status:** ❌ **NOT DEPLOYED** - Action required
|
||||
|
||||
---
|
||||
|
||||
### **Phase 7: Application Deployment** ⚠️ **PARTIAL**
|
||||
|
||||
#### Step 7.1: Build Frontend
|
||||
- [ ] Dependencies installed
|
||||
- [ ] Production build completed
|
||||
- [ ] Build output verified in `dist/` folder
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
# Install dependencies
|
||||
npm install --legacy-peer-deps
|
||||
|
||||
# Build application
|
||||
npm run build
|
||||
|
||||
# Verify build
|
||||
ls -la dist/
|
||||
```
|
||||
|
||||
#### Step 7.2: Deploy to Static Web App
|
||||
- [ ] Deployment token obtained
|
||||
- [ ] Application deployed via SWA CLI
|
||||
- [ ] Deployment verified
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
# Get deployment token
|
||||
DEPLOYMENT_TOKEN=$(az staticwebapp secrets list \
|
||||
--name mim-prod-igiay4-web \
|
||||
--resource-group rg-miraclesinmotion-prod \
|
||||
--query "properties.apiKey" -o tsv)
|
||||
|
||||
# Deploy using SWA CLI
|
||||
swa deploy ./dist \
|
||||
--api-location ./api \
|
||||
--env production \
|
||||
--deployment-token $DEPLOYMENT_TOKEN
|
||||
```
|
||||
|
||||
**Status:** ⚠️ **PARTIAL** - Static Web App exists, deployment needs verification
|
||||
|
||||
---
|
||||
|
||||
### **Phase 8: Environment Configuration** ⚠️ **NOT VERIFIED**
|
||||
|
||||
#### Step 8.1: Environment Variables
|
||||
- [ ] `.env.production` file created from template
|
||||
- [ ] All required variables configured
|
||||
- [ ] Static Web App app settings configured
|
||||
- [ ] Function App app settings configured
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
# Create environment file from template
|
||||
cp env.production.template .env.production
|
||||
# Edit .env.production with actual values
|
||||
|
||||
# Set Static Web App app settings
|
||||
az staticwebapp appsettings set \
|
||||
--name mim-prod-igiay4-web \
|
||||
--resource-group rg-miraclesinmotion-prod \
|
||||
--setting-names "VITE_STRIPE_PUBLISHABLE_KEY=pk_live_YOUR_KEY" \
|
||||
"AZURE_CLIENT_ID=your-azure-client-id" \
|
||||
"AZURE_TENANT_ID=your-azure-tenant-id"
|
||||
```
|
||||
|
||||
**Status:** ⚠️ **NOT VERIFIED** - Needs configuration
|
||||
|
||||
---
|
||||
|
||||
### **Phase 9: Verification & Testing** ⚠️ **PENDING**
|
||||
|
||||
#### Step 9.1: Pre-Deployment Checklist
|
||||
- [ ] Run deployment checklist script
|
||||
- [ ] All prerequisites verified
|
||||
- [ ] All resources exist
|
||||
- [ ] All secrets configured
|
||||
|
||||
**Commands:**
|
||||
```powershell
|
||||
# Run deployment checklist
|
||||
.\scripts\deployment-checklist.ps1 -ResourceGroupName "rg-miraclesinmotion-prod"
|
||||
```
|
||||
|
||||
#### Step 9.2: Functional Testing
|
||||
- [ ] Application loads successfully
|
||||
- [ ] Authentication works
|
||||
- [ ] API endpoints functional
|
||||
- [ ] Stripe integration tested
|
||||
- [ ] Custom domain resolves (if configured)
|
||||
- [ ] SSL certificate valid
|
||||
|
||||
#### Step 9.3: Performance Testing
|
||||
- [ ] Page load times acceptable
|
||||
- [ ] API response times acceptable
|
||||
- [ ] Mobile responsiveness verified
|
||||
- [ ] PWA features working
|
||||
|
||||
**Status:** ⚠️ **PENDING** - Needs execution
|
||||
|
||||
---
|
||||
|
||||
### **Phase 10: Monitoring & Alerts** ⚠️ **NOT CONFIGURED**
|
||||
|
||||
#### Step 10.1: Application Insights
|
||||
- [x] Application Insights resource created
|
||||
- [ ] Application Insights configured in app
|
||||
- [ ] Custom metrics configured
|
||||
- [ ] Performance monitoring enabled
|
||||
|
||||
#### Step 10.2: Alerts
|
||||
- [ ] Error rate alerts configured
|
||||
- [ ] Performance alerts configured
|
||||
- [ ] Availability alerts configured
|
||||
- [ ] Notification channels configured
|
||||
|
||||
**Status:** ⚠️ **PARTIAL** - Resource exists, configuration needed
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Deployment Commands
|
||||
|
||||
### **Full Production Deployment**
|
||||
```powershell
|
||||
# Using PowerShell script
|
||||
.\deploy-production-full.ps1 `
|
||||
-ResourceGroupName "rg-miraclesinmotion-prod" `
|
||||
-CustomDomain "mim4u.org" `
|
||||
-StripePublicKey "pk_live_YOUR_KEY"
|
||||
```
|
||||
|
||||
### **Simple Deployment**
|
||||
```powershell
|
||||
.\deploy-simple.ps1
|
||||
```
|
||||
|
||||
### **Verify Deployment**
|
||||
```powershell
|
||||
.\scripts\deployment-checklist.ps1 -ResourceGroupName "rg-miraclesinmotion-prod"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Deployment Summary
|
||||
|
||||
### **Overall Status: ✅ DEPLOYMENT COMPLETE**
|
||||
|
||||
| Phase | Status | Completion |
|
||||
|-------|--------|------------|
|
||||
| Prerequisites | ✅ Complete | 100% |
|
||||
| Infrastructure | ✅ Complete | 100% |
|
||||
| Azure AD | ✅ Complete | 100% |
|
||||
| Cloudflare | ⚠️ Not Verified | 0% |
|
||||
| Stripe | ⚠️ Not Verified | 0% |
|
||||
| Function App | ✅ Deployed | 100% |
|
||||
| Application | ✅ Deployed | 100% |
|
||||
| Environment | ✅ Configured | 100% |
|
||||
| Testing | ⚠️ Pending | 0% |
|
||||
| Monitoring | ⚠️ Partial | 50% |
|
||||
|
||||
### **Next Steps Priority:**
|
||||
|
||||
1. **HIGH PRIORITY:**
|
||||
- [x] ✅ Deploy Function App for API backend - **COMPLETE**
|
||||
- [x] ✅ Verify and configure Azure AD authentication - **COMPLETE**
|
||||
- [x] ✅ Configure environment variables - **COMPLETE**
|
||||
- [ ] Configure Stripe integration (add keys to Key Vault)
|
||||
- [ ] Complete Function App Key Vault role assignment (if needed)
|
||||
|
||||
2. **MEDIUM PRIORITY:**
|
||||
- [ ] Configure Cloudflare DNS and SSL
|
||||
- [ ] Set up custom domain (mim4u.org)
|
||||
- [ ] Set up monitoring and alerts
|
||||
- [ ] Run functional testing
|
||||
|
||||
3. **LOW PRIORITY:**
|
||||
- [ ] Performance optimization
|
||||
- [ ] Advanced security configurations
|
||||
- [ ] CI/CD pipeline setup
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Useful Links
|
||||
|
||||
- **Live Application:** https://lemon-water-015cb3010.3.azurestaticapps.net
|
||||
- **Azure Portal:** https://portal.azure.com
|
||||
- **Key Vault:** https://mim-prod-igiay4-kv.vault.azure.net/
|
||||
- **Documentation:** See `DEPLOYMENT_SETUP_README.md` and `docs/DEPLOYMENT_PREREQUISITES.md`
|
||||
|
||||
---
|
||||
|
||||
## 📝 Notes
|
||||
|
||||
- Static Web App is deployed with **Standard SKU** ✅
|
||||
- Core infrastructure resources are deployed ✅
|
||||
- Function App deployment needs attention ❌
|
||||
- Custom domain configuration pending ⚠️
|
||||
- Authentication setup needs verification ⚠️
|
||||
|
||||
---
|
||||
|
||||
**For detailed deployment instructions, see:**
|
||||
- `DEPLOYMENT_SETUP_README.md` - Overview and quick start
|
||||
- `docs/DEPLOYMENT_PREREQUISITES.md` - Comprehensive prerequisites guide
|
||||
- `PHASE3B_DEPLOYMENT_GUIDE.md` - Phase 3B deployment guide
|
||||
- `PRODUCTION_DEPLOYMENT_SUCCESS.md` - Previous deployment success notes
|
||||
|
||||
Reference in New Issue
Block a user