[{"data":1,"prerenderedAt":1025},["ShallowReactive",2],{"navigation":3,"\u002Fen\u002Fblog\u002Fdokploy-vs-coolify":497,"surround:\u002Fen\u002Fblog\u002Fdokploy-vs-coolify":1020},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,295,307,423,451,490],{"title":5,"path":6,"stem":7},"Build and Deploy a Modern Website in 5 Minutes","\u002Fen\u002Fblog\u002Fbuild-with-loveable","en\u002F3.blog\u002F1.build-with-loveable",{"title":9,"path":10,"stem":11},"The Vercel Alternative for the German Mittelstand: Sovereign Hosting on Hetzner with lowcloud","\u002Fen\u002Fblog\u002Fdigital-sovereignty-lowcloud-vs-vercel-b2b","en\u002F3.blog\u002F10.digital-sovereignty-lowcloud-vs-vercel-b2b",{"title":13,"path":14,"stem":15},"Cloud Sovereignty Framework: How the EU Is Finally Making Cloud Sovereignty Measurable","\u002Fen\u002Fblog\u002Fcloud-sovereignty-framework","en\u002F3.blog\u002F12.cloud-sovereignty-framework",{"title":17,"path":18,"stem":19},"Avoiding Cloud Vendor Lock-in: What Real Sovereignty Means Technically","\u002Fen\u002Fblog\u002Fcloud-vendor-lock-in","en\u002F3.blog\u002F13.cloud-vendor-lock-in",{"title":21,"path":22,"stem":23},"Digital Sovereignty with Kubernetes: When Is Open Source Truly Sovereign?","\u002Fen\u002Fblog\u002Fkubernetes-digital-sovereignty","en\u002F3.blog\u002F14.kubernetes-digital-sovereignty",{"title":25,"path":26,"stem":27},"What Is DevOps as a Service and When Does It Actually Make Sense?","\u002Fen\u002Fblog\u002Fdevops-as-a-service","en\u002F3.blog\u002F15.devops-as-a-service",{"title":29,"path":30,"stem":31},"Cloud Sovereignty Governance: Why This Topic Belongs in the Boardroom, Not the Server Room","\u002Fen\u002Fblog\u002Fcloud-sovereignty-governance","en\u002F3.blog\u002F16.cloud-sovereignty-governance",{"title":33,"path":34,"stem":35},"PaaS vs. DaaS: What","\u002Fen\u002Fblog\u002Fpaas-vs-daas","en\u002F3.blog\u002F17.paas-vs-daas",{"title":37,"path":38,"stem":39},"Sovereign Cloud: Can SaaS Really Maintain Control Over Your Data?","\u002Fen\u002Fblog\u002Fsovereign-cloud-saas-data-control","en\u002F3.blog\u002F18.sovereign-cloud-saas-data-control",{"title":41,"path":42,"stem":43},"DevOps vs. DevOps as a Service – Which One Fits Your Team?","\u002Fen\u002Fblog\u002Fdevops-vs-devops-as-a-service","en\u002F3.blog\u002F19.devops-vs-devops-as-a-service",{"title":45,"path":46,"stem":47},"Docker Fundamentals -  Understanding Container Virtualization","\u002Fen\u002Fblog\u002Fhow-docker-works","en\u002F3.blog\u002F2.how-docker-works",{"title":49,"path":50,"stem":51},"The 7 Biggest DevOps Problems in SMBs – And How to Fix Them","\u002Fen\u002Fblog\u002Fdevops-problems-smb","en\u002F3.blog\u002F20.devops-problems-smb",{"title":53,"path":54,"stem":55},"PostgreSQL Helm Chart: How to Deploy Postgres on Kubernetes","\u002Fen\u002Fblog\u002Fpostgresql-helm-chart-kubernetes","en\u002F3.blog\u002F21.postgresql-helm-chart-kubernetes",{"title":57,"path":58,"stem":59},"Platform Engineering vs. DevOps – What","\u002Fen\u002Fblog\u002Fplatform-engineering-vs-devops","en\u002F3.blog\u002F22.platform-engineering-vs-devops",{"title":61,"path":62,"stem":63},"Cloud Act vs. GDPR: The Risk for EU Businesses","\u002Fen\u002Fblog\u002Fcloud-act-vs-gdpr","en\u002F3.blog\u002F23.cloud-act-vs-gdpr",{"title":65,"path":66,"stem":67},"Cut IT Costs with Automation: The Biggest Lever","\u002Fen\u002Fblog\u002Freduce-it-costs-automation","en\u002F3.blog\u002F24.reduce-it-costs-automation",{"title":69,"path":70,"stem":71},"NIS2 Compliance for DevOps Teams: What You Need to Do","\u002Fen\u002Fblog\u002Fnis2-compliance-devops","en\u002F3.blog\u002F25.nis2-compliance-devops",{"title":73,"path":74,"stem":75},"Self-Hosted EU Alternatives: Host LibreOffice & More","\u002Fen\u002Fblog\u002Fself-hosted-eu-alternatives","en\u002F3.blog\u002F26.self-hosted-eu-alternatives",{"title":77,"path":78,"stem":79},"DORA Compliance for DevOps: What the EU Resilience Act Means","\u002Fen\u002Fblog\u002Fdora-compliance-devops","en\u002F3.blog\u002F27.dora-compliance-devops",{"title":81,"path":82,"stem":83},"Cloud TCO: Hidden Costs AWS, Azure & GCP Don't Show You","\u002Fen\u002Fblog\u002Fcloud-tco-hidden-costs","en\u002F3.blog\u002F28.cloud-tco-hidden-costs",{"title":85,"path":86,"stem":87},"Data Residency vs. Data Sovereignty: What Really Matters","\u002Fen\u002Fblog\u002Fdata-residency-vs-data-sovereignty","en\u002F3.blog\u002F29.data-residency-vs-data-sovereignty",{"title":89,"path":90,"stem":91},"Self-Host n8n on Hetzner: Complete Docker Setup Guide","\u002Fen\u002Fblog\u002Fself-hosted-n8n-on-hetzner","en\u002F3.blog\u002F3.self-hosted-n8n-on-hetzner",{"title":93,"path":94,"stem":95},"Manual Deployments: An Underestimated Risk for SMBs","\u002Fen\u002Fblog\u002Fmanual-deployment-risks","en\u002F3.blog\u002F30.manual-deployment-risks",{"title":97,"path":98,"stem":99},"DevOps Tool Sprawl: How It Happens and How to Stop It","\u002Fen\u002Fblog\u002Fdevops-tool-sprawl","en\u002F3.blog\u002F31.devops-tool-sprawl",{"title":101,"path":102,"stem":103},"Kubernetes Monitoring: Using Logs and Metrics Effectively","\u002Fen\u002Fblog\u002Fkubernetes-monitoring-logs-metrics","en\u002F3.blog\u002F32.kubernetes-monitoring-logs-metrics",{"title":105,"path":106,"stem":107},"OB7 Case Study: Website Deployment Without Infrastructure Overhead","\u002Fen\u002Fblog\u002Fob7-case-study-lowcloud-deployment","en\u002F3.blog\u002F33.ob7-case-study-lowcloud-deployment",{"title":109,"path":110,"stem":111},"DevOps in SMBs: Why Missing Roles Become a Real Risk","\u002Fen\u002Fblog\u002Fmissing-devops-roles-smb","en\u002F3.blog\u002F34.missing-devops-roles-smb",{"title":113,"path":114,"stem":115},"Simplify Kubernetes Configuration: The Path to Human-Readable Cloud","\u002Fen\u002Fblog\u002Fsimplify-kubernetes-configuration","en\u002F3.blog\u002F35.simplify-kubernetes-configuration",{"title":117,"path":118,"stem":119},"Collaborative DevOps: How Modern Teams Build Cloud Apps Together","\u002Fen\u002Fblog\u002Fcollaborative-devops-teams","en\u002F3.blog\u002F36.collaborative-devops-teams",{"title":121,"path":122,"stem":123},"Knowledge Documentation in DevOps Teams: How to Actually Reduce Your Bus Factor","\u002Fen\u002Fblog\u002Fdevops-knowledge-documentation-bus-factor","en\u002F3.blog\u002F37.devops-knowledge-documentation-bus-factor",{"title":125,"path":126,"stem":127},"What Is PaaS? Platform as a Service Explained","\u002Fen\u002Fblog\u002Fwhat-is-paas","en\u002F3.blog\u002F38.what-is-paas",{"title":129,"path":130,"stem":131},"EU AI Act Hosting: What Changes for AI Workload Operators","\u002Fen\u002Fblog\u002Feu-ai-act-hosting","en\u002F3.blog\u002F39.eu-ai-act-hosting",{"title":133,"path":134,"stem":135},"Docker Compose Tutorial: Managing Multi-Container Apps Made Easy","\u002Fen\u002Fblog\u002Fdocker-compose-for-beginners","en\u002F3.blog\u002F4.docker-compose-for-beginners",{"title":137,"path":138,"stem":139},"Full-Stack Developer Reality: What the Title Actually Means","\u002Fen\u002Fblog\u002Ffull-stack-developer-reality","en\u002F3.blog\u002F40.full-stack-developer-reality",{"title":141,"path":142,"stem":143},"Cloud Egress Fees Compared: AWS vs. Azure vs. GCP Pricing","\u002Fen\u002Fblog\u002Fcloud-egress-fees","en\u002F3.blog\u002F41.cloud-egress-fees",{"title":145,"path":146,"stem":147},"Bring Your Own Cloud: What the Model Means and Why It","\u002Fen\u002Fblog\u002Fbring-your-own-cloud","en\u002F3.blog\u002F42.bring-your-own-cloud",{"title":149,"path":150,"stem":151},"Zero-Config Kubernetes: Why Simplicity Wins","\u002Fen\u002Fblog\u002Fzero-config-kubernetes","en\u002F3.blog\u002F43.zero-config-kubernetes",{"title":153,"path":154,"stem":155},"Minimalist Cloud Architecture: Why Less Complexity Means More Stability","\u002Fen\u002Fblog\u002Fminimalist-cloud-architecture","en\u002F3.blog\u002F44.minimalist-cloud-architecture",{"title":157,"path":158,"stem":159},"Software Deployment for SMBs: How Small Teams Ship Faster","\u002Fen\u002Fblog\u002Fsmb-software-deployment","en\u002F3.blog\u002F45.smb-software-deployment",{"title":161,"path":162,"stem":163},"EU Data Act: What Businesses and DevOps Teams Need to Know","\u002Fen\u002Fblog\u002Feu-data-act-business-devops","en\u002F3.blog\u002F46.eu-data-act-business-devops",{"title":165,"path":166,"stem":167},"Data Governance Act: What SMBs and DevOps Teams Need to Know","\u002Fen\u002Fblog\u002Fdata-governance-act-devops-guide","en\u002F3.blog\u002F47.data-governance-act-devops-guide",{"title":169,"path":170,"stem":171},"Cloud Agnostic Architecture: Meaning and Trade-offs","\u002Fen\u002Fblog\u002Fcloud-agnostic-architecture","en\u002F3.blog\u002F48.cloud-agnostic-architecture",{"title":173,"path":174,"stem":175},"Kubernetes Migration: What You Need to Know Before You Start","\u002Fen\u002Fblog\u002Fkubernetes-migration-guide","en\u002F3.blog\u002F49.kubernetes-migration-guide",{"title":177,"path":178,"stem":179},"Self-Host Docmost with Docker Compose and Traefik: Complete Guide","\u002Fen\u002Fblog\u002Fself-host-docmost-with-docker-and-traefik","en\u002F3.blog\u002F5.self-host-docmost-with-docker-and-traefik",{"title":181,"path":182,"stem":183},"AI Agent Infrastructure: What You Really Need for Production","\u002Fen\u002Fblog\u002Fai-agent-infrastructure","en\u002F3.blog\u002F50.ai-agent-infrastructure",{"title":185,"path":186,"stem":187},"Managed Services ROI: Why Self-Hosting Costs More Than You Think","\u002Fen\u002Fblog\u002Fmanaged-services-roi","en\u002F3.blog\u002F51.managed-services-roi",{"title":189,"path":190,"stem":191},"lowcloud vs. DevOps as a Service Providers Compared","\u002Fen\u002Fblog\u002Flowcloud-vs-devops-service-providers","en\u002F3.blog\u002F52.lowcloud-vs-devops-service-providers",{"title":193,"path":194,"stem":195},"Kubernetes vs. Docker Swarm: Key Differences and Why K8s Won","\u002Fen\u002Fblog\u002Fkubernetes-vs-docker-swarm","en\u002F3.blog\u002F53.kubernetes-vs-docker-swarm",{"title":197,"path":198,"stem":199},"Hetzner Kubernetes Hosting with lowcloud","\u002Fen\u002Fblog\u002Fhetzner-kubernetes-hosting","en\u002F3.blog\u002F54.hetzner-kubernetes-hosting",{"title":201,"path":202,"stem":203},"MinIO Alternatives Compared: RustFS, SeaweedFS, and Garage","\u002Fen\u002Fblog\u002Fminio-alternatives","en\u002F3.blog\u002F55.minio-alternatives",{"title":205,"path":206,"stem":207},"What is Docker Swarm? Container Orchestration Built In","\u002Fen\u002Fblog\u002Fwhat-is-docker-swarm","en\u002F3.blog\u002F56.what-is-docker-swarm",{"title":209,"path":210,"stem":211},"What Is a Helm Chart? The Package Manager for Kubernetes","\u002Fen\u002Fblog\u002Fwhat-is-a-helm-chart","en\u002F3.blog\u002F57.what-is-a-helm-chart",{"title":213,"path":214,"stem":215},"Docker vs Kubernetes: Compose, Swarm, and K8s Compared","\u002Fen\u002Fblog\u002Fdocker-vs-kubernetes","en\u002F3.blog\u002F58.docker-vs-kubernetes",{"title":217,"path":218,"stem":219},"What Is Kustomize? Managing Kubernetes Configs Cleanly","\u002Fen\u002Fblog\u002Fwhat-is-kustomize","en\u002F3.blog\u002F59.what-is-kustomize",{"title":221,"path":222,"stem":223},"What Is Kubernetes? A Practical Guide to Container Orchestration","\u002Fen\u002Fblog\u002Fwhat-is-kubernetes","en\u002F3.blog\u002F6.what-is-kubernetes",{"title":225,"path":226,"stem":227},"The Best Heroku Alternatives in 2026","\u002Fen\u002Fblog\u002Fheroku-alternatives","en\u002F3.blog\u002F60.heroku-alternatives",{"title":229,"path":230,"stem":231},"Build and Deploy a Website Using Claude Code (From Zero to Live)","\u002Fen\u002Fblog\u002Fbuild-and-deploy-website-claude-code","en\u002F3.blog\u002F61.build-and-deploy-website-claude-code",{"title":233,"path":234,"stem":235},"lowcloud vs. Coolify: Self-hosted PaaS or managed?","\u002Fen\u002Fblog\u002Flowcloud-vs-coolify","en\u002F3.blog\u002F62.lowcloud-vs-coolify",{"title":237,"path":238,"stem":239},"lowcloud vs. Dokploy: Multi-node self-host or managed?","\u002Fen\u002Fblog\u002Flowcloud-vs-dokploy","en\u002F3.blog\u002F63.lowcloud-vs-dokploy",{"title":241,"path":242,"stem":243},"Your First Website with Claude: A Beginner Guide with Prompts","\u002Fen\u002Fblog\u002Ffirst-website-with-claude","en\u002F3.blog\u002F64.first-website-with-claude",{"title":245,"path":246,"stem":247},"Setting Up Claude Code: A Beginner's Configuration Guide","\u002Fen\u002Fblog\u002Fclaude-code-setup-beginners","en\u002F3.blog\u002F65.claude-code-setup-beginners",{"title":249,"path":250,"stem":251},"Vibe Coding: The Typical Deployment Problems","\u002Fen\u002Fblog\u002Fvibe-coding-deployment-problems","en\u002F3.blog\u002F66.vibe-coding-deployment-problems",{"title":253,"path":254,"stem":255},"Dokploy vs Coolify: Which Tool Fits When?","\u002Fen\u002Fblog\u002Fdokploy-vs-coolify","en\u002F3.blog\u002F67.dokploy-vs-coolify",{"title":257,"path":258,"stem":259},"Vercel vs Netlify: The Difference – and When lowcloud Fits","\u002Fen\u002Fblog\u002Fvercel-vs-netlify","en\u002F3.blog\u002F68.vercel-vs-netlify",{"title":261,"path":262,"stem":263},"Why Use Containers and Deploy With Them","\u002Fen\u002Fblog\u002Fwhy-deploy-with-containers","en\u002F3.blog\u002F69.why-deploy-with-containers",{"title":265,"path":266,"stem":267},"The Cloud Illusion: Why a Server Location in Germany Doesn’t Guarantee Digital Sovereignty","\u002Fen\u002Fblog\u002Fcloud-illusion-digital-sovereignty","en\u002F3.blog\u002F7.cloud-illusion-digital-sovereignty",{"title":269,"path":270,"stem":271},"Best S3-Compatible Object Storage Providers (2026 Comparison)","\u002Fen\u002Fblog\u002Fs3-compatible-object-storage","en\u002F3.blog\u002F8.s3-compatible-object-storage",{"title":273,"path":274,"stem":275},"Deployment as a Bottleneck: When AI Codes Faster Than You Can Deploy","\u002Fen\u002Fblog\u002Fdeployment-bottleneck","en\u002F3.blog\u002F9.deployment-bottleneck",{"title":277,"path":278,"stem":279,"children":280,"icon":294},"Getting Started","\u002Fen\u002Fdocs\u002Fgetting-started","en\u002F1.docs\u002F1.getting-started\u002F1.index",[281,284,289],{"title":282,"path":278,"stem":279,"icon":283},"Introduction","i-lucide-house",{"title":285,"path":286,"stem":287,"icon":288},"Get Started","\u002Fen\u002Fdocs\u002Fgetting-started\u002Fget-started","en\u002F1.docs\u002F1.getting-started\u002F2.get-started","i-lucide-rocket",{"title":290,"path":291,"stem":292,"icon":293},"How It Works","\u002Fen\u002Fdocs\u002Fgetting-started\u002Fhow-it-works","en\u002F1.docs\u002F1.getting-started\u002F3.how-it-works","i-lucide-lightbulb",false,{"title":296,"path":297,"stem":298,"children":299,"icon":294},"Guides","\u002Fen\u002Fdocs\u002Fguides","en\u002F1.docs\u002F2.guides\u002F1.index",[300,302],{"title":296,"path":297,"stem":298,"icon":301},"i-lucide-book-open",{"title":303,"path":304,"stem":305,"icon":306},"Connect a Container Registry","\u002Fen\u002Fdocs\u002Fguides\u002Fcontainer-registries","en\u002F1.docs\u002F2.guides\u002F2.container-registries","i-lucide-container",{"title":308,"icon":294,"path":309,"stem":310,"children":311,"page":294},"Platform","\u002Fen\u002Fdocs\u002Fplatform","en\u002F1.docs\u002F2.platform",[312,332,384],{"title":282,"path":313,"stem":314,"children":315,"icon":294},"\u002Fen\u002Fdocs\u002Fplatform\u002Fintroduction","en\u002F1.docs\u002F2.platform\u002F1.introduction\u002F1.index",[316,319,324,329],{"title":317,"path":313,"stem":314,"icon":318},"Overview","i-lucide-cloud",{"title":320,"path":321,"stem":322,"icon":323},"Use Cases","\u002Fen\u002Fdocs\u002Fplatform\u002Fintroduction\u002Fwhen-to-use","en\u002F1.docs\u002F2.platform\u002F1.introduction\u002F2.when-to-use","i-lucide-compass",{"title":325,"path":326,"stem":327,"icon":328},"Features","\u002Fen\u002Fdocs\u002Fplatform\u002Fintroduction\u002Fwhat-you-get","en\u002F1.docs\u002F2.platform\u002F1.introduction\u002F3.what-you-get","i-lucide-package-check",{"title":285,"path":330,"stem":331,"icon":288},"\u002Fen\u002Fdocs\u002Fplatform\u002Fintroduction\u002Fget-started","en\u002F1.docs\u002F2.platform\u002F1.introduction\u002F4.get-started",{"title":333,"path":334,"stem":335,"children":336,"icon":294},"Web Services","\u002Fen\u002Fdocs\u002Fplatform\u002Fweb-services","en\u002F1.docs\u002F2.platform\u002F2.web-services\u002F01.index",[337,340,345,350,354,359,364,369,374,379],{"title":338,"path":334,"stem":335,"icon":339},"Source Options","i-lucide-app-window",{"title":341,"path":342,"stem":343,"icon":344},"Build Strategies","\u002Fen\u002Fdocs\u002Fplatform\u002Fweb-services\u002Fbuild-strategies","en\u002F1.docs\u002F2.platform\u002F2.web-services\u002F02.build-strategies","i-lucide-hammer",{"title":346,"path":347,"stem":348,"icon":349},"Configuration","\u002Fen\u002Fdocs\u002Fplatform\u002Fweb-services\u002Fconfiguration","en\u002F1.docs\u002F2.platform\u002F2.web-services\u002F03.configuration","i-lucide-settings",{"title":351,"path":352,"stem":353,"icon":288},"Deploying","\u002Fen\u002Fdocs\u002Fplatform\u002Fweb-services\u002Fdeploying","en\u002F1.docs\u002F2.platform\u002F2.web-services\u002F04.deploying",{"title":355,"path":356,"stem":357,"icon":358},"Domains","\u002Fen\u002Fdocs\u002Fplatform\u002Fweb-services\u002Fdomains","en\u002F1.docs\u002F2.platform\u002F2.web-services\u002F05.domains","i-lucide-globe",{"title":360,"path":361,"stem":362,"icon":363},"Service Networking","\u002Fen\u002Fdocs\u002Fplatform\u002Fweb-services\u002Fconnecting-services","en\u002F1.docs\u002F2.platform\u002F2.web-services\u002F06.connecting-services","i-lucide-network",{"title":365,"path":366,"stem":367,"icon":368},"Env Variables","\u002Fen\u002Fdocs\u002Fplatform\u002Fweb-services\u002Fenvironment-variables","en\u002F1.docs\u002F2.platform\u002F2.web-services\u002F07.environment-variables","i-lucide-key-round",{"title":370,"path":371,"stem":372,"icon":373},"Storage","\u002Fen\u002Fdocs\u002Fplatform\u002Fweb-services\u002Fpersistent-storage","en\u002F1.docs\u002F2.platform\u002F2.web-services\u002F08.persistent-storage","i-lucide-hard-drive",{"title":375,"path":376,"stem":377,"icon":378},"Defaults","\u002Fen\u002Fdocs\u002Fplatform\u002Fweb-services\u002Flimits","en\u002F1.docs\u002F2.platform\u002F2.web-services\u002F09.limits","i-lucide-gauge",{"title":380,"path":381,"stem":382,"icon":383},"Billing","\u002Fen\u002Fdocs\u002Fplatform\u002Fweb-services\u002Fbilling","en\u002F1.docs\u002F2.platform\u002F2.web-services\u002F10.billing","i-lucide-credit-card",{"title":385,"path":386,"stem":387,"children":388,"icon":294},"Databases","\u002Fen\u002Fdocs\u002Fplatform\u002Fdatabases","en\u002F1.docs\u002F2.platform\u002F3.databases\u002F1.index",[389,392,397,402,407,410,415,420],{"title":390,"path":386,"stem":387,"icon":391},"Templates","i-lucide-database",{"title":393,"path":394,"stem":395,"icon":396},"Create","\u002Fen\u002Fdocs\u002Fplatform\u002Fdatabases\u002Fcreate","en\u002F1.docs\u002F2.platform\u002F3.databases\u002F2.create","i-lucide-plus",{"title":398,"path":399,"stem":400,"icon":401},"Connect","\u002Fen\u002Fdocs\u002Fplatform\u002Fdatabases\u002Fconnect","en\u002F1.docs\u002F2.platform\u002F3.databases\u002F3.connect","i-lucide-plug",{"title":403,"path":404,"stem":405,"icon":406},"Public Access","\u002Fen\u002Fdocs\u002Fplatform\u002Fdatabases\u002Fpublic-access","en\u002F1.docs\u002F2.platform\u002F3.databases\u002F4.public-access","i-lucide-radio-tower",{"title":370,"path":408,"stem":409,"icon":373},"\u002Fen\u002Fdocs\u002Fplatform\u002Fdatabases\u002Fstorage","en\u002F1.docs\u002F2.platform\u002F3.databases\u002F5.storage",{"title":411,"path":412,"stem":413,"icon":414},"Management","\u002Fen\u002Fdocs\u002Fplatform\u002Fdatabases\u002Fmanagement","en\u002F1.docs\u002F2.platform\u002F3.databases\u002F6.management","i-lucide-sliders-horizontal",{"title":416,"path":417,"stem":418,"icon":419},"Operations","\u002Fen\u002Fdocs\u002Fplatform\u002Fdatabases\u002Foperational-notes","en\u002F1.docs\u002F2.platform\u002F3.databases\u002F7.operational-notes","i-lucide-clipboard-list",{"title":380,"path":421,"stem":422,"icon":383},"\u002Fen\u002Fdocs\u002Fplatform\u002Fdatabases\u002Fbilling","en\u002F1.docs\u002F2.platform\u002F3.databases\u002F8.billing",{"title":424,"path":425,"stem":426,"children":427,"icon":294},"App Services","\u002Fen\u002Fdocs\u002Fapp-services","en\u002F1.docs\u002F3.app-services\u002F1.index",[428,429,433,437,441,446],{"title":424,"path":425,"stem":426,"icon":288},{"title":430,"path":431,"stem":432,"icon":349},"Build Settings","\u002Fen\u002Fdocs\u002Fapp-services\u002Fbuild-settings","en\u002F1.docs\u002F3.app-services\u002F2.build-settings",{"title":365,"path":434,"stem":435,"icon":436},"\u002Fen\u002Fdocs\u002Fapp-services\u002Fenvironment-variables","en\u002F1.docs\u002F3.app-services\u002F3.environment-variables","i-lucide-key",{"title":438,"path":439,"stem":440,"icon":358},"Custom Domains","\u002Fen\u002Fdocs\u002Fapp-services\u002Fcustom-domains","en\u002F1.docs\u002F3.app-services\u002F4.custom-domains",{"title":442,"path":443,"stem":444,"icon":445},"Health Checks","\u002Fen\u002Fdocs\u002Fapp-services\u002Fhealth-checks","en\u002F1.docs\u002F3.app-services\u002F5.health-checks","i-lucide-heart-pulse",{"title":447,"path":448,"stem":449,"icon":450},"Autoscaling","\u002Fen\u002Fdocs\u002Fapp-services\u002Fautoscaling","en\u002F1.docs\u002F3.app-services\u002F6.autoscaling","i-lucide-scaling",{"title":452,"path":453,"stem":454,"children":455,"icon":294},"Helm Releases","\u002Fen\u002Fdocs\u002Fhelm-releases","en\u002F1.docs\u002F4.helm-releases\u002F1.index",[456,458,462,467,471,476,480,485],{"title":452,"path":453,"stem":454,"icon":457},"i-lucide-package",{"title":459,"path":460,"stem":461,"icon":391},"Deploy PostgreSQL","\u002Fen\u002Fdocs\u002Fhelm-releases\u002Fdeploy-postgresql","en\u002F1.docs\u002F4.helm-releases\u002F2.deploy-postgresql",{"title":463,"path":464,"stem":465,"icon":466},"Deploy Redis","\u002Fen\u002Fdocs\u002Fhelm-releases\u002Fdeploy-redis","en\u002F1.docs\u002F4.helm-releases\u002F3.deploy-redis","i-lucide-zap",{"title":468,"path":469,"stem":470,"icon":466},"Deploy Valkey","\u002Fen\u002Fdocs\u002Fhelm-releases\u002Fdeploy-valkey","en\u002F1.docs\u002F4.helm-releases\u002F3.deploy-valkey",{"title":472,"path":473,"stem":474,"icon":475},"Deploy n8n","\u002Fen\u002Fdocs\u002Fhelm-releases\u002Fdeploy-n8n","en\u002F1.docs\u002F4.helm-releases\u002F4.deploy-n8n","i-lucide-workflow",{"title":477,"path":478,"stem":479,"icon":373},"Deploy RustFS","\u002Fen\u002Fdocs\u002Fhelm-releases\u002Fdeploy-rustfs","en\u002F1.docs\u002F4.helm-releases\u002F5.deploy-rustfs",{"title":481,"path":482,"stem":483,"icon":484},"Deploy OpenSearch","\u002Fen\u002Fdocs\u002Fhelm-releases\u002Fdeploy-opensearch","en\u002F1.docs\u002F4.helm-releases\u002F6.deploy-opensearch","i-lucide-search",{"title":486,"path":487,"stem":488,"icon":489},"Deploy Keycloak","\u002Fen\u002Fdocs\u002Fhelm-releases\u002Fdeploy-keycloak","en\u002F1.docs\u002F4.helm-releases\u002F7.deploy-keycloak","i-lucide-shield-check",{"title":491,"path":492,"stem":493,"children":494,"icon":294},"Glossary","\u002Fen\u002Fdocs\u002Fglossary","en\u002F1.docs\u002F5.glossary\u002F1.index",[495],{"title":491,"path":492,"stem":493,"icon":496},"i-lucide-book-a",{"id":498,"title":253,"authors":499,"badge":505,"body":506,"date":1011,"description":1012,"extension":1013,"image":1014,"lastUpdated":505,"meta":1016,"navigation":1017,"path":254,"published":1017,"seo":1018,"stem":255,"tags":505,"__hash__":1019},"posts\u002Fen\u002F3.blog\u002F67.dokploy-vs-coolify.md",[500],{"name":501,"to":502,"avatar":503},"Thomas Ens","\u002Fabout\u002Fthomasens",{"src":504},"\u002Fimages\u002Fblog\u002Fauthors\u002Fthomas.jpeg",null,{"type":507,"value":508,"toc":970},"minimark",[509,514,532,535,540,543,546,549,553,556,561,564,574,577,591,595,598,602,605,609,612,615,619,622,626,633,637,640,644,656,660,664,667,681,685,688,702,705,709,712,726,729,733,736,739,743,746,749,753,756,760,763,777,784,788,791,805,808,812,815,819,826,830,837,841,844,847,851,854,866,870,882,886,894,897,901,907,910,936,939,943,950,967],[510,511,513],"h1",{"id":512},"dokploy-vs-coolify-differences-strengths-and-when-to-use-which","Dokploy vs Coolify: Differences, Strengths, and When to Use Which",[515,516,517,518,525,526,531],"p",{},"Anyone who wants to run container applications themselves quickly arrives at a simple but tough requirement: \"git push and it runs,\" without an ops team spending months fiddling with reverse proxies, TLS, backups, and deploy strategies afterwards. Tools like ",[519,520,524],"a",{"href":521,"rel":522},"https:\u002F\u002Fcoolify.io\u002F",[523],"nofollow","Coolify"," and ",[519,527,530],{"href":528,"rel":529},"https:\u002F\u002Fdokploy.com\u002F",[523],"Dokploy"," aim straight at that gap: they give you a PaaS-like interface on top of Docker\u002Fcontainer workloads so that deployments become reproducible and less knowledge stays locked inside individual heads.",[515,533,534],{},"This article isn't about \"which logo looks nicer.\" It's about the technical differences, the typical operational traps, and a pragmatic decision aid: what works well on a VPS, what becomes painful in multi-app operation, and at what point a platform pays off that handles the whole thing in a sovereign, standardized way.",[536,537,539],"h2",{"id":538},"what-coolify-and-dokploy-fundamentally-solve-and-what-they-dont","What Coolify and Dokploy fundamentally solve, and what they don't",[515,541,542],{},"Both tools address the same pain point: you have source code in Git (or a Docker image) and want to build reproducible deployments from it, including domains, TLS certificates, routing, and logs, without wiring everything up by hand every time. At the same time, you don't want to \"have to learn\" Kubernetes just to host a web app reliably.",[515,544,545],{},"But it's just as important to understand what they typically are not: not a full GitOps controller like ArgoCD\u002FFlux, not a substitute for a solid infrastructure foundation (firewall, IAM, backups, monitoring, incident processes), and not \"automatic compliance.\" Compliance comes from your hosting location, processes, and technical controls, not from a UI.",[515,547,548],{},"If you keep those limits in mind, you can use Coolify and Dokploy very sensibly as a deployment layer.",[536,550,552],{"id":551},"architecture-orchestration-docker-first-but-with-consequences","Architecture & orchestration: Docker-first, but with consequences",[515,554,555],{},"The biggest practical difference often doesn't show up in a feature screenshot but in one question: how are containers actually run and managed?",[557,558,560],"h3",{"id":559},"docker-directly-vs-orchestration","Docker directly vs. orchestration",[515,562,563],{},"Many self-hosting platforms start out as a \"Docker UI\" but grow toward orchestration:",[565,566,567,571],"ul",{},[568,569,570],"li",{},"Docker directly is fast, but with multiple services and updates it gets fragile.",[568,572,573],{},"Orchestration (Swarm\u002FKubernetes) can bring stability, but increases complexity.",[515,575,576],{},"What matters is less which buzzword is on the box and more:",[565,578,579,582,585,588],{},[568,580,581],{},"How are deployments versioned?",[568,583,584],{},"Are there rollbacks?",[568,586,587],{},"What does service discovery\u002Fnetworking look like?",[568,589,590],{},"How is state (volumes, DBs) handled?",[557,592,594],{"id":593},"what-you-should-look-at-concretely","What you should look at concretely",[515,596,597],{},"Regardless of whether you use Coolify or Dokploy, a quick reality check pays off: which deploy strategy is available (recreate with a short downtime vs. rolling\u002Fblue-green)? How strict are the health checks, and can a deployment roll back automatically on failure? Where does the \"truth\" of your configuration live — in the UI, in YAML, in Git, or somewhere in between (config drift)? And crucially: what does the path look like when you eventually want to move from single-node to HA? Migrations get expensive precisely when you plan them too late.",[536,599,601],{"id":600},"developer-workflow-git-integration-builds-deployments-rollbacks","Developer workflow: Git integration, builds, deployments, rollbacks",[515,603,604],{},"The developer workflow decides whether the tool gets adopted in daily work or ends up as an \"ops toy.\"",[557,606,608],{"id":607},"git-based-deployments","Git-based deployments",[515,610,611],{},"A good baseline is being able to connect a repo (GitHub\u002FGitLab etc.), define a build definition (Dockerfile, Nixpacks, Buildpacks, etc.), and trigger deployments via push, tag, or manually. That includes per-environment variables\u002Fsecrets as well as a clean deployment history with logs and events.",[515,613,614],{},"In practice, the details decide it: build caching saves a massive amount of time and money with frequent deploys. Preview environments are great for PRs, but only if DNS\u002FTLS and automatic cleanup really work cleanly. And rollback is more than \"start the old container\" — configuration, secrets, and especially DB migrations have to be thought through.",[557,616,618],{"id":617},"rollback-without-a-migration-strategy-is-just-a-feeling","\"Rollback\" without a migration strategy is just a feeling",[515,620,621],{},"The classic case: app deployed, DB migration runs, bug found, rollback pressed, and suddenly the old version starts against a new schema. If you seriously want rollbacks, you need at least one of the following strategies: forward-compatible migrations or feature flags; migrations that are separately deployable; or a clear cutover plan (blue\u002Fgreen including a DB plan). This isn't \"Coolify vs Dokploy,\" it's platform reality. Some tools help you with it better, e.g. through a clear deployment history, hook systems, or environment models.",[536,623,625],{"id":624},"databases-stateful-workloads-the-point-where-self-hosting-hurts","Databases & stateful workloads: the point where self-hosting hurts",[515,627,628,629,632],{},"Deploying web apps is relatively easy. ",[630,631,385],"strong",{}," are the part that wakes you up at night.",[557,634,636],{"id":635},"db-provisioning-convenient-vs-accountable","DB provisioning: convenient vs. accountable",[515,638,639],{},"Many platforms offer \"one-click PostgreSQL\u002FMySQL\u002FRedis.\" That's helpful, but you should still check where the volumes live, how backups are made, how you test restores, how upgrades (major versions) work, and whether there is encryption \"at rest\" (usually this depends on the storage\u002Fhost). Even if the tool creates DBs for you, it remains your responsibility to make sure backups exist and recovery works.",[557,641,643],{"id":642},"backups-configured-is-not-verified","Backups: \"configured\" is not \"verified\"",[515,645,646,647,651,652,655],{},"A solid setup means: automated backups (e.g. ",[648,649,650],"code",{},"pg_dump"," or snapshots) in separate storage, a clear retention policy (e.g. 7\u002F30\u002F180 days), regular restore tests, and a documented recovery process. If you specifically don't want to do that, what you're really looking for is a platform that handles ",[630,653,654],{},"stateful deployments"," and backups in a standardized or managed way.",[536,657,659],{"id":658},"networking-tls-domains-and-downtime-the-invisible-complexity","Networking, TLS, domains, and downtime: the invisible complexity",[557,661,663],{"id":662},"reverse-proxy-traefiknginx-co","Reverse proxy: Traefik\u002FNginx & co.",[515,665,666],{},"Whether you use Traefik, Nginx, or Caddy: the reverse proxy is on the critical path. Check:",[565,668,669,672,675,678],{},[568,670,671],{},"Automatic ACME\u002FTLS (Let's Encrypt)",[568,673,674],{},"Wildcards vs. individual certificates",[568,676,677],{},"HTTP\u002F2, WebSockets, gRPC if relevant",[568,679,680],{},"Rate limiting \u002F basic WAF (or integration with external components)",[557,682,684],{"id":683},"zero-downtime-only-if-your-setup-supports-it","Zero-downtime: only if your setup supports it",[515,686,687],{},"\"Zero downtime\" gets promised a lot, but it depends on:",[565,689,690,693,696,699],{},[568,691,692],{},"Deploy strategy (rolling)",[568,694,695],{},"Load balancing (at least 2 instances)",[568,697,698],{},"Session handling (stateless or shared store)",[568,700,701],{},"Database migrations (see above)",[515,703,704],{},"On a single node with one instance, \"zero downtime\" is mostly marketing or means \"a short restart.\" That's fine — as long as you plan for it honestly.",[536,706,708],{"id":707},"observability-logs-are-not-monitoring","Observability: logs are not monitoring",[515,710,711],{},"Many tools show container logs. That's good, but observability is more:",[565,713,714,720],{},[568,715,716,719],{},[630,717,718],{},"Metrics"," (CPU, RAM, disk, network, app metrics)",[568,721,722,725],{},[630,723,724],{},"Alerts"," (don't find out only when users complain)",[515,727,728],{},"In practice this usually means: export to Prometheus\u002FGrafana or a managed service, standardized log retention, and alerting (pager\u002FSlack\u002Femail) based on real SLOs. If Coolify\u002FDokploy only give you logs, plan monitoring separately — otherwise you're blind during an incident.",[536,730,732],{"id":731},"security-access-models-whos-allowed-to-do-what-and-how-do-you-audit-it","Security & access models: who's allowed to do what, and how do you audit it?",[515,734,735],{},"Self-hosted deployment platforms quickly become the \"keys to the kingdom.\" That's why questions like these aren't optional:",[515,737,738],{},"Is there RBAC (roles, teams, projects)? Can you audit deployments (who deployed what and when)? How are secrets stored (encryption, at least access separation)? And how are updates to the platform itself handled (security patches)?",[557,740,742],{"id":741},"attack-surfaces-that-are-easily-overlooked","Attack surfaces that are easily overlooked",[515,744,745],{},"The platform server is often also the Docker host. If the platform is compromised, the host is often compromised too. Webhooks\u002Fdeploy tokens become high-value credentials. And misconfigured ingress rules suddenly expose internal services to the outside.",[515,747,748],{},"If you run more than hobby projects, define at least segmented networks, minimal access (VPN\u002FSSO, IP allowlists), regular updates\u002FCVE review, as well as backup and recovery tests.",[536,750,752],{"id":751},"operations-maintainability-updates-migrations-recovery","Operations & maintainability: updates, migrations, recovery",[515,754,755],{},"This is where \"it works\" separates from \"it works in 12 months.\"",[557,757,759],{"id":758},"upgrading-the-platform","Upgrading the platform",[515,761,762],{},"Good questions:",[565,764,765,768,771,774],{},[568,766,767],{},"Is the upgrade a Docker Compose pull and restart?",[568,769,770],{},"Are there migrations that can go wrong?",[568,772,773],{},"What does a rollback of the platform look like?",[568,775,776],{},"How strong is the support\u002Fcommunity factor?",[515,778,779,780,783],{},"The more you rely on the platform, the more important a ",[630,781,782],{},"stable upgrade path"," becomes.",[557,785,787],{"id":786},"disaster-recovery-what-happens-if-the-server-is-gone","Disaster recovery: what happens if the server is gone?",[515,789,790],{},"If you're honest, \"a VPS\" isn't a plan, it's an assumption. A real plan answers:",[565,792,793,796,799,802],{},[568,794,795],{},"Where are your backups (off the host)?",[568,797,798],{},"How quickly can you re-provision?",[568,800,801],{},"How do you restore DNS\u002FTLS?",[568,803,804],{},"How do you bring secrets back?",[515,806,807],{},"If you have to do all of that manually, the \"one-click\" advantage is gone fast.",[536,809,811],{"id":810},"decision-matrix-when-does-coolify-fit-when-dokploy","Decision matrix: when does Coolify fit, when Dokploy?",[515,813,814],{},"Without drifting into version details or individual UI flows (which can change), you can structure your decision around criteria.",[557,816,818],{"id":817},"coolify-often-fits-when","Coolify often fits when …",[515,820,821,822,825],{},"Coolify often fits when you want a broad community and lots of \"how-to\" material, want to get started quickly, and value an \"all-in-one\" interface (apps, DBs, domains). Where a managed platform makes more sense is covered in our ",[519,823,824],{"href":234},"lowcloud vs. Coolify comparison",".",[557,827,829],{"id":828},"dokploy-often-fits-when","Dokploy often fits when …",[515,831,832,833,836],{},"Dokploy often fits when you're looking for a tool that slots well into your existing Docker workflow, you prefer a clear deploy history and focused operation, and you want as little \"platform magic\" as possible — that is, you deliberately take on responsibility yourself. Our ",[519,834,835],{"href":238},"lowcloud vs. Dokploy comparison"," digs into Dokploy's multi-node Swarm model in detail.",[557,838,840],{"id":839},"a-typical-recommendation-from-practice","A typical recommendation from practice",[515,842,843],{},"For 1–3 apps on a single server (moderate availability), generally pick the tool you can set up cleanly in 30 minutes — and invest the time you save in backups and monitoring instead. As soon as you have multiple teams\u002Fprojects, rising availability, or compliance requirements, RBAC, auditability, upgrade paths, and recovery become decisive. Then it often pays off more to think in platform standards than in tool features.",[515,845,846],{},"If you catch yourself having to build a checklist of 30 \"ops basics\" on the side, you probably don't want \"yet another self-hosting tool\" but a solution that standardizes these things.",[536,848,850],{"id":849},"short-verdict-the-concrete-difference-between-coolify-and-dokploy","Short verdict: the concrete difference between Coolify and Dokploy",[515,852,853],{},"If you're looking for the \"what's this really about?\", the difference can be boiled down like this:",[565,855,856,861],{},[568,857,858,860],{},[630,859,524],{}," tends to be the broader all-in-one platform: lots of \"batteries included\" (apps + DBs + domains + UI), often with the goal of covering as many typical hosting cases as possible from a single interface.",[568,862,863,865],{},[630,864,530],{}," tends to be the more focused deployment layer: closer to the classic Docker\u002FCompose workflow, less platform \"magic,\" but often quicker to understand if you already know how to structure Docker services.",[557,867,869],{"id":868},"in-one-sentence","In one sentence",[565,871,872,877],{},[568,873,874,876],{},[630,875,524],{},": \"I want the most complete self-hosted PaaS feeling from a single tool.\"",[568,878,879,881],{},[630,880,530],{},": \"I want to make deployments cleaner\u002Fmore convenient without the platform abstracting too much away from me.\"",[557,883,885],{"id":884},"practical-decision-aid-rule-of-thumb","Practical decision aid (rule of thumb)",[565,887,888,891],{},[568,889,890],{},"Pick Coolify if you want many standard building blocks (apps + databases + domains) in one interface quickly and prefer a larger \"all-in-one\" toolbox over maximum transparency.",[568,892,893],{},"Pick Dokploy if you deliberately want to carry more operational responsibility but are looking for a leaner layer on top of your existing Docker setup.",[515,895,896],{},"Important: in everyday use it's not the feature lists that decide, but backups\u002Frestore, updates, permissions\u002FRBAC, observability, and recovery. That's exactly where self-hosting often tips from \"nice\" to \"critical.\"",[536,898,900],{"id":899},"where-lowcloud-comes-in-sovereign-one-click-container-deployment","Where lowcloud comes in: sovereign one-click container deployment",[515,902,903,904,825],{},"Coolify and Dokploy are good options if you deliberately want to self-host and can carry the operational responsibility. But many teams want exactly the opposite: deployments like Vercel\u002FHeroku, but with sovereignty and without \"ops as a side job.\" For teams planning a migration, we line up the ",[519,905,906],{"href":226},"serious Heroku alternatives",[515,908,909],{},"lowcloud is designed to deploy full-stack and container workloads in one click — including the parts that are often underestimated in self-hosting:",[565,911,912,918,924,930],{},[568,913,914,917],{},[630,915,916],{},"Sovereignty",": hosting in Germany, clear data ownership.",[568,919,920,923],{},[630,921,922],{},"Container deployment without tinkering",": no \"reverse proxy weekend,\" but standardized deploy paths.",[568,925,926,929],{},[630,927,928],{},"Stateful deployments",": databases and persistent services aren't a special case but part of the model.",[568,931,932,935],{},[630,933,934],{},"Monitoring",": not just \"look at the logs,\" but observability as a platform baseline.",[515,937,938],{},"This doesn't replace your architectural thinking, but it reduces the part that keeps you from building productive software.",[536,940,942],{"id":941},"conclusion-ask-the-operational-questions-first-then-choose-the-tool","Conclusion: ask the operational questions first, then choose the tool",[515,944,945,946,949],{},"\"Dokploy vs Coolify\" sounds like a feature question. In practice it's usually an ",[630,947,948],{},"operational question",":",[565,951,952,955,958,961,964],{},[568,953,954],{},"How important are backups and restore?",[568,956,957],{},"How quickly do you need to roll out updates safely?",[568,959,960],{},"How many apps\u002Fteams will join?",[568,962,963],{},"How much downtime is acceptable?",[568,965,966],{},"How much sovereignty\u002Fcompliance do you need?",[515,968,969],{},"If you answer that, the tool choice is often obvious. And if you realize that what you actually want is a platform that standardizes deployments, state, and operations, then a sovereign approach like lowcloud is often the more logical step than \"even more self-hosting screws to turn.\"",{"title":971,"searchDepth":972,"depth":972,"links":973},"",2,[974,975,980,984,988,992,993,996,1000,1005,1009,1010],{"id":538,"depth":972,"text":539},{"id":551,"depth":972,"text":552,"children":976},[977,979],{"id":559,"depth":978,"text":560},3,{"id":593,"depth":978,"text":594},{"id":600,"depth":972,"text":601,"children":981},[982,983],{"id":607,"depth":978,"text":608},{"id":617,"depth":978,"text":618},{"id":624,"depth":972,"text":625,"children":985},[986,987],{"id":635,"depth":978,"text":636},{"id":642,"depth":978,"text":643},{"id":658,"depth":972,"text":659,"children":989},[990,991],{"id":662,"depth":978,"text":663},{"id":683,"depth":978,"text":684},{"id":707,"depth":972,"text":708},{"id":731,"depth":972,"text":732,"children":994},[995],{"id":741,"depth":978,"text":742},{"id":751,"depth":972,"text":752,"children":997},[998,999],{"id":758,"depth":978,"text":759},{"id":786,"depth":978,"text":787},{"id":810,"depth":972,"text":811,"children":1001},[1002,1003,1004],{"id":817,"depth":978,"text":818},{"id":828,"depth":978,"text":829},{"id":839,"depth":978,"text":840},{"id":849,"depth":972,"text":850,"children":1006},[1007,1008],{"id":868,"depth":978,"text":869},{"id":884,"depth":978,"text":885},{"id":899,"depth":972,"text":900},{"id":941,"depth":972,"text":942},"2026-05-22","Coolify vs Dokploy compared: architecture, deployments, databases, security and operations. A pragmatic guide to choosing the right self-hosting tool.","md",{"src":1015},"\u002Fimages\u002Fblog\u002Fdokploy-vs-coolify.jpg",{},true,{"title":253,"description":1012},"AQoIP5qhUI3dSH_uhwlekwVioc2pu_qVI68kyn_4Wy8",[1021,1023],{"title":249,"path":250,"stem":251,"description":1022,"children":-1},"Vibe-coded apps run locally but break in production. The most common deployment problems, from missing secrets to an exposed database, and how to fix them.",{"title":257,"path":258,"stem":259,"description":1024,"children":-1},"Vercel and Netlify compared: runtime models, costs, full-stack reality, and lock-in. Plus when a container-based approach like lowcloud is the better fit.",1780334513754]