mirror of
https://github.com/johndoe6345789/low-code-react-app-b.git
synced 2026-04-25 06:04:54 +00:00
343 lines
8.8 KiB
JSON
343 lines
8.8 KiB
JSON
{
|
|
"$schema": "./schemas/deployment-schema.json",
|
|
"version": "1.0.0",
|
|
"platforms": {
|
|
"caprover": {
|
|
"enabled": true,
|
|
"appName": "codeforge",
|
|
"containerHttpPort": 80,
|
|
"instanceCount": 1,
|
|
"captainDefinitionRelativePath": "./captain-definition.json",
|
|
"healthCheck": {
|
|
"enabled": true,
|
|
"path": "/health",
|
|
"interval": 30,
|
|
"timeout": 10,
|
|
"retries": 3,
|
|
"startPeriod": 10
|
|
},
|
|
"envVars": {
|
|
"NODE_ENV": "production",
|
|
"PORT": "80"
|
|
},
|
|
"buildOptimizations": {
|
|
"simplifiedChunks": true,
|
|
"aggressiveMinification": true,
|
|
"inlineSmallAssets": true,
|
|
"chunkSizeLimit": 2000,
|
|
"dropConsole": true,
|
|
"sourcemaps": false
|
|
},
|
|
"serverOptimizations": {
|
|
"startupDelay": 5000,
|
|
"healthCheckDelay": 10000,
|
|
"gracefulShutdownTimeout": 30000
|
|
},
|
|
"pwa": {
|
|
"clearCacheOnDeploy": true,
|
|
"serviceWorkerScope": "/",
|
|
"updateOnReload": true
|
|
},
|
|
"resources": {
|
|
"memory": "512M",
|
|
"cpuShares": 1024
|
|
},
|
|
"volumes": [],
|
|
"notes": [
|
|
"CapRover requires PORT environment variable",
|
|
"Health check endpoint must respond within timeout",
|
|
"Simplified chunking reduces asset loading issues",
|
|
"PWA cache is cleared on each deployment to prevent stale assets"
|
|
]
|
|
},
|
|
"docker-compose": {
|
|
"enabled": true,
|
|
"serviceName": "app",
|
|
"port": 3000,
|
|
"containerPort": 80,
|
|
"restart": "unless-stopped",
|
|
"healthCheck": {
|
|
"enabled": true,
|
|
"test": ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/health"],
|
|
"interval": "30s",
|
|
"timeout": "3s",
|
|
"retries": 3,
|
|
"startPeriod": "5s"
|
|
},
|
|
"labels": {
|
|
"traefik.enable": "true",
|
|
"traefik.http.routers.codeforge.rule": "Host(`codeforge.example.com`)",
|
|
"traefik.http.services.codeforge.loadbalancer.server.port": "80"
|
|
},
|
|
"networks": ["codeforge-network"],
|
|
"envVars": {
|
|
"NODE_ENV": "production"
|
|
}
|
|
},
|
|
"heroku": {
|
|
"enabled": false,
|
|
"appName": "codeforge-app",
|
|
"buildpack": "heroku/nodejs",
|
|
"stack": "heroku-22",
|
|
"region": "us",
|
|
"dynoType": "web",
|
|
"procfile": "web: npm run preview",
|
|
"envVars": {
|
|
"NODE_ENV": "production",
|
|
"NPM_CONFIG_PRODUCTION": "false"
|
|
},
|
|
"addons": [],
|
|
"notes": [
|
|
"Heroku uses PORT environment variable dynamically",
|
|
"Preview server automatically binds to Heroku's PORT"
|
|
]
|
|
},
|
|
"vercel": {
|
|
"enabled": false,
|
|
"framework": "vite",
|
|
"buildCommand": "npm run build",
|
|
"outputDirectory": "dist",
|
|
"installCommand": "npm ci",
|
|
"devCommand": "npm run dev",
|
|
"routes": [
|
|
{
|
|
"src": "/(.*)",
|
|
"dest": "/index.html"
|
|
}
|
|
],
|
|
"headers": [
|
|
{
|
|
"source": "/(.*)",
|
|
"headers": [
|
|
{
|
|
"key": "X-Content-Type-Options",
|
|
"value": "nosniff"
|
|
},
|
|
{
|
|
"key": "X-Frame-Options",
|
|
"value": "DENY"
|
|
},
|
|
{
|
|
"key": "X-XSS-Protection",
|
|
"value": "1; mode=block"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"envVars": {},
|
|
"notes": [
|
|
"Vercel automatically handles SPA routing",
|
|
"Static file serving optimized by CDN"
|
|
]
|
|
},
|
|
"netlify": {
|
|
"enabled": false,
|
|
"buildCommand": "npm run build",
|
|
"publishDirectory": "dist",
|
|
"functionsDirectory": "netlify/functions",
|
|
"redirects": [
|
|
{
|
|
"from": "/*",
|
|
"to": "/index.html",
|
|
"status": 200
|
|
}
|
|
],
|
|
"headers": [
|
|
{
|
|
"for": "/*",
|
|
"values": {
|
|
"X-Content-Type-Options": "nosniff",
|
|
"X-Frame-Options": "DENY",
|
|
"X-XSS-Protection": "1; mode=block"
|
|
}
|
|
}
|
|
],
|
|
"envVars": {},
|
|
"notes": [
|
|
"Netlify automatically handles SPA routing via _redirects",
|
|
"Edge functions available for serverless endpoints"
|
|
]
|
|
},
|
|
"aws-ecs": {
|
|
"enabled": false,
|
|
"taskDefinitionFamily": "codeforge",
|
|
"containerName": "codeforge-app",
|
|
"cpu": "256",
|
|
"memory": "512",
|
|
"port": 80,
|
|
"healthCheck": {
|
|
"command": ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost/health || exit 1"],
|
|
"interval": 30,
|
|
"timeout": 5,
|
|
"retries": 3,
|
|
"startPeriod": 10
|
|
},
|
|
"logging": {
|
|
"driver": "awslogs",
|
|
"options": {
|
|
"awslogs-group": "/ecs/codeforge",
|
|
"awslogs-region": "us-east-1",
|
|
"awslogs-stream-prefix": "ecs"
|
|
}
|
|
},
|
|
"envVars": {
|
|
"NODE_ENV": "production",
|
|
"PORT": "80"
|
|
}
|
|
},
|
|
"kubernetes": {
|
|
"enabled": false,
|
|
"deploymentName": "codeforge",
|
|
"namespace": "default",
|
|
"replicas": 2,
|
|
"containerPort": 80,
|
|
"servicePort": 80,
|
|
"serviceType": "ClusterIP",
|
|
"resources": {
|
|
"requests": {
|
|
"cpu": "100m",
|
|
"memory": "256Mi"
|
|
},
|
|
"limits": {
|
|
"cpu": "500m",
|
|
"memory": "512Mi"
|
|
}
|
|
},
|
|
"livenessProbe": {
|
|
"httpGet": {
|
|
"path": "/health",
|
|
"port": 80
|
|
},
|
|
"initialDelaySeconds": 10,
|
|
"periodSeconds": 30,
|
|
"timeoutSeconds": 5,
|
|
"successThreshold": 1,
|
|
"failureThreshold": 3
|
|
},
|
|
"readinessProbe": {
|
|
"httpGet": {
|
|
"path": "/health",
|
|
"port": 80
|
|
},
|
|
"initialDelaySeconds": 5,
|
|
"periodSeconds": 10,
|
|
"timeoutSeconds": 3,
|
|
"successThreshold": 1,
|
|
"failureThreshold": 3
|
|
},
|
|
"envVars": {
|
|
"NODE_ENV": "production",
|
|
"PORT": "80"
|
|
}
|
|
}
|
|
},
|
|
"commonOptimizations": {
|
|
"production": {
|
|
"minify": true,
|
|
"treeshake": true,
|
|
"splitChunks": "optimal",
|
|
"compression": "gzip",
|
|
"cache": true,
|
|
"sourcemaps": false
|
|
},
|
|
"staging": {
|
|
"minify": true,
|
|
"treeshake": true,
|
|
"splitChunks": "balanced",
|
|
"compression": "gzip",
|
|
"cache": true,
|
|
"sourcemaps": true
|
|
},
|
|
"development": {
|
|
"minify": false,
|
|
"treeshake": false,
|
|
"splitChunks": "minimal",
|
|
"compression": "none",
|
|
"cache": false,
|
|
"sourcemaps": true
|
|
}
|
|
},
|
|
"buildProfiles": {
|
|
"caprover-optimized": {
|
|
"description": "Optimized build for CapRover deployment with simplified chunking",
|
|
"platform": "caprover",
|
|
"chunks": {
|
|
"strategy": "simple",
|
|
"groups": {
|
|
"vendor": ["node_modules"],
|
|
"app": ["src"]
|
|
}
|
|
},
|
|
"minification": {
|
|
"enabled": true,
|
|
"options": {
|
|
"compress": {
|
|
"drop_console": true,
|
|
"drop_debugger": true,
|
|
"pure_funcs": ["console.log", "console.time", "console.timeEnd"]
|
|
}
|
|
}
|
|
},
|
|
"assets": {
|
|
"inlineLimit": 8192,
|
|
"assetsInlineLimit": 4096
|
|
}
|
|
},
|
|
"cdn-optimized": {
|
|
"description": "Optimized for CDN deployment with aggressive chunking",
|
|
"platform": ["vercel", "netlify"],
|
|
"chunks": {
|
|
"strategy": "granular",
|
|
"maxSize": 500000,
|
|
"groups": {
|
|
"react-vendor": ["react", "react-dom"],
|
|
"ui-core": ["@radix-ui"],
|
|
"code-editor": ["@monaco-editor"],
|
|
"data-viz": ["d3", "recharts"],
|
|
"icons": ["@phosphor-icons", "lucide-react"]
|
|
}
|
|
},
|
|
"minification": {
|
|
"enabled": true,
|
|
"options": {
|
|
"compress": {
|
|
"drop_console": true,
|
|
"drop_debugger": true
|
|
}
|
|
}
|
|
},
|
|
"assets": {
|
|
"inlineLimit": 4096,
|
|
"assetsInlineLimit": 2048
|
|
}
|
|
}
|
|
},
|
|
"monitoring": {
|
|
"enabled": false,
|
|
"healthCheckEndpoint": "/health",
|
|
"metricsEndpoint": "/metrics",
|
|
"readinessEndpoint": "/ready",
|
|
"livenessEndpoint": "/live"
|
|
},
|
|
"security": {
|
|
"headers": {
|
|
"X-Content-Type-Options": "nosniff",
|
|
"X-Frame-Options": "DENY",
|
|
"X-XSS-Protection": "1; mode=block",
|
|
"Referrer-Policy": "strict-origin-when-cross-origin",
|
|
"Permissions-Policy": "geolocation=(), microphone=(), camera=()"
|
|
},
|
|
"csp": {
|
|
"enabled": false,
|
|
"directives": {
|
|
"default-src": ["'self'"],
|
|
"script-src": ["'self'", "'unsafe-inline'"],
|
|
"style-src": ["'self'", "'unsafe-inline'", "https://fonts.googleapis.com"],
|
|
"font-src": ["'self'", "https://fonts.gstatic.com"],
|
|
"img-src": ["'self'", "data:", "https:"],
|
|
"connect-src": ["'self'"]
|
|
}
|
|
}
|
|
}
|
|
}
|