[{"data":1,"prerenderedAt":7745},["ShallowReactive",2],{"layout-article-list":3,"article-fix-issues-fix-docker-port-already-allocated":3336,"siblings-fix-issues":4304},[4,14,20,28,34,40,47,54,60,67,74,81,87,93,100,106,112,118,123,130,135,141,146,153,159,164,171,177,184,191,196,201,206,211,217,222,227,232,238,244,250,255,261,266,273,279,285,292,296,301,306,310,316,321,327,331,337,343,350,356,361,367,374,381,386,392,397,402,407,412,418,425,431,437,443,449,455,461,467,474,481,487,492,498,503,508,513,519,525,530,535,540,545,551,556,562,568,574,578,584,589,594,600,606,612,617,623,629,636,642,648,654,660,666,672,678,685,689,696,703,708,715,721,726,731,737,743,748,753,758,763,769,775,781,787,792,799,803,808,814,820,825,832,838,844,851,856,862,868,874,881,888,893,899,904,910,914,919,924,929,934,940,944,949,953,959,963,968,972,976,982,987,991,996,1002,1006,1010,1016,1020,1026,1030,1035,1039,1045,1052,1057,1062,1067,1071,1075,1079,1083,1088,1094,1098,1102,1107,1111,1117,1121,1125,1129,1133,1137,1142,1146,1150,1156,1162,1169,1174,1179,1184,1189,1194,1198,1202,1207,1212,1217,1222,1227,1231,1236,1241,1245,1249,1254,1259,1264,1269,1274,1279,1283,1288,1293,1298,1302,1306,1310,1315,1320,1325,1330,1335,1340,1345,1349,1354,1358,1363,1367,1372,1376,1381,1385,1389,1393,1397,1401,1405,1409,1414,1419,1424,1429,1433,1437,1442,1448,1453,1458,1463,1468,1472,1476,1480,1485,1490,1494,1498,1503,1507,1513,1517,1522,1527,1531,1536,1540,1545,1550,1555,1559,1564,1569,1574,1579,1584,1588,1593,1597,1602,1607,1612,1617,1621,1626,1631,1636,1641,1646,1651,1656,1661,1666,1671,1677,1681,1686,1690,1695,1700,1704,1708,1713,1718,1723,1728,1733,1738,1743,1747,1751,1755,1760,1765,1770,1775,1779,1784,1788,1792,1797,1801,1806,1811,1816,1821,1826,1830,1835,1839,1844,1848,1853,1857,1862,1866,1870,1875,1879,1883,1887,1892,1896,1900,1906,1911,1916,1921,1925,1929,1933,1938,1942,1946,1951,1956,1961,1966,1971,1975,1980,1984,1988,1992,1997,2001,2006,2011,2017,2021,2025,2029,2033,2037,2042,2048,2052,2057,2062,2066,2071,2075,2081,2086,2091,2095,2099,2103,2108,2114,2119,2124,2128,2133,2138,2142,2147,2152,2157,2161,2166,2171,2176,2181,2186,2190,2195,2200,2205,2210,2215,2219,2223,2227,2231,2235,2240,2245,2249,2253,2257,2262,2266,2270,2274,2278,2282,2287,2291,2296,2301,2307,2312,2316,2321,2327,2332,2338,2344,2350,2355,2359,2363,2367,2373,2379,2385,2389,2395,2401,2405,2410,2415,2420,2425,2430,2436,2442,2446,2451,2457,2462,2467,2472,2477,2482,2487,2492,2496,2500,2506,2512,2517,2521,2526,2531,2535,2540,2544,2550,2556,2561,2566,2572,2577,2583,2588,2593,2598,2604,2610,2615,2619,2624,2628,2633,2637,2643,2648,2653,2659,2664,2669,2674,2679,2684,2689,2694,2698,2702,2706,2710,2716,2721,2726,2730,2735,2740,2744,2749,2755,2760,2766,2772,2777,2783,2787,2791,2797,2803,2809,2815,2821,2827,2831,2836,2841,2847,2853,2858,2862,2868,2872,2878,2885,2891,2896,2901,2907,2913,2919,2923,2927,2932,2938,2943,2948,2953,2957,2963,2968,2973,2978,2982,2986,2990,2994,2998,3004,3009,3015,3019,3025,3031,3036,3041,3046,3051,3056,3061,3068,3073,3078,3084,3088,3093,3098,3104,3110,3116,3122,3128,3134,3139,3145,3151,3157,3161,3166,3170,3175,3180,3184,3189,3194,3199,3204,3209,3215,3219,3224,3230,3234,3240,3245,3252,3257,3263,3269,3275,3280,3285,3290,3296,3301,3307,3312,3316,3321,3326,3331],{"path":5,"title":6,"section":7,"priority":8,"type":9,"difficulty":10,"stack":11},"\u002Fdjango-database-indexing-strategy","A Practical Database Indexing Strategy for Django","optimize","405","task","intermediate",[12,13],"django","postgresql",{"path":15,"title":16,"section":7,"priority":17,"type":9,"difficulty":18,"stack":19},"\u002Fadd-django-database-indexes-concurrently","Add Database Indexes in Django Without Locking Tables","209","advanced",[12,13],{"path":21,"title":22,"section":23,"priority":24,"type":9,"difficulty":10,"stack":25},"\u002Fdjango-meilisearch","Add Meilisearch Search to a Django App in Production","deploy","369",[12,26,27],"meilisearch","celery",{"path":29,"title":30,"section":7,"priority":31,"type":9,"difficulty":18,"stack":32},"\u002Fdjango-opentelemetry-tracing","Add OpenTelemetry Tracing to Django","34",[12,33],"opentelemetry",{"path":35,"title":36,"section":7,"priority":37,"type":9,"difficulty":10,"stack":38},"\u002Fdjango-request-id-log-correlation","Add Request IDs to Django Logs","226",[12,39,27],"nginx",{"path":41,"title":42,"section":7,"priority":43,"type":9,"difficulty":44,"stack":45},"\u002Fadd-swap-small-django-server","Add Swap to a Small Django Server","56","beginner",[12,46],"linux",{"path":48,"title":49,"section":23,"priority":50,"type":9,"difficulty":10,"stack":51},"\u002Fadd-two-factor-auth-django-admin","Add Two-Factor Authentication to the Django Admin","179",[12,52,53],"django-otp","allauth",{"path":55,"title":56,"section":7,"priority":57,"type":9,"difficulty":44,"stack":58},"\u002Fdjango-security-txt-and-disclosure","Add security.txt and a Vulnerability Disclosure Process to a Django Site","446",[12,59],"security",{"path":61,"title":62,"section":23,"priority":63,"type":64,"difficulty":44,"stack":65},"\u002Fheroku-alternatives-for-django","Alternatives to Heroku for Hosting Django","200","foundation",[12,66,13],"paas",{"path":68,"title":69,"section":23,"priority":70,"type":9,"difficulty":10,"stack":71},"\u002Fdeploy-django-atomic-symlink-releases","Atomic Django Releases With Symlinked Release Directories","153",[12,72,73],"gunicorn","bash",{"path":75,"title":76,"section":7,"priority":77,"type":9,"difficulty":18,"stack":78},"\u002Fdjango-ecs-service-auto-scaling","Auto Scale a Django Service on Amazon ECS","414",[12,79,80],"aws","ecs",{"path":82,"title":83,"section":7,"priority":84,"type":9,"difficulty":44,"stack":85},"\u002Fautomate-backups-with-django-dbbackup","Automate Database and Media Backups With django-dbbackup","232",[12,13,86],"s3",{"path":88,"title":89,"section":7,"priority":90,"type":9,"difficulty":10,"stack":91},"\u002Fautomate-django-dependency-updates","Automate Django Dependency and Security Updates","37",[12,92],"github-actions",{"path":94,"title":95,"section":23,"priority":96,"type":9,"difficulty":10,"stack":97},"\u002Fdjango-kubernetes-cert-manager","Automate HTTPS for Django on Kubernetes With cert-manager","392",[12,98,99],"kubernetes","cert-manager",{"path":101,"title":102,"section":7,"priority":103,"type":9,"difficulty":18,"stack":104},"\u002Fdjango-orm-caching-cachalot-cacheops","Automatic ORM Query Caching in Django With Cachalot or Cacheops","402",[12,105,13],"redis",{"path":107,"title":108,"section":23,"priority":109,"type":9,"difficulty":18,"stack":110},"\u002Fdeploy-celery-workers-kubernetes-keda","Autoscale Celery Workers on Kubernetes With KEDA","156",[27,98,111],"keda",{"path":113,"title":114,"section":7,"priority":115,"type":9,"difficulty":18,"stack":116},"\u002Fautoscale-django-kubernetes-hpa","Autoscale Django on Kubernetes With the HPA","243",[12,98,117],"hpa",{"path":119,"title":120,"section":7,"priority":121,"type":9,"difficulty":10,"stack":122},"\u002Fbackup-django-media-files","Back Up Django Media Files","31",[12,86,46],{"path":124,"title":125,"section":23,"priority":126,"type":9,"difficulty":10,"stack":127},"\u002Fdjango-litestream-sqlite-replication","Back Up and Replicate a Django SQLite Database With Litestream","368",[12,128,129],"sqlite","litestream",{"path":131,"title":132,"section":7,"priority":133,"type":9,"difficulty":10,"stack":134},"\u002Fbackup-and-restore-postgres-for-django","Backup and Restore PostgreSQL for Django Apps","11",[12,13],{"path":136,"title":137,"section":23,"priority":138,"type":64,"difficulty":44,"stack":139},"\u002Fbest-hosting-options-for-django-deployment","Best Hosting Options for Django Deployment in 2026","3",[12,140],"cloud",{"path":142,"title":143,"section":7,"priority":144,"type":9,"difficulty":18,"stack":145},"\u002Fblue-green-deployment-django","Blue-Green Deployments for Django","25",[12,39],{"path":147,"title":148,"section":23,"priority":149,"type":9,"difficulty":10,"stack":150},"\u002Fdeploy-django-cloud-native-buildpacks","Build Django Images With Cloud Native Buildpacks","349",[12,151,152],"buildpacks","docker",{"path":154,"title":155,"section":23,"priority":156,"type":9,"difficulty":18,"stack":157},"\u002Fbuild-multi-arch-django-docker-images","Build Multi-Architecture Django Docker Images","86",[12,152,158,92],"buildx",{"path":160,"title":161,"section":7,"priority":162,"type":9,"difficulty":10,"stack":163},"\u002Foptimize-django-docker-image-size","Build Smaller, Faster Django Docker Images","21",[12,152],{"path":165,"title":166,"section":23,"priority":167,"type":9,"difficulty":44,"stack":168},"\u002Fbuild-tailwind-css-for-django-production","Build Tailwind CSS for Django in Production","85",[12,169,170],"tailwind","whitenoise",{"path":172,"title":173,"section":23,"priority":174,"type":9,"difficulty":18,"stack":175},"\u002Fdjango-distroless-docker-image","Build a Distroless Docker Image for Django","396",[12,152,176],"distroless",{"path":178,"title":179,"section":180,"priority":181,"type":182,"difficulty":44,"stack":183},"\u002Ffix-csrf-verification-failed-django-production","CSRF Verification Failed in Django Production: How to Fix It","fix-issues","4","troubleshooting",[12],{"path":185,"title":186,"section":7,"priority":187,"type":9,"difficulty":18,"stack":188},"\u002Fcache-django-pages-cloudflare","Cache Django Pages at Cloudflare's Edge","212",[12,189,190],"cloudflare","caching",{"path":192,"title":193,"section":7,"priority":194,"type":9,"difficulty":18,"stack":195},"\u002Fnginx-proxy-cache-django","Cache Django Responses with Nginx proxy_cache","20",[12,39],{"path":197,"title":198,"section":7,"priority":199,"type":9,"difficulty":18,"stack":200},"\u002Fcanary-releases-for-django","Canary Releases for Django","54",[12,39,72],{"path":202,"title":203,"section":23,"priority":204,"type":64,"difficulty":10,"stack":205},"\u002Fcelery-alternatives-django","Celery Alternatives for Django Background Jobs","204",[12,27,105],{"path":207,"title":208,"section":180,"priority":209,"type":182,"difficulty":10,"stack":210},"\u002Fdebug-celery-not-running-django-production","Celery Not Running in Django Production: Debugging Guide","8",[12,27,105],{"path":212,"title":213,"section":214,"priority":215,"type":64,"difficulty":10,"stack":216},"\u002Fdjango-celery-production-checklist","Celery Production Checklist for Django","production-checklist","12",[12,27],{"path":218,"title":219,"section":214,"priority":220,"type":9,"difficulty":44,"stack":221},"\u002Fdjango-server-decommission-checklist","Checklist for Decommissioning an Old Django Server","455",[12,46],{"path":223,"title":224,"section":214,"priority":225,"type":9,"difficulty":18,"stack":226},"\u002Fdjango-database-migration-to-managed-checklist","Checklist for Moving a Django Database to Managed PostgreSQL","458",[12,13],{"path":228,"title":229,"section":7,"priority":230,"type":9,"difficulty":10,"stack":231},"\u002Fredis-maxmemory-policy-django","Choose the Right Redis maxmemory-policy for Django","404",[12,105,27],{"path":233,"title":234,"section":7,"priority":235,"type":9,"difficulty":10,"stack":236},"\u002Fdjango-cloudflare-waf-rules","Cloudflare WAF Rules for a Django Site","445",[12,189,237],"waf",{"path":239,"title":240,"section":23,"priority":241,"type":9,"difficulty":44,"stack":242},"\u002Fcompile-django-translations-during-deploy","Compile Django Translations During Deployment","90",[12,243,152],"gettext",{"path":245,"title":246,"section":23,"priority":247,"type":9,"difficulty":44,"stack":248},"\u002Fconfigure-django-email-smtp-production","Configure Django Email Sending in Production","45",[12,249],"email",{"path":251,"title":252,"section":23,"priority":253,"type":64,"difficulty":44,"stack":254},"\u002Fconfigure-django-environment-variables-production","Configure Django Environment Variables for Production","42",[12],{"path":256,"title":257,"section":7,"priority":258,"type":9,"difficulty":10,"stack":259},"\u002Fdrf-throttling-redis-production","Configure Django REST Framework Throttling for Production","420",[12,260,105],"drf",{"path":262,"title":263,"section":7,"priority":264,"type":9,"difficulty":10,"stack":265},"\u002Fconfigure-django-sessions-production","Configure Django Sessions for Production","38",[12,105,13],{"path":267,"title":268,"section":23,"priority":269,"type":9,"difficulty":44,"stack":270},"\u002Fuse-django-environ-for-settings","Configure Django Settings With django-environ","174",[12,271,272],"django-environ","python",{"path":274,"title":275,"section":23,"priority":276,"type":9,"difficulty":10,"stack":277},"\u002Fconfigure-django-mysql-production","Configure Django with MySQL in Production","50",[12,278],"mysql",{"path":280,"title":281,"section":23,"priority":282,"type":9,"difficulty":44,"stack":283},"\u002Fconfigure-https-lets-encrypt-django","Configure HTTPS for Django with Let's Encrypt","17",[12,39,284],"certbot",{"path":286,"title":287,"section":23,"priority":288,"type":9,"difficulty":10,"stack":289},"\u002Fconfigure-django-memcached-production","Configure Memcached for Django in Production","159",[12,290,291],"memcached","pymemcache",{"path":293,"title":294,"section":7,"priority":282,"type":9,"difficulty":10,"stack":295},"\u002Fdjango-persistent-database-connections","Configure Persistent Database Connections in Django",[12,13],{"path":297,"title":298,"section":7,"priority":299,"type":9,"difficulty":10,"stack":300},"\u002Fconfigure-redis-persistence-for-django-celery","Configure Redis Persistence for Django and Celery","51",[12,105,27],{"path":302,"title":303,"section":23,"priority":304,"type":9,"difficulty":10,"stack":305},"\u002Fconfigure-redis-celery-django-production","Configure Redis and Celery for Django Production","22",[12,27,105],{"path":307,"title":308,"section":7,"priority":247,"type":9,"difficulty":18,"stack":309},"\u002Fconfigure-content-security-policy-django","Configure a Content Security Policy for Django",[12,39],{"path":311,"title":312,"section":23,"priority":313,"type":9,"difficulty":18,"stack":314},"\u002Fdjango-wireguard-private-network","Connect Django Servers Over a WireGuard Private Network","381",[12,315,46],"wireguard",{"path":317,"title":318,"section":23,"priority":319,"type":9,"difficulty":18,"stack":320},"\u002Fconnect-django-to-aws-rds-iam-auth","Connect Django to Amazon RDS With IAM Authentication","161",[12,79,13],{"path":322,"title":323,"section":23,"priority":324,"type":9,"difficulty":10,"stack":325},"\u002Fconnect-django-to-google-cloud-sql","Connect Django to Google Cloud SQL","162",[12,326,13],"google-cloud",{"path":328,"title":329,"section":23,"priority":162,"type":9,"difficulty":10,"stack":330},"\u002Fconfigure-managed-postgres-for-django","Connect Django to Managed PostgreSQL Securely",[12,13,140],{"path":332,"title":333,"section":23,"priority":334,"type":9,"difficulty":10,"stack":335},"\u002Fconnect-django-to-neon-postgres","Connect Django to Neon Serverless Postgres","164",[12,336,13],"neon",{"path":338,"title":339,"section":23,"priority":340,"type":9,"difficulty":10,"stack":341},"\u002Fconnect-django-to-supabase-postgres","Connect Django to Supabase Postgres","163",[12,342,13],"supabase",{"path":344,"title":345,"section":7,"priority":346,"type":9,"difficulty":18,"stack":347},"\u002Fdjango-continuous-profiling-pyroscope","Continuous Profiling for Django With Pyroscope","441",[12,348,349],"pyroscope","grafana",{"path":351,"title":352,"section":7,"priority":353,"type":9,"difficulty":18,"stack":354},"\u002Fanonymize-production-data-for-staging","Copy Production Data to Staging Safely (Anonymised)","233",[12,13,355],"privacy",{"path":357,"title":358,"section":23,"priority":359,"type":9,"difficulty":44,"stack":360},"\u002Fcreate-django-superuser-production","Create a Django Superuser in Production Without a Shell","172",[12,152,66],{"path":362,"title":363,"section":7,"priority":364,"type":9,"difficulty":44,"stack":365},"\u002Fdjango-custom-error-pages-production","Custom 404 and 500 Error Pages for Django in Production","228",[12,39,366],"templates",{"path":368,"title":369,"section":23,"priority":370,"type":9,"difficulty":18,"stack":371},"\u002Fcustom-domains-per-tenant-django-caddy","Custom Domains With Automatic HTTPS for Django Tenants","189",[12,372,373],"caddy","multi-tenant",{"path":375,"title":376,"section":214,"priority":377,"type":9,"difficulty":10,"stack":378},"\u002Fdjango-dns-cutover-checklist","DNS Cutover Checklist for Moving a Django Site","452",[12,379,380],"dns","tls",{"path":382,"title":383,"section":7,"priority":384,"type":9,"difficulty":10,"stack":385},"\u002Fdjango-data-retention-delete-old-rows","Delete Old Rows in Django in Batches Without Hurting Production","409",[12,13,27],{"path":387,"title":388,"section":23,"priority":389,"type":9,"difficulty":10,"stack":390},"\u002Fdeploy-django-uvicorn-nginx","Deploy Django ASGI with Uvicorn and Nginx","5",[12,391,39],"uvicorn",{"path":393,"title":394,"section":7,"priority":395,"type":9,"difficulty":18,"stack":396},"\u002Fdjango-multi-region-deployment","Deploy Django Across Multiple Regions","415",[12,13,379],{"path":398,"title":399,"section":23,"priority":400,"type":9,"difficulty":10,"stack":401},"\u002Fdeploy-django-behind-cloudflare","Deploy Django Behind Cloudflare","46",[12,189,39],{"path":403,"title":404,"section":23,"priority":405,"type":9,"difficulty":44,"stack":406},"\u002Fdeploy-django-nginx-proxy-manager","Deploy Django Behind Nginx Proxy Manager","348",[12,39,152],{"path":408,"title":409,"section":23,"priority":90,"type":9,"difficulty":18,"stack":410},"\u002Fdeploy-django-channels-daphne-websockets","Deploy Django Channels and WebSockets with Daphne",[12,411,105,39],"channels",{"path":413,"title":414,"section":23,"priority":415,"type":9,"difficulty":10,"stack":416},"\u002Fdeploy-django-docker-images-from-ghcr","Deploy Django Docker Images from GitHub Container Registry","94",[12,152,92,417],"ghcr",{"path":419,"title":420,"section":23,"priority":421,"type":9,"difficulty":10,"stack":422},"\u002Fdeploy-django-with-azure-devops-pipelines","Deploy Django With Azure DevOps Pipelines","152",[12,423,424],"azure-devops","azure",{"path":426,"title":427,"section":23,"priority":428,"type":9,"difficulty":10,"stack":429},"\u002Fdeploy-django-with-circleci","Deploy Django With CircleCI","151",[12,430,13],"circleci",{"path":432,"title":433,"section":23,"priority":434,"type":9,"difficulty":44,"stack":435},"\u002Fdeploy-django-dokploy","Deploy Django With Dokploy on Your Own Server","346",[12,436,152],"dokploy",{"path":438,"title":439,"section":23,"priority":440,"type":9,"difficulty":44,"stack":441},"\u002Fdeploy-django-easypanel","Deploy Django With Easypanel","347",[12,442,152],"easypanel",{"path":444,"title":445,"section":23,"priority":446,"type":9,"difficulty":10,"stack":447},"\u002Fdeploy-django-with-nginx-unit","Deploy Django With NGINX Unit","145",[12,448,272],"nginx-unit",{"path":450,"title":451,"section":23,"priority":452,"type":9,"difficulty":44,"stack":453},"\u002Fdeploy-django-portainer","Deploy Django With Portainer Stacks","338",[12,454,152],"portainer",{"path":456,"title":457,"section":23,"priority":458,"type":9,"difficulty":10,"stack":459},"\u002Fdeploy-django-with-jenkins","Deploy Django With a Jenkins Pipeline","150",[12,460,152],"jenkins",{"path":462,"title":463,"section":23,"priority":464,"type":9,"difficulty":44,"stack":465},"\u002Fdeploy-django-with-git-push","Deploy Django With git push and a post-receive Hook","154",[12,466,72],"git",{"path":468,"title":469,"section":23,"priority":470,"type":9,"difficulty":10,"stack":471},"\u002Fdeploy-django-mod-wsgi-express","Deploy Django With mod_wsgi-express","350",[12,472,473],"apache","mod_wsgi",{"path":475,"title":476,"section":23,"priority":477,"type":9,"difficulty":18,"stack":478},"\u002Fconfigure-django-mongodb-backend","Deploy Django With the Official MongoDB Backend","160",[12,479,480],"mongodb","atlas",{"path":482,"title":483,"section":23,"priority":484,"type":9,"difficulty":44,"stack":485},"\u002Fdeploy-django-from-private-git-repo-deploy-keys","Deploy Django from a Private Git Repository with Deploy Keys","87",[12,466,486],"ssh",{"path":488,"title":489,"section":23,"priority":490,"type":9,"difficulty":10,"stack":491},"\u002Fdeploy-django-on-aws-app-runner","Deploy Django on AWS App Runner","137",[12,79,152],{"path":493,"title":494,"section":23,"priority":495,"type":9,"difficulty":10,"stack":496},"\u002Fdeploy-django-on-aws-ec2","Deploy Django on AWS EC2 Step by Step","10",[12,497,72,39],"aws-ec2",{"path":499,"title":500,"section":23,"priority":501,"type":9,"difficulty":18,"stack":502},"\u002Fdeploy-django-on-aws-ecs-fargate","Deploy Django on AWS ECS Fargate","29",[12,79,152],{"path":504,"title":505,"section":23,"priority":506,"type":9,"difficulty":10,"stack":507},"\u002Fdeploy-django-on-aws-elastic-beanstalk","Deploy Django on AWS Elastic Beanstalk","28",[12,79,13],{"path":509,"title":510,"section":23,"priority":511,"type":9,"difficulty":44,"stack":512},"\u002Fdeploy-django-on-aws-lightsail","Deploy Django on AWS Lightsail","55",[12,79,72,39,13],{"path":514,"title":515,"section":23,"priority":516,"type":9,"difficulty":18,"stack":517},"\u002Fdeploy-django-with-aws-cdk","Deploy Django on AWS With the CDK","149",[12,79,518],"cdk",{"path":520,"title":521,"section":23,"priority":522,"type":9,"difficulty":44,"stack":523},"\u002Fdeploy-django-on-akamai-linode","Deploy Django on Akamai Cloud (Linode)","58",[12,524,72,39,13],"linode",{"path":526,"title":527,"section":23,"priority":528,"type":9,"difficulty":18,"stack":529},"\u002Fdeploy-django-on-aws-eks","Deploy Django on Amazon EKS","142",[12,98,79],{"path":531,"title":532,"section":23,"priority":533,"type":9,"difficulty":10,"stack":534},"\u002Fdeploy-django-on-azure-app-service","Deploy Django on Azure App Service","27",[12,424,13],{"path":536,"title":537,"section":23,"priority":538,"type":9,"difficulty":10,"stack":539},"\u002Fdeploy-django-on-azure-container-apps","Deploy Django on Azure Container Apps","57",[12,424,152,13],{"path":541,"title":542,"section":23,"priority":543,"type":9,"difficulty":18,"stack":544},"\u002Fdeploy-django-azure-kubernetes-service","Deploy Django on Azure Kubernetes Service (AKS)","334",[12,98,424],{"path":546,"title":547,"section":23,"priority":548,"type":9,"difficulty":44,"stack":549},"\u002Fdeploy-django-on-digitalocean-app-platform","Deploy Django on DigitalOcean App Platform","61",[12,550,72,13],"digitalocean",{"path":552,"title":553,"section":23,"priority":554,"type":9,"difficulty":10,"stack":555},"\u002Fdeploy-django-digitalocean-kubernetes","Deploy Django on DigitalOcean Kubernetes (DOKS)","333",[12,98,550],{"path":557,"title":558,"section":23,"priority":559,"type":9,"difficulty":44,"stack":560},"\u002Fdeploy-django-divio","Deploy Django on Divio","345",[12,561,152],"divio",{"path":563,"title":564,"section":23,"priority":565,"type":9,"difficulty":10,"stack":566},"\u002Fdeploy-django-on-fly-io","Deploy Django on Fly.io with Postgres","13",[12,567,13],"fly-io",{"path":569,"title":570,"section":23,"priority":571,"type":9,"difficulty":18,"stack":572},"\u002Fdeploy-django-freebsd","Deploy Django on FreeBSD With Gunicorn, Nginx, and rc.d","337",[12,573,13],"freebsd",{"path":575,"title":576,"section":23,"priority":43,"type":9,"difficulty":10,"stack":577},"\u002Fdeploy-django-on-google-app-engine","Deploy Django on Google App Engine",[12,326,72,13],{"path":579,"title":580,"section":23,"priority":581,"type":9,"difficulty":10,"stack":582},"\u002Fdeploy-django-on-google-cloud-run","Deploy Django on Google Cloud Run","14",[12,583,152],"gcp-cloud-run",{"path":585,"title":586,"section":23,"priority":587,"type":9,"difficulty":10,"stack":588},"\u002Fdeploy-django-google-compute-engine","Deploy Django on Google Compute Engine","335",[12,326,39],{"path":590,"title":591,"section":23,"priority":592,"type":9,"difficulty":18,"stack":593},"\u002Fdeploy-django-on-google-kubernetes-engine","Deploy Django on Google Kubernetes Engine (GKE)","141",[12,98,326],{"path":595,"title":596,"section":23,"priority":597,"type":9,"difficulty":18,"stack":598},"\u002Fdeploy-django-hashicorp-nomad","Deploy Django on HashiCorp Nomad","339",[12,599,152],"nomad",{"path":601,"title":602,"section":23,"priority":603,"type":9,"difficulty":44,"stack":604},"\u002Fdeploy-django-on-heroku","Deploy Django on Heroku with Postgres","26",[12,605,13],"heroku",{"path":607,"title":608,"section":23,"priority":609,"type":9,"difficulty":44,"stack":610},"\u002Fdeploy-django-koyeb","Deploy Django on Koyeb","341",[12,611,13],"koyeb",{"path":613,"title":614,"section":23,"priority":615,"type":9,"difficulty":18,"stack":616},"\u002Fdeploy-django-on-kubernetes","Deploy Django on Kubernetes","30",[12,98,152],{"path":618,"title":619,"section":23,"priority":620,"type":9,"difficulty":18,"stack":621},"\u002Fdeploy-django-nixos","Deploy Django on NixOS With a Declarative Configuration","336",[12,622,39],"nixos",{"path":624,"title":625,"section":23,"priority":626,"type":9,"difficulty":10,"stack":627},"\u002Fdeploy-django-northflank","Deploy Django on Northflank","342",[12,628,13],"northflank",{"path":630,"title":631,"section":23,"priority":632,"type":9,"difficulty":10,"stack":633},"\u002Fdeploy-django-on-oracle-cloud-free-tier","Deploy Django on Oracle Cloud Free Tier","134",[12,634,635],"oracle-cloud","ubuntu",{"path":637,"title":638,"section":23,"priority":639,"type":9,"difficulty":44,"stack":640},"\u002Fdeploy-django-on-pythonanywhere","Deploy Django on PythonAnywhere","32",[12,641],"pythonanywhere",{"path":643,"title":644,"section":23,"priority":645,"type":9,"difficulty":18,"stack":646},"\u002Fdeploy-django-openshift","Deploy Django on Red Hat OpenShift","340",[12,647,13],"openshift",{"path":649,"title":650,"section":23,"priority":651,"type":9,"difficulty":10,"stack":652},"\u002Fdeploy-django-on-rocky-linux-selinux","Deploy Django on Rocky Linux with SELinux","62",[12,653,72,39],"rhel",{"path":655,"title":656,"section":23,"priority":657,"type":9,"difficulty":44,"stack":658},"\u002Fdeploy-django-scalingo","Deploy Django on Scalingo","344",[12,659,13],"scalingo",{"path":661,"title":662,"section":23,"priority":663,"type":9,"difficulty":10,"stack":664},"\u002Fdeploy-django-upsun-platform-sh","Deploy Django on Upsun (Formerly Platform.sh)","343",[12,665,13],"upsun",{"path":667,"title":668,"section":23,"priority":669,"type":9,"difficulty":10,"stack":670},"\u002Fdeploy-django-on-vercel","Deploy Django on Vercel (and Its Limits)","139",[12,671,13],"vercel",{"path":673,"title":674,"section":23,"priority":675,"type":9,"difficulty":44,"stack":676},"\u002Fdeploy-django-on-vultr","Deploy Django on Vultr","133",[12,677,635],"vultr",{"path":679,"title":680,"section":23,"priority":681,"type":9,"difficulty":10,"stack":682},"\u002Fdeploy-django-on-windows-iis","Deploy Django on Windows Server With IIS","136",[12,683,684],"iis","waitress",{"path":686,"title":687,"section":23,"priority":121,"type":9,"difficulty":10,"stack":688},"\u002Fdeploy-django-on-hetzner-cloud","Deploy Django on a Hetzner Cloud Server",[12,72,39],{"path":690,"title":691,"section":23,"priority":692,"type":9,"difficulty":18,"stack":693},"\u002Fdeploy-django-on-k3s","Deploy Django on a Single-Node k3s Cluster","143",[12,694,695],"k3s","traefik",{"path":697,"title":698,"section":23,"priority":699,"type":9,"difficulty":44,"stack":700},"\u002Fdeploy-django-on-cpanel-shared-hosting","Deploy Django on cPanel Shared Hosting","140",[12,701,702],"cpanel","passenger",{"path":704,"title":705,"section":23,"priority":706,"type":9,"difficulty":10,"stack":707},"\u002Fdjango-github-actions-oidc-aws","Deploy Django to AWS From GitHub Actions With OIDC (No Access Keys)","400",[12,92,79],{"path":709,"title":710,"section":23,"priority":711,"type":9,"difficulty":18,"stack":712},"\u002Fdeploy-django-on-aws-lambda-zappa","Deploy Django to AWS Lambda","138",[12,713,714],"aws-lambda","zappa",{"path":716,"title":717,"section":23,"priority":718,"type":9,"difficulty":18,"stack":719},"\u002Fdeploy-django-with-helm-chart","Deploy Django to Kubernetes with a Helm Chart","65",[12,98,720],"helm",{"path":722,"title":723,"section":23,"priority":144,"type":9,"difficulty":18,"stack":724},"\u002Fdjango-deploy-with-ansible","Deploy Django with Ansible: Step-by-Step",[12,725,39,72],"ansible",{"path":727,"title":728,"section":23,"priority":729,"type":9,"difficulty":10,"stack":730},"\u002Fdeploy-django-apache-mod-wsgi","Deploy Django with Apache and mod_wsgi","36",[12,472],{"path":732,"title":733,"section":23,"priority":734,"type":9,"difficulty":18,"stack":735},"\u002Fdeploy-django-with-argo-cd-gitops","Deploy Django with Argo CD (GitOps)","66",[12,98,736,720],"argo-cd",{"path":738,"title":739,"section":23,"priority":740,"type":9,"difficulty":10,"stack":741},"\u002Fdeploy-django-with-bitbucket-pipelines","Deploy Django with Bitbucket Pipelines","69",[12,742,13,486],"bitbucket",{"path":744,"title":745,"section":23,"priority":746,"type":9,"difficulty":10,"stack":747},"\u002Fdeploy-django-with-caddy-https","Deploy Django with Caddy and Automatic HTTPS","6",[12,372,72],{"path":749,"title":750,"section":23,"priority":751,"type":9,"difficulty":44,"stack":752},"\u002Fdeploy-django-with-caprover","Deploy Django with CapRover","60",[12,152,13],{"path":754,"title":755,"section":23,"priority":756,"type":9,"difficulty":44,"stack":757},"\u002Fdeploy-django-with-coolify","Deploy Django with Coolify","59",[12,152,13,105],{"path":759,"title":760,"section":23,"priority":761,"type":9,"difficulty":10,"stack":762},"\u002Fdeploy-django-docker-compose-production","Deploy Django with Docker Compose in Production","7",[12,152,13,39],{"path":764,"title":765,"section":23,"priority":766,"type":9,"difficulty":18,"stack":767},"\u002Fdeploy-django-with-docker-swarm","Deploy Django with Docker Swarm","63",[12,152,768,13],"swarm",{"path":770,"title":771,"section":23,"priority":772,"type":9,"difficulty":10,"stack":773},"\u002Fdeploy-django-with-dokku","Deploy Django with Dokku on Your Own Server","33",[12,774,152],"dokku",{"path":776,"title":777,"section":23,"priority":778,"type":9,"difficulty":10,"stack":779},"\u002Fdeploy-django-with-fabric","Deploy Django with Fabric","70",[12,780,486,72],"fabric",{"path":782,"title":783,"section":23,"priority":784,"type":9,"difficulty":10,"stack":785},"\u002Fdeploy-django-with-github-actions-cicd","Deploy Django with GitHub Actions CI\u002FCD","24",[12,92,786],"ci-cd",{"path":788,"title":789,"section":23,"priority":264,"type":9,"difficulty":10,"stack":790},"\u002Fdeploy-django-with-gitlab-ci-cd","Deploy Django with GitLab CI\u002FCD",[12,791,152],"gitlab",{"path":793,"title":794,"section":23,"priority":795,"type":9,"difficulty":10,"stack":796},"\u002Fdeploy-django-with-granian","Deploy Django with Granian","68",[12,797,39,798],"granian","systemd",{"path":800,"title":801,"section":23,"priority":181,"type":9,"difficulty":10,"stack":802},"\u002Fdeploy-django-gunicorn-nginx-ubuntu","Deploy Django with Gunicorn and Nginx on Ubuntu",[12,72,39,635],{"path":804,"title":805,"section":23,"priority":31,"type":9,"difficulty":18,"stack":806},"\u002Fdeploy-django-with-kamal","Deploy Django with Kamal",[12,807,152],"kamal",{"path":809,"title":810,"section":23,"priority":811,"type":9,"difficulty":18,"stack":812},"\u002Fdeploy-django-with-podman-quadlet","Deploy Django with Podman and Quadlet","64",[12,813,798,13],"podman",{"path":815,"title":816,"section":23,"priority":817,"type":9,"difficulty":44,"stack":818},"\u002Fdeploy-django-with-poetry","Deploy Django with Poetry","92",[12,819,152],"poetry",{"path":821,"title":822,"section":23,"priority":823,"type":9,"difficulty":10,"stack":824},"\u002Fdeploy-django-with-traefik-docker","Deploy Django with Traefik and Docker","67",[12,695,152,72],{"path":826,"title":827,"section":23,"priority":828,"type":9,"difficulty":10,"stack":829},"\u002Fdeploy-django-with-vite-frontend-assets","Deploy Django with Vite Frontend Assets","84",[12,830,831,170],"vite","node",{"path":833,"title":834,"section":23,"priority":835,"type":9,"difficulty":10,"stack":836},"\u002Fdeploy-django-with-uwsgi-nginx","Deploy Django with uWSGI and Nginx","35",[12,837,39],"uwsgi",{"path":839,"title":840,"section":23,"priority":841,"type":9,"difficulty":44,"stack":842},"\u002Fdeploy-django-with-uv","Deploy Django with uv for Reproducible Installs","53",[12,843],"uv",{"path":845,"title":846,"section":23,"priority":847,"type":9,"difficulty":18,"stack":848},"\u002Fdeploy-geodjango-postgis-production","Deploy GeoDjango with PostGIS in Production","91",[12,849,850,152],"postgis","gdal",{"path":852,"title":853,"section":23,"priority":854,"type":9,"difficulty":18,"stack":855},"\u002Fdeploy-django-multi-tenant-django-tenants","Deploy Multi-Tenant Django with django-tenants","75",[12,13,39,27],{"path":857,"title":858,"section":23,"priority":859,"type":9,"difficulty":10,"stack":860},"\u002Fdeploy-saleor-production","Deploy Saleor to Production","353",[12,861,13],"saleor",{"path":863,"title":864,"section":23,"priority":865,"type":9,"difficulty":10,"stack":866},"\u002Fdeploy-wagtail-production","Deploy Wagtail CMS to Production","73",[12,867,13,39],"wagtail",{"path":869,"title":870,"section":23,"priority":871,"type":9,"difficulty":10,"stack":872},"\u002Fdeploy-django-api-with-nextjs-frontend","Deploy a Django API With a Next.js Frontend","182",[12,873,260],"nextjs",{"path":875,"title":876,"section":23,"priority":877,"type":9,"difficulty":18,"stack":878},"\u002Fdeploy-django-graphql-api-production","Deploy a Django GraphQL API to Production","74",[12,879,880,72],"graphql","strawberry",{"path":882,"title":883,"section":23,"priority":884,"type":9,"difficulty":10,"stack":885},"\u002Fdeploy-django-ninja-api-production","Deploy a Django Ninja API to Production","183",[12,886,887],"django-ninja","pydantic",{"path":889,"title":890,"section":23,"priority":891,"type":9,"difficulty":10,"stack":892},"\u002Fdeploy-django-rest-framework-api-production","Deploy a Django REST Framework API to Production","39",[12,260,72],{"path":894,"title":895,"section":23,"priority":896,"type":9,"difficulty":10,"stack":897},"\u002Fdeploy-django-cms-production","Deploy django CMS to Production","352",[12,898,13],"django-cms",{"path":900,"title":901,"section":180,"priority":902,"type":182,"difficulty":10,"stack":903},"\u002Fdebug-django-502-bad-gateway","Django 502 Bad Gateway: Causes and Fixes","1",[12,39,72],{"path":905,"title":906,"section":214,"priority":907,"type":9,"difficulty":18,"stack":908},"\u002Fdjango-asgi-production-checklist","Django ASGI Production Checklist","453",[12,909,391],"asgi",{"path":911,"title":912,"section":214,"priority":133,"type":64,"difficulty":44,"stack":913},"\u002Fdjango-admin-security-checklist","Django Admin Security Checklist",[12,59],{"path":915,"title":916,"section":214,"priority":917,"type":64,"difficulty":10,"stack":918},"\u002Fdjango-backup-recovery-checklist","Django Backup and Recovery Checklist","9",[12,13],{"path":920,"title":921,"section":214,"priority":922,"type":9,"difficulty":10,"stack":923},"\u002Fdjango-ci-cd-pipeline-checklist","Django CI\u002FCD Pipeline Checklist","255",[12,92,152],{"path":925,"title":926,"section":7,"priority":927,"type":64,"difficulty":10,"stack":928},"\u002Fdjango-caching-strategy-production","Django Caching Strategy for Production","15",[12,105],{"path":930,"title":931,"section":214,"priority":932,"type":9,"difficulty":18,"stack":933},"\u002Fdjango-channels-production-checklist","Django Channels and WebSockets Production Checklist","253",[12,411,105],{"path":935,"title":936,"section":214,"priority":937,"type":9,"difficulty":10,"stack":938},"\u002Fdjango-dependency-security-checklist","Django Dependency Security Checklist","19",[12,939,152,92],"pip",{"path":941,"title":942,"section":214,"priority":902,"type":64,"difficulty":44,"stack":943},"\u002Fdjango-deployment-checklist","Django Deployment Checklist for Production",[12],{"path":945,"title":946,"section":7,"priority":947,"type":64,"difficulty":10,"stack":948},"\u002Fdjango-deployment-security-basics","Django Deployment Security Basics You Should Not Skip","2",[12],{"path":950,"title":951,"section":214,"priority":761,"type":64,"difficulty":10,"stack":952},"\u002Fdjango-docker-production-checklist","Django Docker Production Checklist",[12,152],{"path":954,"title":955,"section":214,"priority":956,"type":9,"difficulty":10,"stack":957},"\u002Fdjango-ecommerce-launch-checklist","Django E-commerce Launch Checklist","449",[12,958,27],"payments",{"path":960,"title":961,"section":214,"priority":784,"type":9,"difficulty":10,"stack":962},"\u002Fdjango-email-deliverability-checklist","Django Email Deliverability Checklist",[12,249,379],{"path":964,"title":965,"section":214,"priority":966,"type":9,"difficulty":10,"stack":967},"\u002Fdjango-email-production-checklist","Django Email Production Checklist","457",[12,249,27],{"path":969,"title":970,"section":214,"priority":162,"type":9,"difficulty":10,"stack":971},"\u002Fdjango-file-upload-security-checklist","Django File Upload Security Checklist",[12,39,86],{"path":973,"title":974,"section":214,"priority":209,"type":64,"difficulty":10,"stack":975},"\u002Fdjango-go-live-runbook","Django Go-Live Day Runbook",[12],{"path":977,"title":978,"section":214,"priority":979,"type":9,"difficulty":18,"stack":980},"\u002Fdjango-hipaa-checklist","Django HIPAA Technical Safeguards Checklist","447",[12,981,59],"compliance",{"path":983,"title":984,"section":214,"priority":985,"type":9,"difficulty":10,"stack":986},"\u002Fdjango-incident-response-runbook","Django Incident Response Runbook","18",[12,39,13,27],{"path":988,"title":989,"section":214,"priority":194,"type":9,"difficulty":18,"stack":990},"\u002Fdjango-kubernetes-production-checklist","Django Kubernetes Production Checklist",[12,98,27,13],{"path":992,"title":993,"section":214,"priority":994,"type":9,"difficulty":18,"stack":995},"\u002Fdjango-kubernetes-security-checklist","Django Kubernetes Security Checklist","461",[12,98,59],{"path":997,"title":998,"section":214,"priority":999,"type":9,"difficulty":10,"stack":1000},"\u002Fdjango-load-balancer-checklist","Django Load Balancer Configuration Checklist","456",[12,1001,39],"load-balancer",{"path":1003,"title":1004,"section":7,"priority":181,"type":64,"difficulty":10,"stack":1005},"\u002Fdjango-logging-setup-production","Django Logging Setup for Production",[12,72],{"path":1007,"title":1008,"section":7,"priority":276,"type":9,"difficulty":10,"stack":1009},"\u002Fdjango-maintenance-mode-during-deploys","Django Maintenance Mode During Deploys",[12,39],{"path":1011,"title":1012,"section":214,"priority":1013,"type":9,"difficulty":10,"stack":1014},"\u002Fdjango-media-files-production-checklist","Django Media Files Production Checklist","450",[12,86,1015],"django-storages",{"path":1017,"title":1018,"section":180,"priority":746,"type":182,"difficulty":18,"stack":1019},"\u002Ffix-django-migration-failed-during-deploy","Django Migration Failed During Deploy: Recovery Playbook",[12,13],{"path":1021,"title":1022,"section":214,"priority":1023,"type":9,"difficulty":18,"stack":1024},"\u002Fdjango-migration-review-checklist","Django Migration Review Checklist","256",[12,13,1025],"migrations",{"path":1027,"title":1028,"section":7,"priority":902,"type":64,"difficulty":10,"stack":1029},"\u002Fdjango-migrations-deployment-strategy","Django Migration Strategy for Safe Deployments",[12,13],{"path":1031,"title":1032,"section":214,"priority":1033,"type":9,"difficulty":10,"stack":1034},"\u002Fdjango-mobile-backend-checklist","Django Mobile App Backend Production Checklist","454",[12,260,27],{"path":1036,"title":1037,"section":214,"priority":495,"type":64,"difficulty":10,"stack":1038},"\u002Fdjango-monitoring-checklist","Django Monitoring and Alerting Checklist",[12],{"path":1040,"title":1041,"section":214,"priority":1042,"type":9,"difficulty":18,"stack":1043},"\u002Fdjango-multi-tenant-saas-checklist","Django Multi-Tenant SaaS Production Checklist","459",[12,13,1044],"saas",{"path":1046,"title":1047,"section":214,"priority":1048,"type":9,"difficulty":10,"stack":1049},"\u002Fdjango-observability-checklist","Django Observability Checklist: Logs, Metrics, Traces, and Alerts","460",[12,1050,1051],"observability","prometheus",{"path":1053,"title":1054,"section":214,"priority":1055,"type":9,"difficulty":18,"stack":1056},"\u002Fdjango-pci-dss-checklist","Django PCI DSS Checklist for Apps That Take Payments","448",[12,958,59],{"path":1058,"title":1059,"section":214,"priority":1060,"type":9,"difficulty":10,"stack":1061},"\u002Fdjango-pentest-preparation-checklist","Django Penetration Test Preparation Checklist","451",[12,59],{"path":1063,"title":1064,"section":214,"priority":1065,"type":9,"difficulty":10,"stack":1066},"\u002Fdjango-performance-checklist-before-launch","Django Performance Checklist Before Launch","16",[12,13,39,105],{"path":1068,"title":1069,"section":214,"priority":282,"type":9,"difficulty":10,"stack":1070},"\u002Fdjango-privacy-gdpr-production-checklist","Django Privacy and GDPR Production Checklist",[12,13],{"path":1072,"title":1073,"section":214,"priority":947,"type":64,"difficulty":44,"stack":1074},"\u002Fdjango-production-settings-checklist","Django Production Settings Checklist (DEBUG, ALLOWED_HOSTS, CSRF)",[12],{"path":1076,"title":1077,"section":214,"priority":304,"type":9,"difficulty":44,"stack":1078},"\u002Fdjango-project-handover-checklist","Django Project Handover Checklist",[12,13,379],{"path":1080,"title":1081,"section":214,"priority":565,"type":64,"difficulty":10,"stack":1082},"\u002Fdjango-api-production-checklist","Django REST API Production Checklist",[12,260],{"path":1084,"title":1085,"section":214,"priority":1086,"type":9,"difficulty":18,"stack":1087},"\u002Fdjango-soc2-readiness-checklist","Django SOC 2 Readiness Checklist","260",[12,981,59],{"path":1089,"title":1090,"section":214,"priority":1091,"type":9,"difficulty":10,"stack":1092},"\u002Fdjango-saas-launch-checklist","Django SaaS Launch Checklist","257",[12,1093,13],"stripe",{"path":1095,"title":1096,"section":214,"priority":138,"type":64,"difficulty":10,"stack":1097},"\u002Fdjango-security-headers-checklist","Django Security Headers Checklist",[12,39,59],{"path":1099,"title":1100,"section":180,"priority":138,"type":182,"difficulty":44,"stack":1101},"\u002Ffix-static-files-not-loading-django","Django Static Files Not Loading in Production: Fix Guide",[12,39,170],{"path":1103,"title":1104,"section":214,"priority":1105,"type":9,"difficulty":44,"stack":1106},"\u002Fdjango-static-files-production-checklist","Django Static Files Production Checklist","254",[12,170,39],{"path":1108,"title":1109,"section":23,"priority":947,"type":64,"difficulty":44,"stack":1110},"\u002Fdjango-static-vs-media-files-production","Django Static vs Media Files in Production",[12,170],{"path":1112,"title":1113,"section":214,"priority":1114,"type":9,"difficulty":10,"stack":1115},"\u002Fdjango-traffic-spike-readiness-checklist","Django Traffic Spike Readiness Checklist","259",[12,1116,13],"cdn",{"path":1118,"title":1119,"section":214,"priority":581,"type":64,"difficulty":10,"stack":1120},"\u002Fdjango-upgrade-checklist","Django Version Upgrade Checklist for Production",[12],{"path":1122,"title":1123,"section":23,"priority":902,"type":64,"difficulty":44,"stack":1124},"\u002Fdjango-wsgi-vs-asgi","Django WSGI vs ASGI: Which One Should You Deploy?",[12,72,391],{"path":1126,"title":1127,"section":180,"priority":215,"type":182,"difficulty":44,"stack":1128},"\u002Ffix-django-works-with-debug-true-fails-debug-false","Django Works with DEBUG=True but Fails with DEBUG=False",[12],{"path":1130,"title":1131,"section":214,"priority":181,"type":64,"difficulty":44,"stack":1132},"\u002Fdjango-check-deploy-explained","Django check --deploy Explained: Every Warning and Fix",[12,59],{"path":1134,"title":1135,"section":214,"priority":144,"type":9,"difficulty":10,"stack":1136},"\u002Fdjango-aws-production-checklist","Django on AWS Production Checklist",[12,79,13,105],{"path":1138,"title":1139,"section":23,"priority":1140,"type":64,"difficulty":44,"stack":1141},"\u002Fdocker-vs-plain-vps-django","Docker vs a Plain VPS for Django","199",[12,152,46],{"path":1143,"title":1144,"section":7,"priority":511,"type":9,"difficulty":44,"stack":1145},"\u002Fenable-automatic-security-updates-django-server","Enable Automatic Security Updates on a Django Server",[12,635,46],{"path":1147,"title":1148,"section":7,"priority":937,"type":9,"difficulty":10,"stack":1149},"\u002Fenable-gzip-brotli-compression-django-nginx","Enable Gzip and Brotli Compression for Django with Nginx",[12,39],{"path":1151,"title":1152,"section":7,"priority":1153,"type":9,"difficulty":10,"stack":1154},"\u002Fenable-http2-http3-nginx-django","Enable HTTP\u002F2 and HTTP\u002F3 for Django with Nginx","40",[12,39,1155],"https",{"path":1157,"title":1158,"section":7,"priority":1159,"type":9,"difficulty":10,"stack":1160},"\u002Fencrypt-django-backups","Encrypt Django Database and Media Backups","431",[12,13,1161],"backups",{"path":1163,"title":1164,"section":23,"priority":1165,"type":9,"difficulty":10,"stack":1166},"\u002Fencrypt-django-secrets-with-sops","Encrypt Django Secrets in Git With SOPS","177",[12,1167,1168],"sops","age",{"path":1170,"title":1171,"section":7,"priority":1172,"type":9,"difficulty":10,"stack":1173},"\u002Fstream-large-csv-exports-django","Export Large CSV Files From Django Without Timeouts","247",[12,13,27],{"path":1175,"title":1176,"section":23,"priority":1177,"type":9,"difficulty":18,"stack":1178},"\u002Fexpose-django-kubernetes-gateway-api-ingress","Expose Django on Kubernetes With Gateway API or Ingress","194",[12,98,99],{"path":1180,"title":1181,"section":23,"priority":1182,"type":9,"difficulty":10,"stack":1183},"\u002Fdeploy-django-with-cloudflare-tunnel","Expose Django with Cloudflare Tunnel","72",[12,189,72,46],{"path":1185,"title":1186,"section":7,"priority":1187,"type":9,"difficulty":10,"stack":1188},"\u002Fdjango-bulk-create-update-performance","Fast Bulk Inserts and Updates in Django","216",[12,13],{"path":1190,"title":1191,"section":7,"priority":1192,"type":9,"difficulty":18,"stack":1193},"\u002Fdjango-pagination-large-tables-keyset","Fast Pagination for Large Django Tables","215",[12,13,260],{"path":1195,"title":1196,"section":7,"priority":891,"type":9,"difficulty":10,"stack":1197},"\u002Ffind-slow-django-queries-pg-stat-statements","Find Slow Django Queries with pg_stat_statements",[12,13],{"path":1199,"title":1200,"section":7,"priority":1065,"type":9,"difficulty":10,"stack":1201},"\u002Ffix-django-n-plus-one-queries","Find and Fix N+1 Queries in Django",[12,13],{"path":1203,"title":1204,"section":180,"priority":1205,"type":182,"difficulty":18,"stack":1206},"\u002Ffix-django-memory-leak-production","Find and Fix a Django Memory Leak in Production","82",[12,72,272],{"path":1208,"title":1209,"section":180,"priority":1210,"type":182,"difficulty":44,"stack":1211},"\u002Ffix-asgi-lifespan-unsupported-django","Fix \"ASGI lifespan protocol appears unsupported\" Warnings","101",[12,391,909],{"path":1213,"title":1214,"section":180,"priority":1215,"type":182,"difficulty":10,"stack":1216},"\u002Ffix-django-auth-user-model-not-installed","Fix \"AUTH_USER_MODEL Refers to Model That Has Not Been Installed\"","281",[12,272],{"path":1218,"title":1219,"section":180,"priority":1220,"type":182,"difficulty":44,"stack":1221},"\u002Ffix-django-csrf-trusted-origins-scheme-error","Fix \"CSRF_TRUSTED_ORIGINS Must Start With a Scheme\" in Django","261",[12,272],{"path":1223,"title":1224,"section":180,"priority":1225,"type":182,"difficulty":18,"stack":1226},"\u002Ffix-postgres-conflict-with-recovery-django","Fix \"Canceling Statement Due to Conflict With Recovery\" on Django Replicas","271",[12,13],{"path":1228,"title":1229,"section":180,"priority":718,"type":182,"difficulty":10,"stack":1230},"\u002Ffix-django-conflicting-migrations-multiple-leaf-nodes","Fix \"Conflicting migrations detected\" in Django",[12,466],{"path":1232,"title":1233,"section":180,"priority":1234,"type":182,"difficulty":10,"stack":1235},"\u002Ffix-postgres-current-transaction-is-aborted","Fix \"Current Transaction Is Aborted, Commands Ignored\" in Django","274",[12,13],{"path":1237,"title":1238,"section":180,"priority":1239,"type":182,"difficulty":44,"stack":1240},"\u002Ffix-github-actions-host-key-verification-failed","Fix \"Host Key Verification Failed\" in GitHub Actions Django Deploys","323",[12,92,486],{"path":1242,"title":1243,"section":180,"priority":247,"type":182,"difficulty":44,"stack":1244},"\u002Ffix-missing-staticfiles-manifest-entry-django","Fix \"Missing staticfiles manifest entry\" in Django",[12,170],{"path":1246,"title":1247,"section":180,"priority":847,"type":182,"difficulty":10,"stack":1248},"\u002Ffix-mysql-server-has-gone-away-django","Fix \"MySQL server has gone away\" (2006) in Django",[12,278,27],{"path":1250,"title":1251,"section":180,"priority":1252,"type":182,"difficulty":44,"stack":1253},"\u002Ffix-django-paas-port-binding-errors","Fix \"No open ports detected\" and Port Binding on PaaS Hosts","116",[12,72,152],{"path":1255,"title":1256,"section":180,"priority":1257,"type":182,"difficulty":10,"stack":1258},"\u002Ffix-postgres-permission-denied-create-extension","Fix \"Permission Denied to Create Extension\" in Django Migrations","277",[12,13],{"path":1260,"title":1261,"section":180,"priority":1262,"type":182,"difficulty":44,"stack":1263},"\u002Ffix-ssh-permission-denied-publickey-deploy","Fix \"Permission denied (publickey)\" in Django CI Deploys","122",[12,486,92],{"path":1265,"title":1266,"section":180,"priority":1267,"type":182,"difficulty":18,"stack":1268},"\u002Ffix-celery-ssl-decryption-failed-bad-record-mac","Fix \"SSL Error: Decryption Failed or Bad Record MAC\" in Celery and Gunicorn","327",[12,27,13],{"path":1270,"title":1271,"section":180,"priority":1272,"type":182,"difficulty":10,"stack":1273},"\u002Ffix-postgres-server-closed-connection-unexpectedly","Fix \"Server Closed the Connection Unexpectedly\" in Django and PostgreSQL","270",[12,13],{"path":1275,"title":1276,"section":180,"priority":1277,"type":182,"difficulty":10,"stack":1278},"\u002Ffix-apache-wsgi-script-cannot-be-loaded","Fix \"Target WSGI Script Cannot Be Loaded as Python Module\" in Apache","320",[12,472,473],{"path":1280,"title":1281,"section":180,"priority":823,"type":182,"difficulty":10,"stack":1282},"\u002Ffix-django-too-many-open-files","Fix \"Too many open files\" on a Django Server",[12,46,72,39],{"path":1284,"title":1285,"section":180,"priority":1286,"type":182,"difficulty":44,"stack":1287},"\u002Ffix-django-unapplied-migrations-warning","Fix \"You have unapplied migrations\" in Production","119",[12,13],{"path":1289,"title":1290,"section":180,"priority":1291,"type":182,"difficulty":44,"stack":1292},"\u002Ffix-django-staticfiles-static-root-not-set","Fix \"You're using the staticfiles app without having set STATIC_ROOT\"","130",[12,170,39],{"path":1294,"title":1295,"section":180,"priority":1296,"type":182,"difficulty":44,"stack":1297},"\u002Ffix-django-development-server-https-error","Fix \"You’re Accessing the Development Server Over HTTPS\"","262",[12,272],{"path":1299,"title":1300,"section":180,"priority":865,"type":182,"difficulty":18,"stack":1301},"\u002Ffix-django-read-only-transaction-error","Fix \"cannot execute in a read-only transaction\" in Django",[12,13],{"path":1303,"title":1304,"section":180,"priority":253,"type":182,"difficulty":44,"stack":1305},"\u002Ffix-sqlite-database-is-locked-django","Fix \"database is locked\" with SQLite in Django",[12,128],{"path":1307,"title":1308,"section":180,"priority":167,"type":182,"difficulty":10,"stack":1309},"\u002Ffix-postgres-sequence-out-of-sync-django","Fix \"duplicate key value violates unique constraint\" After a Restore",[12,13],{"path":1311,"title":1312,"section":180,"priority":1313,"type":182,"difficulty":44,"stack":1314},"\u002Ffix-git-dubious-ownership-deploy","Fix \"fatal: detected dubious ownership in repository\" When Deploying Django","322",[12,466,46],{"path":1316,"title":1317,"section":180,"priority":1318,"type":182,"difficulty":10,"stack":1319},"\u002Ffix-postgres-permission-denied-schema-public","Fix \"permission denied for schema public\" on PostgreSQL 15+","88",[12,13],{"path":1321,"title":1322,"section":180,"priority":1323,"type":182,"difficulty":10,"stack":1324},"\u002Ffix-django-table-already-exists-migration","Fix \"relation already exists\" When Running Django Migrations","120",[12,13,278],{"path":1326,"title":1327,"section":180,"priority":1328,"type":182,"difficulty":44,"stack":1329},"\u002Ffix-django-relation-does-not-exist-production","Fix \"relation does not exist\" in Django Production","49",[12,13],{"path":1331,"title":1332,"section":180,"priority":1333,"type":182,"difficulty":44,"stack":1334},"\u002Ffix-django-value-too-long-for-varchar","Fix \"value too long for type character varying\" in Django","121",[12,13],{"path":1336,"title":1337,"section":180,"priority":1338,"type":182,"difficulty":18,"stack":1339},"\u002Ffix-aws-alb-502-django","Fix AWS Application Load Balancer 502s for Django","113",[12,79,72],{"path":1341,"title":1342,"section":180,"priority":1343,"type":182,"difficulty":10,"stack":1344},"\u002Ffix-django-s3-upload-access-denied","Fix AccessDenied Errors Uploading Django Files to S3","43",[12,79,86],{"path":1346,"title":1347,"section":180,"priority":734,"type":182,"difficulty":10,"stack":1348},"\u002Ffix-django-appregistrynotready-celery-scripts","Fix AppRegistryNotReady in Celery and Django Scripts",[12,27,272],{"path":1350,"title":1351,"section":180,"priority":43,"type":182,"difficulty":10,"stack":1352},"\u002Ffix-django-ssl-certificate-verify-failed-outbound","Fix CERTIFICATE_VERIFY_FAILED for Outbound Django Requests",[12,272,1353],"requests",{"path":1355,"title":1356,"section":180,"priority":501,"type":182,"difficulty":10,"stack":1357},"\u002Ffix-django-cors-errors-production","Fix CORS Errors with a Django API in Production",[12,260],{"path":1359,"title":1360,"section":180,"priority":1361,"type":182,"difficulty":44,"stack":1362},"\u002Ffix-celery-no-result-backend-configured","Fix Celery \"No Result Backend Is Configured\" in Django","326",[12,27,105],{"path":1364,"title":1365,"section":180,"priority":548,"type":182,"difficulty":10,"stack":1366},"\u002Ffix-celery-received-unregistered-task","Fix Celery \"Received unregistered task\" in Django",[12,27,105],{"path":1368,"title":1369,"section":180,"priority":1370,"type":182,"difficulty":44,"stack":1371},"\u002Ffix-celery-beat-pidfile-already-exists","Fix Celery Beat \"Pidfile Already Exists\" in Docker and systemd","325",[12,27,152],{"path":1373,"title":1374,"section":180,"priority":734,"type":182,"difficulty":10,"stack":1375},"\u002Ffix-celery-beat-not-sending-tasks","Fix Celery Beat Not Sending Scheduled Tasks",[12,27],{"path":1377,"title":1378,"section":180,"priority":1379,"type":182,"difficulty":10,"stack":1380},"\u002Ffix-celery-beat-duplicate-tasks","Fix Celery Beat Running Tasks Twice","41",[12,27],{"path":1382,"title":1383,"section":180,"priority":651,"type":182,"difficulty":44,"stack":1384},"\u002Ffix-celery-cannot-connect-amqp-guest","Fix Celery Connecting to amqp:\u002F\u002Fguest@localhost Instead of Redis",[12,27,105],{"path":1386,"title":1387,"section":180,"priority":766,"type":182,"difficulty":10,"stack":1388},"\u002Ffix-celery-soft-time-limit-exceeded","Fix Celery SoftTimeLimitExceeded and Hard Time Limits",[12,27],{"path":1390,"title":1391,"section":180,"priority":718,"type":182,"difficulty":18,"stack":1392},"\u002Ffix-celery-task-executed-multiple-times","Fix Celery Tasks Executing Twice (Redis Visibility Timeout)",[12,27,105],{"path":1394,"title":1395,"section":180,"priority":823,"type":182,"difficulty":10,"stack":1396},"\u002Ffix-celery-task-object-does-not-exist","Fix Celery Tasks Raising DoesNotExist for Newly Created Objects",[12,27,13],{"path":1398,"title":1399,"section":180,"priority":1182,"type":182,"difficulty":10,"stack":1400},"\u002Ffix-celery-tasks-running-old-code-after-deploy","Fix Celery Tasks Running Old Code After a Deploy",[12,27,798],{"path":1402,"title":1403,"section":180,"priority":144,"type":182,"difficulty":10,"stack":1404},"\u002Ffix-celery-tasks-stuck-pending","Fix Celery Tasks Stuck in PENDING",[12,27,105],{"path":1406,"title":1407,"section":180,"priority":841,"type":182,"difficulty":10,"stack":1408},"\u002Ffix-celery-worker-lost-error-django","Fix Celery WorkerLostError in Django",[12,27,46],{"path":1410,"title":1411,"section":180,"priority":1412,"type":182,"difficulty":44,"stack":1413},"\u002Ffix-certbot-challenge-failed-django","Fix Certbot \"Challenge failed\" When Issuing a Certificate","79",[12,39,284],{"path":1415,"title":1416,"section":180,"priority":1417,"type":182,"difficulty":10,"stack":1418},"\u002Ffix-cloudflare-521-522-errors-django","Fix Cloudflare 521 and 522 Errors for a Django Origin","111",[12,189,39],{"path":1420,"title":1421,"section":180,"priority":1422,"type":182,"difficulty":10,"stack":1423},"\u002Ffix-cloudflare-524-timeout-django","Fix Cloudflare 524 Timeouts on Slow Django Requests","112",[12,189,27],{"path":1425,"title":1426,"section":180,"priority":1427,"type":182,"difficulty":10,"stack":1428},"\u002Ffix-cloudflare-525-526-ssl-errors","Fix Cloudflare 525 and 526 SSL Errors for a Django Site","331",[12,189,39],{"path":1430,"title":1431,"section":180,"priority":877,"type":182,"difficulty":44,"stack":1432},"\u002Ffix-nginx-emerg-config-errors-django","Fix Common nginx [emerg] Errors in a Django Config",[12,39],{"path":1434,"title":1435,"section":180,"priority":761,"type":182,"difficulty":10,"stack":1436},"\u002Ffix-django-database-connection-errors-production","Fix Database Connection Errors in Django Production",[12,13],{"path":1438,"title":1439,"section":180,"priority":1440,"type":182,"difficulty":10,"stack":1441},"\u002Ffix-digitalocean-app-platform-health-check-failed","Fix DigitalOcean App Platform Health Check Failed for Django","303",[12,550,72],{"path":1443,"title":1444,"section":180,"priority":1445,"type":182,"difficulty":10,"stack":1446},"\u002Ffix-mysql-time-zone-definitions-django","Fix Django \"Are Time Zone Definitions for Your Database Installed?\"","267",[12,278,1447],"mariadb",{"path":1449,"title":1450,"section":180,"priority":1451,"type":182,"difficulty":44,"stack":1452},"\u002Ffix-django-bad-request-400","Fix Django \"Bad Request (400)\" With DEBUG Off","128",[12,39],{"path":1454,"title":1455,"section":180,"priority":1456,"type":182,"difficulty":10,"stack":1457},"\u002Ffix-django-session-data-corrupted","Fix Django \"Session data corrupted\" Warnings","118",[12,105],{"path":1459,"title":1460,"section":180,"priority":1461,"type":182,"difficulty":44,"stack":1462},"\u002Ffix-django-naive-datetime-warning","Fix Django \"received a naive datetime\" Warnings","81",[12,13],{"path":1464,"title":1465,"section":180,"priority":1466,"type":182,"difficulty":44,"stack":1467},"\u002Ffix-django-403-forbidden-production","Fix Django 403 Forbidden Errors in Production","129",[12,39,189],{"path":1469,"title":1470,"section":180,"priority":495,"type":182,"difficulty":44,"stack":1471},"\u002Ffix-django-500-internal-server-error-production","Fix Django 500 Internal Server Error in Production",[12],{"path":1473,"title":1474,"section":180,"priority":133,"type":182,"difficulty":10,"stack":1475},"\u002Ffix-django-504-gateway-timeout","Fix Django 504 Gateway Timeout Behind Nginx",[12,39,72],{"path":1477,"title":1478,"section":180,"priority":581,"type":182,"difficulty":44,"stack":1479},"\u002Ffix-django-admin-css-missing-production","Fix Django Admin CSS Missing in Production",[12,39],{"path":1481,"title":1482,"section":180,"priority":1483,"type":182,"difficulty":10,"stack":1484},"\u002Ffix-django-authorization-header-missing","Fix Django Authorization Header Missing Behind Apache, Nginx, or a Proxy","310",[12,260,472],{"path":1486,"title":1487,"section":180,"priority":1488,"type":182,"difficulty":10,"stack":1489},"\u002Ffix-django-cache-unpickle-error-after-deploy","Fix Django Cache Errors After Deploy: \"Can’t Get Attribute\" When Unpickling","318",[12,105],{"path":1491,"title":1492,"section":180,"priority":778,"type":182,"difficulty":10,"stack":1493},"\u002Ffix-django-cache-not-working-production","Fix Django Cache Not Working in Production",[12,105],{"path":1495,"title":1496,"section":180,"priority":772,"type":182,"difficulty":44,"stack":1497},"\u002Ffix-django-cannot-connect-postgres-docker-compose","Fix Django Cannot Connect to Postgres in Docker Compose",[12,152,13],{"path":1499,"title":1500,"section":180,"priority":1501,"type":182,"difficulty":10,"stack":1502},"\u002Ffix-websocket-403-channels-origin","Fix Django Channels WebSocket 403 Forbidden in Production","317",[12,411,39],{"path":1504,"title":1505,"section":180,"priority":1153,"type":182,"difficulty":44,"stack":1506},"\u002Ffix-django-code-changes-not-showing-after-deploy","Fix Django Code Changes Not Showing After Deploy",[12,72],{"path":1508,"title":1509,"section":180,"priority":1510,"type":182,"difficulty":44,"stack":1511},"\u002Ffix-django-email-ssl-wrong-version-number","Fix Django Email \"[SSL: WRONG_VERSION_NUMBER]\" and SMTP TLS Errors","306",[12,1512],"smtp",{"path":1514,"title":1515,"section":180,"priority":615,"type":182,"difficulty":44,"stack":1516},"\u002Ffix-django-emails-not-sending-production","Fix Django Emails Not Sending in Production",[12,249],{"path":1518,"title":1519,"section":180,"priority":1520,"type":182,"difficulty":44,"stack":1521},"\u002Ffix-django-removed-api-importerror-after-upgrade","Fix Django ImportError After Upgrading: force_text, ugettext, url() and Others","309",[12,272],{"path":1523,"title":1524,"section":180,"priority":1525,"type":182,"difficulty":10,"stack":1526},"\u002Ffix-django-interfaceerror-connection-already-closed","Fix Django InterfaceError: Connection Already Closed","328",[12,13,27],{"path":1528,"title":1529,"section":180,"priority":651,"type":182,"difficulty":44,"stack":1530},"\u002Ffix-django-example-com-domain-sites-framework","Fix Django Links Using example.com (Sites Framework)",[12],{"path":1532,"title":1533,"section":180,"priority":1534,"type":182,"difficulty":44,"stack":1535},"\u002Ffix-django-log-file-permission-denied","Fix Django Log File PermissionError [Errno 13] Permission Denied","265",[12,46,72],{"path":1537,"title":1538,"section":180,"priority":121,"type":182,"difficulty":10,"stack":1539},"\u002Ffix-django-login-session-not-persisting-https","Fix Django Login Not Persisting Behind HTTPS",[12,39],{"path":1541,"title":1542,"section":180,"priority":1543,"type":182,"difficulty":44,"stack":1544},"\u002Ffix-django-logging-not-working-production","Fix Django Logs Not Showing in Production","107",[12,72,798],{"path":1546,"title":1547,"section":180,"priority":1548,"type":182,"difficulty":44,"stack":1549},"\u002Ffix-django-docker-logs-not-showing","Fix Django Logs and print() Output Not Showing in docker logs","295",[12,152,72],{"path":1551,"title":1552,"section":180,"priority":1553,"type":182,"difficulty":44,"stack":1554},"\u002Ffix-django-lookuperror-no-installed-app","Fix Django LookupError: No Installed App With Label","280",[12,272],{"path":1556,"title":1557,"section":180,"priority":389,"type":182,"difficulty":44,"stack":1558},"\u002Fdjango-media-files-not-serving-uploads-broken","Fix Django Media Files Not Serving (Uploads Broken in Production)",[12,39],{"path":1560,"title":1561,"section":180,"priority":1562,"type":182,"difficulty":10,"stack":1563},"\u002Ffix-django-column-contains-null-values","Fix Django Migration \"Column Contains Null Values\"","278",[12,13],{"path":1565,"title":1566,"section":180,"priority":1567,"type":182,"difficulty":18,"stack":1568},"\u002Ffix-django-migration-hangs-waiting-for-lock","Fix Django Migrations Hanging on a Database Lock","48",[12,13],{"path":1570,"title":1571,"section":180,"priority":1572,"type":182,"difficulty":10,"stack":1573},"\u002Ffix-django-migration-nodenotfounderror","Fix Django NodeNotFoundError: Migration Dependencies Reference Nonexistent Parent Node","279",[12,466],{"path":1575,"title":1576,"section":180,"priority":1577,"type":182,"difficulty":10,"stack":1578},"\u002Ffix-django-redirects-to-localhost","Fix Django Redirecting to localhost or the Wrong Host","105",[12,39,152],{"path":1580,"title":1581,"section":180,"priority":1582,"type":182,"difficulty":44,"stack":1583},"\u002Ffix-sqlite-attempt-to-write-readonly-database","Fix Django SQLite \"Attempt to Write a Readonly Database\"","324",[12,128],{"path":1585,"title":1586,"section":180,"priority":264,"type":182,"difficulty":10,"stack":1587},"\u002Ffix-django-static-files-404-docker","Fix Django Static Files 404 in Docker",[12,152,39],{"path":1589,"title":1590,"section":180,"priority":1591,"type":182,"difficulty":10,"stack":1592},"\u002Ffix-docker-static-files-stale-volume","Fix Django Static Files Not Updating With a Docker Volume","294",[12,152,39],{"path":1594,"title":1595,"section":180,"priority":811,"type":182,"difficulty":44,"stack":1596},"\u002Ffix-django-static-files-wrong-mime-type","Fix Django Static Files Served with the Wrong MIME Type",[12,39,170],{"path":1598,"title":1599,"section":180,"priority":1600,"type":182,"difficulty":10,"stack":1601},"\u002Ffix-django-streaming-response-buffered-nginx","Fix Django StreamingHttpResponse and SSE Buffered by Nginx","103",[12,39,909],{"path":1603,"title":1604,"section":180,"priority":1605,"type":182,"difficulty":10,"stack":1606},"\u002Ffix-django-suspiciousfileoperation","Fix Django SuspiciousFileOperation: Joined Path Is Outside the Base Path","319",[12,272],{"path":1608,"title":1609,"section":180,"priority":1610,"type":182,"difficulty":10,"stack":1611},"\u002Ffix-django-synchronousonlyoperation","Fix Django SynchronousOnlyOperation in Async Code","100",[12,909,411],{"path":1613,"title":1614,"section":180,"priority":1615,"type":182,"difficulty":10,"stack":1616},"\u002Ffix-django-tests-fail-in-ci-postgres","Fix Django Tests That Pass Locally but Fail in CI","123",[12,13,92],{"path":1618,"title":1619,"section":180,"priority":533,"type":182,"difficulty":18,"stack":1620},"\u002Ffix-django-websocket-connection-failed-nginx","Fix Django WebSocket Connection Failed Behind Nginx",[12,411,39],{"path":1622,"title":1623,"section":180,"priority":1624,"type":182,"difficulty":10,"stack":1625},"\u002Ffix-django-websocket-disconnects-after-60-seconds","Fix Django WebSockets Disconnecting After 60 Seconds","102",[12,411,39],{"path":1627,"title":1628,"section":180,"priority":1629,"type":182,"difficulty":44,"stack":1630},"\u002Ffix-django-default-auto-field-warning","Fix Django models.W042 Auto-Created Primary Key Warning","263",[12,13],{"path":1632,"title":1633,"section":180,"priority":1634,"type":182,"difficulty":44,"stack":1635},"\u002Ffix-django-staticfiles-dirs-does-not-exist","Fix Django staticfiles.W004: STATICFILES_DIRS Directory Does Not Exist","264",[12,152],{"path":1637,"title":1638,"section":180,"priority":1639,"type":182,"difficulty":44,"stack":1640},"\u002Ffix-docker-no-space-left-on-device","Fix Docker \"No Space Left on Device\" When Building or Running Django","289",[12,152],{"path":1642,"title":1643,"section":180,"priority":1644,"type":182,"difficulty":44,"stack":1645},"\u002Ffix-docker-port-already-allocated","Fix Docker \"Port Is Already Allocated\" for Django Compose Stacks","291",[12,152,13],{"path":1647,"title":1648,"section":180,"priority":1649,"type":182,"difficulty":44,"stack":1650},"\u002Ffix-docker-exec-format-error-django","Fix Docker \"exec format error\" for a Django Image","290",[12,152],{"path":1652,"title":1653,"section":180,"priority":1654,"type":182,"difficulty":44,"stack":1655},"\u002Ffix-docker-entrypoint-permission-denied-django","Fix Docker Entrypoint \"permission denied\" or \"no such file\" for Django","95",[12,152,466],{"path":1657,"title":1658,"section":180,"priority":1659,"type":182,"difficulty":10,"stack":1660},"\u002Ffix-ecs-essential-container-exited","Fix ECS \"Essential Container in Task Exited\" for a Django Service","332",[12,79,80],{"path":1662,"title":1663,"section":180,"priority":1664,"type":182,"difficulty":44,"stack":1665},"\u002Ffix-err-ssl-protocol-error-django","Fix ERR_SSL_PROTOCOL_ERROR on a Django Site","316",[12,39],{"path":1667,"title":1668,"section":180,"priority":511,"type":182,"difficulty":44,"stack":1669},"\u002Ffix-docker-compose-env-variables-not-loaded-django","Fix Environment Variables Not Loaded in Docker Compose",[12,152,1670],"docker-compose",{"path":1672,"title":1673,"section":180,"priority":1674,"type":182,"difficulty":10,"stack":1675},"\u002Ffix-django-gdal-library-not-found","Fix GeoDjango \"Could Not Find the GDAL Library\" in Production and Docker","329",[12,1676,849],"geodjango",{"path":1678,"title":1679,"section":180,"priority":937,"type":182,"difficulty":44,"stack":1680},"\u002Ffix-gunicorn-address-already-in-use","Fix Gunicorn \"Address already in use\"",[12,72],{"path":1682,"title":1683,"section":180,"priority":1684,"type":182,"difficulty":10,"stack":1685},"\u002Ffix-gunicorn-ignoring-epipe-error-handling-request","Fix Gunicorn \"Error Handling Request\" and \"Ignoring EPIPE\" With Django","308",[12,72,39],{"path":1687,"title":1688,"section":180,"priority":985,"type":182,"difficulty":44,"stack":1689},"\u002Ffix-gunicorn-failed-to-find-application-object","Fix Gunicorn \"Failed to find attribute 'application'\"",[12,72],{"path":1691,"title":1692,"section":180,"priority":1693,"type":182,"difficulty":44,"stack":1694},"\u002Ffix-gunicorn-permission-denied-port-80","Fix Gunicorn \"Permission denied\" Binding to Port 80","97",[12,72,46],{"path":1696,"title":1697,"section":180,"priority":1698,"type":182,"difficulty":44,"stack":1699},"\u002Ffix-gunicorn-worker-failed-to-boot","Fix Gunicorn \"Worker failed to boot\"","47",[12,72,798],{"path":1701,"title":1702,"section":180,"priority":138,"type":182,"difficulty":10,"stack":1703},"\u002Fgunicorn-socket-permission-denied-fix-guide","Fix Gunicorn Socket Permission Denied (Nginx + Django)",[12,72,39],{"path":1705,"title":1706,"section":180,"priority":784,"type":182,"difficulty":18,"stack":1707},"\u002Ffix-gunicorn-workers-oom-killed-django","Fix Gunicorn Workers Killed by the OOM Killer",[12,72,46],{"path":1709,"title":1710,"section":180,"priority":1711,"type":182,"difficulty":44,"stack":1712},"\u002Ffix-https-not-working-django-nginx","Fix HTTPS Not Working for Django Behind Nginx","77",[12,39,284],{"path":1714,"title":1715,"section":180,"priority":1716,"type":182,"difficulty":44,"stack":1717},"\u002Ffix-heroku-collectstatic-failed","Fix Heroku \"Error While Running collectstatic\" for Django","300",[12,605,170],{"path":1719,"title":1720,"section":180,"priority":1721,"type":182,"difficulty":44,"stack":1722},"\u002Ffix-heroku-python-build-failed","Fix Heroku \"Failed to Compile Python App\" for Django","301",[12,605,272],{"path":1724,"title":1725,"section":180,"priority":1726,"type":182,"difficulty":44,"stack":1727},"\u002Ffix-heroku-h10-app-crashed-django","Fix Heroku H10 App Crashed for Django","114",[12,605,72],{"path":1729,"title":1730,"section":180,"priority":1731,"type":182,"difficulty":10,"stack":1732},"\u002Ffix-heroku-h12-request-timeout-django","Fix Heroku H12 Request Timeout in Django","115",[12,605,27],{"path":1734,"title":1735,"section":180,"priority":1736,"type":182,"difficulty":10,"stack":1737},"\u002Ffix-heroku-r14-memory-quota-exceeded","Fix Heroku R14 \"Memory Quota Exceeded\" for a Django App","299",[12,605,72],{"path":1739,"title":1740,"section":180,"priority":1741,"type":182,"difficulty":10,"stack":1742},"\u002Ffix-django-high-cpu-usage","Fix High CPU Usage on a Django Server","83",[12,72,13],{"path":1744,"title":1745,"section":180,"priority":795,"type":182,"difficulty":18,"stack":1746},"\u002Ffix-postgres-idle-in-transaction-django","Fix Idle in Transaction Connections from Django",[12,13,27],{"path":1748,"title":1749,"section":180,"priority":1065,"type":182,"difficulty":44,"stack":1750},"\u002Ffix-django-improperly-configured-secret-key","Fix ImproperlyConfigured: SECRET_KEY Must Not Be Empty",[12],{"path":1752,"title":1753,"section":180,"priority":835,"type":182,"difficulty":18,"stack":1754},"\u002Ffix-django-inconsistent-migration-history","Fix InconsistentMigrationHistory in Django",[12,13],{"path":1756,"title":1757,"section":180,"priority":1758,"type":182,"difficulty":10,"stack":1759},"\u002Ffix-kubernetes-createcontainerconfigerror","Fix Kubernetes CreateContainerConfigError for Django Pods","298",[12,98],{"path":1761,"title":1762,"section":180,"priority":1763,"type":182,"difficulty":10,"stack":1764},"\u002Ffix-kubernetes-imagepullbackoff-django","Fix Kubernetes ImagePullBackOff for a Django Deployment","297",[12,98,152],{"path":1766,"title":1767,"section":180,"priority":1768,"type":182,"difficulty":10,"stack":1769},"\u002Ffix-kubernetes-probe-disallowedhost-400","Fix Kubernetes Probes Failing With 400 DisallowedHost in Django","296",[12,98],{"path":1771,"title":1772,"section":180,"priority":1773,"type":182,"difficulty":10,"stack":1774},"\u002Ffix-lets-encrypt-rate-limit-too-many-certificates","Fix Let's Encrypt \"too many certificates\" Rate Limits","80",[12,284,152],{"path":1776,"title":1777,"section":180,"priority":506,"type":182,"difficulty":10,"stack":1778},"\u002Ffix-certbot-renewal-failed-django","Fix Let's Encrypt Certificate Renewal Failures",[39,284],{"path":1780,"title":1781,"section":180,"priority":1782,"type":182,"difficulty":10,"stack":1783},"\u002Ffix-django-healthcheck-failing-load-balancer","Fix Load Balancer Health Checks Failing for Django","44",[12,79],{"path":1785,"title":1786,"section":180,"priority":548,"type":182,"difficulty":44,"stack":1787},"\u002Ffix-django-mixed-content-https","Fix Mixed Content Warnings on a Django HTTPS Site",[12,39,1155],{"path":1789,"title":1790,"section":180,"priority":282,"type":182,"difficulty":44,"stack":1791},"\u002Ffix-modulenotfounderror-django-gunicorn","Fix ModuleNotFoundError When Starting Django with Gunicorn",[12,72],{"path":1793,"title":1794,"section":180,"priority":1795,"type":182,"difficulty":44,"stack":1796},"\u002Ffix-mysql-access-denied-django","Fix MySQL \"Access denied for user\" in Django","89",[12,278],{"path":1798,"title":1799,"section":180,"priority":817,"type":182,"difficulty":10,"stack":1800},"\u002Ffix-mysql-incorrect-string-value-utf8mb4","Fix MySQL \"Incorrect string value\" With utf8mb4",[12,278],{"path":1802,"title":1803,"section":180,"priority":1804,"type":182,"difficulty":18,"stack":1805},"\u002Ffix-mysql-lock-wait-timeout-django","Fix MySQL \"Lock Wait Timeout Exceeded\" in Django","284",[12,278],{"path":1807,"title":1808,"section":180,"priority":1809,"type":182,"difficulty":10,"stack":1810},"\u002Ffix-mysql-specified-key-too-long","Fix MySQL \"Specified Key Was Too Long\" in Django Migrations","282",[12,278,1447],{"path":1812,"title":1813,"section":180,"priority":1814,"type":182,"difficulty":10,"stack":1815},"\u002Ffix-mysql-too-many-connections-django","Fix MySQL Error 1040 \"Too Many Connections\" in Django","283",[12,278],{"path":1817,"title":1818,"section":180,"priority":1819,"type":182,"difficulty":10,"stack":1820},"\u002Ffix-nginx-cannot-load-certificate","Fix Nginx \"Cannot Load Certificate\" for a Django Site","314",[12,39,284],{"path":1822,"title":1823,"section":180,"priority":1824,"type":182,"difficulty":44,"stack":1825},"\u002Ffix-nginx-server-names-hash-bucket-size","Fix Nginx \"Could Not Build server_names_hash\" for Django Sites","313",[12,39],{"path":1827,"title":1828,"section":180,"priority":865,"type":182,"difficulty":44,"stack":1829},"\u002Ffix-nginx-conflicting-server-name","Fix Nginx \"conflicting server name\" Warnings",[12,39],{"path":1831,"title":1832,"section":180,"priority":1833,"type":182,"difficulty":44,"stack":1834},"\u002Ffix-nginx-gunicorn-sock-no-such-file","Fix Nginx \"connect() to unix:\u002Frun\u002Fgunicorn.sock Failed (2: No Such File or Directory)\"","312",[12,39,72],{"path":1836,"title":1837,"section":180,"priority":1182,"type":182,"difficulty":10,"stack":1838},"\u002Ffix-nginx-no-live-upstreams-django","Fix Nginx \"no live upstreams\" in Front of Django",[12,39,72],{"path":1840,"title":1841,"section":180,"priority":1842,"type":182,"difficulty":10,"stack":1843},"\u002Ffix-nginx-upstream-prematurely-closed-connection","Fix Nginx \"upstream prematurely closed connection\" for Django","71",[12,39,72],{"path":1845,"title":1846,"section":180,"priority":400,"type":182,"difficulty":10,"stack":1847},"\u002Ffix-nginx-upstream-sent-too-big-header-django","Fix Nginx \"upstream sent too big header\" with Django",[12,39,72],{"path":1849,"title":1850,"section":180,"priority":1851,"type":182,"difficulty":10,"stack":1852},"\u002Ffix-nginx-worker-connections-not-enough","Fix Nginx \"worker_connections Are Not Enough\" in Front of Django","315",[12,39,46],{"path":1854,"title":1855,"section":180,"priority":565,"type":182,"difficulty":44,"stack":1856},"\u002Ffix-nginx-403-forbidden-django-static-files","Fix Nginx 403 Forbidden on Django Static Files",[12,39],{"path":1858,"title":1859,"section":180,"priority":1860,"type":182,"difficulty":44,"stack":1861},"\u002Ffix-nginx-404-not-found-django","Fix Nginx 404 Not Found for Django URLs","76",[12,39],{"path":1863,"title":1864,"section":180,"priority":917,"type":182,"difficulty":10,"stack":1865},"\u002Ffix-nginx-413-django-uploads","Fix Nginx 413 Request Entity Too Large for Django Uploads",[12,39],{"path":1867,"title":1868,"section":180,"priority":522,"type":182,"difficulty":10,"stack":1869},"\u002Ffix-nginx-499-client-closed-request-django","Fix Nginx 499 Client Closed Request with Django",[12,39,72],{"path":1871,"title":1872,"section":180,"priority":1873,"type":182,"difficulty":10,"stack":1874},"\u002Ffix-nginx-underscore-headers-dropped","Fix Nginx Dropping Custom Headers With Underscores Before Django","311",[12,39],{"path":1876,"title":1877,"section":180,"priority":947,"type":182,"difficulty":10,"stack":1878},"\u002Ffix-nginx-not-connecting-to-gunicorn-connection-refused","Fix Nginx Not Connecting to Gunicorn (Connection Refused)",[12,72,39],{"path":1880,"title":1881,"section":180,"priority":538,"type":182,"difficulty":44,"stack":1882},"\u002Ffix-nginx-default-page-instead-of-django","Fix Nginx Showing the Default Page Instead of Django",[12,39],{"path":1884,"title":1885,"section":180,"priority":854,"type":182,"difficulty":44,"stack":1886},"\u002Ffix-nginx-bind-port-80-address-in-use","Fix Nginx bind() to 0.0.0.0:80 Failed (Address Already in Use)",[12,39,46],{"path":1888,"title":1889,"section":180,"priority":1890,"type":182,"difficulty":10,"stack":1891},"\u002Ffix-django-oauth-redirect-uri-mismatch","Fix OAuth redirect_uri_mismatch After Deploying Django","127",[12,53,39],{"path":1893,"title":1894,"section":180,"priority":304,"type":182,"difficulty":44,"stack":1895},"\u002Ffix-django-media-upload-permission-denied","Fix Permission Denied on Django Media Uploads",[12,46],{"path":1897,"title":1898,"section":180,"priority":740,"type":182,"difficulty":10,"stack":1899},"\u002Ffix-docker-volume-permission-denied-django","Fix Permission Denied on Docker Volumes for Django",[12,152,46],{"path":1901,"title":1902,"section":180,"priority":1903,"type":182,"difficulty":10,"stack":1904},"\u002Ffix-django-pillow-image-upload-errors","Fix Pillow Errors on Django Image Uploads in Production","104",[12,1905,152],"pillow",{"path":1907,"title":1908,"section":180,"priority":1909,"type":182,"difficulty":10,"stack":1910},"\u002Ffix-postgres-docker-shared-memory-error","Fix PostgreSQL \"Could Not Resize Shared Memory Segment\" in Docker","272",[12,13,152],{"path":1912,"title":1913,"section":180,"priority":1914,"type":182,"difficulty":10,"stack":1915},"\u002Ffix-postgres-database-accessed-by-other-users","Fix PostgreSQL \"Database Is Being Accessed by Other Users\" in Django","273",[12,13],{"path":1917,"title":1918,"section":180,"priority":1919,"type":182,"difficulty":10,"stack":1920},"\u002Ffix-postgres-no-pg-hba-conf-entry","Fix PostgreSQL \"No pg_hba.conf Entry for Host\" in Django","268",[12,13],{"path":1922,"title":1923,"section":180,"priority":484,"type":182,"difficulty":44,"stack":1924},"\u002Ffix-postgres-peer-authentication-failed-django","Fix PostgreSQL \"Peer authentication failed\" for Django",[12,13,46],{"path":1926,"title":1927,"section":180,"priority":162,"type":182,"difficulty":10,"stack":1928},"\u002Ffix-postgres-too-many-connections-django","Fix PostgreSQL \"Too Many Connections\" in Django",[12,13],{"path":1930,"title":1931,"section":180,"priority":828,"type":182,"difficulty":18,"stack":1932},"\u002Ffix-postgres-deadlock-detected-django","Fix PostgreSQL \"deadlock detected\" in Django",[12,13],{"path":1934,"title":1935,"section":180,"priority":1936,"type":182,"difficulty":44,"stack":1937},"\u002Ffix-postgres-fe-sendauth-no-password","Fix PostgreSQL \"fe_sendauth: no password supplied\" in Django","269",[12,13],{"path":1939,"title":1940,"section":180,"priority":276,"type":182,"difficulty":44,"stack":1941},"\u002Ffix-postgres-password-authentication-failed-django","Fix PostgreSQL \"password authentication failed\" for Django",[12,13,152],{"path":1943,"title":1944,"section":180,"priority":156,"type":182,"difficulty":44,"stack":1945},"\u002Ffix-postgres-role-does-not-exist-django","Fix PostgreSQL \"role does not exist\" and \"database does not exist\"",[12,13],{"path":1947,"title":1948,"section":180,"priority":1949,"type":182,"difficulty":18,"stack":1950},"\u002Ffix-postgres-collation-version-mismatch","Fix PostgreSQL Collation Version Mismatch After an OS Upgrade","276",[12,13,46],{"path":1952,"title":1953,"section":180,"priority":299,"type":182,"difficulty":10,"stack":1954},"\u002Ffix-postgres-ssl-connection-errors-django","Fix PostgreSQL SSL Connection Errors in Django",[12,13,1955],"psycopg",{"path":1957,"title":1958,"section":180,"priority":1959,"type":182,"difficulty":18,"stack":1960},"\u002Ffix-postgres-wal-filling-disk","Fix PostgreSQL WAL Files Filling the Disk on a Django Server","275",[12,13,46],{"path":1962,"title":1963,"section":180,"priority":1964,"type":182,"difficulty":10,"stack":1965},"\u002Ffix-redis-loading-dataset-in-memory","Fix Redis \"LOADING Redis Is Loading the Dataset in Memory\" in Django","285",[12,105,27],{"path":1967,"title":1968,"section":180,"priority":1969,"type":182,"difficulty":44,"stack":1970},"\u002Ffix-redis-noauth-authentication-required","Fix Redis \"NOAUTH Authentication Required\" and WRONGPASS in Django","287",[12,105,27],{"path":1972,"title":1973,"section":180,"priority":199,"type":182,"difficulty":10,"stack":1974},"\u002Ffix-redis-oom-command-not-allowed-django","Fix Redis \"OOM command not allowed\" in Django",[12,105,27],{"path":1976,"title":1977,"section":180,"priority":1978,"type":182,"difficulty":10,"stack":1979},"\u002Ffix-redis-readonly-replica-error","Fix Redis \"READONLY You Can’t Write Against a Read Only Replica\"","286",[12,105,27],{"path":1981,"title":1982,"section":180,"priority":795,"type":182,"difficulty":10,"stack":1983},"\u002Ffix-redis-max-number-of-clients-reached","Fix Redis \"max number of clients reached\" With Django",[12,105,27],{"path":1985,"title":1986,"section":180,"priority":603,"type":182,"difficulty":10,"stack":1987},"\u002Ffix-redis-connection-refused-django","Fix Redis Connection Refused in Django",[12,105],{"path":1989,"title":1990,"section":180,"priority":740,"type":182,"difficulty":10,"stack":1991},"\u002Ffix-redis-misconf-rdb-snapshot-error","Fix Redis MISCONF RDB Snapshot Errors in Django",[12,105,46],{"path":1993,"title":1994,"section":180,"priority":1995,"type":182,"difficulty":10,"stack":1996},"\u002Ffix-redis-ssl-certificate-verify-failed","Fix Redis SSL CERTIFICATE_VERIFY_FAILED With rediss:\u002F\u002F in Django and Celery","288",[12,105,27],{"path":1998,"title":1999,"section":180,"priority":729,"type":182,"difficulty":10,"stack":2000},"\u002Ffix-django-request-data-too-big","Fix RequestDataTooBig and TooManyFieldsSent in Django",[12],{"path":2002,"title":2003,"section":180,"priority":2004,"type":182,"difficulty":10,"stack":2005},"\u002Ffix-django-s3-signature-does-not-match","Fix S3 SignatureDoesNotMatch and AWS4-HMAC-SHA256 Errors in Django","304",[12,79,86],{"path":2007,"title":2008,"section":180,"priority":2009,"type":182,"difficulty":44,"stack":2010},"\u002Ffix-ssl-certificate-name-mismatch-django","Fix SSL Certificate Name Mismatch for www and Apex Domains","78",[12,39,284],{"path":2012,"title":2013,"section":180,"priority":2014,"type":182,"difficulty":44,"stack":2015},"\u002Ffix-sentry-not-receiving-django-errors","Fix Sentry Not Receiving Errors From Django in Production","307",[12,2016,27],"sentry",{"path":2018,"title":2019,"section":180,"priority":766,"type":182,"difficulty":44,"stack":2020},"\u002Ffix-django-templatedoesnotexist-production","Fix TemplateDoesNotExist in Django Production",[12,152],{"path":2022,"title":2023,"section":180,"priority":194,"type":182,"difficulty":10,"stack":2024},"\u002Ffix-django-too-many-redirects-https","Fix Too Many Redirects with Django HTTPS Behind a Proxy",[12,39],{"path":2026,"title":2027,"section":180,"priority":756,"type":182,"difficulty":10,"stack":2028},"\u002Ffix-django-unicode-encode-error-locale","Fix UnicodeEncodeError from Locale Settings on Django Servers",[12,272,798,152],{"path":2030,"title":2031,"section":180,"priority":1842,"type":182,"difficulty":44,"stack":2032},"\u002Ffix-django-uploaded-files-lost-after-redeploy","Fix Uploaded Files Disappearing After a Django Redeploy",[12,152,86],{"path":2034,"title":2035,"section":180,"priority":778,"type":182,"difficulty":10,"stack":2036},"\u002Ffix-users-logged-out-after-django-deploy","Fix Users Logged Out After a Django Deploy",[12,105],{"path":2038,"title":2039,"section":180,"priority":2040,"type":182,"difficulty":10,"stack":2041},"\u002Ffix-vercel-django-function-invocation-failed","Fix Vercel FUNCTION_INVOCATION_FAILED for a Django App","302",[12,671,13],{"path":2043,"title":2044,"section":180,"priority":2045,"type":182,"difficulty":10,"stack":2046},"\u002Ffix-weasyprint-cannot-load-library-docker","Fix WeasyPrint \"Cannot Load Library\" for Django PDF Generation in Docker","330",[12,2047,152],"weasyprint",{"path":2049,"title":2050,"section":180,"priority":891,"type":182,"difficulty":10,"stack":2051},"\u002Ffix-django-wrong-client-ip-behind-proxy","Fix Wrong Client IP Addresses in Django Behind a Proxy",[12,39],{"path":2053,"title":2054,"section":180,"priority":2055,"type":182,"difficulty":10,"stack":2056},"\u002Ffix-django-wrong-timezone-production","Fix Wrong Times in Django Production: TIME_ZONE and USE_TZ","266",[12,13,27],{"path":2058,"title":2059,"section":180,"priority":2060,"type":182,"difficulty":10,"stack":2061},"\u002Ffix-broken-virtualenv-after-python-upgrade","Fix a Broken Django Virtualenv After an OS Upgrade","110",[12,272,635],{"path":2063,"title":2064,"section":180,"priority":811,"type":182,"difficulty":10,"stack":2065},"\u002Ffix-celery-worker-memory-leak","Fix a Celery Worker Whose Memory Keeps Growing",[12,27,46],{"path":2067,"title":2068,"section":180,"priority":2069,"type":182,"difficulty":10,"stack":2070},"\u002Ffix-docker-container-unhealthy-django","Fix a Django Docker Container Marked Unhealthy","93",[12,152],{"path":2072,"title":2073,"section":180,"priority":639,"type":182,"difficulty":10,"stack":2074},"\u002Ffix-django-docker-container-exits-immediately","Fix a Django Docker Container That Exits Immediately",[12,152],{"path":2076,"title":2077,"section":180,"priority":2078,"type":182,"difficulty":44,"stack":2079},"\u002Ffix-django-cron-job-not-running","Fix a Django Management Command That Fails in Cron","108",[12,2080,46],"cron",{"path":2082,"title":2083,"section":180,"priority":2084,"type":182,"difficulty":10,"stack":2085},"\u002Ffix-kubernetes-crashloopbackoff-django","Fix a Django Pod in CrashLoopBackOff","117",[12,98,72],{"path":2087,"title":2088,"section":180,"priority":2089,"type":182,"difficulty":44,"stack":2090},"\u002Ffix-django-site-unreachable-firewall","Fix a Django Site That Runs but Cannot Be Reached","124",[12,39,46],{"path":2092,"title":2093,"section":180,"priority":90,"type":182,"difficulty":10,"stack":2094},"\u002Ffix-django-server-disk-full","Fix a Full Disk on a Django Production Server",[12,46,152],{"path":2096,"title":2097,"section":180,"priority":31,"type":182,"difficulty":10,"stack":2098},"\u002Ffix-systemd-gunicorn-service-failed-to-start","Fix a Gunicorn systemd Service That Fails to Start",[12,72,798],{"path":2100,"title":2101,"section":180,"priority":877,"type":182,"difficulty":10,"stack":2102},"\u002Ffix-django-admin-slow-on-large-tables","Fix a Slow Django Admin on Large Tables",[12,13],{"path":2104,"title":2105,"section":180,"priority":2106,"type":182,"difficulty":10,"stack":2107},"\u002Ffix-django-slow-first-request-after-deploy","Fix a Slow First Request After a Django Deploy","52",[12,72,152],{"path":2109,"title":2110,"section":180,"priority":2111,"type":182,"difficulty":10,"stack":2112},"\u002Ffix-boto3-nocredentialserror-django","Fix boto3 NoCredentialsError in Django","125",[12,79,2113],"boto3",{"path":2115,"title":2116,"section":180,"priority":2117,"type":182,"difficulty":10,"stack":2118},"\u002Ffix-django-build-absolute-uri-http","Fix build_absolute_uri Returning http Instead of https","106",[12,39,260],{"path":2120,"title":2121,"section":180,"priority":2122,"type":182,"difficulty":44,"stack":2123},"\u002Ffix-cpanel-passenger-web-application-could-not-be-started","Fix cPanel Passenger \"Web Application Could Not Be Started\" for Django","321",[12,701,702],{"path":2125,"title":2126,"section":180,"priority":927,"type":182,"difficulty":10,"stack":2127},"\u002Ffix-collectstatic-errors-django","Fix collectstatic Errors in Django Deployments",[12],{"path":2129,"title":2130,"section":180,"priority":2131,"type":182,"difficulty":10,"stack":2132},"\u002Ffix-django-storages-acl-not-supported","Fix django-storages \"AccessControlListNotSupported: The Bucket Does Not Allow ACLs\"","305",[12,79,86],{"path":2134,"title":2135,"section":180,"priority":2136,"type":182,"difficulty":10,"stack":2137},"\u002Ffix-django-storages-files-overwritten","Fix django-storages Overwriting Files With the Same Name","126",[12,86,1015],{"path":2139,"title":2140,"section":180,"priority":241,"type":182,"difficulty":44,"stack":2141},"\u002Ffix-mysqlclient-install-error-django","Fix mysqlclient Install Errors (mysql_config not found)",[12,278,152],{"path":2143,"title":2144,"section":180,"priority":2145,"type":182,"difficulty":10,"stack":2146},"\u002Ffix-docker-build-pip-name-resolution","Fix pip \"Temporary Failure in Name Resolution\" During Docker Builds","292",[12,152,939],{"path":2148,"title":2149,"section":180,"priority":2150,"type":182,"difficulty":44,"stack":2151},"\u002Ffix-pip-externally-managed-environment","Fix pip \"externally-managed-environment\" on a Django Server","109",[12,272,635],{"path":2153,"title":2154,"section":180,"priority":2155,"type":182,"difficulty":44,"stack":2156},"\u002Ffix-psycopg-install-errors-django","Fix psycopg Installation Errors on Django Servers","23",[12,13],{"path":2158,"title":2159,"section":180,"priority":751,"type":182,"difficulty":44,"stack":2160},"\u002Ffix-systemd-environmentfile-not-loaded-django","Fix systemd EnvironmentFile Variables Not Reaching Django",[12,798,72],{"path":2162,"title":2163,"section":180,"priority":2164,"type":182,"difficulty":10,"stack":2165},"\u002Ffix-uwsgi-invalid-request-block-size","Fix uWSGI \"invalid request block size\"","99",[12,837,39],{"path":2167,"title":2168,"section":180,"priority":2169,"type":182,"difficulty":10,"stack":2170},"\u002Ffix-uwsgi-no-python-application-found","Fix uWSGI \"no python application found\" for Django","98",[12,837,39],{"path":2172,"title":2173,"section":23,"priority":2174,"type":9,"difficulty":10,"stack":2175},"\u002Fconfigure-wildcard-ssl-certificate-django","Get a Wildcard Certificate for Django Subdomains","188",[12,284,39],{"path":2177,"title":2178,"section":7,"priority":2179,"type":9,"difficulty":18,"stack":2180},"\u002Fdjango-graceful-shutdown-sigterm","Graceful Shutdown for Django and Celery (SIGTERM)","245",[12,72,27],{"path":2182,"title":2183,"section":214,"priority":2184,"type":9,"difficulty":10,"stack":2185},"\u002Fdjango-gunicorn-production-checklist","Gunicorn Production Checklist for Django","251",[12,72,39],{"path":2187,"title":2188,"section":180,"priority":389,"type":182,"difficulty":10,"stack":2189},"\u002Ffix-gunicorn-worker-timeout-django","Gunicorn Worker Timeout in Django: Root Causes and Fixes",[12,72],{"path":2191,"title":2192,"section":23,"priority":2193,"type":64,"difficulty":44,"stack":2194},"\u002Fgunicorn-vs-uvicorn-django","Gunicorn vs Uvicorn for Django","197",[12,72,391],{"path":2196,"title":2197,"section":23,"priority":2198,"type":64,"difficulty":44,"stack":2199},"\u002Fgunicorn-vs-uwsgi-django","Gunicorn vs uWSGI for Django","196",[12,72,837],{"path":2201,"title":2202,"section":7,"priority":2203,"type":9,"difficulty":18,"stack":2204},"\u002Fdjango-resumable-large-file-uploads","Handle Large and Resumable File Uploads in Django","423",[12,86,39],{"path":2206,"title":2207,"section":23,"priority":2208,"type":9,"difficulty":10,"stack":2209},"\u002Fdeploy-django-stripe-webhooks-production","Handle Stripe Webhooks in Production Django","165",[12,1093,27],{"path":2211,"title":2212,"section":7,"priority":2213,"type":9,"difficulty":10,"stack":2214},"\u002Fnginx-tls-configuration-a-plus-django","Harden Nginx TLS for Django (SSL Labs A+)","246",[12,39,380],{"path":2216,"title":2217,"section":23,"priority":1379,"type":9,"difficulty":10,"stack":2218},"\u002Fhost-multiple-django-sites-one-server","Host Multiple Django Sites on One Server",[12,39,72],{"path":2220,"title":2221,"section":7,"priority":138,"type":64,"difficulty":10,"stack":2222},"\u002Fdjango-health-check-endpoint-guide","How to Build a Django Health Check Endpoint for Deployments",[12],{"path":2224,"title":2225,"section":23,"priority":1065,"type":9,"difficulty":10,"stack":2226},"\u002Fconfigure-nginx-for-django-production","How to Configure Nginx for Django in Production",[12,39],{"path":2228,"title":2229,"section":23,"priority":927,"type":9,"difficulty":10,"stack":2230},"\u002Fsetup-systemd-for-gunicorn-django","How to Configure systemd for Gunicorn and Django",[12,72,798],{"path":2232,"title":2233,"section":23,"priority":194,"type":9,"difficulty":44,"stack":2234},"\u002Fconnect-django-to-postgresql-production","How to Connect Django to PostgreSQL in Production",[12,13],{"path":2236,"title":2237,"section":23,"priority":215,"type":9,"difficulty":44,"stack":2238},"\u002Fdeploy-django-on-railway","How to Deploy Django on Railway",[12,2239,13],"railway",{"path":2241,"title":2242,"section":23,"priority":133,"type":9,"difficulty":44,"stack":2243},"\u002Fdeploy-django-on-render","How to Deploy Django on Render",[12,2244,13],"render",{"path":2246,"title":2247,"section":23,"priority":917,"type":9,"difficulty":10,"stack":2248},"\u002Fdeploy-django-on-digitalocean","How to Deploy Django on a DigitalOcean Droplet",[12,550,72,39],{"path":2250,"title":2251,"section":23,"priority":209,"type":9,"difficulty":44,"stack":2252},"\u002Fdockerize-django-production","How to Dockerize a Django App for Production",[12,152],{"path":2254,"title":2255,"section":180,"priority":947,"type":182,"difficulty":44,"stack":2256},"\u002Ffix-disallowedhost-django-production","How to Fix DisallowedHost in Django Production",[12],{"path":2258,"title":2259,"section":7,"priority":565,"type":9,"difficulty":18,"stack":2260},"\u002Fload-test-django-before-deploy","How to Load Test a Django App Before Release",[12,2261],"locust",{"path":2263,"title":2264,"section":7,"priority":581,"type":9,"difficulty":18,"stack":2265},"\u002Foptimize-gunicorn-workers-django","How to Optimize Gunicorn Workers for Django",[12,72],{"path":2267,"title":2268,"section":7,"priority":215,"type":9,"difficulty":18,"stack":2269},"\u002Frollback-django-release-safely","How to Roll Back a Django Release Safely",[12,466,798],{"path":2271,"title":2272,"section":7,"priority":495,"type":9,"difficulty":10,"stack":2273},"\u002Fdjango-log-rotation-linux","How to Rotate Django and Gunicorn Logs on Linux",[12,72,46],{"path":2275,"title":2276,"section":23,"priority":985,"type":9,"difficulty":44,"stack":2277},"\u002Fserve-static-files-whitenoise-django","How to Serve Django Static Files with WhiteNoise",[12,170],{"path":2279,"title":2280,"section":7,"priority":746,"type":9,"difficulty":18,"stack":2281},"\u002Fzero-downtime-django-deployment","How to Set Up Zero-Downtime Deployments for Django",[12,72,39,798],{"path":2283,"title":2284,"section":23,"priority":937,"type":9,"difficulty":10,"stack":2285},"\u002Fstore-django-media-files-on-s3","How to Store Django Media Files on Amazon S3",[12,2286,1015],"aws-s3",{"path":2288,"title":2289,"section":7,"priority":761,"type":9,"difficulty":10,"stack":2290},"\u002Fdjango-deployment-script-bash-guide","How to Write a Django Deployment Bash Script",[12,73,46],{"path":2292,"title":2293,"section":7,"priority":2294,"type":9,"difficulty":18,"stack":2295},"\u002Fdjango-postgres-jsonb-gin-index","Index Django JSONField Queries With GIN on PostgreSQL","407",[12,13],{"path":2297,"title":2298,"section":7,"priority":2299,"type":9,"difficulty":10,"stack":2300},"\u002Fdjango-kubernetes-pod-disruption-budget","Keep Django Available During Kubernetes Node Maintenance With PodDisruptionBudgets","433",[12,98],{"path":2302,"title":2303,"section":7,"priority":2304,"type":9,"difficulty":10,"stack":2305},"\u002Fdjango-audit-log-production","Keep an Audit Log of Changes in Django","227",[12,13,2306],"audit",{"path":2308,"title":2309,"section":23,"priority":2310,"type":64,"difficulty":10,"stack":2311},"\u002Fkubernetes-vs-docker-compose-django","Kubernetes vs Docker Compose for Django","202",[12,98,152],{"path":2313,"title":2314,"section":214,"priority":389,"type":64,"difficulty":10,"stack":2315},"\u002Fdjango-server-hardening-checklist","Linux Server Hardening Checklist for Django",[12,46,59],{"path":2317,"title":2318,"section":7,"priority":2319,"type":9,"difficulty":18,"stack":2320},"\u002Fdjango-kubernetes-liveness-readiness-probes","Liveness and Readiness Probes for Django on Kubernetes","244",[12,98,72],{"path":2322,"title":2323,"section":23,"priority":2324,"type":9,"difficulty":18,"stack":2325},"\u002Fdeploy-django-with-haproxy","Load Balance Django With HAProxy","146",[12,2326,72],"haproxy",{"path":2328,"title":2329,"section":23,"priority":2330,"type":9,"difficulty":10,"stack":2331},"\u002Fmanage-django-secrets-aws-secrets-manager","Load Django Secrets From AWS Secrets Manager","175",[12,79,2113],{"path":2333,"title":2334,"section":23,"priority":2335,"type":9,"difficulty":18,"stack":2336},"\u002Fmanage-django-secrets-hashicorp-vault","Load Django Secrets From HashiCorp Vault","176",[12,2337,98],"vault",{"path":2339,"title":2340,"section":23,"priority":2341,"type":9,"difficulty":10,"stack":2342},"\u002Fdjango-aws-ssm-parameter-store","Load Django Settings From AWS SSM Parameter Store","379",[12,79,2343],"ssm",{"path":2345,"title":2346,"section":7,"priority":2347,"type":9,"difficulty":10,"stack":2348},"\u002Fdjango-axes-brute-force-protection","Lock Out Brute-Force Logins With django-axes","238",[12,2349,59],"django-axes",{"path":2351,"title":2352,"section":7,"priority":2353,"type":9,"difficulty":10,"stack":2354},"\u002Fpostgres-slow-query-log-django","Log Slow PostgreSQL Queries From Django With log_min_duration_statement","413",[12,13],{"path":2356,"title":2357,"section":7,"priority":729,"type":9,"difficulty":10,"stack":2358},"\u002Fdjango-static-files-cache-busting","Long-Lived Caching for Django Static Files",[12,39],{"path":2360,"title":2361,"section":7,"priority":1379,"type":9,"difficulty":18,"stack":2362},"\u002Fmake-celery-tasks-idempotent-retries","Make Celery Tasks Idempotent and Safe to Retry",[12,27,13],{"path":2364,"title":2365,"section":180,"priority":415,"type":182,"difficulty":44,"stack":2366},"\u002Ffix-docker-compose-django-starts-before-postgres","Make Docker Compose Wait for PostgreSQL Before Django Starts",[12,152,13],{"path":2368,"title":2369,"section":23,"priority":2370,"type":9,"difficulty":10,"stack":2371},"\u002Fdjango-kustomize-overlays","Manage Django Kubernetes Manifests With Kustomize Overlays","394",[12,98,2372],"kustomize",{"path":2374,"title":2375,"section":23,"priority":2376,"type":9,"difficulty":44,"stack":2377},"\u002Fdjango-doppler-secrets","Manage Django Secrets With Doppler","375",[12,2378],"doppler",{"path":2380,"title":2381,"section":23,"priority":2382,"type":9,"difficulty":10,"stack":2383},"\u002Fdjango-infisical-secrets","Manage Django Secrets With Infisical","376",[12,2384],"infisical",{"path":2386,"title":2387,"section":23,"priority":1343,"type":64,"difficulty":10,"stack":2388},"\u002Fmanage-django-secrets-production","Manage Django Secrets in Production",[12,59],{"path":2390,"title":2391,"section":7,"priority":2392,"type":9,"difficulty":10,"stack":2393},"\u002Fkubernetes-secrets-configmaps-django","Manage Django Settings on Kubernetes With ConfigMaps and Secrets","249",[12,98,2394],"secrets",{"path":2396,"title":2397,"section":7,"priority":2398,"type":9,"difficulty":18,"stack":2399},"\u002Fdjango-postgres-connection-limits-serverless","Manage PostgreSQL Connections for Django on Serverless Platforms","437",[12,13,2400],"serverless",{"path":2402,"title":2403,"section":7,"priority":389,"type":64,"difficulty":10,"stack":2404},"\u002Fmanual-vs-automated-django-deployment","Manual vs Automated Django Deployment: When to Switch",[12,786],{"path":2406,"title":2407,"section":7,"priority":2408,"type":9,"difficulty":18,"stack":2409},"\u002Fdjango-migrate-id-to-bigint","Migrate a Django Integer Primary Key to BigInt Without Downtime","429",[12,13],{"path":2411,"title":2412,"section":23,"priority":2413,"type":9,"difficulty":10,"stack":2414},"\u002Fmigrate-django-sqlite-to-postgresql","Migrate a Django Project From SQLite to PostgreSQL","131",[12,13,128],{"path":2416,"title":2417,"section":7,"priority":2418,"type":9,"difficulty":10,"stack":2419},"\u002Fcelery-prometheus-metrics","Monitor Celery With Prometheus Metrics and Grafana","418",[12,27,1051],{"path":2421,"title":2422,"section":7,"priority":538,"type":9,"difficulty":10,"stack":2423},"\u002Fmonitor-celery-with-flower","Monitor Celery with Flower",[12,27,2424,39],"flower",{"path":2426,"title":2427,"section":7,"priority":2428,"type":9,"difficulty":44,"stack":2429},"\u002Fmonitor-django-cron-jobs-heartbeats","Monitor Django Scheduled Jobs With Heartbeat Checks","231",[12,27,2080],{"path":2431,"title":2432,"section":7,"priority":2433,"type":9,"difficulty":10,"stack":2434},"\u002Fmonitor-django-with-datadog-apm","Monitor Django With Datadog APM","229",[12,2435,72],"datadog",{"path":2437,"title":2438,"section":23,"priority":2439,"type":9,"difficulty":10,"stack":2440},"\u002Fdjango-new-relic-apm","Monitor Django With New Relic APM","388",[12,2441,72],"new-relic",{"path":2443,"title":2444,"section":7,"priority":2155,"type":9,"difficulty":18,"stack":2445},"\u002Fmonitor-django-prometheus-grafana","Monitor Django with Prometheus and Grafana",[12,1051],{"path":2447,"title":2448,"section":7,"priority":2449,"type":9,"difficulty":44,"stack":2450},"\u002Fmonitor-tls-certificate-expiry-django","Monitor TLS Certificate Expiry for Django Sites","432",[12,380,1051],{"path":2452,"title":2453,"section":23,"priority":2454,"type":9,"difficulty":44,"stack":2455},"\u002Fdjango-uptime-kuma","Monitor a Django Site With Uptime Kuma","390",[12,2456,152],"uptime-kuma",{"path":2458,"title":2459,"section":7,"priority":2460,"type":9,"difficulty":18,"stack":2461},"\u002Fmigrate-postgres-logical-replication-django","Move a Django Database With Minimal Downtime Using Logical Replication","235",[12,13],{"path":2463,"title":2464,"section":23,"priority":2465,"type":9,"difficulty":10,"stack":2466},"\u002Fmove-django-to-new-server","Move a Django Site to a New Server","187",[12,13,46],{"path":2468,"title":2469,"section":214,"priority":2470,"type":9,"difficulty":10,"stack":2471},"\u002Fdjango-nginx-production-checklist","Nginx Production Checklist for Django","252",[12,39,72],{"path":2473,"title":2474,"section":23,"priority":2475,"type":64,"difficulty":44,"stack":2476},"\u002Fnginx-vs-caddy-for-django","Nginx vs Caddy for Django","198",[12,39,372],{"path":2478,"title":2479,"section":7,"priority":2480,"type":9,"difficulty":18,"stack":2481},"\u002Fpartition-large-postgres-tables-django","Partition Large PostgreSQL Tables in a Django App","218",[12,13],{"path":2483,"title":2484,"section":23,"priority":2485,"type":9,"difficulty":44,"stack":2486},"\u002Fpassword-protect-django-staging-site","Password-Protect a Django Staging Site","181",[12,39,372],{"path":2488,"title":2489,"section":23,"priority":2069,"type":9,"difficulty":44,"stack":2490},"\u002Fpin-django-dependencies-pip-tools-hashes","Pin Django Dependencies with pip-tools and Hashes",[12,939,2491],"pip-tools",{"path":2493,"title":2494,"section":23,"priority":1412,"type":64,"difficulty":44,"stack":2495},"\u002Fpoint-domain-to-django-server-dns","Point a Domain at Your Django Server (DNS Setup)",[12,379,39],{"path":2497,"title":2498,"section":214,"priority":927,"type":64,"difficulty":44,"stack":2499},"\u002Fdjango-post-deploy-verification-checklist","Post-Deploy Verification Checklist for Django",[12],{"path":2501,"title":2502,"section":7,"priority":2503,"type":9,"difficulty":18,"stack":2504},"\u002Fdjango-postgres-full-text-search-production","PostgreSQL Full-Text Search for Django in Production","219",[12,13,2505],"search",{"path":2507,"title":2508,"section":7,"priority":2509,"type":9,"difficulty":18,"stack":2510},"\u002Fpostgres-high-availability-failover-django","PostgreSQL High Availability and Failover for Django","234",[12,13,2511],"patroni",{"path":2513,"title":2514,"section":7,"priority":1698,"type":9,"difficulty":18,"stack":2515},"\u002Fpostgres-point-in-time-recovery-django","PostgreSQL Point-in-Time Recovery for Django",[12,13,2516],"pgbackrest",{"path":2518,"title":2519,"section":214,"priority":746,"type":64,"difficulty":10,"stack":2520},"\u002Fdjango-postgresql-production-checklist","PostgreSQL Production Checklist for Django",[12,13],{"path":2522,"title":2523,"section":23,"priority":2524,"type":64,"difficulty":44,"stack":2525},"\u002Fpostgresql-vs-mysql-for-django","PostgreSQL vs MySQL for Django","203",[12,13,278],{"path":2527,"title":2528,"section":7,"priority":2529,"type":9,"difficulty":18,"stack":2530},"\u002Fprevent-django-cache-stampede","Prevent Cache Stampedes in Django","403",[12,105],{"path":2532,"title":2533,"section":23,"priority":1741,"type":9,"difficulty":18,"stack":2534},"\u002Fdjango-preview-environments-pull-requests","Preview Environments for Django Pull Requests",[12,152,92,13],{"path":2536,"title":2537,"section":7,"priority":2538,"type":9,"difficulty":10,"stack":2539},"\u002Fdjango-webhook-processing-reliable","Process Incoming Webhooks Reliably in Django","421",[12,27,13],{"path":2541,"title":2542,"section":7,"priority":835,"type":9,"difficulty":18,"stack":2543},"\u002Fprofile-slow-django-endpoints-production","Profile Slow Django Endpoints in Production with py-spy",[12,72],{"path":2545,"title":2546,"section":23,"priority":2547,"type":9,"difficulty":18,"stack":2548},"\u002Fdjango-nginx-mtls-client-certificates","Protect Django Endpoints With mTLS Client Certificates in Nginx","380",[12,39,2549],"openssl",{"path":2551,"title":2552,"section":7,"priority":2553,"type":9,"difficulty":10,"stack":2554},"\u002Fprotect-django-from-bots-waf","Protect Django From Bots and Scrapers With a WAF","237",[12,189,2555],"aws-waf",{"path":2557,"title":2558,"section":7,"priority":400,"type":9,"difficulty":10,"stack":2559},"\u002Fprotect-django-login-with-fail2ban","Protect Django Logins with fail2ban",[12,2560,39,46],"fail2ban",{"path":2562,"title":2563,"section":23,"priority":2564,"type":9,"difficulty":10,"stack":2565},"\u002Fdjango-aws-waf","Protect Django on AWS With AWS WAF","384",[12,79,237],{"path":2567,"title":2568,"section":23,"priority":2569,"type":9,"difficulty":10,"stack":2570},"\u002Fdjango-crowdsec","Protect a Django Server With CrowdSec","383",[12,2571,39],"crowdsec",{"path":2573,"title":2574,"section":23,"priority":2575,"type":9,"difficulty":10,"stack":2576},"\u002Fdjango-cloudflare-access-admin","Protect the Django Admin With Cloudflare Access","382",[12,189],{"path":2578,"title":2579,"section":23,"priority":2580,"type":9,"difficulty":18,"stack":2581},"\u002Fdeploy-django-with-pulumi","Provision Django Infrastructure With Pulumi","148",[12,2582,79],"pulumi",{"path":2584,"title":2585,"section":7,"priority":209,"type":9,"difficulty":18,"stack":2586},"\u002Fterraform-django-server-baseline","Provision a Django Server Baseline with Terraform",[12,2587,140],"terraform",{"path":2589,"title":2590,"section":23,"priority":1842,"type":9,"difficulty":10,"stack":2591},"\u002Fprovision-django-server-with-cloud-init","Provision a Django Server with cloud-init",[12,2592,635,798],"cloud-init",{"path":2594,"title":2595,"section":7,"priority":2596,"type":9,"difficulty":10,"stack":2597},"\u002Fpurge-cdn-cache-after-django-deploy","Purge the Cloudflare or CDN Cache After a Django Deploy","439",[12,189,786],{"path":2599,"title":2600,"section":23,"priority":2601,"type":9,"difficulty":18,"stack":2602},"\u002Fdjango-varnish-cache","Put Varnish Cache in Front of Django","385",[12,2603,39],"varnish",{"path":2605,"title":2606,"section":23,"priority":2607,"type":9,"difficulty":10,"stack":2608},"\u002Frestrict-django-admin-with-tailscale","Put the Django Admin on a Private Tailscale Network","178",[12,2609,39],"tailscale",{"path":2611,"title":2612,"section":7,"priority":2613,"type":9,"difficulty":18,"stack":2614},"\u002Fcelery-task-rate-limiting","Rate Limit Celery Tasks in Django","416",[12,27,105],{"path":2616,"title":2617,"section":7,"priority":501,"type":9,"difficulty":10,"stack":2618},"\u002Frate-limit-django-with-nginx","Rate Limit Django Endpoints with Nginx",[12,39],{"path":2620,"title":2621,"section":7,"priority":2622,"type":9,"difficulty":10,"stack":2623},"\u002Fdjango-ratelimit-application-rate-limiting","Rate Limit Django Views With django-ratelimit","419",[12,105],{"path":2625,"title":2626,"section":214,"priority":2155,"type":9,"difficulty":10,"stack":2627},"\u002Fdjango-redis-production-checklist","Redis Production Checklist for Django",[12,105,27],{"path":2629,"title":2630,"section":23,"priority":2631,"type":64,"difficulty":44,"stack":2632},"\u002Fredis-vs-memcached-django","Redis vs Memcached for Django Caching","205",[12,105,290],{"path":2634,"title":2635,"section":7,"priority":1328,"type":9,"difficulty":10,"stack":2636},"\u002Freduce-django-hosting-costs","Reduce Django Hosting Costs Without Losing Reliability",[12,79,13],{"path":2638,"title":2639,"section":7,"priority":2640,"type":9,"difficulty":10,"stack":2641},"\u002Fdjango-log-sampling-volume-costs","Reduce Django Log Volume and Logging Costs","443",[12,2642,39],"logging",{"path":2644,"title":2645,"section":7,"priority":2646,"type":9,"difficulty":18,"stack":2647},"\u002Freduce-django-memory-usage","Reduce Django Memory Usage per Worker","412",[12,72,27],{"path":2649,"title":2650,"section":7,"priority":2651,"type":9,"difficulty":18,"stack":2652},"\u002Freduce-django-startup-time","Reduce Django Startup and Import Time","221",[12,272,72],{"path":2654,"title":2655,"section":7,"priority":2656,"type":9,"difficulty":18,"stack":2657},"\u002Fdjango-postgres-pg-repack-bloat","Remove PostgreSQL Table Bloat in Django With pg_repack","408",[12,13,2658],"pg_repack",{"path":2660,"title":2661,"section":7,"priority":2662,"type":9,"difficulty":18,"stack":2663},"\u002Fdrop-django-column-zero-downtime","Remove a Django Field Without Downtime","428",[12,13],{"path":2665,"title":2666,"section":7,"priority":2667,"type":9,"difficulty":18,"stack":2668},"\u002Frename-django-field-zero-downtime","Rename a Django Model Field Without Downtime","427",[12,13],{"path":2670,"title":2671,"section":23,"priority":2672,"type":64,"difficulty":44,"stack":2673},"\u002Frender-vs-railway-vs-fly-io-django","Render vs Railway vs Fly.io for Django","201",[12,66,152],{"path":2675,"title":2676,"section":7,"priority":2677,"type":9,"difficulty":18,"stack":2678},"\u002Fdjango-kubernetes-network-policies","Restrict Django Pod Traffic With Kubernetes NetworkPolicies","435",[12,98],{"path":2680,"title":2681,"section":7,"priority":2682,"type":9,"difficulty":10,"stack":2683},"\u002Fcelery-retry-exponential-backoff","Retry Celery Tasks With Exponential Backoff in Django","417",[12,27],{"path":2685,"title":2686,"section":7,"priority":2687,"type":9,"difficulty":10,"stack":2688},"\u002Frollback-django-migration-production","Roll Back a Django Migration in Production","424",[12,13],{"path":2690,"title":2691,"section":7,"priority":2692,"type":9,"difficulty":10,"stack":2693},"\u002Frotate-django-database-password","Rotate the Django Database Password Without Downtime","430",[12,13,2394],{"path":2695,"title":2696,"section":7,"priority":1782,"type":9,"difficulty":10,"stack":2697},"\u002Frotate-django-secret-key-safely","Rotate the Django SECRET_KEY Safely",[12],{"path":2699,"title":2700,"section":7,"priority":253,"type":9,"difficulty":10,"stack":2701},"\u002Froute-celery-tasks-to-separate-queues","Route Celery Tasks to Separate Queues",[12,27,105],{"path":2703,"title":2704,"section":7,"priority":533,"type":9,"difficulty":18,"stack":2705},"\u002Fdjango-database-read-replicas","Route Django Reads to PostgreSQL Read Replicas",[12,13],{"path":2707,"title":2708,"section":23,"priority":1698,"type":9,"difficulty":10,"stack":2709},"\u002Fsetup-celery-beat-django-production","Run Celery Beat for Scheduled Tasks in Django Production",[12,27,105],{"path":2711,"title":2712,"section":23,"priority":2713,"type":9,"difficulty":10,"stack":2714},"\u002Fdeploy-django-celery-with-rabbitmq","Run Celery With RabbitMQ for Django in Production","155",[12,27,2715],"rabbitmq",{"path":2717,"title":2718,"section":23,"priority":2719,"type":9,"difficulty":10,"stack":2720},"\u002Frun-celery-on-heroku","Run Celery Workers on Heroku for a Django App","354",[12,27,605],{"path":2722,"title":2723,"section":23,"priority":2724,"type":9,"difficulty":10,"stack":2725},"\u002Frun-celery-workers-on-render-railway-fly","Run Celery Workers on Render, Railway, and Fly.io","355",[12,27,105],{"path":2727,"title":2728,"section":23,"priority":2155,"type":9,"difficulty":10,"stack":2729},"\u002Frun-celery-with-systemd-django","Run Celery Workers with systemd for Django",[12,27,798],{"path":2731,"title":2732,"section":23,"priority":2733,"type":9,"difficulty":10,"stack":2734},"\u002Fdeploy-django-behind-aws-alb","Run Django Behind an AWS Application Load Balancer","147",[12,79,72],{"path":2736,"title":2737,"section":23,"priority":2738,"type":9,"difficulty":44,"stack":2739},"\u002Frun-django-management-commands-in-containers","Run Django Management Commands in Docker and Kubernetes","171",[12,152,98],{"path":2741,"title":2742,"section":23,"priority":1318,"type":9,"difficulty":18,"stack":2743},"\u002Frun-django-migrations-kubernetes-job","Run Django Migrations as a Kubernetes Job",[12,98,13],{"path":2745,"title":2746,"section":23,"priority":2747,"type":9,"difficulty":10,"stack":2748},"\u002Frun-django-cron-jobs-kubernetes-cronjob","Run Django Scheduled Jobs as Kubernetes CronJobs","195",[12,98,2080],{"path":2750,"title":2751,"section":23,"priority":2752,"type":9,"difficulty":10,"stack":2753},"\u002Fdeploy-django-with-hypercorn","Run Django With Hypercorn","144",[12,2754,39],"hypercorn",{"path":2756,"title":2757,"section":23,"priority":2009,"type":9,"difficulty":44,"stack":2758},"\u002Frun-django-with-supervisor","Run Django and Celery with Supervisor",[12,2759,72,27],"supervisor",{"path":2761,"title":2762,"section":23,"priority":2763,"type":9,"difficulty":10,"stack":2764},"\u002Fdeploy-django-waitress-windows","Run Django in Production on Windows With Waitress","351",[12,2765,684],"windows",{"path":2767,"title":2768,"section":23,"priority":2769,"type":9,"difficulty":44,"stack":2770},"\u002Fdeploy-django-on-raspberry-pi","Run Django in Production on a Raspberry Pi","135",[12,2771,39],"raspberry-pi",{"path":2773,"title":2774,"section":23,"priority":2775,"type":9,"difficulty":18,"stack":2776},"\u002Fdjango-aws-aurora-postgresql","Run Django on Amazon Aurora PostgreSQL and Aurora Serverless v2","365",[12,79,13],{"path":2778,"title":2779,"section":23,"priority":2780,"type":9,"difficulty":18,"stack":2781},"\u002Fdjango-cockroachdb","Run Django on CockroachDB","366",[12,2782],"cockroachdb",{"path":2784,"title":2785,"section":23,"priority":1860,"type":9,"difficulty":10,"stack":2786},"\u002Frun-django-on-sqlite-in-production","Run Django on SQLite in Production",[12,128,129,72],{"path":2788,"title":2789,"section":23,"priority":1711,"type":9,"difficulty":10,"stack":2790},"\u002Fdeploy-django-tasks-background-workers","Run Django's Built-In Tasks Framework in Production",[12,13,798],{"path":2792,"title":2793,"section":23,"priority":2794,"type":9,"difficulty":44,"stack":2795},"\u002Fdeploy-django-q2-workers","Run Django-Q2 Workers and Schedules in Production","359",[12,2796,13],"django-q2",{"path":2798,"title":2799,"section":23,"priority":2800,"type":9,"difficulty":10,"stack":2801},"\u002Fdeploy-django-dramatiq-workers","Run Dramatiq Workers for Django in Production","357",[12,2802,105],"dramatiq",{"path":2804,"title":2805,"section":23,"priority":2806,"type":9,"difficulty":18,"stack":2807},"\u002Frun-opensearch-elasticsearch-for-django","Run Elasticsearch or OpenSearch for Django in Production","158",[12,2808,27],"elasticsearch",{"path":2810,"title":2811,"section":7,"priority":2812,"type":9,"difficulty":18,"stack":2813},"\u002Frun-gunicorn-gevent-workers-django","Run Gunicorn gevent Workers for I\u002FO-Heavy Django Apps","223",[12,72,2814],"gevent",{"path":2816,"title":2817,"section":23,"priority":2818,"type":9,"difficulty":44,"stack":2819},"\u002Fdeploy-django-huey-task-queue","Run Huey as a Lightweight Django Task Queue","358",[12,2820,105],"huey",{"path":2822,"title":2823,"section":23,"priority":2824,"type":9,"difficulty":10,"stack":2825},"\u002Fdeploy-django-procrastinate","Run Procrastinate as a PostgreSQL Task Queue for Django","360",[12,2826,13],"procrastinate",{"path":2828,"title":2829,"section":7,"priority":772,"type":9,"difficulty":18,"stack":2830},"\u002Fdjango-schema-changes-large-tables","Run Schema Changes on Large Tables in Django Safely",[12,13],{"path":2832,"title":2833,"section":7,"priority":2834,"type":9,"difficulty":18,"stack":2835},"\u002Fdjango-data-migration-large-table","Run a Django Data Migration on a Large Table","426",[12,13],{"path":2837,"title":2838,"section":23,"priority":2839,"type":9,"difficulty":10,"stack":2840},"\u002Frun-django-docker-as-non-root","Run a Django Docker Container as a Non-Root User","192",[12,152,98],{"path":2842,"title":2843,"section":23,"priority":2844,"type":9,"difficulty":10,"stack":2845},"\u002Fdeploy-django-rq-workers","Run django-rq Workers in Production","157",[12,2846,105],"rq",{"path":2848,"title":2849,"section":23,"priority":2850,"type":9,"difficulty":18,"stack":2851},"\u002Fdeploy-django-pgvector-production","Run pgvector With Django in Production","180",[12,13,2852],"pgvector",{"path":2854,"title":2855,"section":7,"priority":2856,"type":9,"difficulty":18,"stack":2857},"\u002Fscale-django-channels-websockets","Scale Django Channels WebSockets Across Servers","236",[12,411,105],{"path":2859,"title":2860,"section":7,"priority":304,"type":64,"difficulty":18,"stack":2861},"\u002Fscale-django-horizontally-load-balancer","Scale Django Horizontally Behind a Load Balancer",[12,39],{"path":2863,"title":2864,"section":7,"priority":2865,"type":9,"difficulty":10,"stack":2866},"\u002Fscan-django-docker-images-trivy","Scan Django Docker Images for Vulnerabilities With Trivy","241",[12,152,2867],"trivy",{"path":2869,"title":2870,"section":23,"priority":1567,"type":9,"difficulty":44,"stack":2871},"\u002Fschedule-django-management-commands-systemd-timers","Schedule Django Management Commands with Cron or systemd Timers",[12,798],{"path":2873,"title":2874,"section":23,"priority":2875,"type":9,"difficulty":18,"stack":2876},"\u002Fstore-django-media-minio-self-hosted","Self-Host Django Media Storage With MinIO","170",[12,2877,152],"minio",{"path":2879,"title":2880,"section":23,"priority":2881,"type":9,"difficulty":10,"stack":2882},"\u002Fdjango-glitchtip-error-tracking","Self-Host GlitchTip for Django Error Tracking","387",[12,2883,2884],"glitchtip","sentry-sdk",{"path":2886,"title":2887,"section":23,"priority":2888,"type":9,"difficulty":10,"stack":2889},"\u002Fconfigure-django-anymail-email-provider","Send Django Email Through SendGrid, Postmark, or Mailgun With Anymail","185",[12,2890,249],"anymail",{"path":2892,"title":2893,"section":23,"priority":2894,"type":9,"difficulty":10,"stack":2895},"\u002Fsend-django-email-asynchronously-celery","Send Django Email in the Background","186",[12,27,249],{"path":2897,"title":2898,"section":23,"priority":1461,"type":9,"difficulty":10,"stack":2899},"\u002Fsend-django-email-with-amazon-ses","Send Django Email with Amazon SES",[12,79,2900],"ses",{"path":2902,"title":2903,"section":7,"priority":2904,"type":9,"difficulty":10,"stack":2905},"\u002Fsend-django-logs-to-aws-cloudwatch","Send Django Logs to Amazon CloudWatch","230",[12,79,2906],"cloudwatch",{"path":2908,"title":2909,"section":23,"priority":2910,"type":9,"difficulty":18,"stack":2911},"\u002Fdjango-signoz-observability","Send Django Traces, Metrics, and Logs to SigNoz","389",[12,33,2912],"signoz",{"path":2914,"title":2915,"section":23,"priority":2916,"type":9,"difficulty":10,"stack":2917},"\u002Fconfigure-docker-compose-override-django","Separate Dev and Prod With Docker Compose Override Files","191",[12,152,2918],"compose",{"path":2920,"title":2921,"section":23,"priority":1795,"type":9,"difficulty":10,"stack":2922},"\u002Fserve-django-api-and-admin-on-subdomains","Serve Django API and Admin on Separate Subdomains",[12,39,72],{"path":2924,"title":2925,"section":23,"priority":2106,"type":9,"difficulty":10,"stack":2926},"\u002Fserve-django-static-files-cloudfront-cdn","Serve Django Static Files Through CloudFront",[12,79,1116],{"path":2928,"title":2929,"section":23,"priority":2930,"type":9,"difficulty":10,"stack":2931},"\u002Fdjango-kubernetes-static-files","Serve Django Static Files on Kubernetes","395",[12,98,170],{"path":2933,"title":2934,"section":23,"priority":2935,"type":9,"difficulty":44,"stack":2936},"\u002Fdjango-bunny-cdn","Serve Django Static and Media Files Through Bunny CDN","374",[12,2937,170],"bunny-cdn",{"path":2939,"title":2940,"section":23,"priority":2941,"type":9,"difficulty":18,"stack":2942},"\u002Fserve-django-under-subpath-url-prefix","Serve Django Under a URL Prefix (\u002Fapp) Behind Nginx","132",[12,39,72],{"path":2944,"title":2945,"section":23,"priority":1153,"type":9,"difficulty":10,"stack":2946},"\u002Fserve-django-and-react-spa-same-domain","Serve Django and a React SPA on the Same Domain",[12,39,2947],"react",{"path":2949,"title":2950,"section":7,"priority":2951,"type":9,"difficulty":10,"stack":2952},"\u002Foptimize-django-image-thumbnails","Serve Optimised Images and Thumbnails From Django","220",[12,1905,1116],{"path":2954,"title":2955,"section":23,"priority":1773,"type":9,"difficulty":10,"stack":2956},"\u002Fserve-private-django-media-nginx-x-accel-redirect","Serve Private Django Media Files with Nginx X-Accel-Redirect",[12,39,72],{"path":2958,"title":2959,"section":23,"priority":2960,"type":9,"difficulty":18,"stack":2961},"\u002Fdjango-fastly-cdn","Serve a Django Site Through Fastly","386",[12,2962,1116],"fastly",{"path":2964,"title":2965,"section":7,"priority":2966,"type":9,"difficulty":10,"stack":2967},"\u002Fdjango-cache-control-headers-cdn","Set Cache-Control Headers in Django for CDNs and Browsers","211",[12,1116,39],{"path":2969,"title":2970,"section":7,"priority":2971,"type":9,"difficulty":10,"stack":2972},"\u002Fdjango-kubernetes-resource-requests-limits","Set Kubernetes CPU and Memory Requests and Limits for Django","434",[12,98,72],{"path":2974,"title":2975,"section":7,"priority":1343,"type":9,"difficulty":10,"stack":2976},"\u002Fset-postgres-statement-timeout-django","Set PostgreSQL Statement Timeouts for Django",[12,13,2977],"pgbouncer",{"path":2979,"title":2980,"section":23,"priority":1328,"type":9,"difficulty":18,"stack":2981},"\u002Fsetup-pgbouncer-for-django","Set Up PgBouncer for Django",[12,13,2977],{"path":2983,"title":2984,"section":23,"priority":1782,"type":9,"difficulty":10,"stack":2985},"\u002Fsetup-redis-cache-django-production","Set Up Redis Caching for Django in Production",[12,105],{"path":2987,"title":2988,"section":7,"priority":917,"type":9,"difficulty":44,"stack":2989},"\u002Fsetup-sentry-for-django-production","Set Up Sentry Error Monitoring for Django",[12,2016],{"path":2991,"title":2992,"section":7,"priority":784,"type":9,"difficulty":44,"stack":2993},"\u002Fdjango-uptime-monitoring-alerts","Set Up Uptime Monitoring and Alerts for Django",[12],{"path":2995,"title":2996,"section":23,"priority":199,"type":9,"difficulty":10,"stack":2997},"\u002Fsetup-django-staging-environment","Set Up a Staging Environment for Django",[12],{"path":2999,"title":3000,"section":23,"priority":3001,"type":9,"difficulty":10,"stack":3002},"\u002Fdjango-vector-log-shipping","Ship Django Logs With Vector","391",[12,3003,2642],"vector",{"path":3005,"title":3006,"section":7,"priority":841,"type":9,"difficulty":10,"stack":3007},"\u002Fship-django-logs-to-grafana-loki","Ship Django Logs to Grafana Loki",[12,3008,349,39],"loki",{"path":3010,"title":3011,"section":23,"priority":3012,"type":9,"difficulty":18,"stack":3013},"\u002Fsign-django-images-cosign","Sign and Verify Django Docker Images With Cosign","397",[12,152,3014],"cosign",{"path":3016,"title":3017,"section":7,"priority":615,"type":64,"difficulty":10,"stack":3018},"\u002Fdjango-server-capacity-planning","Size a Server for a Django App: Capacity Planning",[12,72],{"path":3020,"title":3021,"section":7,"priority":3022,"type":9,"difficulty":10,"stack":3023},"\u002Fspeed-up-django-docker-builds-cache","Speed Up Django Docker Builds With Layer and Cache Mounts","242",[12,152,3024],"buildkit",{"path":3026,"title":3027,"section":7,"priority":3028,"type":9,"difficulty":10,"stack":3029},"\u002Fdjango-orjson-fast-json","Speed Up Django JSON Responses With orjson","440",[12,260,3030],"orjson",{"path":3032,"title":3033,"section":7,"priority":3034,"type":9,"difficulty":10,"stack":3035},"\u002Foptimize-django-rest-framework-performance","Speed Up Django REST Framework APIs","214",[12,260,13],{"path":3037,"title":3038,"section":7,"priority":3039,"type":9,"difficulty":10,"stack":3040},"\u002Fdjango-cached-template-loader","Speed Up Django Template Rendering With the Cached Loader","411",[12,366],{"path":3042,"title":3043,"section":7,"priority":3044,"type":9,"difficulty":10,"stack":3045},"\u002Fdjango-template-fragment-caching","Speed Up Django With Template Fragment Caching","210",[12,105,366],{"path":3047,"title":3048,"section":7,"priority":3049,"type":9,"difficulty":10,"stack":3050},"\u002Fdjango-collectstatic-faster-s3","Speed Up Django collectstatic to S3","438",[12,86,1015],{"path":3052,"title":3053,"section":23,"priority":3054,"type":9,"difficulty":44,"stack":3055},"\u002Fsplit-django-settings-development-production","Split Django Settings for Development and Production","173",[12,272],{"path":3057,"title":3058,"section":7,"priority":3059,"type":9,"difficulty":18,"stack":3060},"\u002Fsquash-django-migrations-production","Squash Django Migrations Safely in Production","425",[12,1025],{"path":3062,"title":3063,"section":7,"priority":3064,"type":9,"difficulty":44,"stack":3065},"\u002Fstop-django-signup-spam-turnstile","Stop Django Signup and Form Spam With Turnstile","239",[12,3066,3067],"turnstile","forms",{"path":3069,"title":3070,"section":180,"priority":3071,"type":182,"difficulty":44,"stack":3072},"\u002Ffix-docker-logs-filling-disk-django","Stop Docker Logs From Filling the Disk on a Django Host","96",[12,152,46],{"path":3074,"title":3075,"section":23,"priority":3076,"type":9,"difficulty":10,"stack":3077},"\u002Fstore-django-media-azure-blob-storage","Store Django Media Files on Azure Blob Storage","167",[12,424,1015],{"path":3079,"title":3080,"section":23,"priority":3081,"type":9,"difficulty":44,"stack":3082},"\u002Fstore-django-media-backblaze-b2","Store Django Media Files on Backblaze B2","169",[12,3083,1015],"backblaze-b2",{"path":3085,"title":3086,"section":23,"priority":299,"type":9,"difficulty":10,"stack":3087},"\u002Fstore-django-media-files-cloudflare-r2","Store Django Media Files on Cloudflare R2",[12,189,86],{"path":3089,"title":3090,"section":23,"priority":3091,"type":9,"difficulty":44,"stack":3092},"\u002Fstore-django-media-digitalocean-spaces","Store Django Media Files on DigitalOcean Spaces","168",[12,550,1015],{"path":3094,"title":3095,"section":23,"priority":3096,"type":9,"difficulty":10,"stack":3097},"\u002Fstore-django-media-google-cloud-storage","Store Django Media Files on Google Cloud Storage","166",[12,326,1015],{"path":3099,"title":3100,"section":23,"priority":3101,"type":9,"difficulty":44,"stack":3102},"\u002Fdjango-hetzner-object-storage","Store Django Media on Hetzner Object Storage","372",[12,3103,1015],"hetzner",{"path":3105,"title":3106,"section":23,"priority":3107,"type":9,"difficulty":44,"stack":3108},"\u002Fdjango-wasabi-storage","Store Django Media on Wasabi Hot Cloud Storage","373",[12,3109,1015],"wasabi",{"path":3111,"title":3112,"section":23,"priority":3113,"type":9,"difficulty":44,"stack":3114},"\u002Fdjango-cloudinary-media","Store and Transform Django Media With Cloudinary","371",[12,3115],"cloudinary",{"path":3117,"title":3118,"section":7,"priority":3119,"type":9,"difficulty":10,"stack":3120},"\u002Fdjango-structured-json-logging","Structured JSON Logging for Django","225",[12,3121,2642],"structlog",{"path":3123,"title":3124,"section":7,"priority":3125,"type":9,"difficulty":10,"stack":3126},"\u002Fdjango-argon2-password-hashing","Switch Django to Argon2 Password Hashing","240",[12,3127,59],"argon2",{"path":3129,"title":3130,"section":23,"priority":3131,"type":9,"difficulty":18,"stack":3132},"\u002Fdjango-external-secrets-operator","Sync Django Secrets Into Kubernetes With External Secrets Operator","393",[12,98,3133],"external-secrets",{"path":3135,"title":3136,"section":7,"priority":3137,"type":9,"difficulty":10,"stack":3138},"\u002Fdjango-postgres-full-database-restore-test","Test a Full PostgreSQL Restore for a Django App","444",[12,13,1161],{"path":3140,"title":3141,"section":23,"priority":3142,"type":9,"difficulty":10,"stack":3143},"\u002Fdjango-buildkite-pipeline","Test and Deploy Django With Buildkite","398",[12,3144,152],"buildkite",{"path":3146,"title":3147,"section":23,"priority":3148,"type":9,"difficulty":10,"stack":3149},"\u002Fdjango-gitea-actions","Test and Deploy Django With Gitea or Forgejo Actions","401",[12,3150,152],"gitea",{"path":3152,"title":3153,"section":23,"priority":3154,"type":9,"difficulty":10,"stack":3155},"\u002Fdjango-woodpecker-ci","Test and Deploy Django With Woodpecker CI","399",[12,3156,152],"woodpecker",{"path":3158,"title":3159,"section":7,"priority":506,"type":9,"difficulty":18,"stack":3160},"\u002Ftune-celery-workers-django","Tune Celery Worker Concurrency and Prefetch for Django",[12,27],{"path":3162,"title":3163,"section":7,"priority":3164,"type":9,"difficulty":18,"stack":3165},"\u002Ftune-nginx-upstream-keepalive-django","Tune Nginx Keepalive and Worker Connections for Django","224",[12,39,72],{"path":3167,"title":3168,"section":7,"priority":2106,"type":9,"difficulty":18,"stack":3169},"\u002Ftune-postgres-autovacuum-django","Tune PostgreSQL Autovacuum for Django",[12,13],{"path":3171,"title":3172,"section":7,"priority":3173,"type":9,"difficulty":18,"stack":3174},"\u002Ftune-postgresql-settings-for-django","Tune PostgreSQL Settings for a Django Workload","217",[12,13],{"path":3176,"title":3177,"section":7,"priority":3178,"type":9,"difficulty":10,"stack":3179},"\u002Fdjango-sentry-performance-sampling","Tune Sentry Sampling for Django Without Losing Important Data","442",[12,2016],{"path":3181,"title":3182,"section":7,"priority":1567,"type":9,"difficulty":18,"stack":3183},"\u002Fupgrade-postgres-major-version-django","Upgrade PostgreSQL to a New Major Version for Django",[12,13],{"path":3185,"title":3186,"section":7,"priority":3187,"type":9,"difficulty":10,"stack":3188},"\u002Fupgrade-python-version-django-production","Upgrade the Python Version of a Production Django App","248",[12,272,152],{"path":3190,"title":3191,"section":23,"priority":1205,"type":9,"difficulty":18,"stack":3192},"\u002Fupload-files-directly-to-s3-from-django","Upload Files Directly to S3 from Django with Presigned URLs",[12,86,2113,3193],"javascript",{"path":3195,"title":3196,"section":23,"priority":3197,"type":9,"difficulty":10,"stack":3198},"\u002Fdjango-aws-elasticache-redis","Use AWS ElastiCache (Redis OSS or Valkey) With Django","362",[12,79,105],{"path":3200,"title":3201,"section":23,"priority":3202,"type":9,"difficulty":10,"stack":3203},"\u002Fdjango-celery-amazon-sqs","Use Amazon SQS as the Celery Broker for Django","356",[12,27,79],{"path":3205,"title":3206,"section":23,"priority":3207,"type":9,"difficulty":10,"stack":3208},"\u002Fdjango-azure-database-postgresql","Use Azure Database for PostgreSQL Flexible Server With Django","364",[12,424,13],{"path":3210,"title":3211,"section":23,"priority":3212,"type":9,"difficulty":10,"stack":3213},"\u002Fdjango-azure-key-vault","Use Azure Key Vault With Django","378",[12,424,3214],"key-vault",{"path":3216,"title":3217,"section":7,"priority":985,"type":9,"difficulty":18,"stack":3218},"\u002Fdjango-postgres-connection-pooling-psycopg","Use Django's Built-In PostgreSQL Connection Pool",[12,13],{"path":3220,"title":3221,"section":23,"priority":3222,"type":9,"difficulty":10,"stack":3223},"\u002Fuse-docker-secrets-with-django","Use Docker Secrets With Django","193",[12,152,768],{"path":3225,"title":3226,"section":7,"priority":3227,"type":9,"difficulty":10,"stack":3228},"\u002Fdjango-etag-conditional-requests","Use ETags and Conditional Requests in Django","410",[12,3229],"http",{"path":3231,"title":3232,"section":7,"priority":603,"type":64,"difficulty":10,"stack":3233},"\u002Fdjango-feature-flags-safe-releases","Use Feature Flags for Safer Django Releases",[12],{"path":3235,"title":3236,"section":23,"priority":3237,"type":9,"difficulty":10,"stack":3238},"\u002Fdjango-gcp-secret-manager","Use Google Secret Manager With Django","377",[12,326,3239],"secret-manager",{"path":3241,"title":3242,"section":7,"priority":3243,"type":9,"difficulty":18,"stack":3244},"\u002Fgunicorn-preload-app-django","Use Gunicorn preload_app With Django","222",[12,72,46],{"path":3246,"title":3247,"section":23,"priority":3248,"type":9,"difficulty":18,"stack":3249},"\u002Fdjango-sql-server-mssql","Use Microsoft SQL Server With Django in Production","367",[12,3250,3251],"sql-server","odbc",{"path":3253,"title":3254,"section":7,"priority":3255,"type":9,"difficulty":10,"stack":3256},"\u002Fdjango-queryset-explain-analyze","Use QuerySet.explain() and EXPLAIN ANALYZE to Speed Up Django Queries","406",[12,13],{"path":3258,"title":3259,"section":23,"priority":3260,"type":9,"difficulty":10,"stack":3261},"\u002Fdjango-typesense","Use Typesense With Django for Fast Search","370",[12,3262,27],"typesense",{"path":3264,"title":3265,"section":23,"priority":3266,"type":9,"difficulty":44,"stack":3267},"\u002Fdjango-upstash-redis","Use Upstash Redis With Django","363",[12,105,3268],"upstash",{"path":3270,"title":3271,"section":23,"priority":3272,"type":9,"difficulty":10,"stack":3273},"\u002Fdjango-valkey-cache-broker","Use Valkey With Django for Caching, Sessions, and Celery","361",[12,3274,27],"valkey",{"path":3276,"title":3277,"section":7,"priority":3278,"type":9,"difficulty":18,"stack":3279},"\u002Fdjango-transactional-outbox-celery","Use the Transactional Outbox Pattern With Django and Celery","422",[12,27,13],{"path":3281,"title":3282,"section":214,"priority":3283,"type":9,"difficulty":10,"stack":3284},"\u002Fwagtail-production-checklist","Wagtail Production Checklist","258",[12,867,13],{"path":3286,"title":3287,"section":7,"priority":3288,"type":9,"difficulty":10,"stack":3289},"\u002Frespond-to-leaked-django-secrets","What to Do When Django Secrets Leak","250",[12,59,466],{"path":3291,"title":3292,"section":7,"priority":3293,"type":9,"difficulty":18,"stack":3294},"\u002Fdjango-async-views-production","When Async Django Views Pay Off in Production","213",[12,909,3295],"httpx",{"path":3297,"title":3298,"section":23,"priority":3299,"type":64,"difficulty":44,"stack":3300},"\u002Fwhitenoise-vs-nginx-static-files","WhiteNoise vs Nginx for Django Static Files","206",[12,170,39],{"path":3302,"title":3303,"section":180,"priority":3304,"type":182,"difficulty":10,"stack":3305},"\u002Ffix-django-alpine-docker-build-fails","Why Django Docker Builds Fail on Alpine, and How to Fix Them","293",[12,152,3306],"alpine",{"path":3308,"title":3309,"section":23,"priority":3310,"type":64,"difficulty":44,"stack":3311},"\u002Fwhy-not-runserver-in-production","Why You Should Not Use runserver in Production","208",[12,72,39],{"path":3313,"title":3314,"section":7,"priority":639,"type":64,"difficulty":18,"stack":3315},"\u002Fdjango-disaster-recovery-plan","Write a Disaster Recovery Plan for a Django App",[12,13],{"path":3317,"title":3318,"section":23,"priority":3319,"type":9,"difficulty":10,"stack":3320},"\u002Fwrite-django-docker-entrypoint-script","Write a Docker Entrypoint Script for Django","190",[12,152,73],{"path":3322,"title":3323,"section":23,"priority":3324,"type":9,"difficulty":10,"stack":3325},"\u002Fconfigure-gunicorn-conf-py-django","Write a gunicorn.conf.py for Django","184",[12,72,272],{"path":3327,"title":3328,"section":7,"priority":3329,"type":9,"difficulty":18,"stack":3330},"\u002Fdjango-kubernetes-rolling-update-zero-downtime","Zero-Downtime Rolling Updates for Django on Kubernetes","436",[12,98,72],{"path":3332,"title":3333,"section":23,"priority":3334,"type":64,"difficulty":44,"stack":3335},"\u002Fuv-vs-poetry-vs-pip-django","uv vs Poetry vs pip for Django Deployments","207",[12,843,819],{"id":3337,"title":1643,"body":3338,"category":4287,"description":4288,"difficulty":44,"extension":4289,"funnel_stage":4290,"intent":4291,"keyword":4292,"meta":4293,"navigation":4294,"path":1642,"priority":1644,"related":4295,"role":4297,"section":180,"seo":4298,"stack":4299,"stem":4300,"tags":4301,"topics":4302,"type":182,"__hash__":4303},"articles\u002Ffix-docker-port-already-allocated.md",{"type":3339,"value":3340,"toc":4268},"minimark",[3341,3346,3354,3364,3367,3373,3384,3483,3525,3529,3534,3587,3609,3613,3628,3669,3675,3817,3821,3824,3972,3983,3987,3990,4040,4047,4051,4058,4146,4150,4157,4161,4198,4202,4226,4230,4234,4237,4241,4250,4254,4257,4261,4264],[3342,3343,3345],"h2",{"id":3344},"problem-statement","Problem statement",[3347,3348,3349,3353],"p",{},[3350,3351,3352],"code",{},"docker compose up"," fails before your Django container starts:",[3355,3356,3362],"pre",{"className":3357,"code":3359,"language":3360,"meta":3361},[3358],"language-text","Error response from daemon: driver failed programming external connectivity on endpoint\nmyapp-web-1: Bind for 0.0.0.0:8000 failed: port is already allocated\n","text","",[3350,3363,3359],{"__ignoreMap":3361},[3347,3365,3366],{},"or, for the database:",[3355,3368,3371],{"className":3369,"code":3370,"language":3360,"meta":3361},[3358],"Error starting userland proxy: listen tcp4 0.0.0.0:5432: bind: address already in use\n",[3350,3372,3370],{"__ignoreMap":3361},[3347,3374,3375,3376,3379,3380,3383],{},"A published port (",[3350,3377,3378],{},"ports: [\"8000:8000\"]",") asks Docker to listen on that port on the host. Only one process can listen on a host port. \"Port is already allocated\" means another container already published it; \"address already in use\" means a non-Docker process, such as a local PostgreSQL or a ",[3350,3381,3382],{},"runserver",", holds it.",[3385,3386,3392],"div",{"className":3387,"tabIndex":3389,"role":3390,"ariaLabel":3391},[3388],"diagram-scroll",0,"region","Why the bind fails, scrollable diagram",[3393,3394,3401,3408,3416,3422,3427,3432,3434,3437,3440,3442,3446,3449,3452,3456,3459,3463,3467,3469,3472,3476,3479],"svg",{"viewBox":3395,"width":3396,"role":3397,"ariaLabel":3398,"xmlns":3399,"style":3400},"0 0 760 178","100%","img","Why the bind fails: Only one listener per host port; find who holds it or stop publishing it.","http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","max-width:100%;height:auto",[3402,3403],"rect",{"x":902,"y":902,"width":3404,"height":2335,"rx":581,"fill":3405,"stroke":3406,"strokeWidth":902,"style":3407},"758","#FFFFFF","#CBD5E1","stroke-width:1",[3360,3409,3415],{"x":2547,"y":506,"textAnchor":3410,"fontFamily":3411,"fontSize":927,"fontWeight":3412,"fill":3413,"style":3414},"middle","system-ui, sans-serif","700","#0F172A","font-family:system-ui, sans-serif;font-size:15px;font-weight:700;text-anchor:middle","Why the bind fails",[3402,3417],{"x":1065,"y":43,"width":324,"height":877,"rx":495,"fill":3418,"stroke":3419,"strokeWidth":3420,"style":3421},"#EEF2FF","#475569","1.5","stroke-width:1.5",[3360,3423,3426],{"x":1693,"y":1795,"textAnchor":3410,"fontFamily":3411,"fontSize":565,"fontWeight":3424,"fill":3413,"style":3425},"600","font-family:system-ui, sans-serif;font-size:13px;font-weight:600;text-anchor:middle","Compose publishes",[3360,3428,3431],{"x":1693,"y":1543,"textAnchor":3410,"fontFamily":3411,"fontSize":565,"fontWeight":706,"fill":3429,"style":3430},"#334155","font-family:system-ui, sans-serif;font-size:13px;font-weight:400;text-anchor:middle","8000:8000",[3402,3433],{"x":204,"y":43,"width":324,"height":877,"rx":495,"fill":3418,"stroke":3419,"strokeWidth":3420,"style":3421},[3360,3435,3436],{"x":1978,"y":1795,"textAnchor":3410,"fontFamily":3411,"fontSize":565,"fontWeight":3424,"fill":3413,"style":3425},"Docker binds",[3360,3438,3439],{"x":1978,"y":1543,"textAnchor":3410,"fontFamily":3411,"fontSize":565,"fontWeight":706,"fill":3429,"style":3430},"host port 8000",[3402,3441],{"x":3131,"y":43,"width":324,"height":877,"rx":495,"fill":3418,"stroke":3419,"strokeWidth":3420,"style":3421},[3360,3443,3445],{"x":3444,"y":1795,"textAnchor":3410,"fontFamily":3411,"fontSize":565,"fontWeight":3424,"fill":3413,"style":3425},"474","Already taken",[3360,3447,3448],{"x":3444,"y":1543,"textAnchor":3410,"fontFamily":3411,"fontSize":565,"fontWeight":706,"fill":3429,"style":3430},"container or process",[3402,3450],{"x":3451,"y":43,"width":324,"height":877,"rx":495,"fill":3418,"stroke":3419,"strokeWidth":3420,"style":3421},"582",[3360,3453,3455],{"x":3454,"y":1795,"textAnchor":3410,"fontFamily":3411,"fontSize":565,"fontWeight":3424,"fill":3413,"style":3425},"663","Not started",[3360,3457,3458],{"x":3454,"y":1543,"textAnchor":3410,"fontFamily":3411,"fontSize":565,"fontWeight":706,"fill":3429,"style":3430},"bind failed",[3460,3461],"line",{"x1":2607,"y1":2069,"x2":2475,"y2":2069,"stroke":3419,"strokeWidth":947,"style":3462},"stroke-width:2",[3464,3465],"path",{"d":3466,"fill":3419},"M196,88 L204,93 L196,98 Z",[3460,3468],{"x1":3248,"y1":2069,"x2":2960,"y2":2069,"stroke":3419,"strokeWidth":947,"style":3462},[3464,3470],{"d":3471,"fill":3419},"M385,88 L393,93 L385,98 Z",[3460,3473],{"x1":3474,"y1":2069,"x2":3475,"y2":2069,"stroke":3419,"strokeWidth":947,"style":3462},"556","574",[3464,3477],{"d":3478,"fill":3419},"M574,88 L582,93 L574,98 Z",[3360,3480,3482],{"x":2547,"y":477,"textAnchor":3410,"fontFamily":3411,"fontSize":565,"fill":3429,"style":3481},"font-family:system-ui, sans-serif;font-size:13px;text-anchor:middle","Only one listener per host port; find who holds it or stop publishing it.",[3484,3485,3486,3498,3505,3516,3522],"ol",{},[3487,3488,3489,3490,3493,3494,3497],"li",{},"Find the holder: ",[3350,3491,3492],{},"docker ps --filter publish=8000"," for containers, ",[3350,3495,3496],{},"sudo ss -ltnp 'sport = :8000'"," for processes.",[3487,3499,3500,3501,3504],{},"Stop the old stack: ",[3350,3502,3503],{},"docker compose down --remove-orphans"," in the other project directory.",[3487,3506,3507,3508,3511,3512,3515],{},"Stop local services that clash: ",[3350,3509,3510],{},"sudo systemctl stop postgresql"," or ",[3350,3513,3514],{},"redis-server",".",[3487,3517,3518,3519,3515],{},"Change the host side of the mapping: ",[3350,3520,3521],{},"\"8001:8000\"",[3487,3523,3524],{},"In production, publish only the reverse proxy; let Django, Postgres, and Redis talk over the Compose network.",[3342,3526,3528],{"id":3527},"step-by-step-solution","Step-by-step solution",[3530,3531,3533],"h3",{"id":3532},"_1-identify-what-holds-the-port","1. Identify what holds the port",[3355,3535,3538],{"className":3536,"code":3537,"language":73,"meta":3361,"style":3361},"language-bash shiki shiki-themes github-light-high-contrast github-dark-high-contrast","docker ps --format '{{.Names}}\\t{{.Ports}}' | grep 8000\nsudo ss -ltnp | grep ':8000 '\n",[3350,3539,3540,3568],{"__ignoreMap":3361},[3541,3542,3544,3547,3551,3555,3558,3562,3565],"span",{"class":3460,"line":3543},1,[3541,3545,152],{"class":3546},"soyes",[3541,3548,3550],{"class":3549},"sT6z2"," ps",[3541,3552,3554],{"class":3553},"s-5SL"," --format",[3541,3556,3557],{"class":3549}," '{{.Names}}\\t{{.Ports}}'",[3541,3559,3561],{"class":3560},"sHUrx"," |",[3541,3563,3564],{"class":3546}," grep",[3541,3566,3567],{"class":3553}," 8000\n",[3541,3569,3571,3574,3577,3580,3582,3584],{"class":3460,"line":3570},2,[3541,3572,3573],{"class":3546},"sudo",[3541,3575,3576],{"class":3549}," ss",[3541,3578,3579],{"class":3553}," -ltnp",[3541,3581,3561],{"class":3560},[3541,3583,3564],{"class":3546},[3541,3585,3586],{"class":3549}," ':8000 '\n",[3347,3588,3589,3590,3593,3594,3597,3598,3601,3602,3604,3605,3608],{},"A container in the list means another Compose project, an older run of this one with a different project name, or a container started with ",[3350,3591,3592],{},"docker run",". A process such as ",[3350,3595,3596],{},"python manage.py runserver",", ",[3350,3599,3600],{},"postgres",", or ",[3350,3603,3514],{}," in the ",[3350,3606,3607],{},"ss"," output means a host service.",[3530,3610,3612],{"id":3611},"_2-clean-up-old-containers","2. Clean up old containers",[3347,3614,3615,3616,3619,3620,3623,3624,3627],{},"Renaming the project folder or the ",[3350,3617,3618],{},"name:"," in ",[3350,3621,3622],{},"compose.yaml"," changes the project name, so ",[3350,3625,3626],{},"docker compose down"," in the new folder does not see the old containers. Remove them by name:",[3355,3629,3631],{"className":3536,"code":3630,"language":73,"meta":3361,"style":3361},"docker ps -a --filter \"name=myapp\" --format '{{.Names}}'\ndocker rm -f old-myapp-web-1 old-myapp-db-1\n",[3350,3632,3633,3653],{"__ignoreMap":3361},[3541,3634,3635,3637,3639,3642,3645,3648,3650],{"class":3460,"line":3543},[3541,3636,152],{"class":3546},[3541,3638,3550],{"class":3549},[3541,3640,3641],{"class":3553}," -a",[3541,3643,3644],{"class":3553}," --filter",[3541,3646,3647],{"class":3549}," \"name=myapp\"",[3541,3649,3554],{"class":3553},[3541,3651,3652],{"class":3549}," '{{.Names}}'\n",[3541,3654,3655,3657,3660,3663,3666],{"class":3460,"line":3570},[3541,3656,152],{"class":3546},[3541,3658,3659],{"class":3549}," rm",[3541,3661,3662],{"class":3553}," -f",[3541,3664,3665],{"class":3549}," old-myapp-web-1",[3541,3667,3668],{"class":3549}," old-myapp-db-1\n",[3347,3670,3671,3674],{},[3350,3672,3673],{},"--remove-orphans"," cleans up containers from services you deleted from the file.",[3676,3677,3681,3813],"figure",{"className":3678,"dataDiagram":3679,"dataKind":3680},[3676],"docker-port-holder-triage","triage",[3385,3682,3685],{"className":3683,"tabIndex":3389,"role":3390,"ariaLabel":3684},[3388],"Who is holding the port your Django Compose stack needs, scrollable diagram",[3393,3686,3691,3696,3703,3708,3712,3717,3724,3727,3730,3737,3740,3742,3745,3747,3751,3755,3758,3761,3763,3767,3769,3772,3775,3778,3780,3783,3785,3789,3793,3796,3799,3803,3806],{"className":3687,"viewBox":3689,"width":3396,"role":3397,"ariaLabel":3690,"xmlns":3399,"style":3400},[3688],"dd-diagram","0 0 540 274","Four holders: a container from another directory has an old project name and should be removed; a postgres or redis process is a host service to stop or stop publishing; python runserver is a forgotten dev server; if nothing is visible, check rootless Docker or another docker context.",[3402,3692],{"x":902,"y":902,"width":3693,"height":1909,"rx":215,"fill":3694,"stroke":3695,"strokeWidth":902,"style":3407},"538","#ffffff","#cbd5e1",[3360,3697,3702],{"x":1272,"y":304,"textAnchor":3410,"fontFamily":3698,"fontSize":3699,"fontWeight":3412,"fill":3700,"style":3701},"system-ui, -apple-system, Segoe UI, Roboto, sans-serif","11.5","#1867c0","text-anchor:middle;font-family:system-ui, -apple-system, Segoe UI, Roboto, sans-serif;font-size:11.5px;font-weight:700","match the holder",[3360,3704,3707],{"x":1291,"y":1567,"textAnchor":3410,"fontFamily":3698,"fontSize":495,"fontWeight":3412,"fill":3705,"style":3706},"#c62828","text-anchor:middle;font-family:system-ui, -apple-system, Segoe UI, Roboto, sans-serif;font-size:10px;font-weight:700","Holder",[3360,3709,3711],{"x":3227,"y":1567,"textAnchor":3410,"fontFamily":3698,"fontSize":495,"fontWeight":3412,"fill":3710,"style":3706},"#0b7a6c","Cause and fix",[3402,3713],{"x":194,"y":43,"width":2951,"height":501,"rx":917,"fill":3714,"stroke":3705,"strokeWidth":3715,"style":3716},"#fdecec","1.4","stroke-width:1.4",[3360,3718,3723],{"x":1291,"y":3719,"textAnchor":3410,"fontFamily":3698,"fontSize":3720,"fontWeight":3424,"fill":3721,"style":3722},"72.5","9.5","#0f172a","text-anchor:middle;font-family:system-ui, -apple-system, Segoe UI, Roboto, sans-serif;font-size:9.5px;font-weight:600","container from another dir",[3402,3725],{"x":1716,"y":43,"width":2951,"height":501,"rx":917,"fill":3726,"stroke":3710,"strokeWidth":3715,"style":3716},"#e3f5f2",[3360,3728,3729],{"x":3227,"y":3719,"textAnchor":3410,"fontFamily":3698,"fontSize":3720,"fontWeight":3424,"fill":3721,"style":3722},"old project name; docker rm -f it",[3464,3731],{"d":3732,"fill":3733,"stroke":3710,"strokeWidth":3734,"strokeLineCap":3735,"strokeLineJoin":3735,"style":3736},"M 248 70.5 L 286 70.5","none","1.6","round","stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round",[3464,3738],{"d":3739,"fill":3710},"M 292 70.5 L 285 74.1 L 285 66.9 Z",[3402,3741],{"x":194,"y":1654,"width":2951,"height":253,"rx":917,"fill":3714,"stroke":3705,"strokeWidth":3715,"style":3716},[3360,3743,3744],{"x":1291,"y":1456,"textAnchor":3410,"fontFamily":3698,"fontSize":3720,"fontWeight":3424,"fill":3721,"style":3722},"postgres or redis process",[3402,3746],{"x":1716,"y":1654,"width":2951,"height":253,"rx":917,"fill":3726,"stroke":3710,"strokeWidth":3715,"style":3716},[3360,3748,3750],{"x":3227,"y":3749,"textAnchor":3410,"fontFamily":3698,"fontSize":3720,"fontWeight":3424,"fill":3721,"style":3722},"111.5","host service installed;",[3360,3752,3754],{"x":3227,"y":3753,"textAnchor":3410,"fontFamily":3698,"fontSize":3720,"fontWeight":3424,"fill":3721,"style":3722},"124.5","stop or unpublish",[3464,3756],{"d":3757,"fill":3733,"stroke":3710,"strokeWidth":3734,"strokeLineCap":3735,"strokeLineJoin":3735,"style":3736},"M 248 116 L 286 116",[3464,3759],{"d":3760,"fill":3710},"M 292 116 L 285 119.6 L 285 112.4 Z",[3402,3762],{"x":194,"y":2733,"width":2951,"height":501,"rx":917,"fill":3714,"stroke":3705,"strokeWidth":3715,"style":3716},[3360,3764,3766],{"x":1291,"y":3765,"textAnchor":3410,"fontFamily":3698,"fontSize":3720,"fontWeight":3424,"fill":3721,"style":3722},"163.5","python runserver",[3402,3768],{"x":1716,"y":2733,"width":2951,"height":501,"rx":917,"fill":3726,"stroke":3710,"strokeWidth":3715,"style":3716},[3360,3770,3771],{"x":3227,"y":3765,"textAnchor":3410,"fontFamily":3698,"fontSize":3720,"fontWeight":3424,"fill":3721,"style":3722},"forgotten dev server; stop it",[3464,3773],{"d":3774,"fill":3733,"stroke":3710,"strokeWidth":3734,"strokeLineCap":3735,"strokeLineJoin":3735,"style":3736},"M 248 161.5 L 286 161.5",[3464,3776],{"d":3777,"fill":3710},"M 292 161.5 L 285 165.1 L 285 157.9 Z",[3402,3779],{"x":194,"y":2894,"width":2951,"height":253,"rx":917,"fill":3714,"stroke":3705,"strokeWidth":3715,"style":3716},[3360,3781,3782],{"x":1291,"y":17,"textAnchor":3410,"fontFamily":3698,"fontSize":3720,"fontWeight":3424,"fill":3721,"style":3722},"nothing visible",[3402,3784],{"x":1716,"y":2894,"width":2951,"height":253,"rx":917,"fill":3726,"stroke":3710,"strokeWidth":3715,"style":3716},[3360,3786,3788],{"x":3227,"y":3787,"textAnchor":3410,"fontFamily":3698,"fontSize":3720,"fontWeight":3424,"fill":3721,"style":3722},"202.5","rootless or other netns;",[3360,3790,3792],{"x":3227,"y":3791,"textAnchor":3410,"fontFamily":3698,"fontSize":3720,"fontWeight":3424,"fill":3721,"style":3722},"215.5","check docker context",[3464,3794],{"d":3795,"fill":3733,"stroke":3710,"strokeWidth":3734,"strokeLineCap":3735,"strokeLineJoin":3735,"style":3736},"M 248 207 L 286 207",[3464,3797],{"d":3798,"fill":3710},"M 292 207 L 285 210.6 L 285 203.4 Z",[3360,3800,3802],{"x":1272,"y":3288,"textAnchor":3410,"fontFamily":3698,"fontSize":133,"fontWeight":3424,"fill":3721,"style":3801},"text-anchor:middle;font-family:system-ui, -apple-system, Segoe UI, Roboto, sans-serif;font-size:11px;font-weight:600","The message differs: allocated means a container, in use means a process",[3464,3804],{"d":3805,"fill":3733,"stroke":3695,"strokeWidth":902,"style":3407},"M 14 258 L 526 258",[3360,3807,3812],{"x":3808,"y":1936,"textAnchor":3809,"fontFamily":3698,"fontSize":917,"fontWeight":3424,"fill":3810,"style":3811},"526","end","#64748b","text-anchor:end;font-family:system-ui, -apple-system, Segoe UI, Roboto, sans-serif;font-size:9px;font-weight:600","django-deployment.com",[3814,3815,3816],"figcaption",{},"Fix the holder rather than picking random ports until one works.",[3530,3818,3820],{"id":3819},"_3-stop-publishing-internal-services","3. Stop publishing internal services",[3347,3822,3823],{},"In production, the database and Redis do not need host ports at all. Containers on the same Compose network reach each other by service name:",[3355,3825,3829],{"className":3826,"code":3827,"language":3828,"meta":3361,"style":3361},"language-yaml shiki shiki-themes github-light-high-contrast github-dark-high-contrast","services:\n  db:\n    image: postgres:17\n    # no ports: section; web connects to db:5432\n  redis:\n    image: redis:7\n  web:\n    build: .\n    environment:\n      DATABASE_URL: postgres:\u002F\u002Fapp:${DB_PASSWORD}@db:5432\u002Fapp\n      REDIS_URL: redis:\u002F\u002Fredis:6379\u002F0\n  proxy:\n    image: caddy:2\n    ports: [\"80:80\", \"443:443\"]\n","yaml",[3350,3830,3831,3841,3848,3860,3867,3875,3885,3893,3904,3912,3923,3934,3942,3952],{"__ignoreMap":3361},[3541,3832,3833,3837],{"class":3460,"line":3543},[3541,3834,3836],{"class":3835},"sne4z","services",[3541,3838,3840],{"class":3839},"suds8",":\n",[3541,3842,3843,3846],{"class":3460,"line":3570},[3541,3844,3845],{"class":3835},"  db",[3541,3847,3840],{"class":3839},[3541,3849,3851,3854,3857],{"class":3460,"line":3850},3,[3541,3852,3853],{"class":3835},"    image",[3541,3855,3856],{"class":3839},": ",[3541,3858,3859],{"class":3549},"postgres:17\n",[3541,3861,3863],{"class":3460,"line":3862},4,[3541,3864,3866],{"class":3865},"sLBg1","    # no ports: section; web connects to db:5432\n",[3541,3868,3870,3873],{"class":3460,"line":3869},5,[3541,3871,3872],{"class":3835},"  redis",[3541,3874,3840],{"class":3839},[3541,3876,3878,3880,3882],{"class":3460,"line":3877},6,[3541,3879,3853],{"class":3835},[3541,3881,3856],{"class":3839},[3541,3883,3884],{"class":3549},"redis:7\n",[3541,3886,3888,3891],{"class":3460,"line":3887},7,[3541,3889,3890],{"class":3835},"  web",[3541,3892,3840],{"class":3839},[3541,3894,3896,3899,3901],{"class":3460,"line":3895},8,[3541,3897,3898],{"class":3835},"    build",[3541,3900,3856],{"class":3839},[3541,3902,3903],{"class":3553},".\n",[3541,3905,3907,3910],{"class":3460,"line":3906},9,[3541,3908,3909],{"class":3835},"    environment",[3541,3911,3840],{"class":3839},[3541,3913,3915,3918,3920],{"class":3460,"line":3914},10,[3541,3916,3917],{"class":3835},"      DATABASE_URL",[3541,3919,3856],{"class":3839},[3541,3921,3922],{"class":3549},"postgres:\u002F\u002Fapp:${DB_PASSWORD}@db:5432\u002Fapp\n",[3541,3924,3926,3929,3931],{"class":3460,"line":3925},11,[3541,3927,3928],{"class":3835},"      REDIS_URL",[3541,3930,3856],{"class":3839},[3541,3932,3933],{"class":3549},"redis:\u002F\u002Fredis:6379\u002F0\n",[3541,3935,3937,3940],{"class":3460,"line":3936},12,[3541,3938,3939],{"class":3835},"  proxy",[3541,3941,3840],{"class":3839},[3541,3943,3945,3947,3949],{"class":3460,"line":3944},13,[3541,3946,3853],{"class":3835},[3541,3948,3856],{"class":3839},[3541,3950,3951],{"class":3549},"caddy:2\n",[3541,3953,3955,3958,3961,3964,3966,3969],{"class":3460,"line":3954},14,[3541,3956,3957],{"class":3835},"    ports",[3541,3959,3960],{"class":3839},": [",[3541,3962,3963],{"class":3549},"\"80:80\"",[3541,3965,3597],{"class":3839},[3541,3967,3968],{"class":3549},"\"443:443\"",[3541,3970,3971],{"class":3839},"]\n",[3347,3973,3974,3975,3978,3979,3982],{},"Only the proxy publishes ports. This avoids clashes and keeps the database off the public interface, which ",[3350,3976,3977],{},"ports: [\"5432:5432\"]"," exposes on ",[3350,3980,3981],{},"0.0.0.0",", bypassing UFW rules on many systems.",[3530,3984,3986],{"id":3985},"_4-use-different-ports-per-environment","4. Use different ports per environment",[3347,3988,3989],{},"For local development with several projects, keep internal ports the same and change only the host side:",[3355,3991,3993],{"className":3826,"code":3992,"language":3828,"meta":3361,"style":3361},"# compose.override.yaml\nservices:\n  web:\n    ports: [\"127.0.0.1:8001:8000\"]\n  db:\n    ports: [\"127.0.0.1:55432:5432\"]\n",[3350,3994,3995,4000,4006,4012,4023,4029],{"__ignoreMap":3361},[3541,3996,3997],{"class":3460,"line":3543},[3541,3998,3999],{"class":3865},"# compose.override.yaml\n",[3541,4001,4002,4004],{"class":3460,"line":3570},[3541,4003,3836],{"class":3835},[3541,4005,3840],{"class":3839},[3541,4007,4008,4010],{"class":3460,"line":3850},[3541,4009,3890],{"class":3835},[3541,4011,3840],{"class":3839},[3541,4013,4014,4016,4018,4021],{"class":3460,"line":3862},[3541,4015,3957],{"class":3835},[3541,4017,3960],{"class":3839},[3541,4019,4020],{"class":3549},"\"127.0.0.1:8001:8000\"",[3541,4022,3971],{"class":3839},[3541,4024,4025,4027],{"class":3460,"line":3869},[3541,4026,3845],{"class":3835},[3541,4028,3840],{"class":3839},[3541,4030,4031,4033,4035,4038],{"class":3460,"line":3877},[3541,4032,3957],{"class":3835},[3541,4034,3960],{"class":3839},[3541,4036,4037],{"class":3549},"\"127.0.0.1:55432:5432\"",[3541,4039,3971],{"class":3839},[3347,4041,4042,4043,4046],{},"Binding to ",[3350,4044,4045],{},"127.0.0.1"," keeps dev ports private to your machine.",[3530,4048,4050],{"id":4049},"_5-restart-docker-if-the-port-is-stuck","5. Restart Docker if the port is stuck",[3347,4052,4053,4054,4057],{},"Rarely, Docker's proxy keeps a port after a crash. If nothing holds it but the error persists, restart the daemon: ",[3350,4055,4056],{},"sudo systemctl restart docker",". This restarts all containers on the host.",[3676,4059,4063,4143],{"className":4060,"dataDiagram":4061,"dataKind":4062},[3676],"docker-port-publish-panels","panels",[3385,4064,4067],{"className":4065,"tabIndex":3389,"role":3390,"ariaLabel":4066},[3388],"Publishing every service compared with publishing only the proxy, scrollable diagram",[3393,4068,4072,4074,4077,4081,4084,4089,4094,4100,4102,4106,4108,4112,4114,4116,4119,4122,4125,4127,4130,4132,4135,4138,4141],{"className":4069,"viewBox":4070,"width":3396,"role":3397,"ariaLabel":4071,"xmlns":3399,"style":3400},[3688],"0 0 540 192","Two panels. When every service publishes ports, they clash with host services, the database listens on 0.0.0.0, and Docker bypasses UFW rules. When only the proxy publishes, there are two host ports, services reach each other by network name, and nothing internal is exposed.",[3402,4073],{"x":902,"y":902,"width":3693,"height":3319,"rx":215,"fill":3694,"stroke":3695,"strokeWidth":902,"style":3407},[3360,4075,4076],{"x":1272,"y":304,"textAnchor":3410,"fontFamily":3698,"fontSize":3699,"fontWeight":3412,"fill":3700,"style":3701},"ports in a production Compose file",[3402,4078],{"x":194,"y":253,"width":3125,"height":1903,"rx":917,"fill":3694,"stroke":4079,"strokeWidth":3734,"style":4080},"#b45309","stroke-width:1.6",[3402,4082],{"x":194,"y":253,"width":3125,"height":603,"rx":917,"fill":4083,"stroke":4079,"strokeWidth":3734,"style":4080},"#fef4e2",[3360,4085,4088],{"x":699,"y":756,"textAnchor":3410,"fontFamily":3698,"fontSize":4086,"fontWeight":3412,"fill":4079,"style":4087},"10.5","text-anchor:middle;font-family:system-ui, -apple-system, Segoe UI, Roboto, sans-serif;font-size:10.5px;font-weight:700","Every service publishes",[3360,4090,4093],{"x":31,"y":156,"textAnchor":4091,"fontFamily":3698,"fontSize":4086,"fontWeight":3412,"fill":3705,"style":4092},"start","text-anchor:start;font-family:system-ui, -apple-system, Segoe UI, Roboto, sans-serif;font-size:10.5px;font-weight:700","✕",[3360,4095,4099],{"x":276,"y":4096,"textAnchor":4091,"fontFamily":3698,"fontSize":3720,"fontWeight":4097,"fill":3721,"style":4098},"85.5","500","text-anchor:start;font-family:system-ui, -apple-system, Segoe UI, Roboto, sans-serif;font-size:9.5px;font-weight:500","clashes with host services",[3360,4101,4093],{"x":31,"y":2117,"textAnchor":4091,"fontFamily":3698,"fontSize":4086,"fontWeight":3412,"fill":3705,"style":4092},[3360,4103,4105],{"x":276,"y":4104,"textAnchor":4091,"fontFamily":3698,"fontSize":3720,"fontWeight":4097,"fill":3721,"style":4098},"105.5","database on 0.0.0.0",[3360,4107,4093],{"x":31,"y":2136,"textAnchor":4091,"fontFamily":3698,"fontSize":4086,"fontWeight":3412,"fill":3705,"style":4092},[3360,4109,4111],{"x":276,"y":4110,"textAnchor":4091,"fontFamily":3698,"fontSize":3720,"fontWeight":4097,"fill":3721,"style":4098},"125.5","bypasses UFW rules",[3402,4113],{"x":1553,"y":253,"width":3125,"height":1903,"rx":917,"fill":3694,"stroke":3710,"strokeWidth":3734,"style":4080},[3402,4115],{"x":1553,"y":253,"width":3125,"height":603,"rx":917,"fill":3726,"stroke":3710,"strokeWidth":3734,"style":4080},[3360,4117,4118],{"x":706,"y":756,"textAnchor":3410,"fontFamily":3698,"fontSize":4086,"fontWeight":3412,"fill":3710,"style":4087},"Only the proxy publishes",[3360,4120,4121],{"x":1591,"y":156,"textAnchor":4091,"fontFamily":3698,"fontSize":4086,"fontWeight":3412,"fill":3710,"style":4092},"✓",[3360,4123,4124],{"x":1483,"y":4096,"textAnchor":4091,"fontFamily":3698,"fontSize":3720,"fontWeight":4097,"fill":3721,"style":4098},"two host ports total",[3360,4126,4121],{"x":1591,"y":2117,"textAnchor":4091,"fontFamily":3698,"fontSize":4086,"fontWeight":3412,"fill":3710,"style":4092},[3360,4128,4129],{"x":1483,"y":4104,"textAnchor":4091,"fontFamily":3698,"fontSize":3720,"fontWeight":4097,"fill":3721,"style":4098},"services use network names",[3360,4131,4121],{"x":1591,"y":2136,"textAnchor":4091,"fontFamily":3698,"fontSize":4086,"fontWeight":3412,"fill":3710,"style":4092},[3360,4133,4134],{"x":1483,"y":4110,"textAnchor":4091,"fontFamily":3698,"fontSize":3720,"fontWeight":4097,"fill":3721,"style":4098},"nothing internal exposed",[3360,4136,4137],{"x":1272,"y":3091,"textAnchor":3410,"fontFamily":3698,"fontSize":133,"fontWeight":3424,"fill":3721,"style":3801},"Service names on the Compose network replace most published ports",[3464,4139],{"d":4140,"fill":3733,"stroke":3695,"strokeWidth":902,"style":3407},"M 14 176 L 526 176",[3360,4142,3812],{"x":3808,"y":2465,"textAnchor":3809,"fontFamily":3698,"fontSize":917,"fontWeight":3424,"fill":3810,"style":3811},[3814,4144,4145],{},"Publish database ports only on 127.0.0.1 and only when you need host access.",[3342,4147,4149],{"id":4148},"explanation","Explanation",[3347,4151,4152,4153,4156],{},"Publishing a port makes Docker add NAT rules and, in many setups, start a small proxy that listens on the host port. Like any listener, it needs exclusive use of that port on that address. Docker tracks ports it allocated to other containers and reports \"already allocated\" for those; for ports held by other programs, the kernel returns ",[3350,4154,4155],{},"EADDRINUSE",", shown as \"address already in use\". Containers talking to each other over a user-defined network do not use host ports at all.",[3342,4158,4160],{"id":4159},"edge-cases-notes","Edge cases \u002F notes",[4162,4163,4164,4179,4192],"ul",{},[3487,4165,4166,4170,4171,4174,4175,4178],{},[4167,4168,4169],"strong",{},"IPv6."," A process on ",[3350,4172,4173],{},"[::]:8000"," can block ",[3350,4176,4177],{},"0.0.0.0:8000"," on systems where IPv6 sockets also accept IPv4.",[3487,4180,4181,4184,4185,4188,4189,3515],{},[4167,4182,4183],{},"Docker Desktop."," On macOS and Windows, the port is held by the Docker Desktop VM process; ",[3350,4186,4187],{},"lsof -i :8000"," shows ",[3350,4190,4191],{},"com.docker.backend",[3487,4193,4194,4197],{},[4167,4195,4196],{},"Swarm and Kubernetes."," These have their own port publishing models; host port clashes appear differently there.",[3342,4199,4201],{"id":4200},"next-steps","Next steps",[4162,4203,4204,4212,4219],{},[3487,4205,4206,4207,3515],{},"The non-Docker version is ",[4208,4209,4211],"a",{"href":4210},"\u002Ffix-issues\u002Ffix-gunicorn-address-already-in-use","Fix Gunicorn Address Already in Use",[3487,4213,4214,4215,3515],{},"Nginx on the host clashing with a container? See ",[4208,4216,4218],{"href":4217},"\u002Ffix-issues\u002Ffix-nginx-bind-port-80-address-in-use","Fix Nginx Bind Port 80 Address in Use",[3487,4220,4221,4222,3515],{},"Structure dev and prod ports with ",[4208,4223,4225],{"href":4224},"\u002Fdeploy\u002Fconfigure-docker-compose-override-django","Configure Docker Compose Override for Django",[3342,4227,4229],{"id":4228},"faq","FAQ",[3530,4231,4233],{"id":4232},"what-is-the-difference-between-allocated-and-address-already-in-use","What is the difference between \"allocated\" and \"address already in use\"?",[3347,4235,4236],{},"\"Allocated\" means another container published the port. \"Address already in use\" means a process outside Docker is listening on it.",[3530,4238,4240],{"id":4239},"does-postgres-need-ports-in-compose","Does Postgres need ports: in Compose?",[3347,4242,4243,4244,4247,4248,3515],{},"Not for Django in the same Compose project. Use the service name ",[3350,4245,4246],{},"db"," as the host. Publish only if tools on the host must connect, and bind to ",[3350,4249,4045],{},[3530,4251,4253],{"id":4252},"why-does-the-old-stack-still-run-after-i-renamed-the-folder","Why does the old stack still run after I renamed the folder?",[3347,4255,4256],{},"The project name changed, so Compose treats it as a different project. Remove the old containers by name.",[3530,4258,4260],{"id":4259},"can-two-containers-share-a-host-port","Can two containers share a host port?",[3347,4262,4263],{},"No. Put a reverse proxy in front and route by host name or path instead.",[4265,4266,4267],"style",{},"html pre.shiki code .soyes, html code.shiki .soyes{--shiki-default:#702C00;--shiki-dark:#FFB757}html pre.shiki code .sT6z2, html code.shiki .sT6z2{--shiki-default:#032563;--shiki-dark:#ADDCFF}html pre.shiki code .s-5SL, html code.shiki .s-5SL{--shiki-default:#023B95;--shiki-dark:#91CBFF}html pre.shiki code .sHUrx, html code.shiki .sHUrx{--shiki-default:#A0111F;--shiki-dark:#FF9492}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sne4z, html code.shiki .sne4z{--shiki-default:#024C1A;--shiki-dark:#72F088}html pre.shiki code .suds8, html code.shiki .suds8{--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .sLBg1, html code.shiki .sLBg1{--shiki-default:#66707B;--shiki-dark:#BDC4CC}",{"title":3361,"searchDepth":3850,"depth":3850,"links":4269},[4270,4271,4278,4279,4280,4281],{"id":3344,"depth":3570,"text":3345},{"id":3527,"depth":3570,"text":3528,"children":4272},[4273,4274,4275,4276,4277],{"id":3532,"depth":3850,"text":3533},{"id":3611,"depth":3850,"text":3612},{"id":3819,"depth":3850,"text":3820},{"id":3985,"depth":3850,"text":3986},{"id":4049,"depth":3850,"text":4050},{"id":4148,"depth":3570,"text":4149},{"id":4159,"depth":3570,"text":4160},{"id":4200,"depth":3570,"text":4201},{"id":4228,"depth":3570,"text":4229,"children":4282},[4283,4284,4285,4286],{"id":4232,"depth":3850,"text":4233},{"id":4239,"depth":3850,"text":4240},{"id":4252,"depth":3850,"text":4253},{"id":4259,"depth":3850,"text":4260},"Troubleshooting","Fix Docker Compose errors Bind for 0.0.0.0:8000 failed port is already allocated and address already in use for Django, Postgres, and Redis: find the process or container holding the port, remove orphans, and stop publishing ports you do not need.","md","TOFU","informational","docker port is already allocated",{},true,[4210,4217,4296,4224],"\u002Fdeploy\u002Fdeploy-django-docker-compose-production","fix",{"title":1643,"description":4288},[12,152,13],"fix-docker-port-already-allocated",[12,152,1670],[152],"2P2QsyAv4QVtdkNto6Baci-oa06HJ0tGUiIAduRO1k8",[4305,4312,4321,4331,4337,4343,4350,4356,4361,4368,4374,4381,4387,4394,4400,4405,4411,4417,4423,4429,4436,4443,4448,4453,4460,4466,4472,4477,4483,4488,4494,4500,4505,4510,4515,4520,4525,4531,4537,4542,4547,4552,4557,4562,4567,4572,4577,4582,4589,4596,4601,4606,4611,4616,4623,4628,4634,4639,4644,4649,4654,4659,4664,4669,4674,4679,4685,4690,4695,4700,4705,4710,4715,4720,4725,4730,4735,4740,4745,4751,4756,4761,4767,4772,4777,4783,4788,4793,4799,4804,4809,4814,4820,4825,4831,4836,4841,4846,4851,4857,4862,4867,4873,4878,4884,4889,4895,4900,4905,4910,4915,4920,4925,4930,4936,4941,4947,4954,4959,4964,4969,4975,4982,4987,4992,4997,5004,5009,5015,5021,5027,5032,5037,5042,5047,5052,5058,5064,5069,5074,5079,5084,5090,5096,5101,5107,5112,5117,5122,5127,5132,5137,5143,5149,5154,5160,5166,5173,5178,5184,5190,5195,5200,5205,5211,5216,5221,5227,5232,5237,5242,5247,5252,5257,5262,5267,5272,5278,5283,5288,5293,5298,5303,5308,5314,5319,5325,5330,5336,5341,5346,5352,5357,5362,5367,5372,5377,5383,5388,5393,5398,5403,5409,5414,5419,5424,5430,5435,5440,5447,5453,5458,5463,5468,5474,5480,5485,5490,5495,5500,5505,5511,5516,5521,5527,5532,5538,5543,5548,5554,5559,5564,5569,5574,5579,5584,5590,5595,5600,5608,5613,5618,5623,5628,5633,5638,5643,5650,5655,5660,5665,5670,5675,5680,5685,5691,5697,5702,5707,5712,5717,5722,5727,5732,5737,5742,5748,5754,5759,5764,5769,5774,5779,5784,5789,5794,5800,5805,5810,5815,5821,5827,5832,5838,5843,5848,5853,5858,5863,5868,5873,5878,5883,5888,5893,5898,5903,5909,5914,5920,5926,5931,5936,5941,5946,5951,5956,5961,5966,5971,5976,5981,5986,5991,5996,6001,6006,6011,6017,6022,6027,6032,6037,6042,6048,6054,6060,6065,6070,6075,6080,6085,6090,6095,6100,6105,6110,6115,6120,6125,6130,6135,6140,6145,6150,6155,6160,6165,6170,6176,6182,6187,6192,6197,6202,6208,6213,6218,6225,6231,6236,6241,6246,6251,6256,6261,6267,6272,6278,6283,6288,6293,6298,6303,6308,6313,6319,6324,6329,6334,6339,6344,6349,6354,6359,6364,6370,6375,6380,6385,6390,6395,6400,6405,6411,6417,6422,6427,6433,6438,6443,6448,6453,6458,6463,6468,6473,6479,6484,6489,6494,6499,6504,6510,6515,6520,6526,6531,6536,6541,6546,6552,6557,6562,6567,6572,6577,6582,6587,6592,6598,6603,6609,6614,6619,6624,6629,6635,6640,6645,6651,6655,6660,6665,6670,6675,6680,6685,6690,6695,6700,6705,6710,6715,6720,6725,6730,6735,6740,6745,6750,6755,6760,6765,6770,6775,6780,6785,6790,6796,6802,6808,6813,6818,6823,6828,6833,6839,6844,6849,6854,6859,6864,6869,6874,6879,6884,6890,6895,6900,6905,6911,6916,6921,6926,6932,6937,6942,6947,6952,6958,6963,6968,6973,6978,6983,6988,6993,6998,7003,7008,7013,7018,7023,7028,7033,7038,7043,7048,7053,7059,7064,7069,7074,7079,7084,7089,7094,7099,7104,7109,7114,7119,7124,7130,7135,7140,7146,7151,7156,7161,7166,7171,7176,7181,7186,7191,7196,7201,7206,7211,7217,7222,7227,7232,7238,7243,7248,7253,7258,7263,7268,7274,7279,7284,7290,7295,7300,7306,7311,7316,7321,7326,7331,7336,7341,7346,7352,7357,7362,7367,7372,7377,7382,7388,7393,7398,7404,7409,7414,7419,7424,7429,7434,7439,7444,7449,7454,7459,7464,7469,7474,7479,7484,7490,7495,7500,7505,7510,7515,7520,7525,7530,7535,7540,7545,7550,7555,7560,7565,7571,7576,7581,7586,7591,7596,7602,7607,7612,7617,7623,7628,7634,7639,7644,7649,7654,7659,7665,7670,7675,7680,7685,7690,7695,7700,7705,7710,7715,7720,7725,7730,7735,7740],{"path":15,"title":16,"description":4306,"category":4307,"tags":4308,"section":7,"role":18,"priority":17,"type":9,"intent":4291,"difficulty":18,"stack":4309,"topics":4310},"Add PostgreSQL indexes to large tables in a live Django app without blocking writes: AddIndexConcurrently in non-atomic migrations, handling failed concurrent builds, finding missing indexes, and removing unused ones safely.","Operations",[12,13,1025],[12,13],[1025,4311],"databases",{"path":41,"title":42,"description":4313,"category":4307,"tags":4314,"section":7,"role":4316,"priority":43,"type":9,"intent":4291,"difficulty":44,"stack":4317,"topics":4318},"Add a swap file to a 1-2 GB Django server so pip installs, migrations, and traffic spikes do not trigger the OOM killer: sizing, fstab, swappiness, Docker and cloud caveats, and when swap is the wrong fix.",[12,46,4315],"memory","entry",[12,46],[4319,4320],"linux-servers","performance-scaling",{"path":48,"title":49,"description":4322,"category":4323,"tags":4324,"section":23,"role":4327,"priority":50,"type":9,"intent":4291,"difficulty":10,"stack":4328,"topics":4329},"Require two-factor authentication for the Django admin in production: django-otp with OTPAdminSite and TOTP devices, recovery codes, enrolling existing staff, passkeys with django-allauth MFA, and avoiding lockouts during rollout.","Deployment",[12,4325,4326],"admin","2fa","conversion",[12,52,53],[4330],"security-hardening",{"path":351,"title":352,"description":4332,"category":4307,"tags":4333,"section":7,"role":18,"priority":353,"type":9,"intent":4291,"difficulty":18,"stack":4335,"topics":4336},"Give a Django staging environment realistic data without exposing customers: copy production, anonymise personal fields with a management command or tooling, subset large tables, disable outbound email and payments, and automate refreshes.",[12,4334,355],"staging",[12,13,355],[4311,4330],{"path":82,"title":83,"description":4338,"category":4307,"tags":4339,"section":7,"role":4327,"priority":84,"type":9,"intent":4291,"difficulty":44,"stack":4340,"topics":4341},"Use django-dbbackup to back up the Django database and media to S3 or other storage on a schedule: configuration, compression and GPG encryption, cleanup, restores with dbrestore and mediarestore, and its limits compared with native tools.",[12,1161,13],[12,13,86],[4342],"backups-recovery",{"path":88,"title":89,"description":4344,"category":4307,"tags":4345,"section":7,"role":4327,"priority":90,"type":9,"intent":4346,"difficulty":10,"stack":4347,"topics":4348},"Keep Django and its dependencies current safely: Dependabot or Renovate, pip-audit in CI, grouped updates, test gates, and urgent security releases.",[12,59,786],"transactional",[12,92],[4349,4330],"dependencies",{"path":113,"title":114,"description":4351,"category":4307,"tags":4352,"section":7,"role":18,"priority":115,"type":9,"intent":4291,"difficulty":18,"stack":4354,"topics":4355},"Autoscale Django web pods on Kubernetes with the Horizontal Pod Autoscaler: accurate CPU requests, scaling on CPU or requests per second, min and max replicas, scale-down stabilisation, database connection limits, and testing under load.",[12,98,4353],"autoscaling",[12,98,117],[98,4320],{"path":131,"title":132,"description":4357,"category":4307,"tags":4358,"section":7,"role":4327,"priority":133,"type":9,"intent":4346,"difficulty":10,"stack":4359,"topics":4360},"A Django app is only recoverable if its PostgreSQL data is recoverable. In production, that means more than occasionally running pg_dump.",[12,13],[12,13],[4342,4311],{"path":119,"title":120,"description":4362,"category":4307,"tags":4363,"section":7,"role":4327,"priority":121,"type":9,"intent":4346,"difficulty":10,"stack":4365,"topics":4366},"Back up Django uploads reliably: MEDIA_ROOT with restic, S3 versioning and replication, consistency with database backups, retention, and restores.",[12,1161,4364],"storage",[12,86,46],[4342,4367],"media-storage",{"path":136,"title":137,"description":4369,"category":4323,"tags":4370,"section":23,"role":4316,"priority":138,"type":64,"intent":4371,"difficulty":44,"stack":4372,"topics":4373},"Choosing the best hosting for Django deployment is not about finding the cheapest server or the most popular cloud.",[12,140],"commercial",[12,140],[66,4319],{"path":142,"title":143,"description":4375,"category":4307,"tags":4376,"section":7,"role":18,"priority":144,"type":9,"intent":4346,"difficulty":18,"stack":4378,"topics":4379},"Run blue-green deployments for Django with Nginx: two release environments, smoke tests, instant traffic switching, migration rules, and fast rollback.",[12,4377,39],"deployment",[12,39],[4380],"release-safety",{"path":154,"title":155,"description":4382,"category":4323,"tags":4383,"section":23,"role":18,"priority":156,"type":9,"intent":4291,"difficulty":18,"stack":4385,"topics":4386},"Build Django images for both amd64 and arm64 (Graviton, Ampere, Apple Silicon) with docker buildx: QEMU versus native runners, wheels, caching in GitHub Actions, and verifying manifests.",[12,152,4384,786],"arm64",[12,152,158,92],[152,786],{"path":165,"title":166,"description":4388,"category":4323,"tags":4389,"section":23,"role":4316,"priority":167,"type":9,"intent":4291,"difficulty":44,"stack":4392,"topics":4393},"Build a minified Tailwind CSS file for Django releases: scanning templates and Python code, the standalone CLI without Node, Docker build stages, collectstatic hashing, and missing-class bugs.",[12,169,4390,4391],"css","static-files",[12,169,170],[4391],{"path":185,"title":186,"description":4395,"category":4307,"tags":4396,"section":7,"role":18,"priority":187,"type":9,"intent":4291,"difficulty":18,"stack":4397,"topics":4398},"Cache Django HTML at Cloudflare’s edge safely: Cache Rules for anonymous pages, bypassing cache when session or CSRF cookies exist, respecting origin Cache-Control, purging on deploy or content change, and avoiding cached private pages.",[12,189,190],[12,189,190],[4320,4399],"nginx-proxies",{"path":197,"title":198,"description":4401,"category":4307,"tags":4402,"section":7,"role":18,"priority":199,"type":9,"intent":4291,"difficulty":18,"stack":4403,"topics":4404},"Release Django changes to a small share of traffic first: run stable and canary versions side by side, split traffic in Nginx or a load balancer, compare errors and latency per version, and promote or roll back.",[12,4377,39],[12,39,72],[4380],{"path":202,"title":203,"description":4406,"category":4323,"tags":4407,"section":23,"role":4316,"priority":204,"type":64,"intent":4371,"difficulty":10,"stack":4409,"topics":4410},"Compare Celery alternatives for Django background jobs: Django’s built-in tasks framework, django-rq, Dramatiq, Huey, django-q2, and database-backed queues, by setup effort, brokers, scheduling, retries, monitoring, and scale.",[12,27,4408],"background-jobs",[12,27,105],[27],{"path":2416,"title":2417,"description":4412,"category":4307,"tags":4413,"section":7,"role":18,"priority":2418,"type":9,"intent":4291,"difficulty":10,"stack":4414,"topics":4415},"Expose Celery metrics to Prometheus for a Django app: run celery-exporter for task counts, failures, runtimes, and queue lengths, enable task events, build Grafana panels, and alert on growing queues, rising failures, and missing workers.",[12,27,1051],[12,27,1051],[27,4416],"monitoring-logging",{"path":2680,"title":2681,"description":4418,"category":4307,"tags":4419,"section":7,"role":18,"priority":2682,"type":9,"intent":4291,"difficulty":10,"stack":4421,"topics":4422},"Configure Celery retries for Django tasks: autoretry_for with retry_backoff and jitter, manual self.retry with countdown, max_retries and retry_backoff_max, which exceptions to retry, idempotency, and dead-letter handling for tasks that keep failing.",[12,27,4420],"reliability",[12,27],[27],{"path":2611,"title":2612,"description":4424,"category":4307,"tags":4425,"section":7,"role":18,"priority":2613,"type":9,"intent":4291,"difficulty":18,"stack":4427,"topics":4428},"Control how fast Celery tasks run in a Django app: per-worker rate_limit on tasks, why it is not global, global limits with a Redis token bucket or dedicated queues and concurrency, handling third-party API 429 responses, and protecting the database from task floods.",[12,27,4426],"rate-limiting",[12,27,105],[27],{"path":239,"title":240,"description":4430,"category":4323,"tags":4431,"section":23,"role":4316,"priority":241,"type":9,"intent":4291,"difficulty":44,"stack":4434,"topics":4435},"Ship Django translations reliably: run compilemessages in CI or a Docker build stage with gettext, ignore virtualenvs, validate .po files, restart workers, and verify every language in production.",[12,4432,4433,4377],"i18n","translations",[12,243,152],[4391,786],{"path":307,"title":308,"description":4437,"category":4307,"tags":4438,"section":7,"role":4440,"priority":247,"type":9,"intent":4291,"difficulty":18,"stack":4441,"topics":4442},"Add a Content Security Policy to Django: Django 6 built-in CSP settings or django-csp, nonces for inline scripts, report-only rollout, collecting violation reports, and handling third-party scripts.",[12,59,4439],"csp","authority",[12,39],[4330],{"path":2886,"title":2887,"description":4444,"category":4323,"tags":4445,"section":23,"role":4327,"priority":2888,"type":9,"intent":4371,"difficulty":10,"stack":4446,"topics":4447},"Use django-anymail to send Django email through an email API such as SendGrid, Postmark, Mailgun, Brevo, or Amazon SES: configure the backend, verify the sending domain, handle tracking webhooks and bounces, and test without sending.",[12,249,2890],[12,2890,249],[249],{"path":245,"title":246,"description":4449,"category":4323,"tags":4450,"section":23,"role":4327,"priority":247,"type":9,"intent":4346,"difficulty":44,"stack":4451,"topics":4452},"Send Django email reliably in production: SMTP TLS settings, sender addresses, SPF, DKIM and DMARC, timeouts, background sending, and tests.",[12,249,1512],[12,249],[249],{"path":251,"title":252,"description":4454,"category":4323,"tags":4455,"section":23,"role":4316,"priority":253,"type":64,"intent":4291,"difficulty":44,"stack":4457,"topics":4458},"Read Django settings from environment variables safely: typed parsing, fail-fast secrets, systemd and Docker env files, and verification.",[12,4456,59],"configuration",[12],[4459],"settings-secrets",{"path":286,"title":287,"description":4461,"category":4323,"tags":4462,"section":23,"role":4327,"priority":288,"type":9,"intent":4291,"difficulty":10,"stack":4463,"topics":4464},"Configure Memcached as Django’s cache in production: choose PyMemcacheCache, size memory and item limits, run several nodes with consistent hashing, secure the port, handle failures gracefully, and know what not to store there.",[12,290,190],[12,290,291],[4465],"redis-caching",{"path":475,"title":476,"description":4467,"category":4323,"tags":4468,"section":23,"role":18,"priority":477,"type":9,"intent":4291,"difficulty":18,"stack":4470,"topics":4471},"Use the official django-mongodb-backend in production: connect to MongoDB Atlas or a replica set, set ObjectId primary keys, handle migrations and contrib apps, configure indexes, transactions, and connection pooling, and know its current limitations.",[12,479,4469],"database",[12,479,480],[4311],{"path":274,"title":275,"description":4473,"category":4323,"tags":4474,"section":23,"role":4327,"priority":276,"type":9,"intent":4346,"difficulty":10,"stack":4475,"topics":4476},"Run Django on MySQL or MariaDB in production: mysqlclient, utf8mb4, strict SQL mode, time zone tables, connection timeouts, TLS, and backups.",[12,278,1447],[12,278],[4311],{"path":262,"title":263,"description":4478,"category":4307,"tags":4479,"section":7,"role":4440,"priority":264,"type":9,"intent":4291,"difficulty":10,"stack":4481,"topics":4482},"Choose and tune Django's session backend for production: database, cached_db, cache, or signed cookies; cookie security flags; expiry; write frequency; and cleaning up expired sessions.",[12,4480,59],"sessions",[12,105,13],[4459,4465],{"path":2914,"title":2915,"description":4484,"category":4323,"tags":4485,"section":23,"role":4327,"priority":2916,"type":9,"intent":4291,"difficulty":10,"stack":4486,"topics":4487},"Use one compose.yaml for a Django stack with compose.override.yaml for development and compose.prod.yaml for production: bind mounts and runserver locally, built images, restart policies, and no exposed database ports in production.",[12,1670,4456],[12,152,2918],[152],{"path":3322,"title":3323,"description":4489,"category":4323,"tags":4490,"section":23,"role":4327,"priority":3324,"type":9,"intent":4291,"difficulty":10,"stack":4491,"topics":4492},"Configure Gunicorn for Django with a gunicorn.conf.py file: bind, workers and threads, timeouts, max_requests with jitter, logging to stdout, forwarded headers, preload trade-offs, and server hooks for database connections.",[12,72,4456],[12,72,272],[4493],"app-servers",{"path":280,"title":281,"description":4495,"category":4323,"tags":4496,"section":23,"role":4327,"priority":282,"type":9,"intent":4346,"difficulty":44,"stack":4497,"topics":4498},"A Django app running over plain HTTP is not safe for production. Login sessions, admin access, CSRF tokens, API traffic, and password resets can all be exposed in transit if TLS...",[12,39,284],[12,39,284],[4499],"https-dns",{"path":328,"title":329,"description":4501,"category":4323,"tags":4502,"section":23,"role":4327,"priority":162,"type":9,"intent":4346,"difficulty":10,"stack":4503,"topics":4504},"Moving a Django app from a local database or self-managed PostgreSQL server to a managed PostgreSQL service sounds simple: update the host, username, and password, then deploy.",[12,13,140],[12,13,140],[4311],{"path":2224,"title":2225,"description":4506,"category":4323,"tags":4507,"section":23,"role":4327,"priority":1065,"type":9,"intent":4346,"difficulty":10,"stack":4508,"topics":4509},"A production Django stack should not expose Gunicorn or Uvicorn directly to the internet.",[12,39],[12,39],[4399],{"path":302,"title":303,"description":4511,"category":4323,"tags":4512,"section":23,"role":4327,"priority":304,"type":9,"intent":4346,"difficulty":10,"stack":4513,"topics":4514},"Running background jobs in Django production is not just a matter of installing Celery and pointing it at Redis.",[12,27,105],[12,27,105],[27,4465],{"path":297,"title":298,"description":4516,"category":4307,"tags":4517,"section":7,"role":18,"priority":299,"type":9,"intent":4291,"difficulty":10,"stack":4518,"topics":4519},"Decide which Redis data must survive restarts in a Django stack: AOF versus RDB for Celery queues and sessions, no persistence for caches, fork memory, Docker volumes, and verifying recovery.",[12,105,27],[12,105,27],[4465,27],{"path":2172,"title":2173,"description":4521,"category":4323,"tags":4522,"section":23,"role":18,"priority":2174,"type":9,"intent":4291,"difficulty":10,"stack":4523,"topics":4524},"Issue a Let’s Encrypt wildcard certificate for *.example.com to serve Django on many subdomains: DNS-01 challenges with certbot DNS plugins or acme.sh, automatic renewal with provider API tokens, Nginx configuration, and Django host settings.",[12,1155,284],[12,284,39],[4499],{"path":317,"title":318,"description":4526,"category":4323,"tags":4527,"section":23,"role":18,"priority":319,"type":9,"intent":4291,"difficulty":18,"stack":4529,"topics":4530},"Connect Django to Amazon RDS PostgreSQL or Aurora with IAM database authentication instead of a static password: grant rds_iam, create an rds-db:connect policy, generate auth tokens in a custom database backend, and require TLS.",[12,79,4528],"rds",[12,79,13],[79,4311],{"path":322,"title":323,"description":4532,"category":4323,"tags":4533,"section":23,"role":4327,"priority":324,"type":9,"intent":4291,"difficulty":10,"stack":4535,"topics":4536},"Connect Django to Cloud SQL for PostgreSQL securely: use the Cloud SQL Auth Proxy or Unix sockets on Cloud Run, private IP inside a VPC, IAM database authentication, connection limits, and running migrations against Cloud SQL.",[12,326,4534],"cloud-sql",[12,326,13],[4311],{"path":332,"title":333,"description":4538,"category":4323,"tags":4539,"section":23,"role":4327,"priority":334,"type":9,"intent":4291,"difficulty":10,"stack":4540,"topics":4541},"Use Neon serverless PostgreSQL with Django: pooled versus direct connection strings, cold starts after scale-to-zero, transaction-mode pooling settings, branches for preview environments, and running migrations safely.",[12,336,13],[12,336,13],[4311],{"path":2232,"title":2233,"description":4543,"category":4323,"tags":4544,"section":23,"role":4327,"priority":194,"type":9,"intent":4346,"difficulty":44,"stack":4545,"topics":4546},"Connecting Django to PostgreSQL in production is more than changing the DATABASES setting.",[12,13],[12,13],[4311],{"path":338,"title":339,"description":4548,"category":4323,"tags":4549,"section":23,"role":4327,"priority":340,"type":9,"intent":4291,"difficulty":10,"stack":4550,"topics":4551},"Use Supabase as the PostgreSQL database for a Django app: choose the direct connection or the Supavisor pooler, handle transaction-mode pooling with server-side cursors off, require SSL, keep Row Level Security from blocking Django, and run migrations.",[12,342,13],[12,342,13],[4311],{"path":357,"title":358,"description":4553,"category":4323,"tags":4554,"section":23,"role":4316,"priority":359,"type":9,"intent":4291,"difficulty":44,"stack":4555,"topics":4556},"Create the first Django admin user in production non-interactively: createsuperuser --noinput with DJANGO_SUPERUSER_ environment variables, one-off containers and Jobs, PaaS consoles, an idempotent management command, and securing the account afterwards.",[12,4325,4377],[12,152,66],[4459,152],{"path":368,"title":369,"description":4558,"category":4323,"tags":4559,"section":23,"role":18,"priority":370,"type":9,"intent":4371,"difficulty":18,"stack":4560,"topics":4561},"Let SaaS customers point their own domains at a multi-tenant Django app with automatic HTTPS: Caddy on-demand TLS with an ask endpoint in Django, domain verification, tenant lookup by Host, and protecting against abuse and rate limits.",[12,372,373],[12,372,373],[4499,4399],{"path":207,"title":208,"description":4563,"category":4287,"tags":4564,"section":180,"role":4297,"priority":209,"type":182,"intent":4291,"difficulty":10,"stack":4565,"topics":4566},"A common production failure is that the Django web app is healthy, but Celery tasks stop running.",[12,27,105],[12,27,105],[27],{"path":900,"title":901,"description":4568,"category":4287,"tags":4569,"section":180,"role":4297,"priority":902,"type":182,"intent":4291,"difficulty":10,"stack":4570,"topics":4571},"A 502 Bad Gateway in a Django deployment usually means your reverse proxy is reachable, but it cannot get a valid response from the upstream app server.",[12,39,72],[12,39,72],[4399,4493],{"path":107,"title":108,"description":4573,"category":4323,"tags":4574,"section":23,"role":18,"priority":109,"type":9,"intent":4291,"difficulty":18,"stack":4575,"topics":4576},"Scale Celery workers on Kubernetes by queue length with KEDA: install KEDA, define a ScaledObject with the Redis or RabbitMQ scaler, scale to zero for batch queues, and shut workers down gracefully so tasks are not lost.",[12,27,98],[27,98,111],[27,98],{"path":727,"title":728,"description":4578,"category":4323,"tags":4579,"section":23,"role":4327,"priority":729,"type":9,"intent":4346,"difficulty":10,"stack":4580,"topics":4581},"Deploy Django on Apache with mod_wsgi daemon mode, a matching virtualenv, static file aliases, secret loading, HTTPS, and code reloads without restarting Apache.",[12,472,473],[12,472],[4493,4399],{"path":869,"title":870,"description":4583,"category":4323,"tags":4584,"section":23,"role":4327,"priority":871,"type":9,"intent":4291,"difficulty":10,"stack":4586,"topics":4587},"Deploy a Django REST or Ninja API with a separate Next.js frontend: same-domain routing versus subdomains, CORS and CSRF for cookie auth, server-side fetches from Next.js to Django, environment URLs, and where each part should be hosted.",[12,873,4585],"api",[12,873,260],[4588],"apis",{"path":68,"title":69,"description":4590,"category":4323,"tags":4591,"section":23,"role":4327,"priority":70,"type":9,"intent":4291,"difficulty":10,"stack":4593,"topics":4594},"Deploy Django with timestamped release directories and an atomic current symlink: build each release in isolation, share media and env files, switch with ln -sfn, reload Gunicorn gracefully, and roll back instantly to the previous release.",[12,4377,4592],"rollback",[12,72,73],[4380,4595],"automation-iac",{"path":541,"title":542,"description":4597,"category":4323,"tags":4598,"section":23,"role":4327,"priority":543,"type":9,"intent":4346,"difficulty":18,"stack":4599,"topics":4600},"Deploy Django on Azure Kubernetes Service: push images to Azure Container Registry, connect to Azure Database for PostgreSQL with workload identity and Key Vault secrets, expose it through Application Gateway or an ingress, and run migrations as Jobs.",[12,98,424],[12,98,424],[98],{"path":2731,"title":2732,"description":4602,"category":4323,"tags":4603,"section":23,"role":18,"priority":2733,"type":9,"intent":4291,"difficulty":10,"stack":4604,"topics":4605},"Configure Django correctly behind an AWS Application Load Balancer: HTTPS listeners with ACM, X-Forwarded-Proto and client IPs, ALLOWED_HOSTS for health checks, idle and keepalive timeouts, stickiness, and deregistration delay for deploys.",[12,79,1001],[12,79,72],[79,4399],{"path":398,"title":399,"description":4607,"category":4323,"tags":4608,"section":23,"role":4327,"priority":400,"type":9,"intent":4346,"difficulty":10,"stack":4609,"topics":4610},"Put Django behind Cloudflare correctly: Full (strict) TLS, origin lockdown, real client IPs, HTTPS detection, cache rules, and request limits.",[12,189,39],[12,189,39],[4399,4499],{"path":2711,"title":2712,"description":4612,"category":4323,"tags":4613,"section":23,"role":4327,"priority":2713,"type":9,"intent":4291,"difficulty":10,"stack":4614,"topics":4615},"Use RabbitMQ as the Celery broker for Django in production: install and secure RabbitMQ, create a vhost and user, configure the broker URL and quorum queues, set prefetch and acks, and monitor queues with the management plugin.",[12,27,2715],[12,27,2715],[27],{"path":408,"title":409,"description":4617,"category":4323,"tags":4618,"section":23,"role":18,"priority":90,"type":9,"intent":4346,"difficulty":18,"stack":4620,"topics":4621},"Deploy Django Channels in production with Daphne, a Redis channel layer, systemd, and Nginx WebSocket proxying, while Gunicorn keeps serving regular HTTP traffic.",[12,411,4619],"websockets",[12,411,105,39],[4622],"asgi-websockets",{"path":147,"title":148,"description":4624,"category":4323,"tags":4625,"section":23,"role":18,"priority":149,"type":9,"intent":4291,"difficulty":10,"stack":4626,"topics":4627},"Build production Django container images without a Dockerfile using Cloud Native Buildpacks and the pack CLI: choose a builder, configure Python version and start command with a Procfile, run collectstatic, rebase images for OS patches, and use it in CI.",[12,151,152],[12,151,152],[152,786],{"path":894,"title":895,"description":4629,"category":4323,"tags":4630,"section":23,"role":4327,"priority":896,"type":9,"intent":4346,"difficulty":10,"stack":4632,"topics":4633},"Deploy a django CMS site to production: configure settings for CMS and filer, PostgreSQL, media on object storage, static files, caching of rendered pages and menus, search engine friendly URLs, and a release process for template and plugin changes.",[12,898,4631],"cms",[12,898,13],[152,4319],{"path":552,"title":553,"description":4635,"category":4323,"tags":4636,"section":23,"role":4327,"priority":554,"type":9,"intent":4346,"difficulty":10,"stack":4637,"topics":4638},"Deploy a Django app on DigitalOcean Kubernetes: build and push to DigitalOcean Container Registry, connect to Managed PostgreSQL and Valkey, expose it with a load balancer and HTTPS, run migrations as a Job, and store media in Spaces.",[12,98,550],[12,98,550],[98],{"path":557,"title":558,"description":4640,"category":4323,"tags":4641,"section":23,"role":4327,"priority":559,"type":9,"intent":4346,"difficulty":44,"stack":4642,"topics":4643},"Deploy Django on Divio, a cloud platform built around Django and Docker: structure the project for Divio’s Dockerfile, read DEFAULT_DATABASE_DSN and storage DSNs, configure release commands for migrations, and promote changes from test to live environments.",[12,561,66],[12,561,152],[66],{"path":759,"title":760,"description":4645,"category":4323,"tags":4646,"section":23,"role":4327,"priority":761,"type":9,"intent":4346,"difficulty":10,"stack":4647,"topics":4648},"Many Docker Compose examples for Django are built for local development, not production.",[12,152,13,39],[12,152,13,39],[152],{"path":413,"title":414,"description":4650,"category":4323,"tags":4651,"section":23,"role":4327,"priority":415,"type":9,"intent":4346,"difficulty":10,"stack":4652,"topics":4653},"Build Django images in GitHub Actions, push them to GHCR with immutable tags, pull them on servers with read-only credentials, deploy by tag or digest, and clean up old versions.",[12,152,92,786],[12,152,92,417],[786,152],{"path":432,"title":433,"description":4655,"category":4323,"tags":4656,"section":23,"role":4327,"priority":434,"type":9,"intent":4346,"difficulty":44,"stack":4657,"topics":4658},"Deploy Django with Dokploy, an open-source self-hosted PaaS: install it on a VPS, create an application from Git with a Dockerfile or Nixpacks, add PostgreSQL and Redis, configure domains with automatic HTTPS, run migrations, and schedule database backups.",[12,436,152],[12,436,152],[66,152],{"path":2798,"title":2799,"description":4660,"category":4323,"tags":4661,"section":23,"role":18,"priority":2800,"type":9,"intent":4291,"difficulty":10,"stack":4662,"topics":4663},"Run Dramatiq background workers for Django in production with django-dramatiq: choose Redis or RabbitMQ, configure middleware for retries, time limits, and results, run workers under systemd or containers, schedule periodic jobs, and shut down safely.",[12,2802,4408],[12,2802,105],[27],{"path":438,"title":439,"description":4665,"category":4323,"tags":4666,"section":23,"role":4327,"priority":440,"type":9,"intent":4346,"difficulty":44,"stack":4667,"topics":4668},"Deploy Django with Easypanel, a Docker-based server control panel: create an app service from GitHub with a Dockerfile or buildpacks, add Postgres and Redis services, set environment variables, mount volumes for media, and enable HTTPS on a custom domain.",[12,442,152],[12,442,152],[66,152],{"path":569,"title":570,"description":4670,"category":4323,"tags":4671,"section":23,"role":18,"priority":571,"type":9,"intent":4291,"difficulty":18,"stack":4672,"topics":4673},"Deploy Django on FreeBSD 14: install Python, PostgreSQL, and Nginx from packages, run Gunicorn as an rc.d service with daemon(8), configure pf firewall rules, get certificates with acme.sh or certbot, and optionally isolate the app in a jail.",[12,573,39],[12,573,13],[4319],{"path":482,"title":483,"description":4675,"category":4323,"tags":4676,"section":23,"role":4316,"priority":484,"type":9,"intent":4291,"difficulty":44,"stack":4677,"topics":4678},"Let a Django server pull code from a private GitHub, GitLab, or Bitbucket repository with read-only deploy keys: SSH config aliases, known_hosts, private dependencies, and alternatives.",[12,466,486,59],[12,466,486],[4595,4319],{"path":585,"title":586,"description":4680,"category":4323,"tags":4681,"section":23,"role":4327,"priority":587,"type":9,"intent":4346,"difficulty":10,"stack":4683,"topics":4684},"Deploy Django on a Google Compute Engine VM: create an e2 instance with a service account, install Gunicorn and Nginx, connect to Cloud SQL through the Auth Proxy, store media in Cloud Storage, open firewall rules, and add HTTPS.",[12,326,4682],"compute-engine",[12,326,39],[4319],{"path":875,"title":876,"description":4686,"category":4323,"tags":4687,"section":23,"role":18,"priority":877,"type":9,"intent":4291,"difficulty":18,"stack":4688,"topics":4689},"Prepare a Django GraphQL API (Strawberry or Graphene) for production: disable the IDE and introspection, limit depth and aliases, mask errors, batch queries, and log operations.",[12,879,4585,59],[12,879,880,72],[4588],{"path":800,"title":801,"description":4691,"category":4323,"tags":4692,"section":23,"role":4327,"priority":181,"type":9,"intent":4346,"difficulty":10,"stack":4693,"topics":4694},"Moving a Django app from local development to production usually fails on the same points: process management, reverse proxy configuration, static files, secrets, TLS, and safe...",[12,72,39,635],[12,72,39,635],[4319,4493,4399],{"path":595,"title":596,"description":4696,"category":4323,"tags":4697,"section":23,"role":18,"priority":597,"type":9,"intent":4291,"difficulty":18,"stack":4698,"topics":4699},"Deploy Django on HashiCorp Nomad: write a job with web, worker, and migration tasks, pull Docker images, inject secrets from Vault or Nomad Variables with templates, register services, route traffic through Traefik or Consul, and roll out safely.",[12,599,152],[12,599,152],[152,4595],{"path":2816,"title":2817,"description":4701,"category":4323,"tags":4702,"section":23,"role":18,"priority":2818,"type":9,"intent":4291,"difficulty":44,"stack":4703,"topics":4704},"Run Huey for Django background tasks and periodic jobs in production: configure the Redis or SQLite storage, start the consumer with workers and the built-in scheduler, avoid duplicate periodic tasks, handle database connections, and supervise it with systemd.",[12,2820,4408],[12,2820,105],[27],{"path":607,"title":608,"description":4706,"category":4323,"tags":4707,"section":23,"role":4327,"priority":609,"type":9,"intent":4346,"difficulty":44,"stack":4708,"topics":4709},"Deploy a Django app on Koyeb from GitHub or a Docker image: configure Gunicorn and the PORT, add a PostgreSQL database, set secrets, health checks, and regions, run migrations safely, serve static files with WhiteNoise, and attach a custom domain.",[12,611,66],[12,611,13],[66],{"path":468,"title":469,"description":4711,"category":4323,"tags":4712,"section":23,"role":18,"priority":470,"type":9,"intent":4291,"difficulty":10,"stack":4713,"topics":4714},"Run Django in production with mod_wsgi-express: install mod_wsgi with pip into the virtualenv, generate a self-contained Apache configuration, serve static files, run it under systemd, and put it behind Nginx or use it directly on port 80.",[12,472,473],[12,472,473],[4493],{"path":852,"title":853,"description":4716,"category":4323,"tags":4717,"section":23,"role":18,"priority":854,"type":9,"intent":4291,"difficulty":18,"stack":4718,"topics":4719},"Deploy a schema-per-tenant Django SaaS with django-tenants: wildcard DNS and TLS, Nginx for subdomains, migrate_schemas in releases, tenant-aware caching, media, Celery, and pooling.",[12,1044,13,373],[12,13,39,27],[4311,4399],{"path":403,"title":404,"description":4721,"category":4323,"tags":4722,"section":23,"role":18,"priority":405,"type":9,"intent":4291,"difficulty":44,"stack":4723,"topics":4724},"Put a Docker-based Django app behind Nginx Proxy Manager: create a proxy host with Let’s Encrypt, connect containers on a shared network, forward the right headers, serve static files, allow large uploads, and keep the admin UI private.",[12,39,152],[12,39,152],[4399,152],{"path":882,"title":883,"description":4726,"category":4323,"tags":4727,"section":23,"role":4327,"priority":884,"type":9,"intent":4291,"difficulty":10,"stack":4728,"topics":4729},"Take a Django Ninja API to production: choose WSGI or ASGI for sync and async endpoints, lock down the interactive docs, configure authentication, CORS, throttling, and error handling, and validate schemas in CI.",[12,886,4585],[12,886,887],[4588],{"path":618,"title":619,"description":4731,"category":4323,"tags":4732,"section":23,"role":18,"priority":620,"type":9,"intent":4291,"difficulty":18,"stack":4733,"topics":4734},"Deploy Django on NixOS: define Gunicorn, PostgreSQL, Redis, Nginx, and ACME certificates in configuration.nix, package the app with a Python environment, manage secrets with agenix or sops-nix, and roll back safely with generations.",[12,622,46],[12,622,39],[4319,4595],{"path":624,"title":625,"description":4736,"category":4323,"tags":4737,"section":23,"role":4327,"priority":626,"type":9,"intent":4346,"difficulty":10,"stack":4738,"topics":4739},"Deploy Django on Northflank: build from Git with a Dockerfile or buildpack, add PostgreSQL and Redis addons, share configuration with secret groups, run migrations as a job in a release flow, add Celery workers, and expose the app with a custom domain.",[12,628,66],[12,628,13],[66],{"path":520,"title":521,"description":4741,"category":4323,"tags":4742,"section":23,"role":4316,"priority":522,"type":9,"intent":4371,"difficulty":44,"stack":4743,"topics":4744},"Deploy Django on an Akamai Cloud (Linode) compute instance with a Cloud Firewall, Gunicorn, Nginx, managed PostgreSQL, Object Storage for media, and backups.",[12,524,39,13],[12,524,72,39,13],[4319],{"path":488,"title":489,"description":4746,"category":4323,"tags":4747,"section":23,"role":4316,"priority":490,"type":9,"intent":4371,"difficulty":10,"stack":4749,"topics":4750},"Deploy a containerised Django app on AWS App Runner: build an image in ECR, configure the port and health check, connect to RDS through a VPC connector, run migrations, serve static files, and know when ECS fits better.",[12,79,4748],"app-runner",[12,79,152],[79,66],{"path":493,"title":494,"description":4752,"category":4323,"tags":4753,"section":23,"role":4327,"priority":495,"type":9,"intent":4346,"difficulty":10,"stack":4754,"topics":4755},"To deploy Django on AWS EC2 reliably, you need more than python manage.py runserver.",[12,497,72,39],[12,497,72,39],[79,4319],{"path":499,"title":500,"description":4757,"category":4323,"tags":4758,"section":23,"role":18,"priority":501,"type":9,"intent":4346,"difficulty":18,"stack":4759,"topics":4760},"Run Django on AWS ECS Fargate with an ECR image, Secrets Manager credentials, an Application Load Balancer, one-off migration tasks, and safe rolling deploys.",[12,79,152],[12,79,152],[79,152],{"path":526,"title":527,"description":4762,"category":4323,"tags":4763,"section":23,"role":18,"priority":528,"type":9,"intent":4371,"difficulty":18,"stack":4765,"topics":4766},"Deploy Django on Amazon EKS: build images in ECR, expose the app through an ALB with the AWS Load Balancer Controller and ACM certificates, connect to RDS, grant AWS access with Pod Identity, sync secrets, and run migrations as Jobs.",[12,4764,79],"eks",[12,98,79],[98,79],{"path":504,"title":505,"description":4768,"category":4323,"tags":4769,"section":23,"role":4327,"priority":506,"type":9,"intent":4346,"difficulty":10,"stack":4770,"topics":4771},"Deploy Django to AWS Elastic Beanstalk with the EB CLI, Gunicorn, RDS PostgreSQL, leader-only migrations, static file mapping, and working health checks.",[12,79,13],[12,79,13],[79,66],{"path":709,"title":710,"description":4773,"category":4323,"tags":4774,"section":23,"role":18,"priority":711,"type":9,"intent":4291,"difficulty":18,"stack":4775,"topics":4776},"Deploy Django to AWS Lambda with Zappa or a container image and the Lambda Web Adapter: package size limits, static files on S3, database connections with RDS Proxy, cold starts, and when serverless Django is a poor fit.",[12,79,2400],[12,713,714],[79,66],{"path":509,"title":510,"description":4778,"category":4323,"tags":4779,"section":23,"role":4316,"priority":511,"type":9,"intent":4371,"difficulty":44,"stack":4781,"topics":4782},"Deploy Django on an AWS Lightsail instance with a static IP, firewall rules, Gunicorn, Nginx, HTTPS, and an optional Lightsail managed PostgreSQL database.",[12,79,4780,39],"lightsail",[12,79,72,39,13],[79,4319],{"path":531,"title":532,"description":4784,"category":4323,"tags":4785,"section":23,"role":4327,"priority":533,"type":9,"intent":4346,"difficulty":10,"stack":4786,"topics":4787},"Deploy Django to Azure App Service on Linux with Oryx builds, Gunicorn startup commands, Azure Database for PostgreSQL, and secure app settings.",[12,424,13],[12,424,13],[66],{"path":536,"title":537,"description":4789,"category":4323,"tags":4790,"section":23,"role":4316,"priority":538,"type":9,"intent":4371,"difficulty":10,"stack":4791,"topics":4792},"Deploy a containerized Django app to Azure Container Apps with Azure Container Registry, PostgreSQL Flexible Server, secrets, a migration job, custom domains, and revisions.",[12,424,152,13],[12,424,152,13],[66,152],{"path":697,"title":698,"description":4794,"category":4323,"tags":4795,"section":23,"role":4316,"priority":699,"type":9,"intent":4371,"difficulty":44,"stack":4797,"topics":4798},"Deploy Django on cPanel shared hosting with Setup Python App and Phusion Passenger: create the app and virtualenv, write passenger_wsgi.py, use MySQL or PostgreSQL, serve static files from public_html, and know the hosting limits.",[12,701,4796],"shared-hosting",[12,701,702],[66,4493],{"path":2246,"title":2247,"description":4800,"category":4323,"tags":4801,"section":23,"role":4327,"priority":917,"type":9,"intent":4346,"difficulty":10,"stack":4802,"topics":4803},"If you want to deploy Django on a DigitalOcean Droplet, you need more than python manage.py runserver.",[12,550,72,39],[12,550,72,39],[4319],{"path":546,"title":547,"description":4805,"category":4323,"tags":4806,"section":23,"role":4316,"priority":548,"type":9,"intent":4371,"difficulty":44,"stack":4807,"topics":4808},"Deploy Django on DigitalOcean App Platform with an app spec, Gunicorn, managed PostgreSQL, bindable environment variables, a pre-deploy migration job, and WhiteNoise.",[12,550,66,13],[12,550,72,13],[66],{"path":563,"title":564,"description":4810,"category":4323,"tags":4811,"section":23,"role":4327,"priority":565,"type":9,"intent":4346,"difficulty":10,"stack":4812,"topics":4813},"A production-safe Fly.io Django deployment needs more than fly launch and fly deploy.",[12,567,13],[12,567,13],[66],{"path":575,"title":576,"description":4815,"category":4323,"tags":4816,"section":23,"role":4316,"priority":43,"type":9,"intent":4371,"difficulty":10,"stack":4818,"topics":4819},"Deploy Django to the Google App Engine standard environment with app.yaml, Gunicorn, Cloud SQL for PostgreSQL, Secret Manager, static handlers, and Cloud Storage media.",[12,326,4817,13],"app-engine",[12,326,72,13],[66],{"path":579,"title":580,"description":4821,"category":4323,"tags":4822,"section":23,"role":4327,"priority":581,"type":9,"intent":4346,"difficulty":10,"stack":4823,"topics":4824},"If you want to deploy Django on Google Cloud Run, the basic path is straightforward: build a container and run it. The production-safe part is where most deployments fail.",[12,583,152],[12,583,152],[66,152],{"path":590,"title":591,"description":4826,"category":4323,"tags":4827,"section":23,"role":18,"priority":592,"type":9,"intent":4371,"difficulty":18,"stack":4829,"topics":4830},"Deploy Django on GKE Autopilot: push images to Artifact Registry, connect to Cloud SQL with the Auth Proxy sidecar and Workload Identity, expose HTTPS with a Gateway or Ingress and managed certificates, and run migrations as a Job.",[12,4828,326],"gke",[12,98,326],[98],{"path":601,"title":602,"description":4832,"category":4323,"tags":4833,"section":23,"role":4327,"priority":603,"type":9,"intent":4346,"difficulty":44,"stack":4834,"topics":4835},"Deploy a Django app to Heroku with Gunicorn, Heroku Postgres, WhiteNoise, a release-phase migration, and production-safe settings.",[12,605,13],[12,605,13],[66],{"path":686,"title":687,"description":4837,"category":4323,"tags":4838,"section":23,"role":4327,"priority":121,"type":9,"intent":4346,"difficulty":10,"stack":4839,"topics":4840},"Provision a Hetzner Cloud server with the hcloud CLI, cloud firewall, and cloud-init, then run Django with Gunicorn, Nginx, PostgreSQL, and backups.",[12,3103,39],[12,72,39],[4319],{"path":690,"title":691,"description":4842,"category":4323,"tags":4843,"section":23,"role":18,"priority":692,"type":9,"intent":4291,"difficulty":18,"stack":4844,"topics":4845},"Run Django on a single-node k3s Kubernetes cluster: install k3s, use the bundled Traefik ingress with cert-manager for Let's Encrypt, keep PostgreSQL outside the cluster or back it up properly, and deploy with manifests or Helm.",[12,694,98],[12,694,695],[98,4319],{"path":613,"title":614,"description":4847,"category":4323,"tags":4848,"section":23,"role":18,"priority":615,"type":9,"intent":4346,"difficulty":18,"stack":4849,"topics":4850},"Deploy Django on Kubernetes with a Deployment, Service, Ingress, Secrets, readiness and liveness probes, and a migration Job that runs before each rollout.",[12,98,152],[12,98,152],[98],{"path":630,"title":631,"description":4852,"category":4323,"tags":4853,"section":23,"role":4316,"priority":632,"type":9,"intent":4371,"difficulty":10,"stack":4855,"topics":4856},"Deploy Django on Oracle Cloud Always Free resources: create an Ampere A1 Arm instance, open ports in both the security list and the instance iptables, install the stack on Ubuntu, and know the free tier's limits and reclaim rules.",[12,634,4854],"arm",[12,634,635],[4319],{"path":637,"title":638,"description":4858,"category":4323,"tags":4859,"section":23,"role":4327,"priority":639,"type":9,"intent":4346,"difficulty":44,"stack":4860,"topics":4861},"Deploy an existing Django project on PythonAnywhere with a virtualenv, a correct WSGI file, MySQL, static file mappings, environment variables, and forced HTTPS.",[12,641],[12,641],[66],{"path":2236,"title":2237,"description":4863,"category":4323,"tags":4864,"section":23,"role":4327,"priority":215,"type":9,"intent":4346,"difficulty":44,"stack":4865,"topics":4866},"If you want to deploy Django on Railway, the main challenge is not just getting a container to start.",[12,2239,13],[12,2239,13],[66],{"path":2767,"title":2768,"description":4868,"category":4323,"tags":4869,"section":23,"role":4316,"priority":2769,"type":9,"intent":4291,"difficulty":44,"stack":4871,"topics":4872},"Run a Django app reliably on a Raspberry Pi 4 or 5: use 64-bit Raspberry Pi OS on an SSD instead of an SD card, run Gunicorn and Nginx under systemd, expose it safely with Cloudflare Tunnel, and back up off the device.",[12,2771,4870],"self-hosting",[12,2771,39],[4319],{"path":2241,"title":2242,"description":4874,"category":4323,"tags":4875,"section":23,"role":4327,"priority":133,"type":9,"intent":4346,"difficulty":44,"stack":4876,"topics":4877},"It is easy to get a Django app running on Render, but it is also easy to ship an unsafe or incomplete production setup.",[12,2244,13],[12,2244,13],[66],{"path":649,"title":650,"description":4879,"category":4323,"tags":4880,"section":23,"role":18,"priority":651,"type":9,"intent":4291,"difficulty":10,"stack":4882,"topics":4883},"Deploy Django with Gunicorn and Nginx on Rocky Linux, AlmaLinux, or RHEL with SELinux enforcing: firewalld, file contexts, booleans, and reading AVC denials.",[12,653,4881,39],"selinux",[12,653,72,39],[4319,4330],{"path":667,"title":668,"description":4885,"category":4323,"tags":4886,"section":23,"role":4316,"priority":669,"type":9,"intent":4371,"difficulty":10,"stack":4887,"topics":4888},"Deploy a Django app on Vercel’s Python runtime: expose the WSGI app, collect static files at build time, use an external PostgreSQL such as Neon, and understand what serverless Django on Vercel cannot do.",[12,671,2400],[12,671,13],[66],{"path":673,"title":674,"description":4890,"category":4323,"tags":4891,"section":23,"role":4316,"priority":675,"type":9,"intent":4371,"difficulty":44,"stack":4893,"topics":4894},"Deploy a Django app on a Vultr cloud compute instance: choose a plan and region, lock down SSH and the Vultr firewall, install Python, PostgreSQL, Gunicorn, and Nginx, add HTTPS, and set up backups and snapshots.",[12,677,4892],"vps",[12,677,635],[4319],{"path":679,"title":680,"description":4896,"category":4323,"tags":4897,"section":23,"role":4316,"priority":681,"type":9,"intent":4291,"difficulty":10,"stack":4898,"topics":4899},"Deploy Django on Windows Server behind IIS: run Waitress through HttpPlatformHandler instead of the unmaintained wfastcgi, serve static files from IIS, run it under an app pool identity, and add HTTPS with an IIS binding.",[12,2765,683],[12,683,684],[4493],{"path":643,"title":644,"description":4901,"category":4323,"tags":4902,"section":23,"role":18,"priority":645,"type":9,"intent":4291,"difficulty":18,"stack":4903,"topics":4904},"Deploy Django on OpenShift: build with Source-to-Image or a Dockerfile, run as an arbitrary non-root UID, connect to PostgreSQL, expose the app with a Route and TLS edge termination, run migrations as a Job, and fix permission errors under restricted SCCs.",[12,647,98],[12,647,13],[98],{"path":2848,"title":2849,"description":4906,"category":4323,"tags":4907,"section":23,"role":18,"priority":2850,"type":9,"intent":4291,"difficulty":18,"stack":4908,"topics":4909},"Store and search embeddings with pgvector in a production Django app: enable the extension with a migration, use VectorField, build HNSW indexes without blocking writes, tune memory, batch embedding generation in Celery, and plan for index size.",[12,2852,13],[12,13,2852],[4311],{"path":450,"title":451,"description":4911,"category":4323,"tags":4912,"section":23,"role":4327,"priority":452,"type":9,"intent":4346,"difficulty":44,"stack":4913,"topics":4914},"Deploy a Django app with Portainer: define a Compose stack with web, worker, Postgres, and Redis, pull images from a private registry, set environment variables and secrets, enable Git-based redeploys or webhooks, and add a reverse proxy for HTTPS.",[12,454,152],[12,454,152],[152],{"path":2822,"title":2823,"description":4916,"category":4323,"tags":4917,"section":23,"role":18,"priority":2824,"type":9,"intent":4291,"difficulty":10,"stack":4918,"topics":4919},"Use Procrastinate, a PostgreSQL-based task queue, with Django in production: install the Django contrib app, define and defer tasks inside transactions, run workers with concurrency, schedule periodic tasks, use locks and queueing locks, and monitor jobs in the admin.",[12,2826,13],[12,2826,13],[27,4311],{"path":2792,"title":2793,"description":4921,"category":4323,"tags":4922,"section":23,"role":18,"priority":2794,"type":9,"intent":4291,"difficulty":44,"stack":4923,"topics":4924},"Run Django-Q2 in production: configure the ORM or Redis broker in Q_CLUSTER, start qcluster workers under systemd or containers, manage schedules in the admin, set timeouts and retries correctly, and avoid running duplicate clusters.",[12,2796,4408],[12,2796,13],[27],{"path":889,"title":890,"description":4926,"category":4323,"tags":4927,"section":23,"role":4327,"priority":891,"type":9,"intent":4346,"difficulty":10,"stack":4928,"topics":4929},"Prepare a Django REST Framework API for production: safe defaults, throttling, pagination, CORS, proxy headers, Gunicorn sizing, and API checks.",[12,260,4585],[12,260,72],[4588],{"path":2842,"title":2843,"description":4931,"category":4323,"tags":4932,"section":23,"role":4327,"priority":2844,"type":9,"intent":4291,"difficulty":10,"stack":4934,"topics":4935},"Run django-rq (Redis Queue) workers for Django in production: configure queues in settings, supervise rq workers with systemd, schedule jobs with rq-scheduler or cron, handle failed jobs, and monitor queues in the admin.",[12,4933,105],"django-rq",[12,2846,105],[27],{"path":655,"title":656,"description":4937,"category":4323,"tags":4938,"section":23,"role":4327,"priority":657,"type":9,"intent":4346,"difficulty":44,"stack":4939,"topics":4940},"Deploy Django on Scalingo, the European PaaS: prepare a Procfile with web and postdeploy commands, add the PostgreSQL addon, configure environment variables, static files, and workers, and scale containers while keeping data in EU regions.",[12,659,66],[12,659,13],[66],{"path":2206,"title":2207,"description":4942,"category":4323,"tags":4943,"section":23,"role":4327,"priority":2208,"type":9,"intent":4371,"difficulty":10,"stack":4945,"topics":4946},"Handle Stripe webhooks reliably in a production Django app: verify signatures with the raw body, exempt only the webhook view from CSRF, respond fast and process in Celery, make handlers idempotent with event IDs, and monitor failed deliveries.",[12,1093,4944],"webhooks",[12,1093,27],[4588,4330],{"path":2788,"title":2789,"description":4948,"category":4323,"tags":4949,"section":23,"role":18,"priority":1711,"type":9,"intent":4291,"difficulty":10,"stack":4952,"topics":4953},"Deploy background work with Django 6's django.tasks: choosing a production backend, enqueueing after commit, running database workers under systemd, scaling, retries, and monitoring.",[12,4950,798,4951],"background-tasks","workers",[12,13,798],[27],{"path":661,"title":662,"description":4955,"category":4323,"tags":4956,"section":23,"role":4327,"priority":663,"type":9,"intent":4346,"difficulty":10,"stack":4957,"topics":4958},"Deploy Django on Upsun, formerly Platform.sh: write the application, services, and routes configuration, run collectstatic in the build hook and migrate in the deploy hook, read service credentials from relationships, and use mounts and preview environments.",[12,665,66],[12,665,13],[66],{"path":387,"title":388,"description":4960,"category":4323,"tags":4961,"section":23,"role":4327,"priority":389,"type":9,"intent":4346,"difficulty":10,"stack":4962,"topics":4963},"If you want to deploy Django ASGI with Uvicorn and Nginx, python manage.py runserver is not a production option.",[12,391,39],[12,391,39],[4622,4493],{"path":2761,"title":2762,"description":4965,"category":4323,"tags":4966,"section":23,"role":18,"priority":2763,"type":9,"intent":4291,"difficulty":10,"stack":4967,"topics":4968},"Run Django on a Windows server with Waitress: install it in a virtualenv, serve the WSGI app on a port, run it as a Windows service with NSSM, put IIS or Caddy in front for HTTPS and static files, and tune threads and logging.",[12,2765,684],[12,2765,684],[4493],{"path":732,"title":733,"description":4970,"category":4323,"tags":4971,"section":23,"role":18,"priority":734,"type":9,"intent":4291,"difficulty":18,"stack":4973,"topics":4974},"Deploy Django to Kubernetes with Argo CD: a config repository, an Application with automated sync, PreSync migration hooks, CI-driven image tag updates, and rollback by git revert.",[12,98,4972,736],"gitops",[12,98,736,720],[98,786],{"path":514,"title":515,"description":4976,"category":4323,"tags":4977,"section":23,"role":18,"priority":516,"type":9,"intent":4291,"difficulty":18,"stack":4980,"topics":4981},"Deploy Django on AWS with the Cloud Development Kit in Python: an ApplicationLoadBalancedFargateService, RDS PostgreSQL, Secrets Manager, S3 media, and a migration task, with cdk diff and cdk deploy in CI.",[12,4978,4979],"aws-cdk","fargate",[12,79,518],[4595,79],{"path":419,"title":420,"description":4983,"category":4323,"tags":4984,"section":23,"role":4327,"priority":421,"type":9,"intent":4291,"difficulty":10,"stack":4985,"topics":4986},"Build an Azure Pipelines YAML pipeline for Django: test with a PostgreSQL service container, publish an image to Azure Container Registry, deploy to App Service or a VM through environments with approvals, and keep secrets in variable groups or Key Vault.",[12,423,786],[12,423,424],[786],{"path":738,"title":739,"description":4988,"category":4323,"tags":4989,"section":23,"role":4327,"priority":740,"type":9,"intent":4346,"difficulty":10,"stack":4990,"topics":4991},"Build a Bitbucket Pipelines CI\u002FCD workflow for Django: tests against a PostgreSQL service, cached dependencies, deployment environments, SSH deploys, and a manual production gate.",[12,786,742,4377],[12,742,13,486],[786],{"path":744,"title":745,"description":4993,"category":4323,"tags":4994,"section":23,"role":4327,"priority":746,"type":9,"intent":4346,"difficulty":10,"stack":4995,"topics":4996},"If you want to deploy Django with Caddy in production, the main challenge is not just putting a reverse proxy in front of the app.",[12,372,72],[12,372,72],[4399,4499],{"path":749,"title":750,"description":4998,"category":4323,"tags":4999,"section":23,"role":4316,"priority":751,"type":9,"intent":4371,"difficulty":44,"stack":5002,"topics":5003},"Deploy Django with CapRover: captain-definition, a Gunicorn Dockerfile, one-click PostgreSQL, container port and HTTPS settings, persistent media, and safe migrations.",[12,5000,152,5001],"caprover","self-hosted",[12,152,13],[66,152],{"path":426,"title":427,"description":5005,"category":4323,"tags":5006,"section":23,"role":4327,"priority":428,"type":9,"intent":4291,"difficulty":10,"stack":5007,"topics":5008},"Set up CircleCI for a Django project: a config.yml with a PostgreSQL service image, dependency caching, parallel test splitting, Docker image builds, and an SSH or registry-based deploy job gated by branch filters and approval.",[12,430,786],[12,430,13],[786],{"path":1180,"title":1181,"description":5010,"category":4323,"tags":5011,"section":23,"role":18,"priority":1182,"type":9,"intent":4291,"difficulty":10,"stack":5013,"topics":5014},"Serve a Django app through Cloudflare Tunnel with no open inbound ports: cloudflared setup, ingress rules, DNS routing, real client IPs, HTTPS settings, and protecting the admin.",[12,189,5012,59],"networking",[12,189,72,46],[4399,4499],{"path":754,"title":755,"description":5016,"category":4323,"tags":5017,"section":23,"role":4316,"priority":756,"type":9,"intent":4371,"difficulty":44,"stack":5019,"topics":5020},"Deploy Django on your own server with Coolify: Dockerfile builds from Git, managed PostgreSQL and Redis, automatic HTTPS, environment variables, migrations, and backups.",[12,5018,152,5001],"coolify",[12,152,13,105],[66,152],{"path":764,"title":765,"description":5022,"category":4323,"tags":5023,"section":23,"role":18,"priority":766,"type":9,"intent":4291,"difficulty":18,"stack":5025,"topics":5026},"Deploy Django with Docker Swarm: a stack file with replicas, Docker secrets, rolling start-first updates with automatic rollback, one-off migrations, and Nginx in front.",[12,152,768,5024],"containers",[12,152,768,13],[98,152],{"path":770,"title":771,"description":5028,"category":4323,"tags":5029,"section":23,"role":4327,"priority":772,"type":9,"intent":4346,"difficulty":10,"stack":5030,"topics":5031},"Run a Heroku-style git push deploy for Django on your own server with Dokku, the Postgres plugin, predeploy migrations, persistent media storage, and Let's Encrypt.",[12,774,152],[12,774,152],[66],{"path":776,"title":777,"description":5033,"category":4323,"tags":5034,"section":23,"role":4327,"priority":778,"type":9,"intent":4346,"difficulty":10,"stack":5035,"topics":5036},"Automate Django deployments over SSH with Fabric: a fabfile with release directories, dependency install, migrations, collectstatic, atomic symlink switch, health checks, and rollback.",[12,780,272,4377],[12,780,486,72],[4595],{"path":462,"title":463,"description":5038,"category":4323,"tags":5039,"section":23,"role":4316,"priority":464,"type":9,"intent":4291,"difficulty":44,"stack":5040,"topics":5041},"Deploy Django to your own server with git push production main: a bare repository with a post-receive hook that checks out the code, installs dependencies, runs migrations and collectstatic, and reloads Gunicorn, with safe failure handling.",[12,466,4377],[12,466,72],[4595,786],{"path":782,"title":783,"description":5043,"category":4323,"tags":5044,"section":23,"role":4327,"priority":784,"type":9,"intent":4346,"difficulty":10,"stack":5045,"topics":5046},"Manual Django deployments usually fail in predictable ways: someone forgets to run migrations, static files are outdated, the wrong branch gets pushed to production, or a restar...",[12,92,786],[12,92,786],[786],{"path":788,"title":789,"description":5048,"category":4323,"tags":5049,"section":23,"role":4327,"priority":264,"type":9,"intent":4346,"difficulty":10,"stack":5050,"topics":5051},"Build a GitLab CI\u002FCD pipeline for Django: PostgreSQL tests, Docker image builds, SSH deploys with protected variables, and one-click rollbacks.",[12,791,786],[12,791,152],[786],{"path":793,"title":794,"description":5053,"category":4323,"tags":5054,"section":23,"role":18,"priority":795,"type":9,"intent":4291,"difficulty":10,"stack":5056,"topics":5057},"Run Django in production with Granian, the Rust HTTP server for Python: WSGI and ASGI interfaces, workers and threads, a systemd unit, Nginx in front, and when to choose it.",[12,797,909,5055],"wsgi",[12,797,39,798],[4493,4622],{"path":2322,"title":2323,"description":5059,"category":4323,"tags":5060,"section":23,"role":18,"priority":2324,"type":9,"intent":4291,"difficulty":18,"stack":5062,"topics":5063},"Put HAProxy in front of several Django app servers: active health checks on a \u002Fhealth\u002F endpoint, TLS termination, X-Forwarded-Proto, connection limits per server, rolling deploys with drain, and stick tables for basic rate limiting.",[12,2326,5061],"load-balancing",[12,2326,72],[4399,4320],{"path":716,"title":717,"description":5065,"category":4323,"tags":5066,"section":23,"role":18,"priority":718,"type":9,"intent":4291,"difficulty":18,"stack":5067,"topics":5068},"Package Django for Kubernetes with a Helm chart: values per environment, Deployment and Ingress templates, a pre-upgrade migration hook, config checksums, and helm rollback.",[12,98,720,5024],[12,98,720],[98],{"path":2750,"title":2751,"description":5070,"category":4323,"tags":5071,"section":23,"role":18,"priority":2752,"type":9,"intent":4291,"difficulty":10,"stack":5072,"topics":5073},"Run Django in production with Hypercorn, an ASGI and WSGI server with HTTP\u002F2 and HTTP\u002F3 support: configure workers and worker class, bind behind Nginx, set timeouts and graceful shutdown, and compare it with Uvicorn and Gunicorn.",[12,2754,909],[12,2754,39],[4493,4622],{"path":456,"title":457,"description":5075,"category":4323,"tags":5076,"section":23,"role":4327,"priority":458,"type":9,"intent":4291,"difficulty":10,"stack":5077,"topics":5078},"Build a Jenkins pipeline for Django: a declarative Jenkinsfile that runs tests against PostgreSQL in Docker, builds and pushes an image, deploys over SSH with migrations, uses credentials binding, and gates production behind approval.",[12,460,786],[12,460,152],[786],{"path":804,"title":805,"description":5080,"category":4323,"tags":5081,"section":23,"role":18,"priority":31,"type":9,"intent":4346,"difficulty":18,"stack":5082,"topics":5083},"Deploy a Dockerized Django app with Kamal 2: deploy.yml, secrets, kamal-proxy HTTPS, a Postgres accessory, safe migrations, health checks, and rollbacks.",[12,807,152],[12,807,152],[66,152],{"path":444,"title":445,"description":5085,"category":4323,"tags":5086,"section":23,"role":18,"priority":446,"type":9,"intent":4291,"difficulty":10,"stack":5088,"topics":5089},"Run Django on NGINX Unit, the application server configured through a JSON API: configure a Python application with a virtualenv, route static files, set processes, add TLS, and check the project's maintenance status before adopting it.",[12,448,5087],"app-server",[12,448,272],[4493],{"path":809,"title":810,"description":5091,"category":4323,"tags":5092,"section":23,"role":18,"priority":811,"type":9,"intent":4291,"difficulty":18,"stack":5093,"topics":5094},"Run Django in rootless Podman containers managed by systemd with Quadlet: container, network, and volume units, Podman secrets, health checks, and auto-updates.",[12,813,798,5024],[12,813,798,13],[152,5095],"process-supervision",{"path":815,"title":816,"description":5097,"category":4323,"tags":5098,"section":23,"role":4316,"priority":817,"type":9,"intent":4291,"difficulty":44,"stack":5099,"topics":5100},"Deploy a Poetry-managed Django project: lock file checks, installing only main dependencies, in-project virtualenvs, multi-stage Docker builds without Poetry at runtime, and exporting requirements.",[12,819,272,4349],[12,819,152],[4349],{"path":2578,"title":2579,"description":5102,"category":4323,"tags":5103,"section":23,"role":18,"priority":2580,"type":9,"intent":4291,"difficulty":18,"stack":5105,"topics":5106},"Provision Django infrastructure with Pulumi in Python: define a VPC, database, container service, and secrets as code, manage stacks for staging and production, keep secrets encrypted in config, and preview changes before applying.",[12,2582,5104],"infrastructure-as-code",[12,2582,79],[4595],{"path":821,"title":822,"description":5108,"category":4323,"tags":5109,"section":23,"role":4316,"priority":823,"type":9,"intent":4291,"difficulty":10,"stack":5110,"topics":5111},"Put Traefik in front of a Dockerized Django app: automatic Let's Encrypt certificates, HTTP to HTTPS redirects, Docker labels for routing, static files, and upload limits.",[12,695,152,1155],[12,695,152,72],[4399,152],{"path":839,"title":840,"description":5113,"category":4323,"tags":5114,"section":23,"role":4327,"priority":841,"type":9,"intent":4346,"difficulty":44,"stack":5115,"topics":5116},"Deploy Django reproducibly with uv: lockfiles, uv sync --locked without dev tools, managed Python, Docker layer caching, and CI checks.",[12,843,272],[12,843],[4349],{"path":833,"title":834,"description":5118,"category":4323,"tags":5119,"section":23,"role":4327,"priority":835,"type":9,"intent":4346,"difficulty":10,"stack":5120,"topics":5121},"Run Django with uWSGI and Nginx: a strict uWSGI ini, socket permissions, systemd integration, graceful reloads, harakiri timeouts, and checks.",[12,837,39],[12,837,39],[4493,4399],{"path":826,"title":827,"description":5123,"category":4323,"tags":5124,"section":23,"role":18,"priority":828,"type":9,"intent":4291,"difficulty":10,"stack":5125,"topics":5126},"Ship Vite-built JavaScript and CSS with Django in production: manifest-based asset tags with django-vite, a Node build stage, collectstatic, cache headers, and avoiding dev-server leaks.",[12,830,3193,4391],[12,830,831,170],[4391],{"path":845,"title":846,"description":5128,"category":4323,"tags":5129,"section":23,"role":18,"priority":847,"type":9,"intent":4291,"difficulty":18,"stack":5130,"topics":5131},"Deploy a GeoDjango app: GDAL, GEOS, and PROJ libraries on servers and in Docker, enabling PostGIS on self-hosted and managed PostgreSQL, spatial indexes, backups, and upgrades.",[12,1676,849,13],[12,849,850,152],[4311],{"path":857,"title":858,"description":5133,"category":4323,"tags":5134,"section":23,"role":4327,"priority":859,"type":9,"intent":4346,"difficulty":10,"stack":5135,"topics":5136},"Deploy the Saleor headless e-commerce platform, built on Django and GraphQL, to production: run the API container with PostgreSQL and Redis, configure Celery workers, media storage, secrets, allowed hosts and CORS for the dashboard and storefront, and run migrations on upgrade.",[12,861,879],[12,861,13],[152],{"path":863,"title":864,"description":5138,"category":4323,"tags":5139,"section":23,"role":4316,"priority":865,"type":9,"intent":4371,"difficulty":10,"stack":5141,"topics":5142},"Deploy a Wagtail site to production: Sites and WAGTAILADMIN_BASE_URL, image renditions and media storage, scheduled publishing, search indexing, document serving, and caching.",[12,867,4631,5140],"media",[12,867,13,39],[66,4367],{"path":911,"title":912,"description":5144,"category":5145,"tags":5146,"section":214,"role":4440,"priority":133,"type":64,"intent":4291,"difficulty":44,"stack":5147,"topics":5148},"Secure the Django admin in production: access restrictions, strong authentication, permissions, session policy, audit logging, and safe data handling.","Checklist",[12,4325,59],[12,59],[4330],{"path":1080,"title":1081,"description":5150,"category":5145,"tags":5151,"section":214,"role":4440,"priority":565,"type":64,"intent":4291,"difficulty":10,"stack":5152,"topics":5153},"Review a Django REST API before production: authentication, permissions, throttling, pagination, validation, versioning, errors, CORS, docs, and observability.",[12,260,4585],[12,260],[4588],{"path":3123,"title":3124,"description":5155,"category":4307,"tags":5156,"section":7,"role":18,"priority":3125,"type":9,"intent":4291,"difficulty":10,"stack":5158,"topics":5159},"Upgrade Django password hashing to Argon2id: install argon2-cffi, put Argon2PasswordHasher first, let existing hashes upgrade on login, wrap old hashes to upgrade everyone now, tune memory and time cost, and size servers for login load.",[12,59,5157],"passwords",[12,3127,59],[4330],{"path":905,"title":906,"description":5161,"category":5145,"tags":5162,"section":214,"role":4440,"priority":907,"type":9,"intent":4371,"difficulty":18,"stack":5164,"topics":5165},"A checklist for running Django under ASGI in production with Uvicorn, Daphne, Granian, or Hypercorn: choose workers, avoid blocking calls in async views, handle sync middleware and the ORM, configure WebSocket proxies and timeouts, lifespan, and graceful shutdown.",[12,909,5163],"checklist",[12,909,391],[4622],{"path":3291,"title":3292,"description":5167,"category":4307,"tags":5168,"section":7,"role":18,"priority":3293,"type":9,"intent":4291,"difficulty":18,"stack":5171,"topics":5172},"Decide when async views improve a production Django app: concurrent external API calls, streaming, and long-polling benefit, while ORM-heavy views usually do not. Measure, avoid blocking calls, and run async code under ASGI correctly.",[12,5169,5170],"async","performance",[12,909,3295],[4622,4320],{"path":2302,"title":2303,"description":5174,"category":4307,"tags":5175,"section":7,"role":18,"priority":2304,"type":9,"intent":4291,"difficulty":10,"stack":5176,"topics":5177},"Record who changed what and when in a Django app: compare django-simple-history, django-auditlog, and pghistory triggers, capture the acting user and request ID, protect audit tables from tampering, plan retention, and keep audit writes fast.",[12,2306,59],[12,13,2306],[4330,4416],{"path":2773,"title":2774,"description":5179,"category":4323,"tags":5180,"section":23,"role":18,"priority":2775,"type":9,"intent":4291,"difficulty":18,"stack":5182,"topics":5183},"Run Django on Amazon Aurora PostgreSQL: choose provisioned or Serverless v2 capacity, use writer and reader endpoints with a database router, add RDS Proxy for connection pooling and faster failover, set minimum ACUs, and plan upgrades and backups.",[12,79,5181],"aurora",[12,79,13],[4311,79],{"path":3195,"title":3196,"description":5185,"category":4323,"tags":5186,"section":23,"role":18,"priority":3197,"type":9,"intent":4291,"difficulty":10,"stack":5188,"topics":5189},"Connect Django to Amazon ElastiCache for caching, sessions, and Celery: choose Valkey or Redis OSS, serverless or node-based clusters, enable TLS and AUTH or IAM, use the primary endpoint, configure security groups, and handle failovers and cluster mode.",[12,79,5187],"elasticache",[12,79,105],[4465,79],{"path":1134,"title":1135,"description":5191,"category":5145,"tags":5192,"section":214,"role":4327,"priority":144,"type":9,"intent":4371,"difficulty":10,"stack":5193,"topics":5194},"A production checklist for Django on AWS: account security, VPC and security groups, IAM roles instead of keys, RDS and ElastiCache settings, S3 and CloudFront, secrets, TLS, logging, backups, and cost controls.",[12,79,5163],[12,79,13,105],[79,4330],{"path":2339,"title":2340,"description":5196,"category":4323,"tags":5197,"section":23,"role":18,"priority":2341,"type":9,"intent":4291,"difficulty":10,"stack":5198,"topics":5199},"Use AWS Systems Manager Parameter Store for Django configuration and secrets: store SecureString parameters under a path per environment, inject them into ECS task definitions, read them with boto3 on EC2 and Lambda, grant least-privilege IAM, and compare with Secrets Manager.",[12,79,2394],[12,79,2343],[4459,79],{"path":2562,"title":2563,"description":5201,"category":4323,"tags":5202,"section":23,"role":18,"priority":2564,"type":9,"intent":4291,"difficulty":10,"stack":5203,"topics":5204},"Put AWS WAF in front of a Django app on an ALB, CloudFront, or API Gateway: start with AWS managed rule groups in count mode, add rate-based rules for login and API endpoints, exclude rules that break uploads or admin forms, and log and tune blocked requests.",[12,79,237],[12,79,237],[4330,79],{"path":2345,"title":2346,"description":5206,"category":4307,"tags":5207,"section":7,"role":18,"priority":2347,"type":9,"intent":4291,"difficulty":10,"stack":5209,"topics":5210},"Protect Django logins from password guessing with django-axes: install the backend and middleware, choose lockout parameters by user and IP, get real client IPs behind proxies, store attempts in cache or database, and unlock users safely.",[12,59,5208],"authentication",[12,2349,59],[4330],{"path":3205,"title":3206,"description":5212,"category":4323,"tags":5213,"section":23,"role":18,"priority":3207,"type":9,"intent":4291,"difficulty":10,"stack":5214,"topics":5215},"Connect Django to Azure Database for PostgreSQL Flexible Server: choose public or private access, require TLS, use Microsoft Entra authentication with managed identity, enable built-in PgBouncer, allow extensions, and configure high availability and backups.",[12,424,13],[12,424,13],[4311],{"path":3210,"title":3211,"description":5217,"category":4323,"tags":5218,"section":23,"role":18,"priority":3212,"type":9,"intent":4291,"difficulty":10,"stack":5219,"topics":5220},"Load Django secrets from Azure Key Vault: use Key Vault references in App Service and Container Apps, read secrets with azure-identity and managed identities, mount them on AKS with the Secrets Store CSI driver, and rotate values without redeploying code.",[12,424,2394],[12,424,3214],[4459],{"path":915,"title":916,"description":5222,"category":5145,"tags":5223,"section":214,"role":4440,"priority":917,"type":64,"intent":4291,"difficulty":10,"stack":5225,"topics":5226},"Check that Django backups actually protect you: what to back up, schedules, off-site copies, encryption, retention, restore drills, and monitoring.",[12,1161,5224],"operations",[12,13],[4342],{"path":3140,"title":3141,"description":5228,"category":4323,"tags":5229,"section":23,"role":18,"priority":3142,"type":9,"intent":4291,"difficulty":10,"stack":5230,"topics":5231},"Build a Buildkite pipeline for Django: run tests with PostgreSQL on self-hosted agents using the Docker Compose plugin, build and push images, gate production deploys with block steps, run migrations, and keep secrets out of pipeline YAML.",[12,3144,786],[12,3144,152],[786],{"path":1185,"title":1186,"description":5233,"category":4307,"tags":5234,"section":7,"role":18,"priority":1187,"type":9,"intent":4291,"difficulty":10,"stack":5235,"topics":5236},"Speed up large Django data loads and updates: bulk_create and bulk_update with batch_size, update() with F expressions, update_conflicts for upserts, transactions, disabling per-row signals, COPY for very large imports, and what bulk methods skip.",[12,13,5170],[12,13],[4311,4320],{"path":2933,"title":2934,"description":5238,"category":4323,"tags":5239,"section":23,"role":18,"priority":2935,"type":9,"intent":4291,"difficulty":44,"stack":5240,"topics":5241},"Put Bunny CDN in front of a Django site: create a pull zone for WhiteNoise static files or an object storage origin, use hashed file names with long cache headers, serve media from Bunny Storage with django-storages, and purge or sign URLs when needed.",[12,1116,4391],[12,2937,170],[4391,4367],{"path":2964,"title":2965,"description":5243,"category":4307,"tags":5244,"section":7,"role":18,"priority":2966,"type":9,"intent":4291,"difficulty":10,"stack":5245,"topics":5246},"Control how browsers and CDNs cache Django responses: cache_control and never_cache decorators, public versus private, max-age versus s-maxage, Vary headers from sessions and cookies, ETags, and safe defaults for logged-in pages.",[12,190,1116],[12,1116,39],[4320,4399],{"path":3037,"title":3038,"description":5248,"category":4307,"tags":5249,"section":7,"role":18,"priority":3039,"type":9,"intent":4291,"difficulty":10,"stack":5250,"topics":5251},"Make Django templates render faster in production: confirm the cached template loader is active, avoid disabling it with custom loaders or APP_DIRS mistakes, reduce expensive template work, use fragment caching, and measure template time per view.",[12,366,5170],[12,366],[4320],{"path":925,"title":926,"description":5253,"category":4307,"tags":5254,"section":7,"role":4440,"priority":927,"type":64,"intent":4291,"difficulty":10,"stack":5255,"topics":5256},"Choose what to cache in a Django app: HTTP caching, per-view and fragment caches, low-level caching, invalidation, stampede protection, and hit rates.",[12,190,5170],[12,105],[4465,4320],{"path":3200,"title":3201,"description":5258,"category":4323,"tags":5259,"section":23,"role":18,"priority":3202,"type":9,"intent":4291,"difficulty":10,"stack":5260,"topics":5261},"Use Amazon SQS as a Celery broker for Django: install the SQS transport, authenticate with IAM roles, create queues, set visibility timeout and long polling, handle FIFO limitations, and avoid surprises with ETA tasks, results, and costs.",[12,27,79],[12,27,79],[27,79],{"path":212,"title":213,"description":5263,"category":5145,"tags":5264,"section":214,"role":4440,"priority":215,"type":64,"intent":4291,"difficulty":10,"stack":5265,"topics":5266},"Review Celery before production: broker durability, queues and routing, retries and idempotency, time limits, single Beat, monitoring, deploys, and security.",[12,27,5224],[12,27],[27],{"path":930,"title":931,"description":5268,"category":5145,"tags":5269,"section":214,"role":4440,"priority":932,"type":9,"intent":4291,"difficulty":18,"stack":5270,"topics":5271},"A production checklist for Django Channels: ASGI server choice, Redis channel layer, WebSocket proxy configuration, authentication and origin checks, consumer performance, scaling, timeouts and heartbeats, deploys, and monitoring.",[12,411,5163],[12,411,105],[4622],{"path":1130,"title":1131,"description":5273,"category":5145,"tags":5274,"section":214,"role":4440,"priority":181,"type":64,"intent":4291,"difficulty":44,"stack":5276,"topics":5277},"Understand every warning from python manage.py check --deploy: HSTS, SSL redirect, cookies, SECRET_KEY, DEBUG, ALLOWED_HOSTS, and when silencing is justified.",[12,59,5275],"settings",[12,59],[4330,4459],{"path":920,"title":921,"description":5279,"category":5145,"tags":5280,"section":214,"role":4440,"priority":922,"type":9,"intent":4291,"difficulty":10,"stack":5281,"topics":5282},"A checklist for a Django CI\u002FCD pipeline: tests on the production database engine, migration checks, linting and security scans, building one artefact, deploying migrations safely, smoke tests, approvals, rollback, and secrets handling.",[12,786,5163],[12,92,152],[786],{"path":2573,"title":2574,"description":5284,"category":4323,"tags":5285,"section":23,"role":18,"priority":2575,"type":9,"intent":4291,"difficulty":10,"stack":5286,"topics":5287},"Put the Django admin behind Cloudflare Access (Zero Trust): create a self-hosted application for \u002Fadmin, require SSO or email one-time codes, validate the Cf-Access-Jwt-Assertion header in Django, and block direct origin access so nobody can bypass it.",[12,189,59],[12,189],[4330],{"path":233,"title":234,"description":5289,"category":4307,"tags":5290,"section":7,"role":18,"priority":235,"type":9,"intent":4291,"difficulty":10,"stack":5291,"topics":5292},"Configure Cloudflare WAF custom rules, rate limiting, and managed rulesets for Django: protect \u002Fadmin and login views, challenge bad bots, skip rules for webhooks and uploads, avoid blocking legitimate API clients, and verify the real client IP at the origin.",[12,189,59],[12,189,237],[4330],{"path":3111,"title":3112,"description":5294,"category":4323,"tags":5295,"section":23,"role":18,"priority":3113,"type":9,"intent":4291,"difficulty":44,"stack":5296,"topics":5297},"Use Cloudinary for Django media uploads: configure django-cloudinary-storage or the Cloudinary SDK, upload user images and video, generate resized and optimized URLs on the fly, sign uploads from the browser, and keep secrets and costs under control.",[12,3115,5140],[12,3115],[4367],{"path":2778,"title":2779,"description":5299,"category":4323,"tags":5300,"section":23,"role":18,"priority":2780,"type":9,"intent":4291,"difficulty":18,"stack":5301,"topics":5302},"Run Django on CockroachDB with the django-cockroachdb backend: match backend and Django versions, configure TLS connections, handle transaction retries, adjust migrations and primary keys, and understand what works differently from PostgreSQL.",[12,2782,4469],[12,2782],[4311],{"path":3047,"title":3048,"description":5304,"category":4307,"tags":5305,"section":7,"role":18,"priority":3049,"type":9,"intent":4291,"difficulty":10,"stack":5306,"topics":5307},"Make collectstatic to S3 or other object storage fast: skip unchanged files, use storage backends that compare hashes, collect locally then sync with the AWS CLI, skip post-processing where safe, and run it once per release in CI instead of on every server.",[12,4391,86],[12,86,1015],[4391,4367],{"path":344,"title":345,"description":5309,"category":4307,"tags":5310,"section":7,"role":18,"priority":346,"type":9,"intent":4291,"difficulty":18,"stack":5312,"topics":5313},"Add always-on continuous profiling to Django and Celery with Grafana Pyroscope: install the Python SDK or use eBPF, tag profiles by view and task, read flame graphs to find hot code paths, compare releases, and keep overhead low in production.",[12,5311,5170],"profiling",[12,348,349],[4320,4416],{"path":2567,"title":2568,"description":5315,"category":4323,"tags":5316,"section":23,"role":18,"priority":2569,"type":9,"intent":4291,"difficulty":10,"stack":5317,"topics":5318},"Set up CrowdSec to protect a Django server: install the agent and Nginx or firewall bouncer, parse Nginx and Django login logs, detect brute force on \u002Fadmin and login views, share blocklists, and avoid banning legitimate users behind proxies.",[12,2571,59],[12,2571,39],[4330],{"path":362,"title":363,"description":5320,"category":4307,"tags":5321,"section":7,"role":4316,"priority":364,"type":9,"intent":4291,"difficulty":44,"stack":5323,"topics":5324},"Create custom 404, 500, 403, and 400 pages for a Django site in production: templates and handler views, a 500 page that cannot fail, static assets that load, Nginx error pages for when Django is down, and testing them with DEBUG off.",[12,5322,39],"error-pages",[12,39,366],[4459,4399],{"path":2832,"title":2833,"description":5326,"category":4307,"tags":5327,"section":7,"role":18,"priority":2834,"type":9,"intent":4291,"difficulty":18,"stack":5328,"topics":5329},"Backfill or transform millions of rows in Django without long locks or failed deploys: move heavy data changes out of schema migrations, batch updates by primary key, run them as resumable management commands or Celery jobs, and keep code compatible during the backfill.",[12,1025,13],[12,13],[1025,4311],{"path":382,"title":383,"description":5331,"category":4307,"tags":5332,"section":7,"role":18,"priority":384,"type":9,"intent":4291,"difficulty":10,"stack":5334,"topics":5335},"Implement data retention in Django: delete old logs, task results, sessions, and events in small batches with primary key ranges, avoid long locks and replica lag, handle cascades, schedule cleanup with Celery or cron, and consider partitioning for big tables.",[12,13,5333],"data-retention",[12,13,27],[4311,4320],{"path":5,"title":6,"description":5337,"category":4307,"tags":5338,"section":7,"role":18,"priority":8,"type":9,"intent":4291,"difficulty":10,"stack":5339,"topics":5340},"Decide which indexes a Django app needs: find slow queries, index foreign keys and filter and ordering columns, use composite, partial, covering, and expression indexes with Meta.indexes, remove unused indexes, and add them without locking production tables.",[12,13,5170],[12,13],[4311,4320],{"path":223,"title":224,"description":5342,"category":5145,"tags":5343,"section":214,"role":4440,"priority":225,"type":9,"intent":4371,"difficulty":18,"stack":5344,"topics":5345},"Move a Django app’s self-hosted PostgreSQL to RDS, Cloud SQL, Azure, Neon, or another managed service: check versions and extensions, choose dump\u002Frestore or logical replication, handle roles and ownership, plan cutover and rollback, and verify Django afterwards.",[12,13,5163],[12,13],[4311],{"path":2703,"title":2704,"description":5347,"category":4307,"tags":5348,"section":7,"role":18,"priority":533,"type":9,"intent":4346,"difficulty":18,"stack":5350,"topics":5351},"Add PostgreSQL read replicas to Django: multi-database settings, routers, replication lag and read-your-writes, transactions, migrations, and tests.",[12,13,5349],"scaling",[12,13],[4311,4320],{"path":935,"title":936,"description":5353,"category":5145,"tags":5354,"section":214,"role":4440,"priority":937,"type":9,"intent":4291,"difficulty":10,"stack":5355,"topics":5356},"Secure the software supply chain of a Django app: supported Django versions, pinned and hashed dependencies, vulnerability scanning, private index safety, container image updates, CI action pinning, and SBOMs.",[12,59,4349],[12,939,152,92],[4349,4330],{"path":722,"title":723,"description":5358,"category":4323,"tags":5359,"section":23,"role":18,"priority":144,"type":9,"intent":4346,"difficulty":18,"stack":5360,"topics":5361},"Manual Django deployment usually starts simple and becomes unreliable fast. You SSH into a server, pull code, install packages, update environment variables, run migrations, res...",[12,725,39,72],[12,725,39,72],[4595],{"path":941,"title":942,"description":5363,"category":5145,"tags":5364,"section":214,"role":4440,"priority":902,"type":64,"intent":4291,"difficulty":44,"stack":5365,"topics":5366},"A Django app that works locally is not automatically safe to run in production. Most deployment failures come from a small set of issues: wrong settings, missing secrets, unsafe...",[12],[12],[4380,4330],{"path":2288,"title":2289,"description":5368,"category":4307,"tags":5369,"section":7,"role":4327,"priority":761,"type":9,"intent":4346,"difficulty":10,"stack":5370,"topics":5371},"A manual Django deployment often looks simple at first: SSH into a server, pull code, install dependencies, run migrations, collect static files, restart Gunicorn, and hope the...",[12,73,46],[12,73,46],[4595,4380],{"path":945,"title":946,"description":5373,"category":4307,"tags":5374,"section":7,"role":4440,"priority":947,"type":64,"intent":4291,"difficulty":10,"stack":5375,"topics":5376},"A lot of Django apps reach production with local-development assumptions still in place: DEBUG=True, weak host validation, secrets in .env files with broad permissions, Gunicorn...",[12],[12],[4330],{"path":3313,"title":3314,"description":5378,"category":4307,"tags":5379,"section":7,"role":4440,"priority":639,"type":64,"intent":4291,"difficulty":18,"stack":5381,"topics":5382},"Write a practical disaster recovery plan for Django: RPO and RTO targets, failure scenarios, point-in-time recovery, runbooks, access, and drills.",[12,5380,1161],"disaster-recovery",[12,13],[4342],{"path":172,"title":173,"description":5384,"category":4323,"tags":5385,"section":23,"role":18,"priority":174,"type":9,"intent":4291,"difficulty":18,"stack":5386,"topics":5387},"Build a minimal, shell-less production image for Django using a multi-stage build with a Debian builder and a distroless or Chainguard Python runtime: copy the virtualenv, run as non-root, handle collectstatic and migrations without a shell, and debug safely.",[12,152,59],[12,152,176],[152,4330],{"path":375,"title":376,"description":5389,"category":5145,"tags":5390,"section":214,"role":4440,"priority":377,"type":9,"intent":4371,"difficulty":10,"stack":5391,"topics":5392},"A checklist for switching DNS when moving a Django site to a new server, host, or CDN: lower TTLs in advance, prepare TLS certificates and ALLOWED_HOSTS, sync data and freeze writes, switch records, verify from several locations, and keep the old host as a fallback.",[12,379,5163],[12,379,380],[4499,4380],{"path":950,"title":951,"description":5394,"category":5145,"tags":5395,"section":214,"role":4440,"priority":761,"type":64,"intent":4291,"difficulty":10,"stack":5396,"topics":5397},"Review a Dockerized Django deployment before production: image build, non-root user, secrets, health checks, volumes, logging, resource limits, and release steps.",[12,152,5024],[12,152],[152],{"path":2374,"title":2375,"description":5399,"category":4323,"tags":5400,"section":23,"role":18,"priority":2376,"type":9,"intent":4291,"difficulty":44,"stack":5401,"topics":5402},"Manage Django environment variables and secrets with Doppler: organize projects and configs per environment, inject secrets with doppler run locally and on servers, sync to Heroku, Render, Vercel, or Kubernetes, use service tokens in CI, and rotate safely.",[12,2394,2378],[12,2378],[4459],{"path":954,"title":955,"description":5404,"category":5145,"tags":5405,"section":214,"role":4440,"priority":956,"type":9,"intent":4371,"difficulty":10,"stack":5407,"topics":5408},"A launch checklist for Django online stores: payment and webhook reliability, order and inventory integrity, transactional emails, taxes and prices, performance under traffic, backups, monitoring of checkout, legal pages, and a rollback plan for launch day.",[12,5406,5163],"ecommerce",[12,958,27],[4380],{"path":75,"title":76,"description":5410,"category":4307,"tags":5411,"section":7,"role":18,"priority":77,"type":9,"intent":4291,"difficulty":18,"stack":5412,"topics":5413},"Configure ECS service auto scaling for Django web and Celery services: target tracking on CPU or ALB requests per target, step scaling on SQS or custom queue metrics, sensible min and max tasks, cooldowns, database connection limits, and graceful shutdown.",[12,79,80],[12,79,80],[79,4320],{"path":960,"title":961,"description":5415,"category":5145,"tags":5416,"section":214,"role":4440,"priority":784,"type":9,"intent":4291,"difficulty":10,"stack":5417,"topics":5418},"Make Django's transactional email reach inboxes: a reputable provider, SPF, DKIM, and DMARC alignment, sender addresses, bounce and complaint handling, content hygiene, background sending, and monitoring.",[12,249,5163],[12,249,379],[249],{"path":964,"title":965,"description":5420,"category":5145,"tags":5421,"section":214,"role":4440,"priority":966,"type":9,"intent":4371,"difficulty":10,"stack":5422,"topics":5423},"A production checklist for email from Django: a transactional provider or Anymail backend, sending from Celery after commit, SPF, DKIM, and DMARC, bounce and complaint webhooks, separate streams for marketing, templates with text parts, staging safety, and monitoring.",[12,249,5163],[12,249,27],[249],{"path":3225,"title":3226,"description":5425,"category":4307,"tags":5426,"section":7,"role":18,"priority":3227,"type":9,"intent":4291,"difficulty":10,"stack":5428,"topics":5429},"Cut bandwidth and server work with HTTP conditional requests in Django: ConditionalGetMiddleware, the condition, etag, and last_modified decorators, cheap ETag functions, 304 Not Modified responses for APIs, and how ETags interact with CDNs and compression.",[12,5427,5170],"http-caching",[12,3229],[4320,4588],{"path":3129,"title":3130,"description":5431,"category":4323,"tags":5432,"section":23,"role":18,"priority":3131,"type":9,"intent":4291,"difficulty":18,"stack":5433,"topics":5434},"Use External Secrets Operator to load Django secrets from AWS Secrets Manager, Google Secret Manager, Azure Key Vault, Vault, or Infisical into Kubernetes Secrets: configure a SecretStore with workload identity, map keys, set refresh intervals, and roll pods on change.",[12,98,2394],[12,98,3133],[98,4459],{"path":2958,"title":2959,"description":5436,"category":4323,"tags":5437,"section":23,"role":18,"priority":2960,"type":9,"intent":4291,"difficulty":18,"stack":5438,"topics":5439},"Put Fastly in front of Django: configure the origin and host header, cache anonymous pages with Surrogate-Control and surrogate keys, bypass logged-in users, purge by key from Django signals, and set shielding, TLS, and compression for static files.",[12,2962,1116],[12,2962,1116],[4391,4320],{"path":3231,"title":3232,"description":5441,"category":4307,"tags":5442,"section":7,"role":4440,"priority":603,"type":64,"intent":4291,"difficulty":10,"stack":5445,"topics":5446},"Use feature flags in Django to separate deploys from releases: flag types, a simple flag model, django-waffle, gradual rollouts, kill switches, and cleanup.",[12,5443,5444],"releases","feature-flags",[12],[4380],{"path":969,"title":970,"description":5448,"category":5145,"tags":5449,"section":214,"role":4440,"priority":162,"type":9,"intent":4291,"difficulty":10,"stack":5451,"topics":5452},"Secure user uploads in Django production: size limits at every layer, content-based type checks, image re-encoding, safe file names, private storage, serving user content safely, scanning, and quotas.",[12,59,5450],"uploads",[12,39,86],[4367,4330],{"path":3235,"title":3236,"description":5454,"category":4323,"tags":5455,"section":23,"role":18,"priority":3237,"type":9,"intent":4291,"difficulty":10,"stack":5456,"topics":5457},"Load Django secrets from Google Cloud Secret Manager: mount secrets as environment variables or files on Cloud Run, read them with the Python client on Compute Engine and GKE, grant least-privilege access to service accounts, and rotate secrets with versions.",[12,326,2394],[12,326,3239],[4459],{"path":3146,"title":3147,"description":5459,"category":4323,"tags":5460,"section":23,"role":18,"priority":3148,"type":9,"intent":4291,"difficulty":10,"stack":5461,"topics":5462},"Use Gitea Actions or Forgejo Actions, GitHub Actions-compatible CI built into self-hosted forges, for Django: register act_runner, write workflows with a PostgreSQL service, push images to the built-in container registry, and deploy over SSH with secrets.",[12,3150,786],[12,3150,152],[786],{"path":704,"title":705,"description":5464,"category":4323,"tags":5465,"section":23,"role":18,"priority":706,"type":9,"intent":4291,"difficulty":10,"stack":5466,"topics":5467},"Replace long-lived AWS access keys in GitHub Actions with OpenID Connect: create the GitHub OIDC provider and an IAM role with a trust policy scoped to your repo and branch, assume it with aws-actions\u002Fconfigure-aws-credentials, and push to ECR and deploy ECS.",[12,92,79],[12,92,79],[786,79],{"path":2879,"title":2880,"description":5469,"category":4323,"tags":5470,"section":23,"role":18,"priority":2881,"type":9,"intent":4291,"difficulty":10,"stack":5472,"topics":5473},"Run GlitchTip, the open-source Sentry-compatible error tracker, for Django: deploy it with PostgreSQL and Redis, point the standard sentry-sdk at a GlitchTip DSN, set up uptime checks and alerts, manage event retention, and keep it secure.",[12,5471,2883],"monitoring",[12,2883,2884],[4416],{"path":973,"title":974,"description":5475,"category":5145,"tags":5476,"section":214,"role":4440,"priority":209,"type":64,"intent":4291,"difficulty":10,"stack":5478,"topics":5479},"A step-by-step runbook for launching a Django site: pre-launch freeze, DNS and TLS cutover, data migration, smoke tests, monitoring during launch, and rollback.",[12,5477,5224],"launch",[12],[4380],{"path":2177,"title":2178,"description":5481,"category":4307,"tags":5482,"section":7,"role":18,"priority":2179,"type":9,"intent":4291,"difficulty":18,"stack":5483,"topics":5484},"Shut down Django web servers and Celery workers without dropping requests or tasks: how Gunicorn, Uvicorn, and Celery handle SIGTERM, graceful timeouts, Docker stop_grace_period, Kubernetes preStop and terminationGracePeriodSeconds, and PID 1 pitfalls.",[12,4377,98],[12,72,27],[4380,4493],{"path":2182,"title":2183,"description":5486,"category":5145,"tags":5487,"section":214,"role":4440,"priority":2184,"type":9,"intent":4291,"difficulty":10,"stack":5488,"topics":5489},"A production checklist for running Django on Gunicorn: bind address and socket, worker class and count, timeouts and graceful shutdown, worker recycling, logging, forwarded headers, process supervision, and the proxy in front.",[12,72,5163],[12,72,39],[4493],{"path":2220,"title":2221,"description":5491,"category":4307,"tags":5492,"section":7,"role":4440,"priority":138,"type":64,"intent":4291,"difficulty":10,"stack":5493,"topics":5494},"A production Django deployment needs a reliable way to answer a simple question: is this instance safe to keep running and safe to receive traffic?",[12],[12],[4416],{"path":3099,"title":3100,"description":5496,"category":4323,"tags":5497,"section":23,"role":18,"priority":3101,"type":9,"intent":4291,"difficulty":44,"stack":5498,"topics":5499},"Use Hetzner Object Storage for Django media and static files with django-storages: create a bucket and S3 credentials, set the regional endpoint and addressing style, choose public or private access with presigned URLs, configure CORS, and keep costs low next to Hetzner Cloud servers.",[12,3103,86],[12,3103,1015],[4367],{"path":977,"title":978,"description":5501,"category":5145,"tags":5502,"section":214,"role":4440,"priority":979,"type":9,"intent":4371,"difficulty":18,"stack":5503,"topics":5504},"A technical checklist for running a Django application that handles protected health information under HIPAA: BAAs with vendors, access control and MFA, audit logging, encryption in transit and at rest, PHI-safe logging and error tracking, backups, and breach readiness.",[12,981,5163],[12,981,59],[4330],{"path":983,"title":984,"description":5506,"category":5145,"tags":5507,"section":214,"role":4440,"priority":985,"type":9,"intent":4291,"difficulty":10,"stack":5509,"topics":5510},"A runbook for Django production incidents: declare and assign roles, triage with a fixed checklist across proxy, app, workers, database, and cache, mitigate first, communicate, and run a blameless review.",[12,5224,5508],"incidents",[12,39,13,27],[4416,4342],{"path":2380,"title":2381,"description":5512,"category":4323,"tags":5513,"section":23,"role":18,"priority":2382,"type":9,"intent":4291,"difficulty":10,"stack":5514,"topics":5515},"Use Infisical, an open-source secrets manager, for Django: organize projects and environments, inject secrets with infisical run, authenticate servers and CI with machine identities, sync to Kubernetes and platforms, and self-host or use Infisical Cloud.",[12,2394,2384],[12,2384],[4459],{"path":94,"title":95,"description":5517,"category":4323,"tags":5518,"section":23,"role":18,"priority":96,"type":9,"intent":4291,"difficulty":10,"stack":5519,"topics":5520},"Use cert-manager to issue and renew Let’s Encrypt certificates for a Django app on Kubernetes: install it with Helm, create a ClusterIssuer with HTTP-01 or DNS-01, request certificates through Ingress or Gateway annotations, and troubleshoot stuck challenges.",[12,98,380],[12,98,99],[98,4499],{"path":2317,"title":2318,"description":5522,"category":4307,"tags":5523,"section":7,"role":18,"priority":2319,"type":9,"intent":4291,"difficulty":18,"stack":5525,"topics":5526},"Configure Kubernetes liveness, readiness, and startup probes for Django: separate cheap liveness and dependency-aware readiness endpoints, ALLOWED_HOSTS and HTTPS redirects, timeouts and thresholds, and avoiding restart storms during database outages.",[12,98,5524],"health-checks",[12,98,72],[98,4416],{"path":2675,"title":2676,"description":5528,"category":4307,"tags":5529,"section":7,"role":18,"priority":2677,"type":9,"intent":4291,"difficulty":18,"stack":5530,"topics":5531},"Lock down network access for Django on Kubernetes: default-deny ingress and egress, allow the ingress controller to reach web pods, let web and Celery reach PostgreSQL, Redis, and DNS, permit required external APIs, and test policies without breaking the app.",[12,98,59],[12,98],[98,4330],{"path":2297,"title":2298,"description":5533,"category":4307,"tags":5534,"section":7,"role":18,"priority":2299,"type":9,"intent":4291,"difficulty":10,"stack":5536,"topics":5537},"Protect a Django deployment from voluntary disruptions on Kubernetes: add PodDisruptionBudgets for web and Celery, spread replicas across nodes and zones, set graceful termination and preStop delays, and avoid budgets that block node drains forever.",[12,98,5535],"availability",[12,98],[98,4380],{"path":988,"title":989,"description":5539,"category":5145,"tags":5540,"section":214,"role":4327,"priority":194,"type":9,"intent":4371,"difficulty":18,"stack":5541,"topics":5542},"A production checklist for Django on Kubernetes: images, probes, resources, rolling updates, migrations as Jobs, secrets, static and media, Celery and Beat, autoscaling, disruption budgets, and observability.",[12,98,5163],[12,98,27,13],[98],{"path":2969,"title":2970,"description":5544,"category":4307,"tags":5545,"section":7,"role":18,"priority":2971,"type":9,"intent":4291,"difficulty":10,"stack":5546,"topics":5547},"Size Kubernetes resources for Django web and Celery pods: measure real usage, set memory requests near the working set and limits above peaks, avoid CPU throttling with sensible CPU limits, match Gunicorn workers to CPU requests, and use VPA recommendations.",[12,98,5170],[12,98,72],[98,4320],{"path":3327,"title":3328,"description":5549,"category":4307,"tags":5550,"section":7,"role":18,"priority":3329,"type":9,"intent":4291,"difficulty":18,"stack":5552,"topics":5553},"Make Kubernetes rolling updates of Django truly zero-downtime: configure maxSurge and maxUnavailable, readiness probes that reflect real readiness, preStop delays for endpoint propagation, Gunicorn graceful shutdown, backward-compatible migrations, and minReadySeconds.",[12,98,5551],"zero-downtime",[12,98,72],[98,4380],{"path":992,"title":993,"description":5555,"category":5145,"tags":5556,"section":214,"role":4440,"priority":994,"type":9,"intent":4371,"difficulty":18,"stack":5557,"topics":5558},"A security checklist for Django on Kubernetes: non-root containers with read-only filesystems, Pod Security Standards, minimal RBAC and service account tokens, secrets from a manager, NetworkPolicies, image scanning and signing, patched nodes, and audit logging.",[12,98,5163],[12,98,59],[98,4330],{"path":2928,"title":2929,"description":5560,"category":4323,"tags":5561,"section":23,"role":18,"priority":2930,"type":9,"intent":4291,"difficulty":10,"stack":5562,"topics":5563},"Choose how to serve Django static files on Kubernetes: WhiteNoise inside the app image, an Nginx sidecar sharing an emptyDir, a separate static image, or object storage with a CDN, and avoid shared volumes, stale files, and collectstatic at pod start.",[12,98,4391],[12,98,170],[98,4391],{"path":2368,"title":2369,"description":5565,"category":4323,"tags":5566,"section":23,"role":18,"priority":2370,"type":9,"intent":4291,"difficulty":10,"stack":5567,"topics":5568},"Structure Django Kubernetes manifests with Kustomize: a base with Deployment, Service, and migration Job, overlays for staging and production with replicas, resources, and hosts, image tags set from CI, ConfigMap generators with hash suffixes, and use with Argo CD.",[12,98,2372],[12,98,2372],[98,4595],{"path":124,"title":125,"description":5570,"category":4323,"tags":5571,"section":23,"role":18,"priority":126,"type":9,"intent":4291,"difficulty":10,"stack":5572,"topics":5573},"Use Litestream to continuously replicate a Django SQLite database to S3-compatible storage: enable WAL mode, run Litestream as a sidecar or systemd service, restore on startup in containers, test point-in-time recovery, and know the limits of single-writer SQLite.",[12,128,1161],[12,128,129],[4311,4342],{"path":997,"title":998,"description":5575,"category":5145,"tags":5576,"section":214,"role":4440,"priority":999,"type":9,"intent":4371,"difficulty":10,"stack":5577,"topics":5578},"A checklist for putting Django behind a load balancer: health checks that pass host validation, forwarded headers and SECURE_PROXY_SSL_HEADER, correct client IPs, idle and request timeouts, connection draining, sticky sessions avoided, and TLS policy.",[12,1001,5163],[12,1001,39],[4399,4320],{"path":2271,"title":2272,"description":5580,"category":4307,"tags":5581,"section":7,"role":4327,"priority":495,"type":9,"intent":4346,"difficulty":10,"stack":5582,"topics":5583},"Django and Gunicorn log rotation becomes a production issue as soon as your app writes request logs, error logs, or application logs to disk for more than a few days.",[12,72,46],[12,72,46],[4416,4319],{"path":2638,"title":2639,"description":5585,"category":4307,"tags":5586,"section":7,"role":18,"priority":2640,"type":9,"intent":4291,"difficulty":10,"stack":5588,"topics":5589},"Cut log volume from Django, Gunicorn, Nginx, and Celery without losing what matters: set sane log levels per logger, drop health check and static access logs, deduplicate access logging, sample high-volume info logs, and route debug detail to short retention.",[12,2642,5587],"costs",[12,2642,39],[4416],{"path":1003,"title":1004,"description":5591,"category":4307,"tags":5592,"section":7,"role":4440,"priority":181,"type":64,"intent":4291,"difficulty":10,"stack":5593,"topics":5594},"A default Django project does not give you a production-safe logging setup.",[12,72],[12,72],[4416],{"path":1007,"title":1008,"description":5596,"category":4307,"tags":5597,"section":7,"role":4440,"priority":276,"type":9,"intent":4291,"difficulty":10,"stack":5598,"topics":5599},"Put a Django site into maintenance mode safely: an Nginx flag file returning 503 with Retry-After, a static maintenance page, staff IP bypass, health checks, and when to avoid maintenance windows.",[12,39,4377],[12,39],[4380,4399],{"path":1556,"title":1557,"description":5601,"category":5602,"tags":5603,"section":180,"role":4297,"priority":389,"type":182,"intent":4291,"difficulty":44,"stack":5606,"topics":5607},"Fix Django media files returning 404 or 403 in production: MEDIA_URL and MEDIA_ROOT, the static() helper, Nginx alias rules, permissions, and object storage.","Media",[12,5604,5605],"media-files","production",[12,39],[4367,4399],{"path":1011,"title":1012,"description":5609,"category":5145,"tags":5610,"section":214,"role":4440,"priority":1013,"type":9,"intent":4371,"difficulty":10,"stack":5611,"topics":5612},"A production checklist for Django user uploads: object storage instead of local disk, upload limits and validation, private versus public files, unique names, image processing in workers, CDN delivery, backups and versioning, and cleanup of orphaned files.",[12,5140,5163],[12,86,1015],[4367],{"path":21,"title":22,"description":5614,"category":4323,"tags":5615,"section":23,"role":18,"priority":24,"type":9,"intent":4291,"difficulty":10,"stack":5616,"topics":5617},"Run Meilisearch for Django search in production: deploy it with a master key and persistent storage, index models from signals or Celery, use scoped API keys for frontend search, configure filterable and sortable attributes, and rebuild indexes safely.",[12,26,2505],[12,26,27],[4311],{"path":2406,"title":2407,"description":5619,"category":4307,"tags":5620,"section":7,"role":18,"priority":2408,"type":9,"intent":4291,"difficulty":18,"stack":5621,"topics":5622},"Convert a Django AutoField primary key to BigAutoField before it overflows: estimate time to exhaustion, avoid the table-rewriting ALTER on big tables, add a new bigint column with triggers, backfill, swap keys and foreign keys, and handle sequences.",[12,13,1025],[12,13],[1025,4311],{"path":1021,"title":1022,"description":5624,"category":5145,"tags":5625,"section":214,"role":4440,"priority":1023,"type":9,"intent":4291,"difficulty":18,"stack":5626,"topics":5627},"A code-review checklist for Django migrations before they reach production: backward compatibility with running code, locking and table rewrites, large-table operations, data migrations, reversibility, dependencies, and deployment order.",[12,1025,5163],[12,13,1025],[1025],{"path":1027,"title":1028,"description":5629,"category":4307,"tags":5630,"section":7,"role":4440,"priority":902,"type":64,"intent":4291,"difficulty":10,"stack":5631,"topics":5632},"A good app deploy can still fail if the database migration step is unsafe. That is the real problem behind many Django migration deployment issues in production.",[12,13],[12,13],[1025,4380],{"path":1031,"title":1032,"description":5634,"category":5145,"tags":5635,"section":214,"role":4440,"priority":1033,"type":9,"intent":4371,"difficulty":10,"stack":5636,"topics":5637},"A production checklist for Django APIs serving iOS and Android apps: token auth with refresh and revocation, API versioning for old app versions, push notifications through Celery, rate limiting, upload handling, minimum supported versions, and monitoring per app version.",[12,4585,5163],[12,260,27],[4588],{"path":1036,"title":1037,"description":5639,"category":5145,"tags":5640,"section":214,"role":4440,"priority":495,"type":64,"intent":4291,"difficulty":10,"stack":5641,"topics":5642},"Check monitoring coverage for a Django deployment: logs, errors, metrics, traces, uptime, background jobs, database signals, alert routing, and on-call practices.",[12,5471,5224],[12],[4416],{"path":393,"title":394,"description":5644,"category":4307,"tags":5645,"section":7,"role":18,"priority":395,"type":9,"intent":4291,"difficulty":18,"stack":5648,"topics":5649},"Plan a multi-region Django deployment: decide between active-passive and active-active, route users with latency or geo DNS, place PostgreSQL primaries and read replicas, handle sessions, caches, Celery, and media per region, and test regional failover.",[12,5646,5647],"architecture","high-availability",[12,13,379],[4320,4311],{"path":1040,"title":1041,"description":5651,"category":5145,"tags":5652,"section":214,"role":4440,"priority":1042,"type":9,"intent":4371,"difficulty":18,"stack":5653,"topics":5654},"A production checklist for multi-tenant Django SaaS apps: choose shared tables, schemas, or databases, enforce tenant isolation in queries and caches, scope files and background jobs, handle custom domains, run migrations per tenant, and test for cross-tenant leaks.",[12,1044,5163],[12,13,1044],[4311,4330],{"path":2437,"title":2438,"description":5656,"category":4323,"tags":5657,"section":23,"role":18,"priority":2439,"type":9,"intent":4291,"difficulty":10,"stack":5658,"topics":5659},"Instrument a Django app with New Relic: install the Python agent, run Gunicorn and Celery under newrelic-admin, configure app names and environments, track transactions, database queries, and errors, add deploy markers, and control data ingest costs.",[12,5471,2441],[12,2441,72],[4416],{"path":2545,"title":2546,"description":5661,"category":4323,"tags":5662,"section":23,"role":18,"priority":2547,"type":9,"intent":4291,"difficulty":18,"stack":5663,"topics":5664},"Require mutual TLS client certificates for Django admin, internal APIs, or partner integrations with Nginx: create a private CA, issue client certificates, configure ssl_verify_client, pass verified identity to Django, and handle revocation and renewal.",[12,39,59],[12,39,2549],[4330,4399],{"path":2468,"title":2469,"description":5666,"category":5145,"tags":5667,"section":214,"role":4440,"priority":2470,"type":9,"intent":4291,"difficulty":10,"stack":5668,"topics":5669},"A production checklist for Nginx in front of Django: server blocks and redirects, TLS, proxy headers, static and media serving, body size and timeouts, buffering, compression, security headers, logging, and safe reloads.",[12,39,5163],[12,39,72],[4399],{"path":1046,"title":1047,"description":5671,"category":5145,"tags":5672,"section":214,"role":4440,"priority":1048,"type":9,"intent":4371,"difficulty":10,"stack":5673,"topics":5674},"A checklist for observability of a production Django system: structured logs with request IDs, RED metrics for web and Celery, distributed tracing, error tracking, database and queue visibility, SLO-based alerts, dashboards per service, and runbooks linked from alerts.",[12,1050,5163],[12,1050,1051],[4416],{"path":29,"title":30,"description":5676,"category":4307,"tags":5677,"section":7,"role":18,"priority":31,"type":9,"intent":4346,"difficulty":18,"stack":5678,"topics":5679},"Add distributed tracing to Django with OpenTelemetry: instrument Django, PostgreSQL, Redis, and Celery, initialize safely under Gunicorn, and sample.",[12,33,1050],[12,33],[4416],{"path":3026,"title":3027,"description":5681,"category":4307,"tags":5682,"section":7,"role":18,"priority":3028,"type":9,"intent":4291,"difficulty":10,"stack":5683,"topics":5684},"Use orjson to make Django and Django REST Framework JSON serialization faster: an orjson renderer and parser for DRF, an ORJSONResponse for plain views, handling of datetimes, Decimals, and UUIDs, and when JSON encoding is actually your bottleneck.",[12,260,5170],[12,260,3030],[4588,4320],{"path":101,"title":102,"description":5686,"category":4307,"tags":5687,"section":7,"role":18,"priority":103,"type":9,"intent":4291,"difficulty":18,"stack":5689,"topics":5690},"Cache Django ORM queries automatically with django-cachalot or django-cacheops: how invalidation works, when it speeds up read-heavy apps, which tables to exclude, multi-process and raw SQL pitfalls, and how to measure hit rates before trusting it in production.",[12,190,5688],"orm",[12,105,13],[4465,4320],{"path":1190,"title":1191,"description":5692,"category":4307,"tags":5693,"section":7,"role":18,"priority":1192,"type":9,"intent":4291,"difficulty":18,"stack":5695,"topics":5696},"Paginate large Django tables without slow OFFSET and COUNT queries: keyset (cursor) pagination on an indexed column, DRF CursorPagination, avoiding exact counts, admin tips, and when page numbers are still fine.",[12,13,5694],"pagination",[12,13,260],[4311,4320],{"path":1053,"title":1054,"description":5698,"category":5145,"tags":5699,"section":214,"role":4440,"priority":1055,"type":9,"intent":4371,"difficulty":18,"stack":5700,"topics":5701},"A PCI DSS checklist for Django apps accepting card payments: minimize scope with hosted payment fields or redirects, never store card data, secure the pages that load payment scripts, protect against script tampering, manage access, logging, vulnerability scanning, and SAQ evidence.",[12,958,5163],[12,958,59],[4330],{"path":1058,"title":1059,"description":5703,"category":5145,"tags":5704,"section":214,"role":4440,"priority":1060,"type":9,"intent":4371,"difficulty":10,"stack":5705,"topics":5706},"Prepare a Django application for a penetration test: fix the findings testers always report first, agree scope and rules of engagement, set up a production-like test environment with seeded accounts, keep monitoring on, and plan remediation and retesting.",[12,59,5163],[12,59],[4330],{"path":1063,"title":1064,"description":5708,"category":5145,"tags":5709,"section":214,"role":4327,"priority":1065,"type":9,"intent":4371,"difficulty":10,"stack":5710,"topics":5711},"A pre-launch performance checklist for Django: query counts and indexes, caching, static and media delivery, Gunicorn and database sizing, background work, timeouts, and a load test against targets.",[12,5170,5163],[12,13,39,105],[4320],{"path":293,"title":294,"description":5713,"category":4307,"tags":5714,"section":7,"role":4327,"priority":282,"type":9,"intent":4346,"difficulty":10,"stack":5715,"topics":5716},"Use CONN_MAX_AGE and CONN_HEALTH_CHECKS correctly: when persistent connections help, connection math, idle timeouts, ASGI caveats, and measuring gains.",[12,13,5170],[12,13],[4311,4320],{"path":2497,"title":2498,"description":5718,"category":5145,"tags":5719,"section":214,"role":4440,"priority":927,"type":64,"intent":4291,"difficulty":44,"stack":5720,"topics":5721},"Verify a Django release after every deploy: smoke tests, release version checks, migrations, static files, background jobs, and latency monitoring.",[12,4377,5224],[12],[4380,4416],{"path":2396,"title":2397,"description":5723,"category":4307,"tags":5724,"section":7,"role":18,"priority":2398,"type":9,"intent":4291,"difficulty":18,"stack":5725,"topics":5726},"Avoid connection exhaustion when Django runs on Lambda, Cloud Run, Vercel, or autoscaling containers: use pooled endpoints (RDS Proxy, Neon, Supabase pooler, PgBouncer), set CONN_MAX_AGE and server-side cursor options correctly, and cap concurrency per instance.",[12,13,2400],[12,13,2400],[4311,4320],{"path":3216,"title":3217,"description":5728,"category":4307,"tags":5729,"section":7,"role":18,"priority":985,"type":9,"intent":4346,"difficulty":18,"stack":5730,"topics":5731},"Enable Django's native psycopg 3 connection pool: sizing per process, CONN_MAX_AGE rules, health checks, Gunicorn and ASGI behavior, and PgBouncer.",[12,13,1955],[12,13],[4311,4320],{"path":3135,"title":3136,"description":5733,"category":4307,"tags":5734,"section":7,"role":18,"priority":3137,"type":9,"intent":4291,"difficulty":10,"stack":5735,"topics":5736},"Prove your Django backups work by restoring them regularly: automate a restore into a scratch database, measure restore time against your RTO, verify row counts and run Django checks and smoke tests, test point-in-time recovery, and record the results.",[12,13,1161],[12,13,1161],[4342],{"path":2501,"title":2502,"description":5738,"category":4307,"tags":5739,"section":7,"role":18,"priority":2503,"type":9,"intent":4291,"difficulty":18,"stack":5740,"topics":5741},"Run Django search on PostgreSQL full-text search in production: a stored SearchVectorField with a GIN index, weights and ranking, language configurations, trigram similarity for typos, keeping vectors updated, and when to move to a search engine.",[12,13,2505],[12,13,2505],[4311],{"path":2292,"title":2293,"description":5743,"category":4307,"tags":5744,"section":7,"role":18,"priority":2294,"type":9,"intent":4291,"difficulty":18,"stack":5746,"topics":5747},"Speed up Django JSONField lookups on PostgreSQL: choose GinIndex with jsonb_ops or jsonb_path_ops for containment queries, add expression B-tree indexes for specific keys, write queries that can use them, and build the indexes concurrently.",[12,13,5745],"jsonfield",[12,13],[4311,4320],{"path":2654,"title":2655,"description":5749,"category":4307,"tags":5750,"section":7,"role":18,"priority":2656,"type":9,"intent":4291,"difficulty":18,"stack":5752,"topics":5753},"Measure and remove PostgreSQL table and index bloat in a Django database without long locks: estimate bloat, understand why VACUUM FULL blocks the app, run pg_repack on large tables, reindex concurrently, and prevent bloat from returning.",[12,13,5751],"maintenance",[12,13,2658],[4311],{"path":2518,"title":2519,"description":5755,"category":5145,"tags":5756,"section":214,"role":4440,"priority":746,"type":64,"intent":4291,"difficulty":10,"stack":5757,"topics":5758},"Review PostgreSQL for a production Django app: roles and TLS, connections and pooling, memory settings, autovacuum, slow query visibility, backups, and upgrades.",[12,13,4469],[12,13],[4311],{"path":2532,"title":2533,"description":5760,"category":4323,"tags":5761,"section":23,"role":4327,"priority":1741,"type":9,"intent":4346,"difficulty":18,"stack":5762,"topics":5763},"Spin up a temporary Django environment for every pull request: GitHub Actions, Docker Compose on a preview host, wildcard subdomains, per-PR databases with seed data, and automatic teardown.",[12,786,152,92],[12,152,92,13],[786,152],{"path":1068,"title":1069,"description":5765,"category":5145,"tags":5766,"section":214,"role":4440,"priority":282,"type":9,"intent":4291,"difficulty":10,"stack":5767,"topics":5768},"A technical privacy checklist for Django in production: personal data inventory, logs and error tracking, cookies, retention and deletion including backups, exports, encryption, access control, and processors.",[12,355,5163],[12,13],[4330,4459],{"path":1072,"title":1073,"description":5770,"category":5145,"tags":5771,"section":214,"role":4440,"priority":947,"type":64,"intent":4291,"difficulty":44,"stack":5772,"topics":5773},"A lot of Django production incidents come from settings.py, not application code.",[12],[12],[4459,4330],{"path":1076,"title":1077,"description":5775,"category":5145,"tags":5776,"section":214,"role":4327,"priority":304,"type":9,"intent":4371,"difficulty":44,"stack":5777,"topics":5778},"Hand over a production Django project cleanly: repository and access, infrastructure inventory, secrets rotation, deploy and rollback runbooks, backups and restore tests, monitoring, domains, and third-party accounts.",[12,5224,5163],[12,13,379],[4595,4342],{"path":3253,"title":3254,"description":5780,"category":4307,"tags":5781,"section":7,"role":18,"priority":3255,"type":9,"intent":4291,"difficulty":10,"stack":5782,"topics":5783},"Read PostgreSQL query plans for Django ORM queries with QuerySet.explain(analyze=True, buffers=True): spot sequential scans, bad row estimates, sorts, and nested loops, run EXPLAIN safely on production, and turn plans into indexes and queryset fixes.",[12,13,5170],[12,13],[4311,4320],{"path":2620,"title":2621,"description":5785,"category":4307,"tags":5786,"section":7,"role":18,"priority":2622,"type":9,"intent":4291,"difficulty":10,"stack":5787,"topics":5788},"Add application-level rate limiting to Django views with django-ratelimit: protect login, signup, password reset, and search, key limits by IP, user, or field, use a shared Redis cache, get the real client IP behind proxies, and return helpful 429 responses.",[12,59,4426],[12,105],[4330,4588],{"path":2625,"title":2626,"description":5790,"category":5145,"tags":5791,"section":214,"role":4440,"priority":2155,"type":9,"intent":4291,"difficulty":10,"stack":5792,"topics":5793},"A production checklist for Redis in Django stacks: separate roles for cache, sessions, and Celery; memory limits and eviction; persistence; network security and TLS; client timeouts; monitoring; and upgrades.",[12,105,5163],[12,105,27],[4465],{"path":35,"title":36,"description":5795,"category":4307,"tags":5796,"section":7,"role":18,"priority":37,"type":9,"intent":4291,"difficulty":10,"stack":5798,"topics":5799},"Correlate Django logs per request with a request ID: accept or generate X-Request-ID at Nginx or the load balancer, store it in a contextvar, add it to every log line and Sentry event, return it to clients, and pass it to Celery tasks and outbound calls.",[12,2642,5797],"tracing",[12,39,27],[4416],{"path":2201,"title":2202,"description":5801,"category":4307,"tags":5802,"section":7,"role":18,"priority":2203,"type":9,"intent":4291,"difficulty":18,"stack":5803,"topics":5804},"Accept large uploads in Django without timeouts or memory spikes: upload directly to S3 with multipart presigned URLs, use the tus resumable protocol, tune Nginx and Django upload limits, process files in Celery, and validate files after upload.",[12,5450,86],[12,86,39],[4367],{"path":1089,"title":1090,"description":5806,"category":5145,"tags":5807,"section":214,"role":4327,"priority":1091,"type":9,"intent":4371,"difficulty":10,"stack":5808,"topics":5809},"A launch checklist for a Django SaaS product: production settings and security, tenant isolation, authentication and 2FA, billing webhooks, email deliverability, backups, monitoring, legal pages and data protection, support, and capacity.",[12,1044,5163],[12,1093,13],[4380,4330],{"path":2828,"title":2829,"description":5811,"category":4307,"tags":5812,"section":7,"role":18,"priority":772,"type":9,"intent":4346,"difficulty":18,"stack":5813,"topics":5814},"Change large PostgreSQL tables from Django migrations without outages: lock_timeout, concurrent indexes, NOT VALID constraints, and batched backfills.",[12,1025,13],[12,13],[1025,4311],{"path":1095,"title":1096,"description":5816,"category":5145,"tags":5817,"section":214,"role":4440,"priority":138,"type":64,"intent":4291,"difficulty":10,"stack":5819,"topics":5820},"Check every HTTP security header a Django site should send: HSTS, CSP, frame options, nosniff, referrer and permissions policies, COOP, and cookie flags.",[12,59,5818],"headers",[12,39,59],[4330,4499],{"path":55,"title":56,"description":5822,"category":4307,"tags":5823,"section":7,"role":18,"priority":57,"type":9,"intent":4291,"difficulty":44,"stack":5825,"topics":5826},"Publish \u002F.well-known\u002Fsecurity.txt from Django with contact, expiry, policy, and encryption fields, set up a vulnerability disclosure policy and intake mailbox, triage reports, and avoid common mistakes like expired files and unmonitored addresses.",[12,59,5824],"disclosure",[12,59],[4330],{"path":3176,"title":3177,"description":5828,"category":4307,"tags":5829,"section":7,"role":18,"priority":3178,"type":9,"intent":4291,"difficulty":10,"stack":5830,"topics":5831},"Control Sentry volume and cost for Django: keep error sample_rate at 1.0, set traces_sample_rate or a traces_sampler that keeps slow and critical transactions, drop health checks and noisy errors with before_send, and use rate limits and spike protection.",[12,2016,5471],[12,2016],[4416],{"path":3016,"title":3017,"description":5833,"category":4307,"tags":5834,"section":7,"role":4440,"priority":615,"type":64,"intent":4371,"difficulty":10,"stack":5836,"topics":5837},"Estimate CPU, memory, and database capacity for Django: measure per-request costs, calculate worker counts, plan headroom, load test, and scale.",[12,5835,5170],"capacity",[12,72],[4320],{"path":218,"title":219,"description":5839,"category":5145,"tags":5840,"section":214,"role":4440,"priority":220,"type":9,"intent":4371,"difficulty":44,"stack":5841,"topics":5842},"Shut down an old Django server safely after a migration: confirm no traffic or jobs remain, take final backups, export logs, revoke credentials and keys, remove DNS records and firewall rules, wipe disks, cancel billing, and update documentation.",[12,5224,5163],[12,46],[4319],{"path":2313,"title":2314,"description":5844,"category":5145,"tags":5845,"section":214,"role":4440,"priority":389,"type":64,"intent":4291,"difficulty":10,"stack":5846,"topics":5847},"Harden a Linux server running Django: SSH keys, firewall rules, automatic security updates, least-privilege users, systemd sandboxing, fail2ban, and audit checks.",[12,46,59],[12,46,59],[4330,4319],{"path":2908,"title":2909,"description":5849,"category":4323,"tags":5850,"section":23,"role":18,"priority":2910,"type":9,"intent":4291,"difficulty":18,"stack":5851,"topics":5852},"Use SigNoz, an open-source OpenTelemetry-native observability platform, with Django: install OpenTelemetry instrumentation, export traces and metrics over OTLP, ship logs with trace IDs, self-host SigNoz or use SigNoz Cloud, and build dashboards and alerts.",[12,33,5471],[12,33,2912],[4416],{"path":1084,"title":1085,"description":5854,"category":5145,"tags":5855,"section":214,"role":4440,"priority":1086,"type":9,"intent":4371,"difficulty":18,"stack":5856,"topics":5857},"A technical readiness checklist for SOC 2 on a Django application: access control and MFA, change management through CI\u002FCD, logging and monitoring, encryption, backups and recovery tests, vulnerability management, vendor review, and evidence collection.",[12,981,5163],[12,981,59],[4330,4416],{"path":3246,"title":3247,"description":5859,"category":4323,"tags":5860,"section":23,"role":18,"priority":3248,"type":9,"intent":4291,"difficulty":18,"stack":5861,"topics":5862},"Run Django on Microsoft SQL Server or Azure SQL with mssql-django: install the ODBC driver in Docker or Linux, configure the connection and encryption, handle collation and Unicode, migrations, and connection pooling, and know the backend’s limitations.",[12,3250,424],[12,3250,3251],[4311],{"path":2356,"title":2357,"description":5864,"category":4307,"tags":5865,"section":7,"role":4327,"priority":729,"type":9,"intent":4346,"difficulty":10,"stack":5866,"topics":5867},"Cache Django static files for a year without stale assets: manifest hashing, immutable Cache-Control headers in Nginx and WhiteNoise, CDNs, and deploy order.",[12,4391,190],[12,39],[4391,4320],{"path":1103,"title":1104,"description":5869,"category":5145,"tags":5870,"section":214,"role":4440,"priority":1105,"type":9,"intent":4291,"difficulty":44,"stack":5871,"topics":5872},"A production checklist for Django static files: STATIC_ROOT and collectstatic in the build, manifest storage for cache busting, serving with WhiteNoise, Nginx, or a CDN, cache headers, compression, frontend bundles, and admin assets.",[12,4391,5163],[12,170,39],[4391],{"path":1108,"title":1109,"description":5874,"category":4323,"tags":5875,"section":23,"role":4316,"priority":947,"type":64,"intent":4291,"difficulty":44,"stack":5876,"topics":5877},"Many Django deployments break because static files and media files are treated as the same thing.",[12,170],[12,170],[4391,4367],{"path":3117,"title":3118,"description":5879,"category":4307,"tags":5880,"section":7,"role":18,"priority":3119,"type":9,"intent":4291,"difficulty":10,"stack":5881,"topics":5882},"Switch Django to structured JSON logs for production: configure python-json-logger or structlog, include request ID, user, and timing fields, keep Gunicorn and Celery logs consistent, avoid logging secrets, and query logs in Loki, CloudWatch, or Datadog.",[12,2642,1050],[12,3121,2642],[4416],{"path":3042,"title":3043,"description":5884,"category":4307,"tags":5885,"section":7,"role":18,"priority":3044,"type":9,"intent":4291,"difficulty":10,"stack":5886,"topics":5887},"Use Django template fragment caching in production: the cache tag with vary-on keys, per-user and per-language fragments, cached template loaders, invalidation with make_template_fragment_key, and avoiding stale or leaked content.",[12,190,366],[12,105,366],[4465,4320],{"path":1112,"title":1113,"description":5889,"category":5145,"tags":5890,"section":214,"role":4440,"priority":1114,"type":9,"intent":4291,"difficulty":10,"stack":5891,"topics":5892},"Prepare a Django app for a launch, sale, TV mention, or viral post: load test the critical paths, cache anonymous pages at the edge, protect the database, scale workers and queues, add rate limits and graceful degradation, and staff the event.",[12,5170,5163],[12,1116,13],[4320],{"path":3276,"title":3277,"description":5894,"category":4307,"tags":5895,"section":7,"role":18,"priority":3278,"type":9,"intent":4291,"difficulty":18,"stack":5896,"topics":5897},"Stop losing or duplicating side effects when Django saves data and enqueues Celery tasks: compare transaction.on_commit with a transactional outbox table, write outbox rows atomically, relay them with a worker using SKIP LOCKED, and make consumers idempotent.",[12,27,4420],[12,27,13],[27,4311],{"path":3258,"title":3259,"description":5899,"category":4323,"tags":5900,"section":23,"role":18,"priority":3260,"type":9,"intent":4291,"difficulty":10,"stack":5901,"topics":5902},"Use Typesense with Django in production: run a Typesense node or cluster with an API key and persistent data, define collection schemas, sync models from Celery, use scoped search keys in the frontend, and rebuild collections with aliases for zero downtime.",[12,3262,2505],[12,3262,27],[4311],{"path":1118,"title":1119,"description":5904,"category":5145,"tags":5905,"section":214,"role":4440,"priority":581,"type":64,"intent":4291,"difficulty":10,"stack":5907,"topics":5908},"Upgrade Django in production safely: plan the target version, read release notes, fix deprecations, upgrade dependencies, test, deploy, and roll back if needed.",[12,5906,5751],"upgrades",[12],[4349,4380],{"path":3264,"title":3265,"description":5910,"category":4323,"tags":5911,"section":23,"role":18,"priority":3266,"type":9,"intent":4291,"difficulty":44,"stack":5912,"topics":5913},"Use Upstash serverless Redis with Django for caching, sessions, rate limiting, and Celery: connect over rediss:\u002F\u002F with TLS, understand per-request pricing and connection limits, choose regions, and know when the REST API suits serverless deployments better.",[12,105,2400],[12,105,3268],[4465,66],{"path":2452,"title":2453,"description":5915,"category":4323,"tags":5916,"section":23,"role":18,"priority":2454,"type":9,"intent":4291,"difficulty":44,"stack":5918,"topics":5919},"Self-host Uptime Kuma to monitor Django: add HTTP checks against a health endpoint with keyword matching, monitor TLS expiry, use push monitors for Celery beat and cron jobs, send alerts to email, Slack, or Telegram, and publish a status page.",[12,5471,5917],"uptime",[12,2456,152],[4416],{"path":2991,"title":2992,"description":5921,"category":4307,"tags":5922,"section":7,"role":4327,"priority":784,"type":9,"intent":4346,"difficulty":44,"stack":5924,"topics":5925},"Set up external uptime monitoring for Django: what to check, health endpoints, keyword and SSL checks, heartbeats for jobs, and alert routing.",[12,5471,5923],"alerts",[12],[4416],{"path":3270,"title":3271,"description":5927,"category":4323,"tags":5928,"section":23,"role":18,"priority":3272,"type":9,"intent":4291,"difficulty":10,"stack":5929,"topics":5930},"Use Valkey, the open-source Redis fork, with Django: connect Django’s Redis cache backend or django-valkey, run Celery and Channels against it, migrate from Redis with replication or snapshots, and use managed Valkey on AWS, Google Cloud, and DigitalOcean.",[12,3274,105],[12,3274,27],[4465],{"path":2599,"title":2600,"description":5932,"category":4323,"tags":5933,"section":23,"role":18,"priority":2601,"type":9,"intent":4291,"difficulty":18,"stack":5934,"topics":5935},"Use Varnish as an HTTP cache in front of Django: send correct Cache-Control headers from views, write VCL that bypasses logged-in users and POST requests, strip tracking cookies, purge or ban pages on content changes, and run Varnish with Nginx for TLS.",[12,2603,190],[12,2603,39],[4465,4399],{"path":2999,"title":3000,"description":5937,"category":4323,"tags":5938,"section":23,"role":18,"priority":3001,"type":9,"intent":4291,"difficulty":10,"stack":5939,"topics":5940},"Use Vector to collect Django, Gunicorn, Nginx, and Celery logs from files, journald, or Docker, parse JSON logs, drop noise and redact secrets, enrich with host and environment, and send them to Loki, Elasticsearch, S3, or a hosted log service.",[12,2642,3003],[12,3003,2642],[4416],{"path":3105,"title":3106,"description":5942,"category":4323,"tags":5943,"section":23,"role":18,"priority":3107,"type":9,"intent":4291,"difficulty":44,"stack":5944,"topics":5945},"Use Wasabi S3-compatible storage for Django media and backups with django-storages: set the regional endpoint, create a restricted policy, serve files with presigned URLs or a CDN, and understand minimum storage duration and egress terms.",[12,3109,86],[12,3109,1015],[4367],{"path":2536,"title":2537,"description":5947,"category":4307,"tags":5948,"section":7,"role":18,"priority":2538,"type":9,"intent":4291,"difficulty":10,"stack":5949,"topics":5950},"Build reliable webhook endpoints in Django: verify signatures, store the raw event first, return 2xx quickly, process asynchronously with Celery, deduplicate by event ID, handle out-of-order delivery, and replay failed events safely.",[12,4944,27],[12,27,13],[4588,27],{"path":311,"title":312,"description":5952,"category":4323,"tags":5953,"section":23,"role":18,"priority":313,"type":9,"intent":4291,"difficulty":18,"stack":5954,"topics":5955},"Use WireGuard to connect Django app servers to PostgreSQL, Redis, and workers across hosts or providers: generate keys, configure wg0 interfaces, bind databases to the tunnel address, restrict firewalls, and keep Django connection settings on private IPs.",[12,315,59],[12,315,46],[4330,4319],{"path":3152,"title":3153,"description":5957,"category":4323,"tags":5958,"section":23,"role":18,"priority":3154,"type":9,"intent":4291,"difficulty":10,"stack":5959,"topics":5960},"Set up Woodpecker CI, a lightweight self-hosted CI engine, for Django: write .woodpecker.yaml pipelines with a PostgreSQL service, run tests and linting, build and push images with the buildx plugin, deploy over SSH on main, and manage secrets.",[12,3156,786],[12,3156,152],[786],{"path":1122,"title":1123,"description":5962,"category":4323,"tags":5963,"section":23,"role":4316,"priority":902,"type":64,"intent":4291,"difficulty":44,"stack":5964,"topics":5965},"When you deploy Django in production, you will see both WSGI and ASGI recommended.",[12,72,391],[12,72,391],[4622,4493],{"path":1138,"title":1139,"description":5967,"category":4323,"tags":5968,"section":23,"role":4316,"priority":1140,"type":64,"intent":4371,"difficulty":44,"stack":5969,"topics":5970},"Should you deploy Django with Docker or directly on a VPS with systemd? Compare reproducibility, deploy workflow, performance, debugging, security updates, and team skills, with a recommendation for solo developers, small teams, and growing apps.",[12,152,4892],[12,152,46],[152,4319],{"path":2250,"title":2251,"description":5972,"category":4323,"tags":5973,"section":23,"role":4327,"priority":209,"type":9,"intent":4346,"difficulty":44,"stack":5974,"topics":5975},"A Dockerized Django app that works in development is not automatically safe for production.",[12,152],[12,152],[152],{"path":256,"title":257,"description":5977,"category":4307,"tags":5978,"section":7,"role":18,"priority":258,"type":9,"intent":4291,"difficulty":10,"stack":5979,"topics":5980},"Set up Django REST Framework throttling that works in production: shared Redis cache, AnonRateThrottle and UserRateThrottle defaults, ScopedRateThrottle per endpoint, correct client IPs behind proxies with NUM_PROXIES, Retry-After headers, and custom throttles per API key.",[12,260,4426],[12,260,105],[4588,4465],{"path":2660,"title":2661,"description":5982,"category":4307,"tags":5983,"section":7,"role":18,"priority":2662,"type":9,"intent":4291,"difficulty":18,"stack":5984,"topics":5985},"Drop a Django model field and its database column safely during rolling deploys: stop using the field in code first, remove it from Django’s state with SeparateDatabaseAndState, drop the column in a later release, and handle NOT NULL columns and dependent indexes.",[12,1025,5551],[12,13],[1025,4380],{"path":1143,"title":1144,"description":5987,"category":4307,"tags":5988,"section":7,"role":4440,"priority":511,"type":9,"intent":4291,"difficulty":44,"stack":5989,"topics":5990},"Keep a Django server patched automatically: unattended-upgrades on Ubuntu and Debian or dnf-automatic on RHEL, security-only origins, service restarts, reboot windows, exclusions for PostgreSQL, and monitoring.",[12,46,59],[12,635,46],[4330,4319],{"path":1147,"title":1148,"description":5992,"category":4307,"tags":5993,"section":7,"role":4327,"priority":937,"type":9,"intent":4346,"difficulty":10,"stack":5994,"topics":5995},"Compress Django responses and static files correctly: Nginx gzip settings, precompressed static assets, Brotli support, BREACH caveats, and checks.",[12,39,5170],[12,39],[4320,4399],{"path":1151,"title":1152,"description":5997,"category":4307,"tags":5998,"section":7,"role":18,"priority":1153,"type":9,"intent":4291,"difficulty":10,"stack":5999,"topics":6000},"Serve a Django site over HTTP\u002F2 and HTTP\u002F3 (QUIC) with Nginx: version-specific directives, Alt-Svc, UDP 443, keeping HTTP\u002F1.1 to Gunicorn, verifying with curl, and what actually gets faster.",[12,39,5170],[12,39,1155],[4399,4320],{"path":1157,"title":1158,"description":6002,"category":4307,"tags":6003,"section":7,"role":18,"priority":1159,"type":9,"intent":4291,"difficulty":10,"stack":6004,"topics":6005},"Encrypt PostgreSQL dumps and media backups for a Django app: use age or GPG for client-side encryption, restic or pgBackRest built-in encryption, server-side encryption with KMS on S3, manage and store keys separately, and test restores with decryption.",[12,1161,59],[12,13,1161],[4342,4330],{"path":1163,"title":1164,"description":6007,"category":4323,"tags":6008,"section":23,"role":18,"priority":1165,"type":9,"intent":4291,"difficulty":10,"stack":6009,"topics":6010},"Keep Django environment secrets encrypted in the repository with Mozilla SOPS and age: encrypt .env and YAML files, decrypt during deploys with Ansible or CI, use cloud KMS keys for teams, and keep keys out of Git.",[12,1167,2394],[12,1167,1168],[4459,4595],{"path":1175,"title":1176,"description":6012,"category":4323,"tags":6013,"section":23,"role":18,"priority":1177,"type":9,"intent":4291,"difficulty":18,"stack":6015,"topics":6016},"Route HTTPS traffic to Django on Kubernetes with the Gateway API or a maintained Ingress controller: HTTPRoutes or Ingress rules, TLS with cert-manager, forwarded headers, body size and timeouts, and moving off the retired ingress-nginx.",[12,98,6014],"ingress",[12,98,99],[98,4399],{"path":1195,"title":1196,"description":6018,"category":4307,"tags":6019,"section":7,"role":4440,"priority":891,"type":9,"intent":4291,"difficulty":10,"stack":6020,"topics":6021},"Enable pg_stat_statements for a Django app, rank queries by total time, trace them back to ORM code, confirm plans with EXPLAIN ANALYZE, and fix them with indexes and better querysets.",[12,13,5170],[12,13],[4320,4311],{"path":1275,"title":1276,"description":6023,"category":4287,"tags":6024,"section":180,"role":4297,"priority":1277,"type":182,"intent":4291,"difficulty":10,"stack":6025,"topics":6026},"Fix the Apache mod_wsgi error Target WSGI script cannot be loaded as Python module for Django: match mod_wsgi to your Python version, set python-home and python-path, fix permissions on the project and virtualenv, and read the real exception below it.",[12,472,473],[12,472,473],[4493],{"path":1208,"title":1209,"description":6028,"category":4287,"tags":6029,"section":180,"role":4297,"priority":1210,"type":182,"intent":4291,"difficulty":44,"stack":6030,"topics":6031},"Understand and silence the Uvicorn message ASGI lifespan protocol appears unsupported when serving Django: why Django does not handle lifespan events, how to turn lifespan off, and where to put startup code instead.",[12,391,909],[12,391,909],[4622,4493],{"path":1336,"title":1337,"description":6033,"category":4287,"tags":6034,"section":180,"role":4297,"priority":1338,"type":182,"intent":4291,"difficulty":18,"stack":6035,"topics":6036},"Fix intermittent and constant 502 Bad Gateway errors from an AWS Application Load Balancer in front of Django: keepalive timeouts shorter than the ALB idle timeout, unhealthy targets, security groups, and HTTP\u002FHTTPS target mismatches.",[12,79,1001],[12,79,72],[79,4399],{"path":2109,"title":2110,"description":6038,"category":4287,"tags":6039,"section":180,"role":4297,"priority":2111,"type":182,"intent":4291,"difficulty":10,"stack":6040,"topics":6041},"Fix botocore NoCredentialsError Unable to locate credentials in Django with django-storages or SES: give the process an IAM role or environment credentials, fix systemd and Docker env loading, IMDSv2 hop limits, and region settings.",[12,79,86],[12,79,2113],[79,4367],{"path":2058,"title":2059,"description":6043,"category":4287,"tags":6044,"section":180,"role":4297,"priority":2060,"type":182,"intent":4291,"difficulty":10,"stack":6046,"topics":6047},"Fix a Django virtualenv that breaks after upgrading Ubuntu or Debian or changing the Python version: errors like No module named encodings and bad interpreter, recreating the venv safely, and avoiding downtime during the switch.",[12,6045,635],"virtualenv",[12,272,635],[4349,4319],{"path":1377,"title":1378,"description":6049,"category":4287,"tags":6050,"section":180,"role":4297,"priority":1379,"type":182,"intent":4291,"difficulty":10,"stack":6052,"topics":6053},"Fix Celery periodic tasks running twice in Django: duplicate Beat processes, -B on workers, overlapping deploys, duplicate schedules, and redelivery.",[12,27,6051],"scheduling",[12,27],[27],{"path":1373,"title":1374,"description":6055,"category":4287,"tags":6056,"section":180,"role":4297,"priority":734,"type":182,"intent":4291,"difficulty":10,"stack":6058,"topics":6059},"Fix Celery Beat that runs but never sends periodic tasks in Django: check that Beat is actually running, the scheduler and timezone settings, django-celery-beat database schedules, stale schedule files, and queue routing.",[12,27,6057],"beat",[12,27],[27],{"path":1368,"title":1369,"description":6061,"category":4287,"tags":6062,"section":180,"role":4297,"priority":1370,"type":182,"intent":4291,"difficulty":44,"stack":6063,"topics":6064},"Fix Celery beat failing with ERROR: Pidfile (celerybeat.pid) already exists. Seems we’re already running? after container or server restarts: disable the pidfile in Docker, place it in \u002Frun under systemd, and make sure only one beat runs.",[12,27,152],[12,27,152],[27,152],{"path":1382,"title":1383,"description":6066,"category":4287,"tags":6067,"section":180,"role":4297,"priority":651,"type":182,"intent":4291,"difficulty":44,"stack":6068,"topics":6069},"Fix Celery workers that log Cannot connect to amqp:\u002F\u002Fguest@127.0.0.1:5672 when you configured Redis: load Django settings in celery.py, use the CELERY_ namespace correctly, and pass the broker URL to every process.",[12,27,105],[12,27,105],[27,4459],{"path":1359,"title":1360,"description":6071,"category":4287,"tags":6072,"section":180,"role":4297,"priority":1361,"type":182,"intent":4291,"difficulty":44,"stack":6073,"topics":6074},"Fix Celery errors No result backend is configured and DisabledBackend object has no attribute _get_task_meta_for in Django: configure CELERY_RESULT_BACKEND, load settings with the CELERY namespace, or stop calling .get() on tasks that do not need results.",[12,27,105],[12,27,105],[27],{"path":1364,"title":1365,"description":6076,"category":4287,"tags":6077,"section":180,"role":4297,"priority":548,"type":182,"intent":4291,"difficulty":10,"stack":6078,"topics":6079},"Fix the Celery KeyError and Received unregistered task of type message in Django: make workers import the same task modules as the web app, align task names, and stop stale queued messages from old releases.",[12,27,4951],[12,27,105],[27],{"path":1386,"title":1387,"description":6081,"category":4287,"tags":6082,"section":180,"role":4297,"priority":766,"type":182,"intent":4291,"difficulty":10,"stack":6083,"topics":6084},"Fix Celery SoftTimeLimitExceeded and TimeLimitExceeded errors in Django: find why tasks run long, set soft and hard limits that fit the work, clean up on the soft limit, and split slow jobs into chunks.",[12,27,5170],[12,27],[27,4320],{"path":1265,"title":1266,"description":6086,"category":4287,"tags":6087,"section":180,"role":4297,"priority":1267,"type":182,"intent":4291,"difficulty":18,"stack":6088,"topics":6089},"Fix PostgreSQL errors SSL error decryption failed or bad record mac and SSL SYSCALL error EOF detected in Celery workers or preloaded Gunicorn: stop sharing database connections across fork, close connections before forking, and use per-process connections.",[12,27,13],[12,27,13],[27,4311],{"path":1390,"title":1391,"description":6091,"category":4287,"tags":6092,"section":180,"role":4297,"priority":718,"type":182,"intent":4291,"difficulty":18,"stack":6093,"topics":6094},"Fix Celery tasks that run two or three times with a Redis broker: understand visibility_timeout, ETA and countdown redelivery, acks_late, and make long or scheduled tasks safe from duplicate execution.",[12,27,105],[12,27,105],[27,4465],{"path":1394,"title":1395,"description":6096,"category":4287,"tags":6097,"section":180,"role":4297,"priority":823,"type":182,"intent":4291,"difficulty":10,"stack":6098,"topics":6099},"Fix Celery tasks that raise Model.DoesNotExist for an object the view just created: queue tasks with transaction.on_commit, understand ATOMIC_REQUESTS, read replicas, and pass IDs instead of model instances.",[12,27,13],[12,27,13],[27,4311],{"path":1398,"title":1399,"description":6101,"category":4287,"tags":6102,"section":180,"role":4297,"priority":1182,"type":182,"intent":4291,"difficulty":10,"stack":6103,"topics":6104},"Fix Celery workers that keep executing old task code after a Django deploy: restart every worker gracefully, check which release each worker runs, and keep task signatures compatible across versions.",[12,27,4377],[12,27,798],[27,4380],{"path":1402,"title":1403,"description":6106,"category":4287,"tags":6107,"section":180,"role":4297,"priority":144,"type":182,"intent":4291,"difficulty":10,"stack":6108,"topics":6109},"Fix Celery tasks that stay PENDING in Django: missing result backends, workers not consuming queues, routing mismatches, unregistered tasks, and commit timing.",[12,27,105],[12,27,105],[27],{"path":1406,"title":1407,"description":6111,"category":4287,"tags":6112,"section":180,"role":4297,"priority":841,"type":182,"intent":4291,"difficulty":10,"stack":6113,"topics":6114},"Fix Celery WorkerLostError 'Worker exited prematurely: signal 9 (SIGKILL)' in Django: find OOM kills and short stop timeouts, cap memory per child, chunk big tasks, and redeliver safely.",[12,27,4315],[12,27,46],[27,4320],{"path":2063,"title":2064,"description":6116,"category":4287,"tags":6117,"section":180,"role":4297,"priority":811,"type":182,"intent":4291,"difficulty":10,"stack":6118,"topics":6119},"Fix Celery worker memory that grows until the OOM killer strikes: recycle children with max-tasks-per-child and max-memory-per-child, find the task that leaks, and avoid DEBUG query logging and large result sets.",[12,27,4315],[12,27,46],[27,4320],{"path":1410,"title":1411,"description":6121,"category":4287,"tags":6122,"section":180,"role":4297,"priority":1412,"type":182,"intent":4291,"difficulty":44,"stack":6123,"topics":6124},"Fix Certbot Challenge failed for domain errors when getting a first Let's Encrypt certificate for Django: unauthorized 404 on the ACME path, DNS problems, closed port 80, Cloudflare proxying, and redirects that break HTTP-01.",[12,284,1155],[12,39,284],[4499],{"path":1776,"title":1777,"description":6126,"category":4287,"tags":6127,"section":180,"role":4297,"priority":506,"type":182,"intent":4291,"difficulty":10,"stack":6128,"topics":6129},"Fix Certbot renewal failures for Django sites on Nginx: dry runs, timer checks, HTTP-01 challenge paths, redirects, firewalls, DNS changes, and reload hooks.",[1155,284,39],[39,284],[4499],{"path":1415,"title":1416,"description":6131,"category":4287,"tags":6132,"section":180,"role":4297,"priority":1417,"type":182,"intent":4291,"difficulty":10,"stack":6133,"topics":6134},"Fix Cloudflare Error 521 web server is down and Error 522 connection timed out in front of Django: check that Nginx listens, allow Cloudflare IPs through the firewall, match the SSL mode to the origin, and fix origin DNS records.",[12,189,39],[12,189,39],[4399,4499],{"path":1420,"title":1421,"description":6136,"category":4287,"tags":6137,"section":180,"role":4297,"priority":1422,"type":182,"intent":4291,"difficulty":10,"stack":6138,"topics":6139},"Fix Cloudflare Error 524 a timeout occurred for slow Django views: understand the 100-second proxy limit, move exports and reports to Celery with polling, stream responses, and bypass the proxy for genuinely long admin tasks.",[12,189,27],[12,189,27],[4399,4320],{"path":1425,"title":1426,"description":6141,"category":4287,"tags":6142,"section":180,"role":4297,"priority":1427,"type":182,"intent":4291,"difficulty":10,"stack":6143,"topics":6144},"Fix Cloudflare Error 525 SSL handshake failed and Error 526 invalid SSL certificate in front of Django: match the SSL\u002FTLS mode to the origin, install a valid or Origin CA certificate on Nginx, open port 443, and check SNI and expiry.",[12,189,380],[12,189,39],[4499],{"path":2125,"title":2126,"description":6146,"category":4287,"tags":6147,"section":180,"role":4297,"priority":927,"type":182,"intent":4291,"difficulty":10,"stack":6148,"topics":6149},"Fix Django collectstatic failures: missing STATIC_ROOT, broken CSS references, source map errors, duplicate paths, permissions, and build-time settings.",[12,4391,4377],[12],[4391],{"path":2120,"title":2121,"description":6151,"category":4287,"tags":6152,"section":180,"role":4297,"priority":2122,"type":182,"intent":4291,"difficulty":44,"stack":6153,"topics":6154},"Fix the Phusion Passenger error page We’re sorry, but something went wrong \u002F Web application could not be started for Django on cPanel: set up passenger_wsgi.py correctly, use the app’s virtualenv, read the stderr log, and fix static files and restarts.",[12,701,702],[12,701,702],[4319,4493],{"path":178,"title":179,"description":6156,"category":4287,"tags":6157,"section":180,"role":4297,"priority":181,"type":182,"intent":4291,"difficulty":44,"stack":6158,"topics":6159},"CSRF Verification Failed in Django production usually appears after a deployment change that affects domains, HTTPS, cookies, or proxy headers.",[12],[12],[4459,4499],{"path":1438,"title":1439,"description":6161,"category":4287,"tags":6162,"section":180,"role":4297,"priority":1440,"type":182,"intent":4291,"difficulty":10,"stack":6163,"topics":6164},"Fix DigitalOcean App Platform deploys that fail with health check failed or container exited for Django: bind Gunicorn to the right port, configure the HTTP health check path, allow the internal host, give migrations a pre-deploy job, and size the instance.",[12,550,5524],[12,550,72],[66],{"path":2254,"title":2255,"description":6166,"category":4287,"tags":6167,"section":180,"role":4297,"priority":947,"type":182,"intent":4291,"difficulty":44,"stack":6168,"topics":6169},"A DisallowedHost error in Django production means Django rejected the incoming Host header. This is a security check, not a random app failure.",[12],[12],[4459],{"path":1464,"title":1465,"description":6171,"category":4287,"tags":6172,"section":180,"role":4297,"priority":1466,"type":182,"intent":4291,"difficulty":44,"stack":6174,"topics":6175},"Fix 403 Forbidden errors on a Django site in production: tell Nginx 403s from Django 403s, fix CSRF failures, file permissions on static and media, permission checks in views, and WAF or Cloudflare blocks.",[12,39,6173],"permissions",[12,39,189],[4330,4399],{"path":1469,"title":1470,"description":6177,"category":4287,"tags":6178,"section":180,"role":4297,"priority":495,"type":182,"intent":4291,"difficulty":44,"stack":6180,"topics":6181},"Find the real cause of a Django 500 error in production: where tracebacks go with DEBUG off, logging setup, common causes, safe reproduction, and verification.",[12,6179,2642],"errors",[12],[4416,4459],{"path":1473,"title":1474,"description":6183,"category":4287,"tags":6184,"section":180,"role":4297,"priority":133,"type":182,"intent":4291,"difficulty":10,"stack":6185,"topics":6186},"Diagnose Django 504 Gateway Timeout errors behind Nginx: find the slow layer, align proxy and Gunicorn timeouts, fix slow views, and offload long work.",[12,39,72],[12,39,72],[4399,4320],{"path":1477,"title":1478,"description":6188,"category":4287,"tags":6189,"section":180,"role":4297,"priority":581,"type":182,"intent":4291,"difficulty":44,"stack":6190,"topics":6191},"Fix an unstyled Django admin in production: collectstatic, STATIC_URL and alias paths, WhiteNoise order, MIME types, subpath deployments, CSP, and mixed content.",[12,4325,4391],[12,39],[4391],{"path":2100,"title":2101,"description":6193,"category":4287,"tags":6194,"section":180,"role":4297,"priority":877,"type":182,"intent":4291,"difficulty":10,"stack":6195,"topics":6196},"Speed up Django admin changelists and forms on tables with millions of rows: avoid full counts, add list_select_related, use autocomplete and raw ID fields, index search and ordering, and limit filters.",[12,4325,5170],[12,13],[4320,4311],{"path":3302,"title":3303,"description":6198,"category":4287,"tags":6199,"section":180,"role":4297,"priority":3304,"type":182,"intent":4291,"difficulty":10,"stack":6200,"topics":6201},"Fix Django Docker builds that fail or crawl on python:alpine: understand musl and missing wheels, install the right build packages for psycopg, Pillow, and cryptography, or switch to python:slim for faster, smaller, more reliable images.",[12,152,3306],[12,152,3306],[152,4349],{"path":1346,"title":1347,"description":6203,"category":4287,"tags":6204,"section":180,"role":4297,"priority":734,"type":182,"intent":4291,"difficulty":10,"stack":6206,"topics":6207},"Fix Apps not loaded yet and settings not configured errors in Celery workers, cron scripts, and Gunicorn config: set DJANGO_SETTINGS_MODULE, call django.setup() first, and avoid early model imports.",[12,27,6205],"scripts",[12,27,272],[27,4459],{"path":1213,"title":1214,"description":6209,"category":4287,"tags":6210,"section":180,"role":4297,"priority":1215,"type":182,"intent":4291,"difficulty":10,"stack":6211,"topics":6212},"Fix the Django ImproperlyConfigured error AUTH_USER_MODEL refers to model that has not been installed: check the app_label.ModelName format, INSTALLED_APPS, import order, and what to do when switching to a custom user model on an existing database.",[12,5208,1025],[12,272],[1025],{"path":1481,"title":1482,"description":6214,"category":4287,"tags":6215,"section":180,"role":4297,"priority":1483,"type":182,"intent":4291,"difficulty":10,"stack":6216,"topics":6217},"Fix Django REST Framework returning authentication credentials were not provided because the Authorization header never reaches Django: enable WSGIPassAuthorization in mod_wsgi, check Nginx and load balancer header forwarding, and test with curl at each hop.",[12,260,5208],[12,260,472],[4588,4399],{"path":1449,"title":1450,"description":6219,"category":4287,"tags":6220,"section":180,"role":4297,"priority":1451,"type":182,"intent":4291,"difficulty":44,"stack":6223,"topics":6224},"Fix the plain Bad Request (400) page Django returns in production: DisallowedHost from ALLOWED_HOSTS, invalid HTTP_HOST from health checks, oversized or malformed requests, missing CSRF origins, and how to log the real reason.",[12,6221,6222],"allowed-hosts","debugging",[12,39],[4459],{"path":2115,"title":2116,"description":6226,"category":4287,"tags":6227,"section":180,"role":4297,"priority":2117,"type":182,"intent":4291,"difficulty":10,"stack":6229,"topics":6230},"Fix Django request.build_absolute_uri and is_secure returning http behind an HTTPS proxy: set SECURE_PROXY_SSL_HEADER, forward X-Forwarded-Proto from Nginx or the load balancer, and fix OAuth callbacks, API pagination links, and emails.",[12,1155,6228],"proxy",[12,39,260],[4499,4459],{"path":1491,"title":1492,"description":6232,"category":4287,"tags":6233,"section":180,"role":4297,"priority":778,"type":182,"intent":4291,"difficulty":10,"stack":6234,"topics":6235},"Fix a Django cache that never hits in production: confirm the configured backend, avoid LocMemCache across processes, understand why Vary Cookie and CSRF break per-view caching, and check keys, versions, and timeouts.",[12,190,105],[12,105],[4465,4320],{"path":1486,"title":1487,"description":6237,"category":4287,"tags":6238,"section":180,"role":4297,"priority":1488,"type":182,"intent":4291,"difficulty":10,"stack":6239,"topics":6240},"Fix Django errors after a deploy such as AttributeError Can’t get attribute on module, ModuleNotFoundError, or TypeError when reading cached objects: version cache keys per release, avoid pickling model instances, and clear or namespace the cache safely.",[12,105,190],[12,105],[4465,4380],{"path":1495,"title":1496,"description":6242,"category":4287,"tags":6243,"section":180,"role":4297,"priority":772,"type":182,"intent":4291,"difficulty":44,"stack":6244,"topics":6245},"Fix Django connection errors to PostgreSQL in Docker Compose: localhost versus service names, readiness health checks, credentials in volumes, networks, and ports.",[12,152,13],[12,152,13],[152,4311],{"path":1504,"title":1505,"description":6247,"category":4287,"tags":6248,"section":180,"role":4297,"priority":1153,"type":182,"intent":4291,"difficulty":44,"stack":6249,"topics":6250},"Fix deploys that seem to do nothing: Gunicorn not reloaded, old processes still running, wrong release directory, cached templates, and stale assets.",[12,72,4377],[12,72],[4380,4493],{"path":1560,"title":1561,"description":6252,"category":4287,"tags":6253,"section":180,"role":4297,"priority":1562,"type":182,"intent":4291,"difficulty":10,"stack":6254,"topics":6255},"Fix the Django migration error column contains null values when adding a non-nullable field or changing null=True to null=False: backfill data first, split the change into safe migrations, and keep deploys working on large PostgreSQL tables.",[12,1025,13],[12,13],[1025],{"path":1228,"title":1229,"description":6257,"category":4287,"tags":6258,"section":180,"role":4297,"priority":718,"type":182,"intent":4291,"difficulty":10,"stack":6259,"topics":6260},"Fix Django's 'Conflicting migrations detected; multiple leaf nodes' error: merge or re-parent migrations in development, handle already-applied branches, and block conflicts in CI before deploy.",[12,1025,466],[12,466],[1025],{"path":1355,"title":1356,"description":6262,"category":4287,"tags":6263,"section":180,"role":4297,"priority":501,"type":182,"intent":4291,"difficulty":10,"stack":6265,"topics":6266},"Fix browser CORS errors calling a Django API: django-cors-headers setup, middleware order, preflight requests, credentials, and errors without CORS headers.",[12,6264,4585],"cors",[12,260],[4588],{"path":2076,"title":2077,"description":6268,"category":4287,"tags":6269,"section":180,"role":4297,"priority":2078,"type":182,"intent":4291,"difficulty":44,"stack":6270,"topics":6271},"Fix Django management commands that work in your shell but fail or do nothing in cron: use the virtualenv Python with full paths, load environment variables and settings, set the working directory, and capture output and errors.",[12,2080,46],[12,2080,46],[5095],{"path":1218,"title":1219,"description":6273,"category":4287,"tags":6274,"section":180,"role":4297,"priority":1220,"type":182,"intent":4291,"difficulty":44,"stack":6276,"topics":6277},"Fix the Django 4.0+ system check error 4_0.E001, which says CSRF_TRUSTED_ORIGINS values must start with a scheme: write full origins with https:\u002F\u002F, use wildcard subdomains correctly, parse the setting from environment variables, and avoid trailing slashes.",[12,6275,5275],"csrf",[12,272],[4330,4459],{"path":1434,"title":1435,"description":6279,"category":4287,"tags":6280,"section":180,"role":4297,"priority":761,"type":182,"intent":4291,"difficulty":10,"stack":6281,"topics":6282},"Database connection errors in Django production usually appear right after a deploy, after a restart, or after an infrastructure change such as rotating secrets, moving PostgreS...",[12,13],[12,13],[4311],{"path":1627,"title":1628,"description":6284,"category":4287,"tags":6285,"section":180,"role":4297,"priority":1629,"type":182,"intent":4291,"difficulty":44,"stack":6286,"topics":6287},"Fix the Django models.W042 warning about auto-created primary keys: choose between AutoField and BigAutoField for DEFAULT_AUTO_FIELD, avoid surprise migrations on large tables, handle third-party apps, and prepare for the BigAutoField default in Django 6.0.",[12,1025,5906],[12,13],[1025,4349],{"path":1294,"title":1295,"description":6289,"category":4287,"tags":6290,"section":180,"role":4297,"priority":1296,"type":182,"intent":4291,"difficulty":44,"stack":6291,"topics":6292},"Fix the Django runserver error saying you’re accessing the development server over HTTPS but it only supports HTTP: clear cached HSTS, turn off SSL redirects in development, avoid .dev domains, and run local HTTPS properly when you need it.",[12,1155,3382],[12,272],[4499,4493],{"path":2072,"title":2073,"description":6294,"category":4287,"tags":6295,"section":180,"role":4297,"priority":639,"type":182,"intent":4291,"difficulty":10,"stack":6296,"topics":6297},"Fix Django containers that exit or restart-loop on start: exit codes and logs, CMD and entrypoint mistakes, missing env vars, and database readiness.",[12,152,5024],[12,152],[152],{"path":1546,"title":1547,"description":6299,"category":4287,"tags":6300,"section":180,"role":4297,"priority":1548,"type":182,"intent":4291,"difficulty":44,"stack":6301,"topics":6302},"Fix Django, Gunicorn, and Celery output missing from docker logs or appearing late: set PYTHONUNBUFFERED, log to stdout instead of files, configure Gunicorn access and error logs, and keep LOGGING from silencing django.request errors.",[12,152,2642],[12,152,72],[152,4416],{"path":1508,"title":1509,"description":6304,"category":4287,"tags":6305,"section":180,"role":4297,"priority":1510,"type":182,"intent":4291,"difficulty":44,"stack":6306,"topics":6307},"Fix Django SMTP errors such as SSL WRONG_VERSION_NUMBER, STARTTLS extension not supported, and connection unexpectedly closed: match EMAIL_PORT with EMAIL_USE_TLS or EMAIL_USE_SSL, and test the provider’s port from the server.",[12,249,1512],[12,1512],[249],{"path":1514,"title":1515,"description":6309,"category":4287,"tags":6310,"section":180,"role":4297,"priority":615,"type":182,"intent":4291,"difficulty":44,"stack":6311,"topics":6312},"Diagnose Django emails that never arrive: backend settings, fail_silently, blocked SMTP ports, provider rejections, Celery tasks, and domain authentication.",[12,249,1512],[12,249],[249],{"path":1528,"title":1529,"description":6314,"category":4287,"tags":6315,"section":180,"role":4297,"priority":651,"type":182,"intent":4291,"difficulty":44,"stack":6317,"topics":6318},"Fix password reset emails, sitemaps, and allauth links that point to example.com: update the Site record, set SITE_ID, handle multiple environments, and get https in generated links.",[12,6316,249],"sites",[12],[4459,249],{"path":1672,"title":1673,"description":6320,"category":4287,"tags":6321,"section":180,"role":4297,"priority":1674,"type":182,"intent":4291,"difficulty":10,"stack":6322,"topics":6323},"Fix the GeoDjango ImproperlyConfigured error could not find the GDAL library (tried gdal, GDAL...) on servers and in Docker: install GDAL, GEOS, and PROJ system packages, set GDAL_LIBRARY_PATH when needed, and match library versions to Django.",[12,1676,152],[12,1676,849],[4311,152],{"path":1780,"title":1781,"description":6325,"category":4287,"tags":6326,"section":180,"role":4297,"priority":1782,"type":182,"intent":4291,"difficulty":10,"stack":6327,"topics":6328},"Fix load balancer health checks that mark healthy Django servers down: DisallowedHost 400s, HTTPS redirects, auth on health paths, and slow checks.",[12,1001,5524],[12,79],[4416,4320],{"path":1739,"title":1740,"description":6330,"category":4287,"tags":6331,"section":180,"role":4297,"priority":1741,"type":182,"intent":4291,"difficulty":10,"stack":6332,"topics":6333},"Fix high CPU usage on a Django server: find whether Gunicorn, PostgreSQL, Celery, or something else is burning CPU, profile hot endpoints with py-spy, fix N+1 queries and missing indexes, and block abusive traffic.",[12,5170,46],[12,72,13],[4320],{"path":1748,"title":1749,"description":6335,"category":4287,"tags":6336,"section":180,"role":4297,"priority":1065,"type":182,"intent":4291,"difficulty":44,"stack":6337,"topics":6338},"Fix the SECRET_KEY must not be empty error in production: find where settings load, pass the key to systemd, Docker, CI, and cron, and avoid unsafe defaults.",[12,5275,2394],[12],[4459],{"path":1752,"title":1753,"description":6340,"category":4287,"tags":6341,"section":180,"role":4297,"priority":835,"type":182,"intent":4291,"difficulty":18,"stack":6342,"topics":6343},"Fix Django InconsistentMigrationHistory errors safely: read the dependency message, compare history with files, handle custom user models, avoid data loss.",[12,1025,13],[12,13],[1025],{"path":1523,"title":1524,"description":6345,"category":4287,"tags":6346,"section":180,"role":4297,"priority":1525,"type":182,"intent":4291,"difficulty":10,"stack":6347,"topics":6348},"Fix django.db.utils.InterfaceError connection already closed in Celery tasks, management commands, and long-running scripts: call close_old_connections, set CONN_MAX_AGE and CONN_HEALTH_CHECKS, and handle database restarts and idle timeouts.",[12,13,27],[12,13,27],[4311,27],{"path":1532,"title":1533,"description":6350,"category":4287,"tags":6351,"section":180,"role":4297,"priority":1534,"type":182,"intent":4291,"difficulty":44,"stack":6352,"topics":6353},"Fix PermissionError Errno 13 Permission denied for a Django log file such as \u002Fvar\u002Flog\u002Fdjango.log: give the app user ownership, stop root-run commands from creating the file, handle log rotation, or log to stdout instead.",[12,2642,46],[12,46,72],[4416,4319],{"path":1541,"title":1542,"description":6355,"category":4287,"tags":6356,"section":180,"role":4297,"priority":1543,"type":182,"intent":4291,"difficulty":44,"stack":6357,"topics":6358},"Fix Django logging that shows nothing in production: why logger.info disappears with DEBUG off, configure LOGGING with console handlers, find Gunicorn and systemd output in journalctl, and capture errors from Celery.",[12,2642,72],[12,72,798],[4416],{"path":1537,"title":1538,"description":6360,"category":4287,"tags":6361,"section":180,"role":4297,"priority":121,"type":182,"intent":4291,"difficulty":10,"stack":6362,"topics":6363},"Fix Django logins that do not stick behind a proxy or HTTPS: secure cookies, HTTPS detection, cookie domains, SameSite, and shared session backends.",[12,4480,1155],[12,39],[4459,4499],{"path":1551,"title":1552,"description":6365,"category":4287,"tags":6366,"section":180,"role":4297,"priority":1553,"type":182,"intent":4291,"difficulty":44,"stack":6368,"topics":6369},"Fix the Django LookupError no installed app with label in production, migrations, and Celery: add the app to INSTALLED_APPS, use the right app label, load the correct settings module, and avoid model imports before Django is ready.",[12,5275,6367],"apps",[12,272],[1025,4459],{"path":1893,"title":1894,"description":6371,"category":4287,"tags":6372,"section":180,"role":4297,"priority":304,"type":182,"intent":4291,"difficulty":44,"stack":6373,"topics":6374},"Fix PermissionError when Django saves uploads: service user ownership, MEDIA_ROOT location, upload file modes, systemd sandboxing, Docker volumes, and SELinux.",[12,5450,46],[12,46],[4367,4319],{"path":1203,"title":1204,"description":6376,"category":4287,"tags":6377,"section":180,"role":4297,"priority":1205,"type":182,"intent":4291,"difficulty":18,"stack":6378,"topics":6379},"Find and fix a Django memory leak in production: tell real leaks from normal Python growth, recycle Gunicorn workers, profile with tracemalloc, and fix DEBUG query logging, unbounded caches, and large querysets.",[12,72,4315],[12,72,272],[4320,4493],{"path":1017,"title":1018,"description":6381,"category":4287,"tags":6382,"section":180,"role":4297,"priority":746,"type":182,"intent":4291,"difficulty":18,"stack":6383,"topics":6384},"A failed Django migration during deploy usually means your release reached production, but the database change step did not finish cleanly.",[12,13],[12,13],[1025,4380],{"path":1565,"title":1566,"description":6386,"category":4287,"tags":6387,"section":180,"role":4297,"priority":1567,"type":182,"intent":4291,"difficulty":18,"stack":6388,"topics":6389},"Fix a Django migrate command that hangs during deploy: find the blocking PostgreSQL session with pg_blocking_pids, stop the lock queue from taking the site down, and set lock_timeout.",[12,13,1025],[12,13],[1025,4311],{"path":1570,"title":1571,"description":6391,"category":4287,"tags":6392,"section":180,"role":4297,"priority":1572,"type":182,"intent":4291,"difficulty":10,"stack":6393,"topics":6394},"Fix the Django NodeNotFoundError saying migration dependencies reference a nonexistent parent node: restore deleted or uncommitted migration files, repair dependencies after squashing or renaming apps, and handle third-party app version mismatches.",[12,1025,4377],[12,466],[1025],{"path":1785,"title":1786,"description":6396,"category":4287,"tags":6397,"section":180,"role":4297,"priority":548,"type":182,"intent":4291,"difficulty":44,"stack":6398,"topics":6399},"Fix mixed content on a Django site served over HTTPS: find http:\u002F\u002F resources, correct absolute URLs behind a proxy, fix storage and CDN URLs, rewrite stored content, and add upgrade-insecure-requests.",[12,1155,59],[12,39,1155],[4499],{"path":1199,"title":1200,"description":6401,"category":4307,"tags":6402,"section":7,"role":4327,"priority":1065,"type":9,"intent":4346,"difficulty":10,"stack":6403,"topics":6404},"Find and fix N+1 queries in Django: detect them in tests and logs, use select_related, prefetch_related, Prefetch objects, and annotations correctly.",[12,5688,5170],[12,13],[4320,4311],{"path":1459,"title":1460,"description":6406,"category":4287,"tags":6407,"section":180,"role":4297,"priority":1461,"type":182,"intent":4291,"difficulty":44,"stack":6409,"topics":6410},"Fix the Django RuntimeWarning DateTimeField received a naive datetime while time zone support is active: use timezone.now, make parsed and imported datetimes aware, and set USE_TZ, TIME_ZONE, and database time zones correctly.",[12,6408,13],"timezones",[12,13],[4459,4311],{"path":1888,"title":1889,"description":6412,"category":4287,"tags":6413,"section":180,"role":4297,"priority":1890,"type":182,"intent":4291,"difficulty":10,"stack":6415,"topics":6416},"Fix Google, GitHub, and Microsoft OAuth redirect_uri_mismatch errors after deploying Django with django-allauth or social-auth: register the exact production callback URL, force https behind a proxy, and fix host and trailing-slash differences.",[12,6414,53],"oauth",[12,53,39],[4499,4459],{"path":1250,"title":1251,"description":6418,"category":4287,"tags":6419,"section":180,"role":4297,"priority":1252,"type":182,"intent":4291,"difficulty":44,"stack":6420,"topics":6421},"Fix Django deploys failing on Render, Railway, Fly.io, Cloud Run, and App Runner with no open ports detected, failed to bind to PORT, or application failed to respond: bind Gunicorn to 0.0.0.0 and the platform's PORT variable.",[12,66,72],[12,72,152],[66,4493],{"path":1901,"title":1902,"description":6423,"category":4287,"tags":6424,"section":180,"role":4297,"priority":1903,"type":182,"intent":4291,"difficulty":10,"stack":6425,"topics":6426},"Fix Pillow errors when uploading images to Django in production: Cannot use ImageField because Pillow is not installed, decoder jpeg not available, cannot identify image file, DecompressionBombError, and HEIC uploads.",[12,1905,5450],[12,1905,152],[4367,4349],{"path":1299,"title":1300,"description":6428,"category":4287,"tags":6429,"section":180,"role":4297,"priority":865,"type":182,"intent":4291,"difficulty":18,"stack":6431,"topics":6432},"Fix PostgreSQL 'cannot execute INSERT in a read-only transaction' in Django: writes sent to a replica or reader endpoint, stale connections after failover, database routers, and read-only settings.",[12,13,6430],"replication",[12,13],[4311],{"path":1575,"title":1576,"description":6434,"category":4287,"tags":6435,"section":180,"role":4297,"priority":1577,"type":182,"intent":4291,"difficulty":10,"stack":6436,"topics":6437},"Fix Django redirects that send users to localhost, 127.0.0.1, or an internal hostname behind Nginx or a load balancer: forward the Host header, use USE_X_FORWARDED_HOST correctly, and fix LOGIN_REDIRECT_URL and absolute URLs.",[12,39,6228],[12,39,152],[4399,4459],{"path":1326,"title":1327,"description":6439,"category":4287,"tags":6440,"section":180,"role":4297,"priority":1328,"type":182,"intent":4291,"difficulty":44,"stack":6441,"topics":6442},"Fix ProgrammingError: relation does not exist (and SQLite 'no such table') in Django production: unapplied or uncommitted migrations, the wrong database, faked migrations, and import-time queries.",[12,13,1025],[12,13],[1025,4311],{"path":1518,"title":1519,"description":6444,"category":4287,"tags":6445,"section":180,"role":4297,"priority":1520,"type":182,"intent":4291,"difficulty":44,"stack":6446,"topics":6447},"Fix ImportError cannot import name force_text, smart_text, ugettext_lazy, url, or ifequal after a Django upgrade: map each removed API to its replacement, upgrade third-party packages that still use them, and catch removals in CI before deploying.",[12,5906,4349],[12,272],[4349],{"path":1998,"title":1999,"description":6449,"category":4287,"tags":6450,"section":180,"role":4297,"priority":729,"type":182,"intent":4291,"difficulty":10,"stack":6451,"topics":6452},"Fix Django RequestDataTooBig, TooManyFieldsSent, and TooManyFilesSent errors: what each upload limit measures, raising limits safely per endpoint, and proxy limits.",[12,5450,3067],[12],[4367,4399],{"path":2002,"title":2003,"description":6454,"category":4287,"tags":6455,"section":180,"role":4297,"priority":2004,"type":182,"intent":4291,"difficulty":10,"stack":6456,"topics":6457},"Fix SignatureDoesNotMatch and The authorization mechanism you have provided is not supported, please use AWS4-HMAC-SHA256 in django-storages: set the bucket region and signature version, fix presigned URLs, clock skew, and custom endpoints for R2, Spaces, and MinIO.",[12,86,1015],[12,79,86],[4367,79],{"path":1341,"title":1342,"description":6459,"category":4287,"tags":6460,"section":180,"role":4297,"priority":1343,"type":182,"intent":4291,"difficulty":10,"stack":6461,"topics":6462},"Fix AccessDenied from S3 when django-storages uploads files: IAM policy actions, bucket policies, Object Ownership and ACLs, KMS keys, and credentials.",[12,79,86],[12,79,86],[4367,79],{"path":2092,"title":2093,"description":6464,"category":4287,"tags":6465,"section":180,"role":4297,"priority":90,"type":182,"intent":4291,"difficulty":10,"stack":6466,"topics":6467},"Recover a Django server with a full disk: find what uses space, clean logs, journal, Docker images, and old releases safely, handle open files, add alerts.",[12,46,5224],[12,46,152],[4319,4416],{"path":1454,"title":1455,"description":6469,"category":4287,"tags":6470,"section":180,"role":4297,"priority":1456,"type":182,"intent":4291,"difficulty":10,"stack":6471,"topics":6472},"Fix the Django warning Session data corrupted and users being logged out: find SECRET_KEY changes and mismatches between servers, use SECRET_KEY_FALLBACKS for rotation, and align session engines and serializers.",[12,4480,59],[12,105],[4459,4465],{"path":2087,"title":2088,"description":6474,"category":4287,"tags":6475,"section":180,"role":4297,"priority":2089,"type":182,"intent":4291,"difficulty":44,"stack":6477,"topics":6478},"Fix a Django site that runs on the server but times out in the browser: check what listens and on which address, open ufw and cloud firewalls, stop binding to 127.0.0.1, and confirm DNS points at the server.",[12,6476,5012],"firewall",[12,39,46],[4319,4399],{"path":2104,"title":2105,"description":6480,"category":4287,"tags":6481,"section":180,"role":4297,"priority":2106,"type":182,"intent":4291,"difficulty":10,"stack":6482,"topics":6483},"Fix slow first requests after a Django deploy or restart: measure cold versus warm, find heavy imports with -X importtime, precompile bytecode, preload, warm workers, and avoid cold starts.",[12,5170,72],[12,72,152],[4320,4493],{"path":1350,"title":1351,"description":6485,"category":4287,"tags":6486,"section":180,"role":4297,"priority":43,"type":182,"intent":4291,"difficulty":10,"stack":6487,"topics":6488},"Fix SSL CERTIFICATE_VERIFY_FAILED when Django calls external APIs: incomplete server chains, missing CA bundles in containers, certifi versus the system store, internal CAs, proxies, and clock skew.",[12,380,1353],[12,272,1353],[4499],{"path":1585,"title":1586,"description":6490,"category":4287,"tags":6491,"section":180,"role":4297,"priority":264,"type":182,"intent":4291,"difficulty":10,"stack":6492,"topics":6493},"Fix Django static files returning 404 in Docker: collectstatic in the image, shared volumes between Django and Nginx, bind mounts hiding files, and WhiteNoise setup.",[12,152,4391],[12,152,39],[4391,152],{"path":1594,"title":1595,"description":6495,"category":4287,"tags":6496,"section":180,"role":4297,"priority":811,"type":182,"intent":4291,"difficulty":44,"stack":6497,"topics":6498},"Fix Refused to apply style and Expected a JavaScript module script errors for Django static files: HTML 404 pages served as CSS, missing mime.types in Nginx, .mjs and .wasm types, and WhiteNoise.",[12,4391,39],[12,39,170],[4391,4399],{"path":1632,"title":1633,"description":6500,"category":4287,"tags":6501,"section":180,"role":4297,"priority":1634,"type":182,"intent":4291,"difficulty":44,"stack":6502,"topics":6503},"Fix the Django staticfiles.W004 warning that a STATICFILES_DIRS directory does not exist, and the related E002 error: build paths from BASE_DIR, commit empty directories, check .dockerignore, and keep STATIC_ROOT out of STATICFILES_DIRS.",[12,4391,5275],[12,152],[4391],{"path":1289,"title":1290,"description":6505,"category":4287,"tags":6506,"section":180,"role":4297,"priority":1291,"type":182,"intent":4291,"difficulty":44,"stack":6508,"topics":6509},"Fix the Django ImproperlyConfigured error You’re using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path: set STATIC_ROOT correctly, keep it separate from STATICFILES_DIRS, and run collectstatic in deploys.",[12,4391,6507],"collectstatic",[12,170,39],[4391],{"path":2129,"title":2130,"description":6511,"category":4287,"tags":6512,"section":180,"role":4297,"priority":2131,"type":182,"intent":4291,"difficulty":10,"stack":6513,"topics":6514},"Fix the S3 error AccessControlListNotSupported, the bucket does not allow ACLs, in django-storages: stop sending ACL headers with default_acl None, use bucket policies for public static files, and keep private media behind presigned URLs.",[12,86,1015],[12,79,86],[4367,79],{"path":2134,"title":2135,"description":6516,"category":4287,"tags":6517,"section":180,"role":4297,"priority":2136,"type":182,"intent":4291,"difficulty":10,"stack":6518,"topics":6519},"Fix uploads replacing each other on S3 or R2 with django-storages: understand AWS_S3_FILE_OVERWRITE, generate unique upload_to paths, avoid cache-stale files at the same URL, and recover overwritten objects with bucket versioning.",[12,86,5450],[12,86,1015],[4367],{"path":1598,"title":1599,"description":6521,"category":4287,"tags":6522,"section":180,"role":4297,"priority":1600,"type":182,"intent":4291,"difficulty":10,"stack":6524,"topics":6525},"Fix Django StreamingHttpResponse and server-sent events that arrive all at once instead of streaming: disable Nginx proxy buffering with X-Accel-Buffering, avoid GZip middleware on streams, and use async views for long streams.",[12,39,6523],"streaming",[12,39,909],[4399,4622],{"path":1603,"title":1604,"description":6527,"category":4287,"tags":6528,"section":180,"role":4297,"priority":1605,"type":182,"intent":4291,"difficulty":10,"stack":6529,"topics":6530},"Fix Django SuspiciousFileOperation errors such as the joined path is located outside of the base path component and detected path traversal attempt: build upload paths safely, avoid absolute names and leading slashes, and handle static files referenced with ..\u002F.",[12,5140,4364],[12,272],[4367,4391],{"path":1608,"title":1609,"description":6532,"category":4287,"tags":6533,"section":180,"role":4297,"priority":1610,"type":182,"intent":4291,"difficulty":10,"stack":6534,"topics":6535},"Fix Django SynchronousOnlyOperation You cannot call this from an async context: use async ORM methods, sync_to_async for blocking code, avoid lazy relation access in async views and consumers, and never disable the check in production.",[12,909,5169],[12,909,411],[4622],{"path":1321,"title":1322,"description":6537,"category":4287,"tags":6538,"section":180,"role":4297,"priority":1323,"type":182,"intent":4291,"difficulty":10,"stack":6539,"topics":6540},"Fix Django migrate failing with relation already exists, table already exists, or DuplicateTable: compare the schema with migration history, use migrate --fake or --fake-initial correctly, and avoid faking migrations that were never applied.",[12,1025,13],[12,13,278],[1025],{"path":2018,"title":2019,"description":6542,"category":4287,"tags":6543,"section":180,"role":4297,"priority":766,"type":182,"intent":4291,"difficulty":44,"stack":6544,"topics":6545},"Fix TemplateDoesNotExist that appears only in production: case-sensitive paths, TEMPLATES DIRS relative to the wrong directory, apps missing from INSTALLED_APPS, files excluded from images, and cached loaders.",[12,366,4377],[12,152],[4459],{"path":1613,"title":1614,"description":6547,"category":4287,"tags":6548,"section":180,"role":4297,"priority":1615,"type":182,"intent":4291,"difficulty":10,"stack":6550,"topics":6551},"Fix Django test suites that pass on your machine but fail in GitHub Actions or GitLab CI: PostgreSQL service containers and health checks, missing settings and secrets, static files manifest errors, time zones, and test ordering.",[12,786,6549],"testing",[12,13,92],[786,4311],{"path":1280,"title":1281,"description":6553,"category":4287,"tags":6554,"section":180,"role":4297,"priority":823,"type":182,"intent":4291,"difficulty":10,"stack":6555,"topics":6556},"Fix OSError Errno 24 Too many open files in Gunicorn, Celery, and Nginx: read the real per-process limit, find descriptor leaks with lsof, and raise LimitNOFILE, worker_rlimit_nofile, or Docker ulimits.",[12,46,5170],[12,46,72,39],[4319,4320],{"path":2022,"title":2023,"description":6558,"category":4287,"tags":6559,"section":180,"role":4297,"priority":194,"type":182,"intent":4291,"difficulty":10,"stack":6560,"topics":6561},"Fix ERR_TOO_MANY_REDIRECTS on Django behind Nginx, a load balancer, or Cloudflare: SECURE_PROXY_SSL_HEADER, forwarded headers, and duplicate redirects.",[12,1155,39],[12,39],[4499,4399],{"path":1284,"title":1285,"description":6563,"category":4287,"tags":6564,"section":180,"role":4297,"priority":1286,"type":182,"intent":4291,"difficulty":44,"stack":6565,"topics":6566},"Fix the Django warning You have N unapplied migration(s) on a production server: run migrate in the deploy pipeline, check which migrations are pending, handle migrations missing from the repo, and stop the warning from hiding real problems.",[12,1025,4377],[12,13],[1025],{"path":2026,"title":2027,"description":6568,"category":4287,"tags":6569,"section":180,"role":4297,"priority":756,"type":182,"intent":4291,"difficulty":10,"stack":6570,"topics":6571},"Fix UnicodeEncodeError 'ascii' codec errors that appear only in production: check Python's encodings, set a UTF-8 locale or PYTHONUTF8 for systemd, cron, and Docker, and pass explicit encodings.",[12,272,46],[12,272,798,152],[4319],{"path":2030,"title":2031,"description":6573,"category":4287,"tags":6574,"section":180,"role":4297,"priority":1842,"type":182,"intent":4291,"difficulty":44,"stack":6575,"topics":6576},"Fix Django media uploads that vanish after a redeploy: ephemeral container and PaaS filesystems, MEDIA_ROOT inside release directories, missing volumes, and moving uploads to object storage.",[12,5140,4364],[12,152,86],[4367,152],{"path":1331,"title":1332,"description":6578,"category":4287,"tags":6579,"section":180,"role":4297,"priority":1333,"type":182,"intent":4291,"difficulty":44,"stack":6580,"topics":6581},"Fix Django DataError value too long for type character varying(N) on PostgreSQL: find the field and the input, raise max_length with a safe migration, validate in forms and serializers, and understand why SQLite never complained.",[12,13,1025],[12,13],[4311,1025],{"path":1618,"title":1619,"description":6583,"category":4287,"tags":6584,"section":180,"role":4297,"priority":533,"type":182,"intent":4291,"difficulty":18,"stack":6585,"topics":6586},"Debug Django Channels WebSocket failures behind Nginx: handshake status codes, Upgrade headers, ASGI routing, origin checks, wss mixed content, and idle timeouts.",[12,4619,39],[12,411,39],[4622,4399],{"path":1622,"title":1623,"description":6588,"category":4287,"tags":6589,"section":180,"role":4297,"priority":1624,"type":182,"intent":4291,"difficulty":10,"stack":6590,"topics":6591},"Fix Django Channels WebSocket connections that drop after about 60 seconds of inactivity: raise Nginx proxy_read_timeout, configure load balancer idle timeouts, and send keepalive pings from the client or server.",[12,4619,39],[12,411,39],[4622,4399],{"path":1126,"title":1127,"description":6593,"category":4287,"tags":6594,"section":180,"role":4297,"priority":215,"type":182,"intent":4291,"difficulty":44,"stack":6596,"topics":6597},"Fix Django apps that break when DEBUG is turned off: ALLOWED_HOSTS, static files, manifest errors, error templates, email handlers, and hidden exceptions.",[12,6595,5275],"debug",[12],[4459],{"path":2049,"title":2050,"description":6599,"category":4287,"tags":6600,"section":180,"role":4297,"priority":891,"type":182,"intent":4291,"difficulty":10,"stack":6601,"topics":6602},"Get the real client IP in Django behind Nginx, load balancers, or CDNs: X-Forwarded-For parsing, trusted proxy counts, Nginx realip, and spoofing risks.",[12,39,59],[12,39],[4399],{"path":2053,"title":2054,"description":6604,"category":4287,"tags":6605,"section":180,"role":4297,"priority":2055,"type":182,"intent":4291,"difficulty":10,"stack":6607,"topics":6608},"Fix Django showing times hours off in production: understand USE_TZ and UTC storage, set TIME_ZONE correctly, activate per-user time zones, render local times in templates, and stop cron and Celery schedules from drifting.",[12,6606,5275],"timezone",[12,13,27],[4459,4311],{"path":2143,"title":2144,"description":6610,"category":4287,"tags":6611,"section":180,"role":4297,"priority":2145,"type":182,"intent":4291,"difficulty":10,"stack":6612,"topics":6613},"Fix pip install failing during a Django Docker build with Temporary failure in name resolution or Failed to establish a new connection: diagnose Docker DNS, corporate proxies, VPNs, and IPv6, and configure daemon DNS or build-time proxy arguments.",[12,152,939],[12,152,939],[152,4349],{"path":2364,"title":2365,"description":6615,"category":4287,"tags":6616,"section":180,"role":4297,"priority":415,"type":182,"intent":4291,"difficulty":44,"stack":6617,"topics":6618},"Stop Django failing with could not connect to server or connection refused when Docker Compose starts it before PostgreSQL is ready: use depends_on with service_healthy, pg_isready health checks, and retry logic in the entrypoint.",[12,152,13],[12,152,13],[152,4311],{"path":1667,"title":1668,"description":6620,"category":4287,"tags":6621,"section":180,"role":4297,"priority":511,"type":182,"intent":4291,"difficulty":44,"stack":6622,"topics":6623},"Fix Django settings missing environment variables under Docker Compose: .env versus env_file, variable precedence, recreating containers, $ in values, build-time versus runtime, and docker compose config.",[12,152,4456],[12,152,1670],[152,4459],{"path":2067,"title":2068,"description":6625,"category":4287,"tags":6626,"section":180,"role":4297,"priority":2069,"type":182,"intent":4291,"difficulty":10,"stack":6627,"topics":6628},"Fix a Django Docker container stuck in unhealthy status: debug the HEALTHCHECK command, use a health endpoint that works without curl, ALLOWED_HOSTS and HTTPS redirects, start_period for migrations, and dependent services.",[12,152,5524],[12,152],[152,4416],{"path":1652,"title":1653,"description":6630,"category":4287,"tags":6631,"section":180,"role":4297,"priority":1654,"type":182,"intent":4291,"difficulty":44,"stack":6633,"topics":6634},"Fix Django containers that fail with exec .\u002Fentrypoint.sh: permission denied or exec format error and no such file or directory: set the executable bit in Git, convert CRLF line endings, and use the right shebang.",[12,152,6632],"entrypoint",[12,152,466],[152],{"path":1647,"title":1648,"description":6636,"category":4287,"tags":6637,"section":180,"role":4297,"priority":1649,"type":182,"intent":4291,"difficulty":44,"stack":6638,"topics":6639},"Fix the Docker error exec \u002Fusr\u002Flocal\u002Fbin\u002Fdocker-entrypoint.sh exec format error for Django containers: rebuild for the right CPU architecture with buildx, fix Windows line endings and missing shebangs, and verify image platforms before deploy.",[12,152,4384],[12,152],[152],{"path":3069,"title":3070,"description":6641,"category":4287,"tags":6642,"section":180,"role":4297,"priority":3071,"type":182,"intent":4291,"difficulty":44,"stack":6643,"topics":6644},"Stop Docker container logs from filling the disk on a Django server: find the large json.log files, set max-size and max-file in daemon.json or Compose, use the local driver, and reduce noisy logging.",[12,152,2642],[12,152,46],[152,4416],{"path":1637,"title":1638,"description":6646,"category":4287,"tags":6647,"section":180,"role":4297,"priority":1639,"type":182,"intent":4291,"difficulty":44,"stack":6649,"topics":6650},"Fix Docker no space left on device during Django image builds and deploys: measure what docker system df reports, prune build cache, images, and volumes safely, set log limits, and stop CI runners and servers from filling up again.",[12,152,6648],"disk",[12,152],[152,4319],{"path":1642,"title":1643,"description":4288,"category":4287,"tags":6652,"section":180,"role":4297,"priority":1644,"type":182,"intent":4291,"difficulty":44,"stack":6653,"topics":6654},[12,152,1670],[12,152,13],[152],{"path":1589,"title":1590,"description":6656,"category":4287,"tags":6657,"section":180,"role":4297,"priority":1591,"type":182,"intent":4291,"difficulty":10,"stack":6658,"topics":6659},"Fix Django CSS and JavaScript that stay old after a Docker deploy because a named volume hides the new collectstatic output: understand how volumes shadow image files, collect at the right time, and share static files with Nginx correctly.",[12,152,4391],[12,152,39],[152,4391],{"path":1897,"title":1898,"description":6661,"category":4287,"tags":6662,"section":180,"role":4297,"priority":740,"type":182,"intent":4291,"difficulty":10,"stack":6663,"topics":6664},"Fix PermissionError Errno 13 when a non-root Django container writes to media or data volumes: numeric UIDs, named volume initialisation, bind mount ownership, SELinux labels, and rootless mappings.",[12,152,6173],[12,152,46],[152],{"path":1657,"title":1658,"description":6666,"category":4287,"tags":6667,"section":180,"role":4297,"priority":1659,"type":182,"intent":4291,"difficulty":10,"stack":6668,"topics":6669},"Fix AWS ECS tasks that stop with Essential container in task exited for Django on Fargate or EC2: read the stopped reason and CloudWatch logs, fix missing secrets and permissions, health check failures, exit codes 137 and 1, and migration commands.",[12,79,80],[12,79,80],[79,152],{"path":1662,"title":1663,"description":6671,"category":4287,"tags":6672,"section":180,"role":4297,"priority":1664,"type":182,"intent":4291,"difficulty":44,"stack":6673,"topics":6674},"Fix the browser error ERR_SSL_PROTOCOL_ERROR or SSL_ERROR_RX_RECORD_TOO_LONG for a Django site: find which layer answers HTTPS with plain HTTP, fix listen 443 ssl in Nginx, port mappings, proxy upstream schemes, and cached HSTS for development servers.",[12,1155,39],[12,39],[4499],{"path":1311,"title":1312,"description":6676,"category":4287,"tags":6677,"section":180,"role":4297,"priority":1313,"type":182,"intent":4291,"difficulty":44,"stack":6678,"topics":6679},"Fix git fatal detected dubious ownership in repository during Django deploys, CI jobs, and Docker builds: understand the safe.directory check, run git as the repository owner, fix ownership, or add a narrow safe.directory entry.",[12,466,4377],[12,466,46],[786,4319],{"path":1237,"title":1238,"description":6681,"category":4287,"tags":6682,"section":180,"role":4297,"priority":1239,"type":182,"intent":4291,"difficulty":44,"stack":6683,"topics":6684},"Fix Host key verification failed when a GitHub Actions workflow deploys Django over SSH: add the server’s host key to known_hosts from a secret, avoid StrictHostKeyChecking=no, handle rebuilt servers and custom ports, and verify fingerprints.",[12,92,486],[12,92,486],[786],{"path":1678,"title":1679,"description":6686,"category":4287,"tags":6687,"section":180,"role":4297,"priority":937,"type":182,"intent":4291,"difficulty":44,"stack":6688,"topics":6689},"Fix Gunicorn Connection in use and Address already in use errors: find the process holding the port or socket, stop duplicate services, and prevent stale sockets.",[12,72,46],[12,72],[4493],{"path":1687,"title":1688,"description":6691,"category":4287,"tags":6692,"section":180,"role":4297,"priority":985,"type":182,"intent":4291,"difficulty":44,"stack":6693,"topics":6694},"Fix Gunicorn errors that cannot find the Django application object: wrong module or attribute names, shadowed modules, ASGI paths, and wsgi.py mistakes.",[12,72,5055],[12,72],[4493],{"path":1682,"title":1683,"description":6696,"category":4287,"tags":6697,"section":180,"role":4297,"priority":1684,"type":182,"intent":4291,"difficulty":10,"stack":6698,"topics":6699},"Understand and fix Gunicorn log lines such as Error handling request, Ignoring EPIPE, and BrokenPipeError with Django: tell client disconnects apart from real errors, align proxy and Gunicorn timeouts, and handle slow uploads and streaming responses.",[12,72,39],[12,72,39],[4493],{"path":1691,"title":1692,"description":6701,"category":4287,"tags":6702,"section":180,"role":4297,"priority":1693,"type":182,"intent":4291,"difficulty":44,"stack":6703,"topics":6704},"Fix Gunicorn Connection in use or Permission denied when binding to port 80 or 443: bind Gunicorn to a high port or Unix socket behind Nginx, or grant CAP_NET_BIND_SERVICE safely instead of running as root.",[12,72,46],[12,72,46],[4493,4319],{"path":1696,"title":1697,"description":6706,"category":4287,"tags":6707,"section":180,"role":4297,"priority":1698,"type":182,"intent":4291,"difficulty":44,"stack":6708,"topics":6709},"Fix Gunicorn HaltServer 'Worker failed to boot' for Django: find the real traceback, reproduce the import with the same environment, and fix settings, imports, and startup-time side effects.",[12,72,798],[12,72,798],[4493],{"path":2187,"title":2188,"description":6711,"category":4287,"tags":6712,"section":180,"role":4297,"priority":389,"type":182,"intent":4291,"difficulty":10,"stack":6713,"topics":6714},"A Gunicorn worker timeout in Django production usually means a worker process stopped responding before Gunicorn’s timeout limit expired.",[12,72],[12,72],[4493,4320],{"path":1705,"title":1706,"description":6716,"category":4287,"tags":6717,"section":180,"role":4297,"priority":784,"type":182,"intent":4291,"difficulty":18,"stack":6718,"topics":6719},"Diagnose Gunicorn workers killed for running out of memory: OOM evidence, memory per worker, large querysets, leaks, max-requests, and right-sizing.",[12,72,4315],[12,72,46],[4493,4320],{"path":1714,"title":1715,"description":6721,"category":4287,"tags":6722,"section":180,"role":4297,"priority":1716,"type":182,"intent":4291,"difficulty":44,"stack":6723,"topics":6724},"Fix the Heroku Python build error while running python manage.py collectstatic --noinput: read the hidden traceback, set STATIC_ROOT, avoid settings that need runtime config vars at build time, and fix WhiteNoise manifest errors.",[12,605,4391],[12,605,170],[66,4391],{"path":1724,"title":1725,"description":6726,"category":4287,"tags":6727,"section":180,"role":4297,"priority":1726,"type":182,"intent":4291,"difficulty":44,"stack":6728,"topics":6729},"Fix Heroku H10 App crashed errors for Django apps: read the crash in heroku logs, fix the Procfile and gunicorn command, bind to $PORT, set config vars like SECRET_KEY and DATABASE_URL, and handle release-phase failures.",[12,605,72],[12,605,72],[66],{"path":1729,"title":1730,"description":6731,"category":4287,"tags":6732,"section":180,"role":4297,"priority":1731,"type":182,"intent":4291,"difficulty":10,"stack":6733,"topics":6734},"Fix Heroku H12 Request timeout errors for Django: understand the 30-second router limit, find slow views, set Gunicorn timeouts below it, move long work to worker dynos with Celery or RQ, and avoid H13 cascades.",[12,605,5170],[12,605,27],[66,4320],{"path":1719,"title":1720,"description":6736,"category":4287,"tags":6737,"section":180,"role":4297,"priority":1721,"type":182,"intent":4291,"difficulty":44,"stack":6738,"topics":6739},"Fix Heroku push rejected, failed to compile Python app for Django: set the Python version with .python-version, fix requirements and lock files, resolve packages that need system libraries, and clear a stale build cache.",[12,605,272],[12,605,272],[66,4349],{"path":1734,"title":1735,"description":6741,"category":4287,"tags":6742,"section":180,"role":4297,"priority":1736,"type":182,"intent":4291,"difficulty":10,"stack":6743,"topics":6744},"Fix Heroku R14 Memory quota exceeded and R15 errors for Django: measure memory per Gunicorn worker, set WEB_CONCURRENCY to fit the dyno, recycle workers with max-requests, find leaks in views and Celery, and choose a dyno size that matches.",[12,605,4315],[12,605,72],[66,4320],{"path":1709,"title":1710,"description":6746,"category":4287,"tags":6747,"section":180,"role":4297,"priority":1711,"type":182,"intent":4291,"difficulty":44,"stack":6748,"topics":6749},"Fix a Django site where HTTPS does not load after installing a certificate: open port 443 in the firewall and cloud security group, add a listen 443 ssl block, check DNS and the certificate, and make Django aware of HTTPS.",[12,39,1155],[12,39,284],[4499,4399],{"path":2082,"title":2083,"description":6751,"category":4287,"tags":6752,"section":180,"role":4297,"priority":2084,"type":182,"intent":4291,"difficulty":10,"stack":6753,"topics":6754},"Fix a Django pod stuck in CrashLoopBackOff on Kubernetes: read logs from the previous container, find missing environment variables and secrets, failing liveness probes, OOMKilled limits, and migrations run at startup.",[12,98,5024],[12,98,72],[98],{"path":1756,"title":1757,"description":6756,"category":4287,"tags":6757,"section":180,"role":4297,"priority":1758,"type":182,"intent":4291,"difficulty":10,"stack":6758,"topics":6759},"Fix Kubernetes CreateContainerConfigError for Django pods: find the missing Secret, ConfigMap, or key in the pod events, create it in the right namespace, fix envFrom and secretKeyRef names, and order resources so deploys do not race their config.",[12,98,2394],[12,98],[98,4459],{"path":1761,"title":1762,"description":6761,"category":4287,"tags":6762,"section":180,"role":4297,"priority":1763,"type":182,"intent":4291,"difficulty":10,"stack":6763,"topics":6764},"Fix Kubernetes ImagePullBackOff and ErrImagePull for Django pods: read the pull error, fix image names and tags, add imagePullSecrets for GHCR, ECR, or GitLab, handle expiring ECR tokens and rate limits, and match image architecture to nodes.",[12,98,152],[12,98,152],[98,786],{"path":1766,"title":1767,"description":6766,"category":4287,"tags":6767,"section":180,"role":4297,"priority":1768,"type":182,"intent":4291,"difficulty":10,"stack":6768,"topics":6769},"Fix Kubernetes readiness and liveness probes that fail with 400 Bad Request because Django rejects the pod IP as a DisallowedHost: add a host header to the probe, exempt the health endpoint safely, or allow the pod network without disabling host checks.",[12,98,5524],[12,98],[98],{"path":1771,"title":1772,"description":6771,"category":4287,"tags":6772,"section":180,"role":4297,"priority":1773,"type":182,"intent":4291,"difficulty":10,"stack":6773,"topics":6774},"Fix Let’s Encrypt rate limit errors such as too many certificates already issued for this exact set of domains and too many failed authorizations: stop reissuing on every deploy, persist certificates, and use the staging environment.",[12,284,152],[12,284,152],[4499,152],{"path":1242,"title":1243,"description":6776,"category":4287,"tags":6777,"section":180,"role":4297,"priority":247,"type":182,"intent":4291,"difficulty":44,"stack":6778,"topics":6779},"Fix ValueError: Missing staticfiles manifest entry in Django production: collectstatic not run, wrong STATIC_ROOT, typos in static paths, missing apps, and build-time settings mismatches.",[12,4391,170],[12,170],[4391],{"path":1789,"title":1790,"description":6781,"category":4287,"tags":6782,"section":180,"role":4297,"priority":282,"type":182,"intent":4291,"difficulty":44,"stack":6783,"topics":6784},"Fix ModuleNotFoundError when Gunicorn starts Django: wrong virtualenv, working directory, project module path, missing packages, and Python version mismatches.",[12,72,272],[12,72],[4349,4493],{"path":1793,"title":1794,"description":6786,"category":4287,"tags":6787,"section":180,"role":4297,"priority":1795,"type":182,"intent":4291,"difficulty":44,"stack":6788,"topics":6789},"Fix Django OperationalError 1045 Access denied for user when connecting to MySQL or MariaDB: match the user host part, use TCP instead of the socket, fix authentication plugins, and grant privileges on the right database.",[12,278,1447],[12,278],[4311],{"path":1798,"title":1799,"description":6791,"category":4287,"tags":6792,"section":180,"role":4297,"priority":817,"type":182,"intent":4291,"difficulty":10,"stack":6794,"topics":6795},"Fix Django DataError 1366 Incorrect string value when saving emoji or other 4-byte characters to MySQL: convert databases, tables, and columns to utf8mb4, set the connection charset, and handle index length limits.",[12,278,6793],"unicode",[12,278],[4311,1025],{"path":1802,"title":1803,"description":6797,"category":4287,"tags":6798,"section":180,"role":4297,"priority":1804,"type":182,"intent":4291,"difficulty":18,"stack":6800,"topics":6801},"Fix MySQL error 1205 Lock wait timeout exceeded; try restarting transaction in Django: find the blocking transaction, shorten long atomic blocks, avoid gap locks from unindexed filters, and handle select_for_update and migrations safely.",[12,278,6799],"transactions",[12,278],[4311],{"path":1246,"title":1247,"description":6803,"category":4287,"tags":6804,"section":180,"role":4297,"priority":847,"type":182,"intent":4291,"difficulty":10,"stack":6806,"topics":6807},"Fix Django OperationalError 2006 MySQL server has gone away and 2013 lost connection: align CONN_MAX_AGE with wait_timeout, enable CONN_HEALTH_CHECKS, close connections in long-running scripts, and raise max_allowed_packet.",[12,278,6805],"connections",[12,278,27],[4311],{"path":1807,"title":1808,"description":6809,"category":4287,"tags":6810,"section":180,"role":4297,"priority":1809,"type":182,"intent":4291,"difficulty":10,"stack":6811,"topics":6812},"Fix the MySQL error 1071 Specified key was too long; max key length is 767 or 3072 bytes in Django migrations: understand utf8mb4 index limits, use InnoDB DYNAMIC rows, shorten indexed CharFields, or index a prefix.",[12,278,1025],[12,278,1447],[4311,1025],{"path":1443,"title":1444,"description":6814,"category":4287,"tags":6815,"section":180,"role":4297,"priority":1445,"type":182,"intent":4291,"difficulty":10,"stack":6816,"topics":6817},"Fix the Django ValueError saying the database returned an invalid datetime value and asking whether time zone definitions for your database are installed: load MySQL or MariaDB time zone tables, including on Docker, RDS, and Cloud SQL.",[12,278,6606],[12,278,1447],[4311],{"path":1812,"title":1813,"description":6819,"category":4287,"tags":6820,"section":180,"role":4297,"priority":1814,"type":182,"intent":4291,"difficulty":10,"stack":6821,"topics":6822},"Fix MySQL error 1040 Too many connections from Django: count connections per Gunicorn worker, Celery process, and thread, tune max_connections and wait_timeout, set CONN_MAX_AGE sensibly, and add ProxySQL or RDS Proxy when apps scale out.",[12,278,6805],[12,278],[4311],{"path":2139,"title":2140,"description":6824,"category":4287,"tags":6825,"section":180,"role":4297,"priority":241,"type":182,"intent":4291,"difficulty":44,"stack":6826,"topics":6827},"Fix pip install mysqlclient failures for Django: mysql_config not found, pkg-config cannot find mysqlclient, and missing Python.h, on Ubuntu, Debian, RHEL, Alpine, macOS, and in Docker builds.",[12,278,939],[12,278,152],[4311,4349],{"path":1854,"title":1855,"description":6829,"category":4287,"tags":6830,"section":180,"role":4297,"priority":565,"type":182,"intent":4291,"difficulty":44,"stack":6831,"topics":6832},"Fix 403 Forbidden for Django static and media files served by Nginx: directory traversal permissions, file modes, alias paths, SELinux contexts, and verification.",[12,39,4391],[12,39],[4399,4391],{"path":1858,"title":1859,"description":6834,"category":4287,"tags":6835,"section":180,"role":4297,"priority":1860,"type":182,"intent":4291,"difficulty":44,"stack":6837,"topics":6838},"Fix an Nginx 404 Not Found page for Django URLs that work with runserver: route requests to Gunicorn instead of the filesystem, fix try_files and location ordering, root versus alias, and trailing-slash mismatches.",[12,39,6836],"routing",[12,39],[4399],{"path":1863,"title":1864,"description":6840,"category":4287,"tags":6841,"section":180,"role":4297,"priority":917,"type":182,"intent":4291,"difficulty":10,"stack":6842,"topics":6843},"If a Django file upload fails with 413 Request Entity Too Large, the rejection usually happens before Django sees the request. In a production stack like:",[12,39],[12,39],[4399,4367],{"path":1867,"title":1868,"description":6845,"category":4287,"tags":6846,"section":180,"role":4297,"priority":522,"type":182,"intent":4291,"difficulty":10,"stack":6847,"topics":6848},"Understand and fix Nginx 499 status codes in front of Django: find the slow endpoints and impatient clients, align load balancer and proxy timeouts, and move long work to background tasks.",[12,39,5170],[12,39,72],[4399,4320],{"path":1884,"title":1885,"description":6850,"category":4287,"tags":6851,"section":180,"role":4297,"priority":854,"type":182,"intent":4291,"difficulty":44,"stack":6852,"topics":6853},"Fix nginx bind() to 0.0.0.0:80 failed (98: Address already in use) on a Django server: find the process holding port 80 or 443, stop Apache or a stray Nginx, and fix duplicate listen directives and Docker port clashes.",[12,39,46],[12,39,46],[4399,4319],{"path":1817,"title":1818,"description":6855,"category":4287,"tags":6856,"section":180,"role":4297,"priority":1819,"type":182,"intent":4291,"difficulty":10,"stack":6857,"topics":6858},"Fix Nginx emerg errors such as cannot load certificate BIO_new_file() failed, no such file, or key values mismatch: check certificate paths, Certbot live symlinks, file permissions, PEM formats, and that the key matches the certificate.",[12,39,380],[12,39,284],[4399,4499],{"path":1827,"title":1828,"description":6860,"category":4287,"tags":6861,"section":180,"role":4297,"priority":865,"type":182,"intent":4291,"difficulty":44,"stack":6862,"topics":6863},"Fix the Nginx warning conflicting server name example.com on 0.0.0.0:80, ignored: find duplicate server blocks in sites-enabled and conf.d, remove leftover Certbot or default configs, and make the right Django site answer.",[12,39,4456],[12,39],[4399],{"path":1880,"title":1881,"description":6865,"category":4287,"tags":6866,"section":180,"role":4297,"priority":538,"type":182,"intent":4291,"difficulty":44,"stack":6867,"topics":6868},"Fix the Welcome to nginx page appearing instead of your Django site: enable the site, remove the default server, match server_name, add the HTTPS and IPv6 listeners, and reload after nginx -t.",[12,39,4456],[12,39],[4399,4499],{"path":1430,"title":1431,"description":6870,"category":4287,"tags":6871,"section":180,"role":4297,"priority":877,"type":182,"intent":4291,"difficulty":44,"stack":6872,"topics":6873},"Fix nginx [emerg] errors that stop Nginx from starting or reloading for a Django site: unknown directive, directive is not allowed here, host not found in upstream, cannot load certificate, and unexpected end of file.",[12,39,4456],[12,39],[4399],{"path":1831,"title":1832,"description":6875,"category":4287,"tags":6876,"section":180,"role":4297,"priority":1833,"type":182,"intent":4291,"difficulty":44,"stack":6877,"topics":6878},"Fix the Nginx 502 error connect() to unix:\u002Frun\u002Fgunicorn.sock failed (2: No such file or directory): start the Gunicorn socket or service, match the socket path in Nginx and systemd, and stop PrivateTmp and RuntimeDirectory from hiding the file.",[12,39,72],[12,39,72],[4399,5095],{"path":1836,"title":1837,"description":6880,"category":4287,"tags":6881,"section":180,"role":4297,"priority":1182,"type":182,"intent":4291,"difficulty":10,"stack":6882,"topics":6883},"Fix the Nginx no live upstreams while connecting to upstream error for Django: understand max_fails and fail_timeout, find why every backend was marked down, and configure upstream health and retries safely.",[12,39,5061],[12,39,72],[4399],{"path":1876,"title":1877,"description":6885,"category":4287,"tags":6886,"section":180,"role":4297,"priority":947,"type":182,"intent":4291,"difficulty":10,"stack":6888,"topics":6889},"Fix Nginx connect() failed (111: Connection refused) to Gunicorn: service status, bind address mismatches, stale sockets, firewalls, and startup ordering.",[39,72,6887],"connection-refused",[12,72,39],[4399,4493],{"path":1822,"title":1823,"description":6891,"category":4287,"tags":6892,"section":180,"role":4297,"priority":1824,"type":182,"intent":4291,"difficulty":44,"stack":6893,"topics":6894},"Fix the Nginx emerg error could not build server_names_hash, you should increase server_names_hash_bucket_size when adding long domain names or many Django sites: set the bucket and max size in the http block, test, and reload safely.",[12,39,4456],[12,39],[4399],{"path":1871,"title":1872,"description":6896,"category":4287,"tags":6897,"section":180,"role":4297,"priority":1873,"type":182,"intent":4291,"difficulty":10,"stack":6898,"topics":6899},"Fix custom request headers such as X_API_KEY or tenant_id disappearing behind Nginx: understand why Nginx ignores headers with underscores, rename them to use hyphens, or enable underscores_in_headers, and read them correctly in Django’s request.headers.",[12,39,5818],[12,39],[4399],{"path":1840,"title":1841,"description":6901,"category":4287,"tags":6902,"section":180,"role":4297,"priority":1842,"type":182,"intent":4291,"difficulty":10,"stack":6903,"topics":6904},"Fix the Nginx error upstream prematurely closed connection while reading response header from upstream: find the Gunicorn worker that died or timed out, match timeouts across layers, and fix crashes and memory kills.",[12,39,72],[12,39,72],[4399,4493],{"path":1845,"title":1846,"description":6906,"category":4287,"tags":6907,"section":180,"role":4297,"priority":400,"type":182,"intent":4291,"difficulty":10,"stack":6909,"topics":6910},"Fix 502 errors caused by Nginx 'upstream sent too big header': measure Django's response headers, raise proxy_buffer_size safely, and shrink oversized cookies, sessions, and headers.",[12,39,6908],"cookies",[12,39,72],[4399],{"path":1849,"title":1850,"description":6912,"category":4287,"tags":6913,"section":180,"role":4297,"priority":1851,"type":182,"intent":4291,"difficulty":10,"stack":6914,"topics":6915},"Fix the Nginx alert worker_connections are not enough while connecting to upstream for Django: count client and upstream connections, raise worker_connections and worker_rlimit_nofile, use upstream keepalive, and find slow responses that hold connections open.",[12,39,5170],[12,39,46],[4399,4320],{"path":2148,"title":2149,"description":6917,"category":4287,"tags":6918,"section":180,"role":4297,"priority":2150,"type":182,"intent":4291,"difficulty":44,"stack":6919,"topics":6920},"Fix pip error externally-managed-environment on Ubuntu 24.04, Debian 12, and other PEP 668 systems when installing Django: create a virtualenv or use uv, use pipx for tools, and avoid --break-system-packages on servers.",[12,939,635],[12,272,635],[4349,4319],{"path":1947,"title":1948,"description":6922,"category":4287,"tags":6923,"section":180,"role":4297,"priority":1949,"type":182,"intent":4291,"difficulty":18,"stack":6924,"topics":6925},"Fix the PostgreSQL warning database has a collation version mismatch after upgrading Ubuntu, Debian, or a Docker base image under a Django database: reindex affected text indexes, refresh the collation version, and avoid silent index corruption.",[12,13,5906],[12,13,46],[4311,4319],{"path":1223,"title":1224,"description":6927,"category":4287,"tags":6928,"section":180,"role":4297,"priority":1225,"type":182,"intent":4291,"difficulty":18,"stack":6930,"topics":6931},"Fix the PostgreSQL error canceling statement due to conflict with recovery when Django reads from a hot standby: understand vacuum conflicts, tune max_standby_streaming_delay and hot_standby_feedback, and route long reports to the right replica.",[12,13,6929],"replicas",[12,13],[4311,4320],{"path":1232,"title":1233,"description":6933,"category":4287,"tags":6934,"section":180,"role":4297,"priority":1234,"type":182,"intent":4291,"difficulty":10,"stack":6935,"topics":6936},"Fix the PostgreSQL InternalError current transaction is aborted, commands ignored until end of transaction block in Django: find the first failing query, use atomic savepoints around expected errors, and clean up after exceptions in tests and workers.",[12,13,6799],[12,13],[4311],{"path":1912,"title":1913,"description":6938,"category":4287,"tags":6939,"section":180,"role":4297,"priority":1914,"type":182,"intent":4291,"difficulty":10,"stack":6940,"topics":6941},"Fix the PostgreSQL error database is being accessed by other users when Django tests, restores, or resets drop a database: find the open sessions, stop app processes and pools, terminate backends, or use DROP DATABASE WITH (FORCE).",[12,13,6549],[12,13],[4311,1025],{"path":1930,"title":1931,"description":6943,"category":4287,"tags":6944,"section":180,"role":4297,"priority":828,"type":182,"intent":4291,"difficulty":18,"stack":6945,"topics":6946},"Fix PostgreSQL deadlock detected errors in Django apps: read the deadlock log, lock rows in a consistent order with select_for_update, shorten transactions, and retry the transactions that lose.",[12,13,6799],[12,13],[4311],{"path":1907,"title":1908,"description":6948,"category":4287,"tags":6949,"section":180,"role":4297,"priority":1909,"type":182,"intent":4291,"difficulty":10,"stack":6950,"topics":6951},"Fix the PostgreSQL error could not resize shared memory segment No space left on device in Docker and Kubernetes: raise \u002Fdev\u002Fshm with shm_size or a memory-backed emptyDir, and tune parallel query and work_mem for Django workloads.",[12,13,152],[12,13,152],[4311,152],{"path":1934,"title":1935,"description":6953,"category":4287,"tags":6954,"section":180,"role":4297,"priority":1936,"type":182,"intent":4291,"difficulty":44,"stack":6956,"topics":6957},"Fix the PostgreSQL error fe_sendauth no password supplied in Django: find why the password is empty, check DATABASE_URL parsing and environment loading in systemd, Docker, and cron, escape special characters, and use .pgpass or secrets safely.",[12,13,6955],"environment-variables",[12,13],[4311,4459],{"path":1744,"title":1745,"description":6959,"category":4287,"tags":6960,"section":180,"role":4297,"priority":795,"type":182,"intent":4291,"difficulty":18,"stack":6961,"topics":6962},"Find and fix PostgreSQL sessions stuck 'idle in transaction' from Django: identify the source with application_name, fix atomic blocks around slow work, and set idle_in_transaction_session_timeout.",[12,13,6799],[12,13,27],[4311],{"path":1917,"title":1918,"description":6964,"category":4287,"tags":6965,"section":180,"role":4297,"priority":1919,"type":182,"intent":4291,"difficulty":10,"stack":6966,"topics":6967},"Fix the PostgreSQL FATAL error no pg_hba.conf entry for host when Django connects: add the right host or hostssl rule, match the client address and auth method, reload PostgreSQL, and handle Docker networks and SSL-only managed databases.",[12,13,5208],[12,13],[4311],{"path":1939,"title":1940,"description":6969,"category":4287,"tags":6970,"section":180,"role":4297,"priority":276,"type":182,"intent":4291,"difficulty":44,"stack":6971,"topics":6972},"Fix FATAL: password authentication failed for user in Django: read the server-side reason, URL-encode special characters, reload environment variables, fix Docker volume passwords, and pg_hba methods.",[12,13,5208],[12,13,152],[4311],{"path":1922,"title":1923,"description":6974,"category":4287,"tags":6975,"section":180,"role":4297,"priority":484,"type":182,"intent":4291,"difficulty":44,"stack":6976,"topics":6977},"Fix Django FATAL Peer authentication failed for user when connecting to local PostgreSQL: understand peer versus password auth in pg_hba.conf, connect over TCP with HOST=localhost, or map the Linux user correctly.",[12,13,46],[12,13,46],[4311],{"path":1255,"title":1256,"description":6979,"category":4287,"tags":6980,"section":180,"role":4297,"priority":1257,"type":182,"intent":4291,"difficulty":10,"stack":6981,"topics":6982},"Fix the PostgreSQL error permission denied to create extension when Django migrations add pg_trgm, unaccent, hstore, citext, or PostGIS: create extensions as an admin once, use trusted extensions, and handle RDS, Cloud SQL, Azure, and Supabase.",[12,13,1025],[12,13],[4311,1025],{"path":1316,"title":1317,"description":6984,"category":4287,"tags":6985,"section":180,"role":4297,"priority":1318,"type":182,"intent":4291,"difficulty":10,"stack":6986,"topics":6987},"Fix Django migrate failing with permission denied for schema public on PostgreSQL 15 and newer: make the app role own the database or schema, grant CREATE on public, and set up roles correctly on managed databases.",[12,13,1025],[12,13],[4311,1025],{"path":1943,"title":1944,"description":6989,"category":4287,"tags":6990,"section":180,"role":4297,"priority":156,"type":182,"intent":4291,"difficulty":44,"stack":6991,"topics":6992},"Fix Django errors FATAL role does not exist and FATAL database does not exist when connecting to PostgreSQL: create the role and database, match the names in settings, and avoid connecting as the Linux user by accident.",[12,13,4456],[12,13],[4311],{"path":1307,"title":1308,"description":6994,"category":4287,"tags":6995,"section":180,"role":4297,"priority":167,"type":182,"intent":4291,"difficulty":10,"stack":6996,"topics":6997},"Fix Django IntegrityError duplicate key value violates unique constraint on the id column after loaddata, a restore, or a migration from another database: reset PostgreSQL sequences with sqlsequencereset or setval.",[12,13,1025],[12,13],[4311,4342],{"path":1270,"title":1271,"description":6999,"category":4287,"tags":7000,"section":180,"role":4297,"priority":1272,"type":182,"intent":4291,"difficulty":10,"stack":7001,"topics":7002},"Fix the Django OperationalError server closed the connection unexpectedly: find whether PostgreSQL crashed, a firewall or load balancer killed idle connections, or a failover happened, then tune CONN_MAX_AGE, CONN_HEALTH_CHECKS, and TCP keepalives.",[12,13,6805],[12,13],[4311],{"path":1952,"title":1953,"description":7004,"category":4287,"tags":7005,"section":180,"role":4297,"priority":299,"type":182,"intent":4291,"difficulty":10,"stack":7006,"topics":7007},"Fix Django PostgreSQL TLS errors: no pg_hba.conf entry with no encryption, server does not support SSL, root.crt missing for verify-full, certificate verify failed, and SSL SYSCALL EOF drops.",[12,13,380],[12,13,1955],[4311,4499],{"path":1926,"title":1927,"description":7009,"category":4287,"tags":7010,"section":180,"role":4297,"priority":162,"type":182,"intent":4291,"difficulty":10,"stack":7011,"topics":7012},"Fix PostgreSQL sorry, too many clients already errors from Django: count connections by source, fix CONN_MAX_AGE and worker math, find idle leaks, and add pooling.",[12,13,4469],[12,13],[4311,4320],{"path":1957,"title":1958,"description":7014,"category":4287,"tags":7015,"section":180,"role":4297,"priority":1959,"type":182,"intent":4291,"difficulty":18,"stack":7016,"topics":7017},"Fix PostgreSQL pg_wal growing until the disk is full on a Django database: find inactive replication slots, broken WAL archiving, or high max_wal_size, free space safely without deleting WAL by hand, and add alerts so it does not happen again.",[12,13,6648],[12,13,46],[4311,4342],{"path":2153,"title":2154,"description":7019,"category":4287,"tags":7020,"section":180,"role":4297,"priority":2155,"type":182,"intent":4291,"difficulty":44,"stack":7021,"topics":7022},"Fix psycopg and psycopg2 install failures on servers and Docker images: pg_config not found, missing libpq, binary versus source builds, and missing wheels.",[12,13,272],[12,13],[4349,4311],{"path":1985,"title":1986,"description":7024,"category":4287,"tags":7025,"section":180,"role":4297,"priority":603,"type":182,"intent":4291,"difficulty":10,"stack":7026,"topics":7027},"Fix Redis connection refused errors from Django caches, sessions, Celery, and Channels: service status, bind addresses, Docker hostnames, TLS URLs, auth, and limits.",[12,105,27],[12,105],[4465],{"path":1962,"title":1963,"description":7029,"category":4287,"tags":7030,"section":180,"role":4297,"priority":1964,"type":182,"intent":4291,"difficulty":10,"stack":7031,"topics":7032},"Fix the Redis error LOADING Redis is loading the dataset in memory after restarts or failovers in Django and Celery: understand RDB and AOF load time, make the cache degrade gracefully, add retries, and keep cache data out of persistence.",[12,105,27],[12,105,27],[4465],{"path":1981,"title":1982,"description":7034,"category":4287,"tags":7035,"section":180,"role":4297,"priority":795,"type":182,"intent":4291,"difficulty":10,"stack":7036,"topics":7037},"Fix the Redis ERR max number of clients reached error in Django and Celery: count connections per process, cap connection pools, set timeouts for idle clients, and raise maxclients and file limits safely.",[12,105,27],[12,105,27],[4465],{"path":1989,"title":1990,"description":7039,"category":4287,"tags":7040,"section":180,"role":4297,"priority":740,"type":182,"intent":4291,"difficulty":10,"stack":7041,"topics":7042},"Fix the Redis MISCONF error that blocks writes from Django and Celery: find why background saves fail (disk full, permissions, memory overcommit), restore writes safely, and decide whether the instance needs persistence at all.",[12,105,27],[12,105,46],[4465,4319],{"path":1967,"title":1968,"description":7044,"category":4287,"tags":7045,"section":180,"role":4297,"priority":1969,"type":182,"intent":4291,"difficulty":44,"stack":7046,"topics":7047},"Fix Redis NOAUTH Authentication required and WRONGPASS invalid username-password pair errors in Django and Celery: put the password in the Redis URL correctly, URL-encode special characters, use ACL usernames, and keep cache and broker settings in sync.",[12,105,59],[12,105,27],[4465,4459],{"path":1972,"title":1973,"description":7049,"category":4287,"tags":7050,"section":180,"role":4297,"priority":199,"type":182,"intent":4291,"difficulty":10,"stack":7051,"topics":7052},"Fix Redis OOM command not allowed when used memory exceeds maxmemory in Django: find what fills Redis, choose the right eviction policy for cache versus Celery, set TTLs, and split instances.",[12,105,27],[12,105,27],[4465],{"path":1976,"title":1977,"description":7054,"category":4287,"tags":7055,"section":180,"role":4297,"priority":1978,"type":182,"intent":4291,"difficulty":10,"stack":7057,"topics":7058},"Fix the Redis error READONLY You can’t write against a read only replica in Django and Celery: point clients at the primary endpoint, handle failovers with Sentinel or managed endpoints, and stop stale DNS and connection pools from writing to replicas.",[12,105,7056],"failover",[12,105,27],[4465],{"path":1993,"title":1994,"description":7060,"category":4287,"tags":7061,"section":180,"role":4297,"priority":1995,"type":182,"intent":4291,"difficulty":10,"stack":7062,"topics":7063},"Fix SSL CERTIFICATE_VERIFY_FAILED errors when Django, Celery, or Channels connect to Redis over rediss:\u002F\u002F on Heroku, Upstash, ElastiCache, or Azure: configure ssl_cert_reqs, CA bundles, and broker_use_ssl without disabling verification blindly.",[12,105,380],[12,105,27],[4465,27],{"path":2012,"title":2013,"description":7065,"category":4287,"tags":7066,"section":180,"role":4297,"priority":2014,"type":182,"intent":4291,"difficulty":44,"stack":7067,"topics":7068},"Fix Sentry showing no events from a production Django app: check the DSN and environment, initialize sentry-sdk early in settings, make sure Celery and Gunicorn workers initialize too, and look for sampling, filters, rate limits, and blocked outbound traffic.",[12,2016,5471],[12,2016,27],[4416],{"path":1580,"title":1581,"description":7070,"category":4287,"tags":7071,"section":180,"role":4297,"priority":1582,"type":182,"intent":4291,"difficulty":44,"stack":7072,"topics":7073},"Fix Django SQLite errors attempt to write a readonly database and unable to open database file in production: give the app user write access to the database file and its directory, use an absolute path, and handle Docker volumes and read-only images.",[12,128,6173],[12,128],[4311],{"path":1303,"title":1304,"description":7075,"category":4287,"tags":7076,"section":180,"role":4297,"priority":253,"type":182,"intent":4291,"difficulty":44,"stack":7077,"topics":7078},"Fix SQLite database is locked errors in Django: concurrent writes, long transactions, WAL mode, timeouts, IMMEDIATE transactions, and when to migrate.",[12,128,4469],[12,128],[4311],{"path":1260,"title":1261,"description":7080,"category":4287,"tags":7081,"section":180,"role":4297,"priority":1262,"type":182,"intent":4291,"difficulty":44,"stack":7082,"topics":7083},"Fix Permission denied (publickey) and Host key verification failed when GitHub Actions, GitLab CI, or another pipeline deploys Django over SSH: load the private key correctly, add known_hosts, fix authorized_keys permissions, and check the user.",[12,486,786],[12,486,92],[786,4319],{"path":2007,"title":2008,"description":7085,"category":4287,"tags":7086,"section":180,"role":4297,"priority":2009,"type":182,"intent":4291,"difficulty":44,"stack":7087,"topics":7088},"Fix NET::ERR_CERT_COMMON_NAME_INVALID and certificate name mismatch errors on a Django site: issue one certificate for both www and the apex domain, redirect to a canonical host, and check DNS, SNI, and default server blocks.",[12,1155,379],[12,39,284],[4499],{"path":1099,"title":1100,"description":7090,"category":4287,"tags":7091,"section":180,"role":4297,"priority":138,"type":182,"intent":4291,"difficulty":44,"stack":7092,"topics":7093},"A common production failure is that your Django app loads, but CSS, JavaScript, or Django admin assets are missing.",[12,39,170],[12,39,170],[4391],{"path":2158,"title":2159,"description":7095,"category":4287,"tags":7096,"section":180,"role":4297,"priority":751,"type":182,"intent":4291,"difficulty":44,"stack":7097,"topics":7098},"Fix Django settings that miss variables from a systemd EnvironmentFile: file syntax rules, the '-' prefix, quoting, no variable expansion, daemon-reload versus restart, and checking a running process.",[12,798,4456],[12,798,72],[5095,4459],{"path":2096,"title":2097,"description":7100,"category":4287,"tags":7101,"section":180,"role":4297,"priority":31,"type":182,"intent":4291,"difficulty":10,"stack":7102,"topics":7103},"Fix a Gunicorn service for Django that systemd cannot start: status codes 203\u002FEXEC, 200\u002FCHDIR, 217\u002FUSER, environment files, socket directories, and restart loops.",[12,72,798],[12,72,798],[5095,4493],{"path":2034,"title":2035,"description":7105,"category":4287,"tags":7106,"section":180,"role":4297,"priority":778,"type":182,"intent":4291,"difficulty":10,"stack":7107,"topics":7108},"Stop Django deploys from logging everyone out: a changed or per-process SECRET_KEY, cache-backed sessions lost on restart, changed cookie settings, and rotating keys safely with SECRET_KEY_FALLBACKS.",[12,4480,5208],[12,105],[4459,4380],{"path":2162,"title":2163,"description":7110,"category":4287,"tags":7111,"section":180,"role":4297,"priority":2164,"type":182,"intent":4291,"difficulty":10,"stack":7112,"topics":7113},"Fix the uWSGI error invalid request block size behind Nginx for Django: use uwsgi_pass instead of proxy_pass for the uwsgi protocol, match socket and http-socket, and raise buffer-size for large cookies and headers.",[12,837,39],[12,837,39],[4493,4399],{"path":2167,"title":2168,"description":7115,"category":4287,"tags":7116,"section":180,"role":4297,"priority":2169,"type":182,"intent":4291,"difficulty":10,"stack":7117,"topics":7118},"Fix uWSGI no python application found, check your startup logs for errors: point module at the right wsgi.py, set chdir and virtualenv, load the Python plugin, and read the import error hidden earlier in the log.",[12,837,5055],[12,837,39],[4493],{"path":2038,"title":2039,"description":7120,"category":4287,"tags":7121,"section":180,"role":4297,"priority":2040,"type":182,"intent":4291,"difficulty":10,"stack":7122,"topics":7123},"Fix Vercel 500 FUNCTION_INVOCATION_FAILED and serverless function crashed errors for Django: read the function logs, expose the WSGI app correctly, fix ALLOWED_HOSTS, static files, database connections, and bundle size limits.",[12,671,2400],[12,671,13],[66],{"path":2043,"title":2044,"description":7125,"category":4287,"tags":7126,"section":180,"role":4297,"priority":2045,"type":182,"intent":4291,"difficulty":10,"stack":7128,"topics":7129},"Fix WeasyPrint OSError cannot load library gobject-2.0-0, libpango, or libharfbuzz when generating PDFs in Django on Docker, Heroku, or a slim server: install Pango and fonts, use the right package names, and keep PDF rendering in a worker.",[12,7127,152],"pdf",[12,2047,152],[152,4349],{"path":1499,"title":1500,"description":7131,"category":4287,"tags":7132,"section":180,"role":4297,"priority":1501,"type":182,"intent":4291,"difficulty":10,"stack":7133,"topics":7134},"Fix Django Channels WebSocket connections rejected with 403 or closed with code 1006 in production: configure AllowedHostsOriginValidator and ALLOWED_HOSTS, pass Host and Origin through Nginx, and check authentication middleware and CSRF-like origin rules.",[12,411,4619],[12,411,39],[4622],{"path":3241,"title":3242,"description":7136,"category":4307,"tags":7137,"section":7,"role":18,"priority":3243,"type":9,"intent":4291,"difficulty":18,"stack":7138,"topics":7139},"Decide whether to enable Gunicorn preload_app for Django: memory savings from copy-on-write, faster worker boot, fail-fast startup, the database and client connections you must close after fork, and why reloads need a full restart.",[12,72,4315],[12,72,46],[4493,4320],{"path":1701,"title":1702,"description":7141,"category":7142,"tags":7143,"section":180,"role":4297,"priority":138,"type":182,"intent":4291,"difficulty":10,"stack":7144,"topics":7145},"Fix Permission denied on a Gunicorn Unix socket: socket ownership and mode, directory traversal, systemd RuntimeDirectory, umask, and SELinux.","Permissions",[72,39,46],[12,72,39],[4493,4399],{"path":2191,"title":2192,"description":7147,"category":4323,"tags":7148,"section":23,"role":4316,"priority":2193,"type":64,"intent":4371,"difficulty":44,"stack":7149,"topics":7150},"Compare Gunicorn and Uvicorn for Django: WSGI versus ASGI, when async views and WebSockets need Uvicorn, running Uvicorn workers under Gunicorn, performance for typical database-bound apps, and how to choose.",[12,72,391],[12,72,391],[4493,4622],{"path":2196,"title":2197,"description":7152,"category":4323,"tags":7153,"section":23,"role":4316,"priority":2198,"type":64,"intent":4371,"difficulty":44,"stack":7154,"topics":7155},"Compare Gunicorn and uWSGI for serving Django in production: configuration complexity, performance, worker models, features like the uwsgi protocol and emperor mode, maintenance status, and which to choose for new and existing projects.",[12,72,837],[12,72,837],[4493],{"path":61,"title":62,"description":7157,"category":4323,"tags":7158,"section":23,"role":4316,"priority":63,"type":64,"intent":4371,"difficulty":44,"stack":7159,"topics":7160},"Compare Heroku alternatives for deploying Django: Render, Railway, Fly.io, DigitalOcean App Platform, Google Cloud Run, AWS App Runner, PythonAnywhere, and self-hosted PaaS like Coolify and Dokku, by workflow, workers, databases, and cost model.",[12,66,605],[12,66,13],[66],{"path":2216,"title":2217,"description":7162,"category":4323,"tags":7163,"section":23,"role":4327,"priority":1379,"type":9,"intent":4346,"difficulty":10,"stack":7164,"topics":7165},"Run several Django projects on one server safely: separate users and virtualenvs, systemd templates, per-site databases, and Nginx blocks.",[12,39,72],[12,39,72],[4319,4399],{"path":2390,"title":2391,"description":7167,"category":4307,"tags":7168,"section":7,"role":18,"priority":2392,"type":9,"intent":4291,"difficulty":10,"stack":7169,"topics":7170},"Deliver Django configuration on Kubernetes: ConfigMaps for non-secret settings, Secrets for credentials, envFrom versus mounted files, rolling pods when values change, encryption at rest, and syncing from external secret managers.",[12,98,2394],[12,98,2394],[98,4459],{"path":2308,"title":2309,"description":7172,"category":4323,"tags":7173,"section":23,"role":4316,"priority":2310,"type":64,"intent":4371,"difficulty":10,"stack":7174,"topics":7175},"Compare Kubernetes and Docker Compose for running Django in production: single-host simplicity versus multi-node scheduling, rolling updates, autoscaling, secrets, operational cost, and when a team should move from Compose to Kubernetes.",[12,98,1670],[12,98,152],[98,152],{"path":2258,"title":2259,"description":7177,"category":4307,"tags":7178,"section":7,"role":18,"priority":565,"type":9,"intent":4346,"difficulty":18,"stack":7179,"topics":7180},"Pre-release load testing answers a practical deployment question: will this Django release survive real traffic on your actual production stack.",[12,2261],[12,2261],[4320],{"path":2360,"title":2361,"description":7182,"category":4307,"tags":7183,"section":7,"role":4440,"priority":1379,"type":9,"intent":4291,"difficulty":18,"stack":7184,"topics":7185},"Design Django Celery tasks that can run twice without harm: enqueue on commit, idempotency keys and unique constraints, row locks, external API idempotency, and bounded retries with backoff.",[12,27,4420],[12,27,13],[27],{"path":2328,"title":2329,"description":7187,"category":4323,"tags":7188,"section":23,"role":4327,"priority":2330,"type":9,"intent":4291,"difficulty":10,"stack":7189,"topics":7190},"Load Django secrets such as SECRET_KEY and database passwords from AWS Secrets Manager: inject them into ECS and EKS as environment variables, fetch them at startup with boto3 and caching, grant least-privilege IAM, and rotate RDS credentials.",[12,79,2394],[12,79,2113],[4459,79],{"path":2333,"title":2334,"description":7192,"category":4323,"tags":7193,"section":23,"role":18,"priority":2335,"type":9,"intent":4291,"difficulty":18,"stack":7194,"topics":7195},"Use HashiCorp Vault for Django secrets: read KV secrets with hvac using AppRole or Kubernetes auth, render them with Vault Agent or the Vault Secrets Operator, issue dynamic PostgreSQL credentials, and handle lease renewal and restarts.",[12,2337,2394],[12,2337,98],[4459],{"path":2386,"title":2387,"description":7197,"category":4323,"tags":7198,"section":23,"role":4440,"priority":1343,"type":64,"intent":4291,"difficulty":10,"stack":7199,"topics":7200},"Store, load, and rotate Django secrets: inventories, file-based secrets, systemd credentials, cloud secret managers, and SECRET_KEY_FALLBACKS.",[12,59,2394],[12,59],[4459],{"path":2402,"title":2403,"description":7202,"category":4307,"tags":7203,"section":7,"role":4440,"priority":389,"type":64,"intent":4371,"difficulty":10,"stack":7204,"topics":7205},"Many Django teams start with a manual deployment process over SSH. That is normal: log into a Linux server, pull code, install dependencies, run migrations, collect static files...",[12,786],[12,786],[4595,786],{"path":2411,"title":2412,"description":7207,"category":4323,"tags":7208,"section":23,"role":4327,"priority":2413,"type":9,"intent":4291,"difficulty":10,"stack":7209,"topics":7210},"Move a live Django project from SQLite to PostgreSQL without losing data: create the schema with migrate, transfer data with dumpdata and loaddata or pgloader, fix content types and sequences, and cut over with minimal downtime.",[12,13,128],[12,13,128],[4311,1025],{"path":2458,"title":2459,"description":7212,"category":4307,"tags":7213,"section":7,"role":18,"priority":2460,"type":9,"intent":4291,"difficulty":18,"stack":7215,"topics":7216},"Migrate a Django PostgreSQL database to a new server, provider, or major version with seconds of downtime: logical replication publications and subscriptions, schema copy, sequence sync, cutover steps, and verification.",[12,13,7214],"migration",[12,13],[4311,4380],{"path":2421,"title":2422,"description":7218,"category":4307,"tags":7219,"section":7,"role":4440,"priority":538,"type":9,"intent":4291,"difficulty":10,"stack":7220,"topics":7221},"Run Flower to monitor Celery in a Django deployment: enable task events, run Flower under systemd bound to localhost, protect it with authentication behind Nginx, persist state, and export Prometheus metrics.",[12,27,5471],[12,27,2424,39],[27,4416],{"path":2426,"title":2427,"description":7223,"category":4307,"tags":7224,"section":7,"role":18,"priority":2428,"type":9,"intent":4291,"difficulty":44,"stack":7225,"topics":7226},"Detect Django scheduled jobs that fail or silently stop running: heartbeat (dead man's switch) monitoring with Healthchecks.io, Cronitor, or your own endpoint, pinging start and success from management commands, Celery Beat, and Kubernetes CronJobs.",[12,5471,2080],[12,27,2080],[4416,5095],{"path":2443,"title":2444,"description":7228,"category":4307,"tags":7229,"section":7,"role":18,"priority":2155,"type":9,"intent":4346,"difficulty":18,"stack":7230,"topics":7231},"Expose Django metrics to Prometheus, handle Gunicorn multiprocess mode, add database and host exporters, build Grafana panels, and alert on what matters.",[12,1051,5471],[12,1051],[4416],{"path":2431,"title":2432,"description":7233,"category":4307,"tags":7234,"section":7,"role":18,"priority":2433,"type":9,"intent":4371,"difficulty":10,"stack":7236,"topics":7237},"Instrument a Django app with Datadog APM: install ddtrace, run Gunicorn under ddtrace-run, configure service, env, and version tags, trace Celery, PostgreSQL, and Redis, correlate logs with traces, and control cost with sampling.",[12,2435,7235],"apm",[12,2435,72],[4416],{"path":2447,"title":2448,"description":7239,"category":4307,"tags":7240,"section":7,"role":18,"priority":2449,"type":9,"intent":4291,"difficulty":44,"stack":7241,"topics":7242},"Catch expiring HTTPS certificates before users do: check expiry from outside with uptime monitors, Prometheus blackbox exporter, or a scheduled script, cover every domain and certificate path, alert at 21 and 7 days, and verify that renewal actually reloads Nginx.",[12,380,5471],[12,380,1051],[4499,4416],{"path":2463,"title":2464,"description":7244,"category":4323,"tags":7245,"section":23,"role":4327,"priority":2465,"type":9,"intent":4291,"difficulty":10,"stack":7246,"topics":7247},"Migrate a production Django site to a new server or provider with minimal downtime: rebuild the stack from code, copy media with rsync, move PostgreSQL with dump and restore or replication, lower DNS TTL, cut over, and keep the old server as a fallback.",[12,7214,379],[12,13,46],[4319,4342],{"path":192,"title":193,"description":7249,"category":4307,"tags":7250,"section":7,"role":18,"priority":194,"type":9,"intent":4346,"difficulty":18,"stack":7251,"topics":7252},"Use Nginx proxy_cache in front of Django safely: cache zones, bypassing logged-in users, respecting Cache-Control, stale serving, and purging.",[12,39,190],[12,39],[4399,4465],{"path":2211,"title":2212,"description":7254,"category":4307,"tags":7255,"section":7,"role":18,"priority":2213,"type":9,"intent":4291,"difficulty":10,"stack":7256,"topics":7257},"Configure Nginx TLS for a Django site to earn an SSL Labs A+: TLS 1.2 and 1.3 only, modern ciphers, HSTS with Django settings, OCSP stapling, session settings, certificate chain, and verifying with SSL Labs and testssl.sh.",[12,39,380],[12,39,380],[4499,4330],{"path":2473,"title":2474,"description":7259,"category":4323,"tags":7260,"section":23,"role":4316,"priority":2475,"type":64,"intent":4371,"difficulty":44,"stack":7261,"topics":7262},"Compare Nginx and Caddy as the reverse proxy for Django: automatic HTTPS versus Certbot, configuration size, performance, static files, ecosystem and documentation, on-demand TLS for tenants, and which suits your deployment.",[12,39,372],[12,39,372],[4399],{"path":160,"title":161,"description":7264,"category":4307,"tags":7265,"section":7,"role":4327,"priority":162,"type":9,"intent":4346,"difficulty":10,"stack":7266,"topics":7267},"Shrink and speed up Django Docker images: slim base images, multi-stage builds, layer ordering, BuildKit cache mounts, .dockerignore, and measurement.",[12,152,5170],[12,152],[152,4320],{"path":2949,"title":2950,"description":7269,"category":4307,"tags":7270,"section":7,"role":18,"priority":2951,"type":9,"intent":4291,"difficulty":10,"stack":7272,"topics":7273},"Serve fast, right-sized images from a Django app: generate thumbnails in background tasks, use WebP and AVIF, responsive srcset, CDN or image service resizing, cache headers for media, and avoid resizing images inside web requests.",[12,7271,5170],"images",[12,1905,1116],[4367,4320],{"path":3032,"title":3033,"description":7275,"category":4307,"tags":7276,"section":7,"role":18,"priority":3034,"type":9,"intent":4291,"difficulty":10,"stack":7277,"topics":7278},"Make Django REST Framework APIs faster in production: eliminate N+1 queries with select_related and prefetch_related, slim serializers, paginate everything, cache expensive endpoints, use values() for read-heavy lists, and measure with profiling.",[12,260,5170],[12,260,13],[4588,4320],{"path":2263,"title":2264,"description":7280,"category":4307,"tags":7281,"section":7,"role":18,"priority":581,"type":9,"intent":4346,"difficulty":18,"stack":7282,"topics":7283},"If you want to optimize Gunicorn workers for Django, the main production risk is getting concurrency wrong.",[12,72],[12,72],[4493,4320],{"path":2478,"title":2479,"description":7285,"category":4307,"tags":7286,"section":7,"role":18,"priority":2480,"type":9,"intent":4291,"difficulty":18,"stack":7288,"topics":7289},"Use PostgreSQL declarative partitioning for very large Django tables such as events, logs, and audit trails: range partitions by time, creating them with migrations or pg_partman, primary key constraints, ORM behaviour, and dropping old data instantly.",[12,13,7287],"partitioning",[12,13],[4311],{"path":2483,"title":2484,"description":7291,"category":4323,"tags":7292,"section":23,"role":4316,"priority":2485,"type":9,"intent":4291,"difficulty":44,"stack":7293,"topics":7294},"Keep a Django staging site private: HTTP basic auth in Nginx or Caddy with health-check and webhook exceptions, Django middleware for PaaS hosts, noindex headers, IP or VPN restrictions, and why basic auth interferes with API tokens.",[12,4334,39],[12,39,372],[4330,4399],{"path":2488,"title":2489,"description":7296,"category":4323,"tags":7297,"section":23,"role":4316,"priority":2069,"type":9,"intent":4291,"difficulty":44,"stack":7298,"topics":7299},"Make Django installs reproducible and tamper-resistant with pip-tools: requirements.in, compiled pins with hashes, separate dev requirements, pip install --require-hashes, and safe upgrades.",[12,939,4349,59],[12,939,2491],[4349],{"path":2493,"title":2494,"description":7301,"category":4323,"tags":7302,"section":23,"role":4316,"priority":1412,"type":64,"intent":4291,"difficulty":44,"stack":7304,"topics":7305},"Connect a domain to a Django server: A and AAAA records, www and apex, CNAMEs for platforms, TTLs, verifying propagation with dig, and matching ALLOWED_HOSTS and certificates.",[12,379,7303,1155],"domains",[12,379,39],[4499],{"path":2507,"title":2508,"description":7307,"category":4307,"tags":7308,"section":7,"role":18,"priority":2509,"type":9,"intent":4291,"difficulty":18,"stack":7309,"topics":7310},"Keep a Django app running through database failures: managed Multi-AZ PostgreSQL, Patroni or CloudNativePG for self-hosted clusters, connection endpoints that follow the primary, CONN_HEALTH_CHECKS and retries, and testing failover.",[12,13,5647],[12,13,2511],[4311,4342],{"path":2513,"title":2514,"description":7312,"category":4307,"tags":7313,"section":7,"role":18,"priority":1698,"type":9,"intent":4291,"difficulty":18,"stack":7314,"topics":7315},"Set up point-in-time recovery for a Django PostgreSQL database with pgBackRest: WAL archiving, full and incremental backups, restoring to a timestamp before a bad migration, and managed-service PITR.",[12,13,1161],[12,13,2516],[4342,4311],{"path":2351,"title":2352,"description":7317,"category":4307,"tags":7318,"section":7,"role":18,"priority":2353,"type":9,"intent":4291,"difficulty":10,"stack":7319,"topics":7320},"Turn on PostgreSQL slow query logging for a Django app: set log_min_duration_statement, add auto_explain for plans, tag queries with application_name and SQL comments to find the view that sent them, and ship logs to your log platform without flooding it.",[12,13,2642],[12,13],[4311,4416],{"path":2522,"title":2523,"description":7322,"category":4323,"tags":7323,"section":23,"role":4316,"priority":2524,"type":64,"intent":4371,"difficulty":44,"stack":7324,"topics":7325},"Compare PostgreSQL and MySQL (and MariaDB) as the database for a Django project: Django feature support, transactional DDL for migrations, JSON, full-text search, extensions, managed hosting, performance, and team experience.",[12,13,278],[12,13,278],[4311],{"path":2527,"title":2528,"description":7327,"category":4307,"tags":7328,"section":7,"role":18,"priority":2529,"type":9,"intent":4291,"difficulty":18,"stack":7329,"topics":7330},"Stop cache stampedes (dogpile effects) in Django when a popular cache key expires and hundreds of requests recompute it at once: use locks, stale-while-revalidate, jittered timeouts, background refresh, and probabilistic early expiration.",[12,190,105],[12,105],[4465,4320],{"path":2541,"title":2542,"description":7332,"category":4307,"tags":7333,"section":7,"role":18,"priority":835,"type":9,"intent":4346,"difficulty":18,"stack":7334,"topics":7335},"Find why Django endpoints are slow in production: sample live Gunicorn workers with py-spy, record flame graphs, and dump stuck workers safely.",[12,5311,5170],[12,72],[4320],{"path":2551,"title":2552,"description":7337,"category":4307,"tags":7338,"section":7,"role":18,"priority":2553,"type":9,"intent":4291,"difficulty":10,"stack":7339,"topics":7340},"Defend a Django site against abusive bots, scrapers, and credential stuffing with a web application firewall: Cloudflare or AWS WAF managed rules, rate-based rules, bot challenges on login and signup, protecting APIs, and avoiding false positives.",[12,59,237],[12,189,2555],[4330],{"path":2557,"title":2558,"description":7342,"category":4307,"tags":7343,"section":7,"role":4440,"priority":400,"type":9,"intent":4291,"difficulty":10,"stack":7344,"topics":7345},"Block brute-force attacks on Django login and admin pages with fail2ban: log failed logins with the real client IP, write a filter and jail, ban at the firewall, and combine with app-level rate limiting.",[12,59,2560],[12,2560,39,46],[4330],{"path":2589,"title":2590,"description":7347,"category":4323,"tags":7348,"section":23,"role":4327,"priority":1842,"type":9,"intent":4346,"difficulty":10,"stack":7350,"topics":7351},"Use cloud-init user data to provision a Django-ready Ubuntu server on first boot: users and SSH keys, packages, firewall, swap, directories, systemd units, and verification.",[12,2592,46,7349],"automation",[12,2592,635,798],[4595,4319],{"path":2594,"title":2595,"description":7353,"category":4307,"tags":7354,"section":7,"role":18,"priority":2596,"type":9,"intent":4291,"difficulty":10,"stack":7355,"topics":7356},"Decide what to purge from Cloudflare or another CDN after deploying Django: rely on hashed static file names, purge cached HTML by URL or tag, automate purges from CI with an API token, avoid purge-everything, and keep old assets available during rollouts.",[12,189,1116],[12,189,786],[4391,4380],{"path":2616,"title":2617,"description":7358,"category":4307,"tags":7359,"section":7,"role":4327,"priority":501,"type":9,"intent":4346,"difficulty":10,"stack":7360,"topics":7361},"Protect Django login, API, and expensive endpoints with Nginx limit_req: zones, burst and nodelay, 429 responses, real client IPs, and dry runs.",[12,39,59],[12,39],[4399,4330],{"path":228,"title":229,"description":7363,"category":4307,"tags":7364,"section":7,"role":18,"priority":230,"type":9,"intent":4291,"difficulty":10,"stack":7365,"topics":7366},"Pick Redis maxmemory and maxmemory-policy settings for Django workloads: allkeys-lru or allkeys-lfu for caches, noeviction for Celery brokers and locks, volatile policies for mixed use, and how to split instances so evictions never drop queued tasks or sessions.",[12,105,190],[12,105,27],[4465],{"path":2629,"title":2630,"description":7368,"category":4323,"tags":7369,"section":23,"role":4316,"priority":2631,"type":64,"intent":4371,"difficulty":44,"stack":7370,"topics":7371},"Compare Redis and Memcached as the Django cache backend: data structures, persistence, eviction, multi-purpose use for sessions, Celery, and rate limiting, memory efficiency, scaling, and managed options, with a recommendation.",[12,105,290],[12,105,290],[4465],{"path":2634,"title":2635,"description":7373,"category":4307,"tags":7374,"section":7,"role":4327,"priority":1328,"type":9,"intent":4371,"difficulty":10,"stack":7375,"topics":7376},"Cut the cost of running Django in production: measure before resizing, right-size servers and databases, trim idle environments, control egress, NAT, logs, and backups, and commit only to steady usage.",[12,5587,5224],[12,79,13],[4320,66],{"path":2644,"title":2645,"description":7378,"category":4307,"tags":7379,"section":7,"role":18,"priority":2646,"type":9,"intent":4291,"difficulty":18,"stack":7380,"topics":7381},"Lower the memory footprint of Django processes: measure RSS per Gunicorn and Celery worker, trim imports and INSTALLED_APPS, stream large querysets and responses, recycle workers with max-requests, try jemalloc, and size worker counts to fit the server.",[12,4315,5170],[12,72,27],[4320,4493],{"path":2649,"title":2650,"description":7383,"category":4307,"tags":7384,"section":7,"role":18,"priority":2651,"type":9,"intent":4291,"difficulty":18,"stack":7386,"topics":7387},"Make Django processes start faster: measure import time with python -X importtime, defer heavy imports, avoid database queries at import, trim INSTALLED_APPS, and why startup matters for serverless, autoscaling, deploys, and management commands.",[12,5170,7385],"startup",[12,272,72],[4320,4493],{"path":2665,"title":2666,"description":7389,"category":4307,"tags":7390,"section":7,"role":18,"priority":2667,"type":9,"intent":4291,"difficulty":18,"stack":7391,"topics":7392},"Rename a Django model field or column without breaking running code during rolling deploys: use db_column to rename in Python only, or expand and contract with a new column, dual writes, backfill, and removal across several releases.",[12,1025,5551],[12,13],[1025,4380],{"path":2670,"title":2671,"description":7394,"category":4323,"tags":7395,"section":23,"role":4316,"priority":2672,"type":64,"intent":4371,"difficulty":44,"stack":7396,"topics":7397},"Compare Render, Railway, and Fly.io for hosting Django: build and deploy workflow, workers and cron, managed PostgreSQL, migrations, regions and latency, persistent storage, billing models, and operational effort, with picks for common scenarios.",[12,2244,567],[12,66,152],[66],{"path":3286,"title":3287,"description":7399,"category":4307,"tags":7400,"section":7,"role":18,"priority":3288,"type":9,"intent":4291,"difficulty":10,"stack":7402,"topics":7403},"Respond to a leaked Django SECRET_KEY, database password, or API key: assess exposure, rotate in the right order, use SECRET_KEY_FALLBACKS only when appropriate, invalidate sessions and tokens, purge Git history, and prevent the next leak.",[12,59,7401],"incident-response",[12,59,466],[4330,4459],{"path":2605,"title":2606,"description":7405,"category":4323,"tags":7406,"section":23,"role":18,"priority":2607,"type":9,"intent":4291,"difficulty":10,"stack":7407,"topics":7408},"Remove the Django admin from the public internet by serving it only over Tailscale: install Tailscale on the server, route \u002Fadmin through a tailnet-only Nginx server block or a separate admin hostname, and keep staff access simple.",[12,2609,59],[12,2609,39],[4330],{"path":2685,"title":2686,"description":7410,"category":4307,"tags":7411,"section":7,"role":18,"priority":2687,"type":9,"intent":4291,"difficulty":10,"stack":7412,"topics":7413},"Undo a Django migration safely in production: migrate an app back to a previous migration, understand which operations are reversible, handle data loss from reverting added columns and data migrations, roll back code and schema in the right order, and prefer forward fixes.",[12,1025,4592],[12,13],[1025,4380],{"path":2267,"title":2268,"description":7415,"category":4307,"tags":7416,"section":7,"role":18,"priority":215,"type":9,"intent":4346,"difficulty":18,"stack":7417,"topics":7418},"A failed Django release can break more than page requests. It can also break background workers, scheduled jobs, static asset loading, startup commands, or database compatibility.",[12,466,798],[12,466,798],[4380],{"path":2690,"title":2691,"description":7420,"category":4307,"tags":7421,"section":7,"role":18,"priority":2692,"type":9,"intent":4291,"difficulty":10,"stack":7422,"topics":7423},"Rotate PostgreSQL or MySQL credentials used by a Django app without outages: use two database roles or dual passwords, update secrets in the right order, restart web, Celery, and cron processes, handle PgBouncer, and automate rotation with Secrets Manager.",[12,59,13],[12,13,2394],[4459,4311],{"path":2695,"title":2696,"description":7425,"category":4307,"tags":7426,"section":7,"role":4440,"priority":1782,"type":9,"intent":4291,"difficulty":10,"stack":7427,"topics":7428},"Rotate Django's SECRET_KEY without breaking sessions and password reset links: what the key signs, SECRET_KEY_FALLBACKS, a staged rollout, leak response, and third-party libraries that use the key.",[12,59,2394],[12],[4330,4459],{"path":2699,"title":2700,"description":7430,"category":4307,"tags":7431,"section":7,"role":4440,"priority":253,"type":9,"intent":4291,"difficulty":10,"stack":7432,"topics":7433},"Stop slow Celery tasks from delaying urgent ones in Django: define queues, route tasks with CELERY_TASK_ROUTES, run dedicated workers per queue with their own concurrency and limits, and monitor queue depth.",[12,27,5170],[12,27,105],[27],{"path":2717,"title":2718,"description":7435,"category":4323,"tags":7436,"section":23,"role":4327,"priority":2719,"type":9,"intent":4346,"difficulty":10,"stack":7437,"topics":7438},"Run Celery on Heroku with a Django app: add a worker process type, use Heroku Key-Value Store or another Redis as the broker with TLS, schedule periodic tasks without running beat on several dynos, size concurrency to dyno memory, and handle SIGTERM restarts.",[12,27,605],[12,27,605],[27,66],{"path":2727,"title":2728,"description":7440,"category":4323,"tags":7441,"section":23,"role":4327,"priority":2155,"type":9,"intent":4346,"difficulty":10,"stack":7442,"topics":7443},"Running Celery workers manually in production is fragile. If you start a worker from a shell and disconnect, the process may stop.",[12,27,798],[12,27,798],[27,5095],{"path":2722,"title":2723,"description":7445,"category":4323,"tags":7446,"section":23,"role":4327,"priority":2724,"type":9,"intent":4346,"difficulty":10,"stack":7447,"topics":7448},"Run Celery workers and beat for a Django app on Render background workers, Railway services, and Fly.io process groups: share the image and environment, connect a Redis broker, keep beat to one instance, and handle shutdowns and scaling on each platform.",[12,27,66],[12,27,105],[27,66],{"path":2745,"title":2746,"description":7450,"category":4323,"tags":7451,"section":23,"role":18,"priority":2747,"type":9,"intent":4291,"difficulty":10,"stack":7452,"topics":7453},"Schedule Django management commands on Kubernetes with CronJobs: concurrencyPolicy Forbid, time zones, startingDeadlineSeconds, history limits, resource requests, secrets, and monitoring missed or failed runs, compared with Celery Beat.",[12,98,2080],[12,98,2080],[98,5095],{"path":2837,"title":2838,"description":7455,"category":4323,"tags":7456,"section":23,"role":4327,"priority":2839,"type":9,"intent":4291,"difficulty":10,"stack":7457,"topics":7458},"Run Django containers as a non-root user: create a dedicated user in the Dockerfile, fix ownership of app, static, and media paths, handle volume permissions, bind high ports, and add a read-only root filesystem and dropped capabilities.",[12,152,59],[12,152,98],[152,4330],{"path":2736,"title":2737,"description":7460,"category":4323,"tags":7461,"section":23,"role":4316,"priority":2738,"type":9,"intent":4291,"difficulty":44,"stack":7462,"topics":7463},"Run Django manage.py commands against containerised deployments: docker compose exec versus run, kubectl exec versus one-off Jobs, loading the right settings and secrets, interactive shells, and keeping one-off commands out of web containers.",[12,152,98],[12,152,98],[152,98],{"path":2741,"title":2742,"description":7465,"category":4323,"tags":7466,"section":23,"role":18,"priority":1318,"type":9,"intent":4291,"difficulty":18,"stack":7467,"topics":7468},"Run Django migrations exactly once per release on Kubernetes: a Job per image tag, waiting for completion in CI, lock timeouts, why init containers are risky, and handling failures.",[12,98,1025,13],[12,98,13],[98,1025],{"path":2784,"title":2785,"description":7470,"category":4323,"tags":7471,"section":23,"role":18,"priority":1860,"type":9,"intent":4291,"difficulty":10,"stack":7472,"topics":7473},"Run Django on SQLite in production safely: WAL mode, busy timeout and IMMEDIATE transactions, file placement and permissions, online backups, Litestream replication, and when to move on.",[12,128,4469,1161],[12,128,129,72],[4311],{"path":2756,"title":2757,"description":7475,"category":4323,"tags":7476,"section":23,"role":4316,"priority":2009,"type":9,"intent":4291,"difficulty":44,"stack":7477,"topics":7478},"Supervise Gunicorn and Celery for Django with Supervisor: program configs, environment variables, stop signals and timeouts, log rotation, group restarts, and when to prefer systemd.",[12,2759,72,27],[12,2759,72,27],[5095,27],{"path":2810,"title":2811,"description":7480,"category":4307,"tags":7481,"section":7,"role":18,"priority":2812,"type":9,"intent":4291,"difficulty":18,"stack":7482,"topics":7483},"Use Gunicorn gevent workers for Django apps that spend time waiting on external APIs: worker_connections, monkey patching, psycopg and database connection limits, CPU-bound pitfalls, and comparing gevent with threads and ASGI.",[12,72,2814],[12,72,2814],[4493],{"path":2804,"title":2805,"description":7485,"category":4323,"tags":7486,"section":23,"role":18,"priority":2806,"type":9,"intent":4291,"difficulty":18,"stack":7488,"topics":7489},"Run Elasticsearch or OpenSearch as the search backend for a Django app: choose managed or self-hosted, connect with django-opensearch-dsl or django-elasticsearch-dsl, index asynchronously with Celery, secure the cluster, and plan reindexing.",[12,2808,7487],"opensearch",[12,2808,27],[4311],{"path":2854,"title":2855,"description":7491,"category":4307,"tags":7492,"section":7,"role":18,"priority":2856,"type":9,"intent":4291,"difficulty":18,"stack":7493,"topics":7494},"Scale Django Channels beyond one process: the Redis channel layer and its capacity settings, running several Daphne or Uvicorn instances behind a load balancer, sticky sessions, connection limits, group fan-out costs, and graceful reconnects during deploys.",[12,411,4619],[12,411,105],[4622,4320],{"path":2859,"title":2860,"description":7496,"category":4307,"tags":7497,"section":7,"role":4440,"priority":304,"type":64,"intent":4291,"difficulty":18,"stack":7498,"topics":7499},"Prepare Django to run on multiple servers behind a load balancer: shared sessions, media, caches, migrations, scheduled jobs, health checks, and deploys.",[12,5349,5646],[12,39],[4320],{"path":2863,"title":2864,"description":7501,"category":4307,"tags":7502,"section":7,"role":18,"priority":2865,"type":9,"intent":4291,"difficulty":10,"stack":7503,"topics":7504},"Scan Django container images with Trivy for vulnerable OS packages and Python dependencies: run it locally and in CI, fail builds on fixable critical issues, ignore false positives with expiry, rebuild on new base images, and scan running registries.",[12,152,59],[12,152,2867],[152,4330],{"path":2869,"title":2870,"description":7506,"category":4323,"tags":7507,"section":23,"role":4327,"priority":1567,"type":9,"intent":4346,"difficulty":44,"stack":7508,"topics":7509},"Run Django management commands on a schedule with systemd timers or cron: environment loading, overlap locks, logging, and failure alerts.",[12,798,2080],[12,798],[5095],{"path":2892,"title":2893,"description":7511,"category":4323,"tags":7512,"section":23,"role":4327,"priority":2894,"type":9,"intent":4291,"difficulty":10,"stack":7513,"topics":7514},"Send Django email outside the request cycle: queue emails with Celery after commit, retry provider failures with backoff, use django-celery-email or a custom backend, keep templates rendered in the task, and avoid duplicate sends.",[12,249,27],[12,27,249],[249,27],{"path":2897,"title":2898,"description":7516,"category":4323,"tags":7517,"section":23,"role":4316,"priority":1461,"type":9,"intent":4371,"difficulty":10,"stack":7518,"topics":7519},"Send Django email through Amazon SES: domain verification with DKIM, leaving the sandbox, SMTP or django-ses API backends, IAM permissions, custom MAIL FROM, and bounce handling.",[12,249,79,2900],[12,79,2900],[249,79],{"path":2902,"title":2903,"description":7521,"category":4307,"tags":7522,"section":7,"role":18,"priority":2904,"type":9,"intent":4291,"difficulty":10,"stack":7523,"topics":7524},"Ship Django, Gunicorn, and Celery logs to Amazon CloudWatch Logs: the awslogs driver on ECS, the CloudWatch agent on EC2, JSON logs for Logs Insights queries, retention settings, metric filters and alarms, and controlling ingestion cost.",[12,79,2906],[12,79,2906],[4416,79],{"path":2944,"title":2945,"description":7526,"category":4323,"tags":7527,"section":23,"role":4327,"priority":1153,"type":9,"intent":4346,"difficulty":10,"stack":7528,"topics":7529},"Serve a React SPA and a Django API from one domain with Nginx: routing fallback, API proxying, cache headers, and CSRF-safe session auth.",[12,2947,39],[12,39,2947],[4588,4391],{"path":2920,"title":2921,"description":7531,"category":4323,"tags":7532,"section":23,"role":18,"priority":1795,"type":9,"intent":4291,"difficulty":10,"stack":7533,"topics":7534},"Serve one Django project on www, api, and admin subdomains: per-host URLconfs, host-only cookies, CORS and CSRF settings, Nginx server blocks, and restricting admin access by network.",[12,39,4585,59],[12,39,72],[4588,4399],{"path":2924,"title":2925,"description":7536,"category":4323,"tags":7537,"section":23,"role":4327,"priority":2106,"type":9,"intent":4346,"difficulty":10,"stack":7538,"topics":7539},"Serve Django static files from CloudFront: S3 with origin access control or origin pull, hashed filenames, immutable caching, and CORS.",[12,79,1116],[12,79,1116],[4391,79],{"path":2939,"title":2940,"description":7541,"category":4323,"tags":7542,"section":23,"role":18,"priority":2941,"type":9,"intent":4291,"difficulty":18,"stack":7543,"topics":7544},"Run Django under a subpath such as example.com\u002Fapp behind Nginx: forward SCRIPT_NAME correctly, set FORCE_SCRIPT_NAME, STATIC_URL, and cookie paths, and avoid broken admin links, redirects, and CSRF errors.",[12,39,6836],[12,39,72],[4399,4459],{"path":2954,"title":2955,"description":7546,"category":4323,"tags":7547,"section":23,"role":18,"priority":1773,"type":9,"intent":4291,"difficulty":10,"stack":7548,"topics":7549},"Serve permission-checked Django downloads efficiently: Django authorises the request and returns X-Accel-Redirect, and an internal Nginx location streams the file without tying up workers.",[12,39,5140,59],[12,39,72],[4367,4399],{"path":2275,"title":2276,"description":7551,"category":4323,"tags":7552,"section":23,"role":4327,"priority":985,"type":9,"intent":4346,"difficulty":44,"stack":7553,"topics":7554},"Django does not safely serve static files in production by default. With DEBUG=False, you still need a production path for CSS, JavaScript, fonts, and images collected from your...",[12,170],[12,170],[4391],{"path":2974,"title":2975,"description":7556,"category":4307,"tags":7557,"section":7,"role":4440,"priority":1343,"type":9,"intent":4291,"difficulty":10,"stack":7558,"topics":7559},"Stop runaway queries from exhausting Django workers: set statement_timeout per connection or role, give migrations and Celery different limits, handle QueryCanceled errors, and work with PgBouncer.",[12,13,4420],[12,13,2977],[4311,4320],{"path":2707,"title":2708,"description":7561,"category":4323,"tags":7562,"section":23,"role":4327,"priority":1698,"type":9,"intent":4346,"difficulty":10,"stack":7563,"topics":7564},"Run Celery Beat reliably for Django: schedules, file or database schedulers, a single instance under systemd, time zones, and monitoring.",[12,27,6051],[12,27,105],[27],{"path":2995,"title":2996,"description":7566,"category":4323,"tags":7567,"section":23,"role":4327,"priority":199,"type":9,"intent":4346,"difficulty":10,"stack":7569,"topics":7570},"Build a Django staging environment that catches real release problems: production parity, isolated data and secrets, and safe side effects.",[12,4334,7568],"release",[12],[4380,786],{"path":2979,"title":2980,"description":7572,"category":4323,"tags":7573,"section":23,"role":18,"priority":1328,"type":9,"intent":4346,"difficulty":18,"stack":7574,"topics":7575},"Put PgBouncer between Django and PostgreSQL: transaction pooling, SCRAM auth, pool sizing, compatible Django settings, and monitoring.",[12,13,2977],[12,13,2977],[4311,4320],{"path":2983,"title":2984,"description":7577,"category":4323,"tags":7578,"section":23,"role":4327,"priority":1782,"type":9,"intent":4346,"difficulty":10,"stack":7579,"topics":7580},"Configure Django's Redis cache for production: memory limits, eviction, authentication, key prefixes, timeouts, cached sessions, and checks.",[12,105,190],[12,105],[4465],{"path":2987,"title":2988,"description":7582,"category":4307,"tags":7583,"section":7,"role":4327,"priority":917,"type":9,"intent":4346,"difficulty":44,"stack":7584,"topics":7585},"Local logs are not enough once a Django app is in production. Exceptions can happen after deploys, during background jobs, or only under real user traffic patterns.",[12,2016],[12,2016],[4416],{"path":2228,"title":2229,"description":7587,"category":4323,"tags":7588,"section":23,"role":4327,"priority":927,"type":9,"intent":4346,"difficulty":10,"stack":7589,"topics":7590},"Running Gunicorn manually for a Django app is fragile. If your SSH session closes, the process can stop.",[12,72,798],[12,72,798],[5095,4493],{"path":3005,"title":3006,"description":7592,"category":4307,"tags":7593,"section":7,"role":18,"priority":841,"type":9,"intent":4291,"difficulty":10,"stack":7594,"topics":7595},"Centralise Django, Gunicorn, Celery, and Nginx logs in Grafana Loki: structured JSON logging, Grafana Alloy collecting from journald and files, low-cardinality labels, LogQL queries, and retention.",[12,2642,5471],[12,3008,349,39],[4416],{"path":3010,"title":3011,"description":7597,"category":4323,"tags":7598,"section":23,"role":18,"priority":3012,"type":9,"intent":4291,"difficulty":18,"stack":7600,"topics":7601},"Sign Django container images with Sigstore Cosign in CI using keyless signing through GitHub Actions OIDC, attach SBOM and provenance attestations, and verify signatures before deploy or with a Kubernetes admission policy.",[12,152,7599],"supply-chain",[12,152,3014],[152,786],{"path":3020,"title":3021,"description":7603,"category":4307,"tags":7604,"section":7,"role":18,"priority":3022,"type":9,"intent":4291,"difficulty":10,"stack":7605,"topics":7606},"Make Django Docker builds fast in CI and locally: order layers so dependencies cache, BuildKit cache mounts for pip and uv, registry-backed cache for CI, .dockerignore, and multi-stage builds that compile once.",[12,152,786],[12,152,3024],[152,786],{"path":3052,"title":3053,"description":7608,"category":4323,"tags":7609,"section":23,"role":4316,"priority":3054,"type":9,"intent":4291,"difficulty":44,"stack":7610,"topics":7611},"Organise Django settings for development, staging, and production: a settings package with base, dev, and prod modules, environment variables for secrets, DJANGO_SETTINGS_MODULE per environment, and tests that keep production settings safe.",[12,5275,4456],[12,272],[4459],{"path":3057,"title":3058,"description":7613,"category":4307,"tags":7614,"section":7,"role":18,"priority":3059,"type":9,"intent":4291,"difficulty":18,"stack":7615,"topics":7616},"Squash long Django migration histories without breaking deployed environments: run squashmigrations, keep replaced migrations until every database has applied them, handle RunPython and elidable operations, update dependencies, and remove old files in a later release.",[12,1025,5751],[12,1025],[1025],{"path":3062,"title":3063,"description":7618,"category":4307,"tags":7619,"section":7,"role":4316,"priority":3064,"type":9,"intent":4291,"difficulty":44,"stack":7621,"topics":7622},"Stop bot signups and contact-form spam in Django: add Cloudflare Turnstile with server-side verification, honeypot fields and timing checks, rate limits, email confirmation, and how to keep forms accessible and private.",[12,7620,3067],"spam",[12,3066,3067],[4330],{"path":3074,"title":3075,"description":7624,"category":4323,"tags":7625,"section":23,"role":4327,"priority":3076,"type":9,"intent":4291,"difficulty":10,"stack":7626,"topics":7627},"Store Django uploads in Azure Blob Storage with django-storages: create a storage account and private container, authenticate with managed identity instead of account keys, serve files with SAS URLs, and add Azure CDN or Front Door for public assets.",[12,424,5140],[12,424,1015],[4367],{"path":3079,"title":3080,"description":7629,"category":4323,"tags":7630,"section":23,"role":4327,"priority":3081,"type":9,"intent":4291,"difficulty":44,"stack":7632,"topics":7633},"Store Django uploads on Backblaze B2 through its S3-compatible API: create a bucket and application key, configure django-storages with the B2 endpoint, serve private files with presigned URLs, and put public files behind Cloudflare.",[12,7631,5140],"backblaze",[12,3083,1015],[4367],{"path":3089,"title":3090,"description":7635,"category":4323,"tags":7636,"section":23,"role":4327,"priority":3091,"type":9,"intent":4291,"difficulty":44,"stack":7637,"topics":7638},"Store Django uploads on DigitalOcean Spaces with django-storages’ S3 backend: set the regional endpoint, create scoped access keys, choose private files with presigned URLs or public files behind the Spaces CDN, and configure CORS.",[12,550,5140],[12,550,1015],[4367],{"path":3085,"title":3086,"description":7640,"category":4323,"tags":7641,"section":23,"role":4327,"priority":299,"type":9,"intent":4346,"difficulty":10,"stack":7642,"topics":7643},"Store Django uploads on Cloudflare R2 with django-storages: scoped API tokens, STORAGES settings, custom domains, signed URLs, and migration.",[12,189,4364],[12,189,86],[4367],{"path":2283,"title":2284,"description":7645,"category":4323,"tags":7646,"section":23,"role":4327,"priority":937,"type":9,"intent":4346,"difficulty":10,"stack":7647,"topics":7648},"Local disk storage for Django media files works in development, but it breaks quickly in production.",[12,2286,1015,5450],[12,2286,1015],[4367,79],{"path":3094,"title":3095,"description":7650,"category":4323,"tags":7651,"section":23,"role":4327,"priority":3096,"type":9,"intent":4291,"difficulty":10,"stack":7652,"topics":7653},"Store Django user uploads on Google Cloud Storage with django-storages: create a bucket with uniform access, authenticate with Workload Identity or the runtime service account, serve private files with signed URLs, and set CORS and lifecycle rules.",[12,326,5140],[12,326,1015],[4367],{"path":2873,"title":2874,"description":7655,"category":4323,"tags":7656,"section":23,"role":18,"priority":2875,"type":9,"intent":4291,"difficulty":18,"stack":7657,"topics":7658},"Run MinIO as self-hosted S3-compatible storage for Django uploads: deploy it with Docker Compose or systemd, create a bucket and scoped user, configure django-storages, put MinIO behind Nginx with TLS, and back it up.",[12,2877,5140],[12,2877,152],[4367,152],{"path":1170,"title":1171,"description":7660,"category":4307,"tags":7661,"section":7,"role":18,"priority":1172,"type":9,"intent":4291,"difficulty":10,"stack":7663,"topics":7664},"Export large datasets from Django as CSV without timeouts or memory spikes: StreamingHttpResponse with iterator(), values_list to skip model instances, Nginx buffering, background exports to object storage for very large files, and Excel compatibility.",[12,7662,5170],"csv",[12,13,27],[4320],{"path":2584,"title":2585,"description":7666,"category":4307,"tags":7667,"section":7,"role":18,"priority":209,"type":9,"intent":4346,"difficulty":18,"stack":7668,"topics":7669},"Manual server creation is one of the fastest ways to introduce deployment drift into a Django environment.",[12,2587,140],[12,2587,140],[4595],{"path":3158,"title":3159,"description":7671,"category":4307,"tags":7672,"section":7,"role":18,"priority":506,"type":9,"intent":4346,"difficulty":18,"stack":7673,"topics":7674},"Tune Celery workers for Django workloads: pool types, concurrency, prefetch multiplier, acks_late, time and memory limits, and dedicated queues.",[12,27,5170],[12,27],[27,4320],{"path":3162,"title":3163,"description":7676,"category":4307,"tags":7677,"section":7,"role":18,"priority":3164,"type":9,"intent":4291,"difficulty":18,"stack":7678,"topics":7679},"Tune Nginx for a Django backend: worker_processes and worker_connections, client keepalive_timeout, upstream keepalive connection pools to Gunicorn or Uvicorn, proxy buffering, and file descriptor limits, with when each setting matters.",[12,39,5170],[12,39,72],[4399,4320],{"path":3167,"title":3168,"description":7681,"category":4307,"tags":7682,"section":7,"role":18,"priority":2106,"type":9,"intent":4291,"difficulty":18,"stack":7683,"topics":7684},"Keep Django tables fast and small with autovacuum tuning: find dead tuples and bloat, set per-table thresholds for hot tables in migrations, raise cost limits, and remove blockers like long transactions.",[12,13,5170],[12,13],[4311,4320],{"path":3171,"title":3172,"description":7686,"category":4307,"tags":7687,"section":7,"role":18,"priority":3173,"type":9,"intent":4291,"difficulty":18,"stack":7688,"topics":7689},"Tune PostgreSQL configuration for a Django app: shared_buffers, effective_cache_size, work_mem, max_connections with pooling, random_page_cost on SSDs, checkpoints and WAL, autovacuum, and statement timeouts, with safe starting values by server size.",[12,13,5170],[12,13],[4311,4320],{"path":3181,"title":3182,"description":7691,"category":4307,"tags":7692,"section":7,"role":18,"priority":1567,"type":9,"intent":4291,"difficulty":18,"stack":7693,"topics":7694},"Upgrade the PostgreSQL behind a Django app to a new major version: check Django and psycopg support, choose dump and restore, pg_upgrade, or logical replication, then analyze, verify, and roll back safely.",[12,13,5906],[12,13],[4311,4342],{"path":3185,"title":3186,"description":7696,"category":4307,"tags":7697,"section":7,"role":18,"priority":3187,"type":9,"intent":4291,"difficulty":10,"stack":7698,"topics":7699},"Upgrade a production Django app to a newer Python version safely: check Django and dependency support, run tests on both versions in CI, rebuild virtualenvs or images, upgrade Celery workers together, deploy gradually, and roll back cleanly.",[12,272,5906],[12,272,152],[4349],{"path":3190,"title":3191,"description":7701,"category":4323,"tags":7702,"section":23,"role":18,"priority":1205,"type":9,"intent":4291,"difficulty":18,"stack":7703,"topics":7704},"Let browsers upload large files straight to S3 with presigned POST policies: size and type limits, bucket CORS, server-side confirmation, FileField wiring, and cleanup of abandoned uploads.",[12,86,5450,79],[12,86,2113,3193],[4367,79],{"path":267,"title":268,"description":7706,"category":4323,"tags":7707,"section":23,"role":4316,"priority":269,"type":9,"intent":4291,"difficulty":44,"stack":7708,"topics":7709},"Use django-environ to read Django settings from environment variables and .env files: typed values for DEBUG and ALLOWED_HOSTS, DATABASE_URL and CACHE_URL parsing, required variables, safe .env handling, and when to skip .env in production.",[12,5275,6955],[12,271,272],[4459],{"path":3220,"title":3221,"description":7711,"category":4323,"tags":7712,"section":23,"role":4327,"priority":3222,"type":9,"intent":4291,"difficulty":10,"stack":7713,"topics":7714},"Pass Django secrets to containers as files instead of environment variables: Docker Compose and Swarm secrets mounted at \u002Frun\u002Fsecrets, the _FILE convention, reading them in settings, and keeping secrets out of images and docker inspect.",[12,152,2394],[12,152,768],[152,4459],{"path":3332,"title":3333,"description":7716,"category":4323,"tags":7717,"section":23,"role":4316,"priority":3334,"type":64,"intent":4371,"difficulty":44,"stack":7718,"topics":7719},"Compare uv, Poetry, and pip with pip-tools for managing Django dependencies in production: lock files, install speed in CI and Docker, reproducibility with hashes, Python version management, and migration paths between them.",[12,843,819],[12,843,819],[4349],{"path":3281,"title":3282,"description":7721,"category":5145,"tags":7722,"section":214,"role":4440,"priority":3283,"type":9,"intent":4291,"difficulty":10,"stack":7723,"topics":7724},"A production checklist for Wagtail CMS sites: WAGTAILADMIN_BASE_URL and Sites, image renditions and storage, search backend, cache invalidation and frontend caching, admin security, scheduled publishing, backups of media, and upgrade routine.",[12,867,5163],[12,867,13],[4367,4465],{"path":3297,"title":3298,"description":7726,"category":4323,"tags":7727,"section":23,"role":4316,"priority":3299,"type":64,"intent":4371,"difficulty":44,"stack":7728,"topics":7729},"Compare serving Django static files with WhiteNoise inside the app versus Nginx or a CDN: setup, compression and cache headers, performance, containers and PaaS, media files, and the setup that suits each deployment.",[12,4391,170],[12,170,39],[4391],{"path":3308,"title":3309,"description":7731,"category":4323,"tags":7732,"section":23,"role":4316,"priority":3310,"type":64,"intent":4291,"difficulty":44,"stack":7733,"topics":7734},"Why Django’s manage.py runserver is not for production: single-process design, no security review, static file handling, auto-reload, and DEBUG coupling, plus what to run instead with Gunicorn, Uvicorn, and a reverse proxy.",[12,3382,72],[12,72,39],[4493],{"path":3317,"title":3318,"description":7736,"category":4323,"tags":7737,"section":23,"role":4327,"priority":3319,"type":9,"intent":4291,"difficulty":10,"stack":7738,"topics":7739},"Write a robust docker-entrypoint.sh for Django: wait for dependencies, optionally run migrations and collectstatic behind flags, support web, worker, and one-off commands, exec the final process for signals, and keep secrets out of logs.",[12,152,6632],[12,152,73],[152],{"path":2279,"title":2280,"description":7741,"category":4307,"tags":7742,"section":7,"role":18,"priority":746,"type":9,"intent":4346,"difficulty":18,"stack":7743,"topics":7744},"A standard Django deploy often causes a brief outage because the old app process stops before the new one is fully ready.",[12,72,39,798],[12,72,39,798],[4380],1791023179990]