- 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.
305 lines
7.6 KiB
Markdown
305 lines
7.6 KiB
Markdown
# ☁️ Cloudflare Setup Guide for mim4u.org
|
|
|
|
This guide provides step-by-step instructions for configuring Cloudflare for the Miracles in Motion application.
|
|
|
|
---
|
|
|
|
## 📋 Prerequisites
|
|
|
|
- Cloudflare account
|
|
- Domain `mim4u.org` registered
|
|
- Access to domain registrar DNS settings
|
|
- Cloudflare API token (optional, for automation)
|
|
|
|
---
|
|
|
|
## 🚀 Step-by-Step Setup
|
|
|
|
### Step 1: Add Domain to Cloudflare
|
|
|
|
1. Log in to [Cloudflare Dashboard](https://dash.cloudflare.com)
|
|
2. Click **"Add a site"**
|
|
3. Enter your domain: `mim4u.org`
|
|
4. Select a plan (Free plan is sufficient)
|
|
5. Cloudflare will scan your existing DNS records
|
|
|
|
### Step 2: Update Nameservers
|
|
|
|
1. Cloudflare will provide you with nameservers (e.g., `ns1.cloudflare.com`, `ns2.cloudflare.com`)
|
|
2. Go to your domain registrar
|
|
3. Update nameservers to Cloudflare's nameservers
|
|
4. Wait for DNS propagation (24-48 hours, usually faster)
|
|
|
|
### Step 3: Configure DNS Records
|
|
|
|
Once nameservers are updated, configure DNS records:
|
|
|
|
#### Option A: Using Cloudflare Dashboard
|
|
|
|
1. Go to **DNS** → **Records**
|
|
2. Delete any existing A records for `@` (apex domain)
|
|
3. Add the following records:
|
|
|
|
| Type | Name | Content | Proxy Status | TTL |
|
|
|------|------|---------|---------------|-----|
|
|
| CNAME | www | lemon-water-015cb3010.3.azurestaticapps.net | ✅ **Proxied** | Auto |
|
|
| CNAME | @ | lemon-water-015cb3010.3.azurestaticapps.net | ⚠️ **DNS Only** | Auto |
|
|
|
|
**Important Notes:**
|
|
- For apex domain (`@`), Cloudflare uses CNAME Flattening automatically
|
|
- Set apex domain to **DNS Only** (gray cloud) initially for Azure validation
|
|
- After Azure validation, you can enable proxying (orange cloud)
|
|
|
|
#### Option B: Using Azure Static Web App Validation
|
|
|
|
If Azure requires TXT validation:
|
|
|
|
1. Get validation token from Azure:
|
|
```bash
|
|
az staticwebapp hostname show \
|
|
--name mim-prod-igiay4-web \
|
|
--resource-group rg-miraclesinmotion-prod \
|
|
--hostname "mim4u.org" \
|
|
--query "validationToken" -o tsv
|
|
```
|
|
|
|
2. Add TXT record in Cloudflare:
|
|
- **Type:** `TXT`
|
|
- **Name:** `_asuid` or `asuid`
|
|
- **Content:** (validation token from Azure)
|
|
- **TTL:** Auto
|
|
|
|
### Step 4: Configure SSL/TLS
|
|
|
|
1. Go to **SSL/TLS** → **Overview**
|
|
2. Set encryption mode to **Full (strict)**
|
|
3. Enable **Always Use HTTPS**:
|
|
- Go to **SSL/TLS** → **Edge Certificates**
|
|
- Toggle **Always Use HTTPS** to ON
|
|
4. Enable **Automatic HTTPS Rewrites**:
|
|
- Toggle **Automatic HTTPS Rewrites** to ON
|
|
|
|
### Step 5: Configure Page Rules
|
|
|
|
1. Go to **Rules** → **Page Rules**
|
|
2. Create the following rules:
|
|
|
|
**Rule 1: Force HTTPS**
|
|
- URL: `*mim4u.org/*`
|
|
- Settings:
|
|
- Always Use HTTPS: ✅ ON
|
|
- SSL: Full (strict)
|
|
|
|
**Rule 2: Cache Static Assets**
|
|
- URL: `*mim4u.org/assets/*`
|
|
- Settings:
|
|
- Cache Level: Cache Everything
|
|
- Edge Cache TTL: 1 month
|
|
|
|
**Rule 3: Cache JS/CSS**
|
|
- URL: `*mim4u.org/*.js` or `*mim4u.org/*.css`
|
|
- Settings:
|
|
- Cache Level: Cache Everything
|
|
- Edge Cache TTL: 1 week
|
|
|
|
### Step 6: Configure Security Settings
|
|
|
|
1. Go to **Security** → **Settings**
|
|
2. Configure:
|
|
- **Security Level:** Medium
|
|
- **Challenge Passage:** 30 minutes
|
|
- **Browser Integrity Check:** ✅ On
|
|
- **Privacy Pass Support:** ✅ On
|
|
|
|
### Step 7: Configure Firewall Rules
|
|
|
|
1. Go to **Security** → **WAF** → **Custom rules**
|
|
2. Create rules:
|
|
|
|
**Rule: Block Bad Bots**
|
|
- Expression: `(http.user_agent contains "bot" and not http.user_agent contains "Googlebot")`
|
|
- Action: Block
|
|
|
|
**Rule: Rate Limiting for API**
|
|
- Expression: `(http.request.uri.path contains "/api/")`
|
|
- Action: Challenge
|
|
- Rate: 100 requests per minute
|
|
|
|
### Step 8: Configure Speed Optimization
|
|
|
|
1. Go to **Speed** → **Optimization**
|
|
2. Enable:
|
|
- ✅ Auto Minify (JavaScript, CSS, HTML)
|
|
- ✅ Brotli compression
|
|
- ✅ Rocket Loader (optional)
|
|
- ✅ Mirage (optional, for mobile)
|
|
|
|
### Step 9: Configure Analytics
|
|
|
|
1. Go to **Analytics** → **Web Analytics**
|
|
2. Enable **Web Analytics** for your domain
|
|
3. (Optional) Add tracking script to your application
|
|
|
|
### Step 10: Add Custom Domain to Azure
|
|
|
|
After DNS is configured and validated:
|
|
|
|
```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"
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ Verification Steps
|
|
|
|
### 1. Verify DNS Resolution
|
|
|
|
```bash
|
|
# Check DNS records
|
|
dig mim4u.org
|
|
dig www.mim4u.org
|
|
|
|
# Check CNAME
|
|
dig www.mim4u.org CNAME
|
|
|
|
# Check Cloudflare proxy status
|
|
curl -I https://mim4u.org | grep -i "cf-"
|
|
```
|
|
|
|
Expected headers:
|
|
- `CF-Cache-Status: DYNAMIC`
|
|
- `CF-Ray: [unique-id]`
|
|
- `Server: cloudflare`
|
|
|
|
### 2. Verify SSL/TLS
|
|
|
|
```bash
|
|
# Test HTTPS
|
|
curl -I https://mim4u.org
|
|
|
|
# Check SSL certificate
|
|
openssl s_client -connect mim4u.org:443 -servername mim4u.org
|
|
```
|
|
|
|
### 3. Verify Cloudflare Configuration
|
|
|
|
```bash
|
|
# Test Cloudflare headers
|
|
curl -I https://mim4u.org | grep -i "cf-"
|
|
|
|
# Test caching
|
|
curl -I https://mim4u.org/assets/ | grep -i "cf-cache"
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 Automation (Optional)
|
|
|
|
### Using Cloudflare API
|
|
|
|
If you have a Cloudflare API token:
|
|
|
|
```bash
|
|
# Set environment variables
|
|
export CLOUDFLARE_API_TOKEN="your-api-token"
|
|
export CLOUDFLARE_ZONE_ID="your-zone-id"
|
|
|
|
# Create CNAME record via API
|
|
curl -X POST "https://api.cloudflare.com/client/v4/zones/$CLOUDFLARE_ZONE_ID/dns_records" \
|
|
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
--data '{
|
|
"type": "CNAME",
|
|
"name": "www",
|
|
"content": "lemon-water-015cb3010.3.azurestaticapps.net",
|
|
"proxied": true
|
|
}'
|
|
```
|
|
|
|
---
|
|
|
|
## ⚠️ Important Notes
|
|
|
|
1. **DNS Propagation:** Changes can take 24-48 hours to propagate globally
|
|
2. **SSL Certificate:** Azure will automatically provision SSL certificates after DNS validation
|
|
3. **CNAME Flattening:** Cloudflare automatically handles CNAME flattening for apex domains
|
|
4. **Proxy Status:** Keep apex domain as DNS Only until Azure validation completes
|
|
5. **Cache Purging:** Use Cloudflare dashboard to purge cache when deploying updates
|
|
|
|
---
|
|
|
|
## 🔍 Troubleshooting
|
|
|
|
### Issue: DNS not resolving
|
|
- **Solution:** Wait for DNS propagation (up to 48 hours)
|
|
- Check nameservers are correctly set at registrar
|
|
- Verify DNS records in Cloudflare dashboard
|
|
|
|
### Issue: SSL certificate errors
|
|
- **Solution:** Ensure SSL mode is "Full (strict)"
|
|
- Verify DNS records are correct
|
|
- Wait for Azure SSL certificate provisioning
|
|
|
|
### Issue: Site not loading through Cloudflare
|
|
- **Solution:** Check proxy status (should be orange cloud for www)
|
|
- Verify CNAME records point to correct Azure endpoint
|
|
- Check Cloudflare firewall rules
|
|
|
|
### Issue: Cache not updating
|
|
- **Solution:** Purge cache in Cloudflare dashboard
|
|
- Adjust cache TTL settings
|
|
- Use cache rules for specific paths
|
|
|
|
---
|
|
|
|
## 📊 Performance Optimization
|
|
|
|
### Recommended Settings:
|
|
|
|
1. **Caching:**
|
|
- Static assets: Cache Everything (1 month)
|
|
- HTML: Bypass Cache
|
|
- API endpoints: Bypass Cache
|
|
|
|
2. **Compression:**
|
|
- Enable Brotli compression
|
|
- Enable Gzip compression
|
|
|
|
3. **Minification:**
|
|
- Auto Minify JavaScript
|
|
- Auto Minify CSS
|
|
- Auto Minify HTML
|
|
|
|
4. **Image Optimization:**
|
|
- Enable Polish (if on paid plan)
|
|
- Enable WebP conversion
|
|
|
|
---
|
|
|
|
## 📝 Current Status
|
|
|
|
- **Cloudflare Account:** ⚠️ Needs to be created/configured
|
|
- **DNS Records:** ⚠️ Pending configuration
|
|
- **SSL/TLS:** ⚠️ Pending (will be automatic after DNS)
|
|
- **Azure Integration:** ✅ Ready
|
|
|
|
---
|
|
|
|
**Next Steps:**
|
|
1. Create/access Cloudflare account
|
|
2. Add domain to Cloudflare
|
|
3. Update nameservers at registrar
|
|
4. Configure DNS records
|
|
5. Set up SSL/TLS and security settings
|
|
6. Add custom domain to Azure Static Web App
|
|
|