<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: drtobbyas</title>
    <description>The latest articles on DEV Community by drtobbyas (@drtobbyas).</description>
    <link>https://dev.to/drtobbyas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F160261%2F936344b9-5f2d-43b2-b40a-980f384b64da.png</url>
      <title>DEV Community: drtobbyas</title>
      <link>https://dev.to/drtobbyas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/drtobbyas"/>
    <language>en</language>
    <item>
      <title>EP2: Mapping the Labyrinth: How Coolify Deploys Your Apps (and Why K8s Fits)</title>
      <dc:creator>drtobbyas</dc:creator>
      <pubDate>Wed, 22 Apr 2026 13:27:36 +0000</pubDate>
      <link>https://dev.to/drtobbyas/ep2-mapping-the-labyrinth-how-coolify-deploys-your-apps-and-why-k8s-fits-3dal</link>
      <guid>https://dev.to/drtobbyas/ep2-mapping-the-labyrinth-how-coolify-deploys-your-apps-and-why-k8s-fits-3dal</guid>
      <description>&lt;p&gt;&lt;strong&gt;If you missed &lt;a href="https://dev.to/drtobbyas/they-said-kubernetes-isnt-coming-to-coolify-im-going-to-find-out-if-thats-true-4eee"&gt;Episode 1&lt;/a&gt;, we established the goal: Investigate whether native Kubernetes support in Coolify is actually impossible.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, the investigation moves from the "Why" to the "How." I spent the last few days inside the Coolify source code, trying to map exactly how it moves code from a repository into a running container.&lt;/p&gt;

&lt;p&gt;Here is the technical reality of the engine.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ Part 1: Finding the Heartbeat
&lt;/h2&gt;

&lt;p&gt;To understand how Coolify works, you have to find its "Engine Room." In this codebase, that room is located at &lt;code&gt;app/Jobs/ApplicationDeploymentJob.php&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It is a massive, 4,000-line procedural job.&lt;/p&gt;

&lt;p&gt;In some circles, a 4k-line file is a "code smell." But in an orchestrator, it’s actually a map. Because it's written procedurally, you can read it like a script. I spent hours tracing the flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Setup&lt;/strong&gt;: Cloning the repo and establishing the build environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Network&lt;/strong&gt;: Creating the Docker bridge networks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Deployment&lt;/strong&gt;: Building the images and running &lt;code&gt;docker compose up&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The audit confirmed my first hunch: &lt;strong&gt;The logic isn’t hardcoded to Docker.&lt;/strong&gt; It’s a sequence of commands. If we can swap those commands, we can change the engine.&lt;/p&gt;




&lt;h3&gt;
  
  
  🗺️ The Map of the Territory
&lt;/h3&gt;

&lt;p&gt;To find the path to Kubernetes, I first had to map the Labyrinth. Here is the simplified structure of the Coolify engine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;coolify/
├── app/
│   ├── Actions/        # Reusable deployment logic
│   ├── Jobs/           # The heart: ApplicationDeploymentJob.php (4k lines)
│   └── Models/         # Data structures (Server, Destination, Service)
├── bootstrap/
│   └── helpers/        # The heavy lifters: remoteProcess.php &amp;amp; proxy.php
├── config/             # Global platform settings
└── docker-compose.dev.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key Discovery Points:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;app/Jobs&lt;/code&gt;&lt;/strong&gt;: This is where the linear deployment sequence lives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;bootstrap/helpers/remoteProcess.php&lt;/code&gt;&lt;/strong&gt;: This is the "SSH Tunnel" that makes everything possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;app/Models&lt;/code&gt;&lt;/strong&gt;: This is where we’ll define the new &lt;code&gt;KubernetesDestination&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🐉 Part 2: The Fedora Sidequest
&lt;/h2&gt;

&lt;p&gt;Before I could dive deeper, I had to fix my own "Engine Room."&lt;/p&gt;

&lt;p&gt;I develop on &lt;strong&gt;Fedora&lt;/strong&gt;, which means I’m running a security-hardened stack with &lt;strong&gt;SELinux&lt;/strong&gt;. As soon as I tried to spin up a basic service like Dashy or Homepage in my local Coolify dev environment, I hit a stone wall.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Permission Denied.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The proxy container (Traefik/Caddy) couldn’t talk to the Docker socket. Everything was 404ing.&lt;/p&gt;

&lt;p&gt;I spent a few hours patching &lt;code&gt;bootstrap/helpers/proxy.php&lt;/code&gt; to handle this "hardened" reality. The fix required two key adjustments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding the &lt;code&gt;:z&lt;/code&gt; flag for volume relabeling (&lt;code&gt;/var/run/docker.sock:/var/run/docker.sock:z&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Setting &lt;code&gt;privileged: true&lt;/code&gt; for the local proxy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Lesson:&lt;/strong&gt; Local dev is never as simple as &lt;code&gt;docker compose up&lt;/code&gt;. But solving these "gatekeeper" bugs gave me a deeper understanding of how Coolify handles its proxy logic. Such knowledge I'll need when we move to K8s Ingress.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚪 Part 3: The SSH Backdoor
&lt;/h2&gt;

&lt;p&gt;While auditing the engine, I found the most important piece of the puzzle: &lt;code&gt;remote_process&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Coolify doesn't rely on complex, vendor-locked SDKs to manage your servers. It does something much simpler and more powerful: it uses SSH to run shell commands.&lt;/p&gt;

&lt;p&gt;This is the "Kubernetes Backdoor."&lt;/p&gt;

&lt;p&gt;Right now, the &lt;code&gt;ApplicationDeploymentJob&lt;/code&gt; sends strings like:&lt;br&gt;
&lt;code&gt;docker compose up -d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But because it’s just a CLI pipeline over SSH, there is no architectural reason it can't send:&lt;br&gt;
&lt;code&gt;kubectl apply -f manifest.yaml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The engine treats servers as &lt;strong&gt;SSH-ready shell endpoints&lt;/strong&gt;. If your server has &lt;code&gt;kubectl&lt;/code&gt; installed, Coolify can already talk to it. The "impossible" barrier isn't the architecture,it's just a translation problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 The Phase 2 Conclusion: It’s a Translation Problem
&lt;/h2&gt;

&lt;p&gt;They said Kubernetes isn't coming. I've found that the door is already wide open.&lt;/p&gt;

&lt;p&gt;The challenge ahead isn't rewriting the core engine. It's building the &lt;strong&gt;Translator&lt;/strong&gt;. We need to take the configuration you provide in the Coolify UI and turn it into Kubernetes YAML instead of Docker Compose labels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next in the Investigation:&lt;/strong&gt;&lt;br&gt;
I’m moving on to building the &lt;code&gt;KubernetesDestination&lt;/code&gt; model, the foundation for a cluster-native Coolify experience.&lt;/p&gt;

&lt;p&gt;Follow along as we start building the bridge.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;GitHub Issue:&lt;/strong&gt; &lt;a href="https://github.com/coollabsio/coolify/issues/2390" rel="noopener noreferrer"&gt;https://github.com/coollabsio/coolify/issues/2390&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect with me:&lt;/strong&gt; &lt;a href="https://x.com/drtobbyas" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt;, &lt;a href="https://linkedin.com/in/oluwatobiadeshina" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;, &lt;a href="https://t.me/drtobbyas" rel="noopener noreferrer"&gt;Telegram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the second post in a series documenting my investigation into Kubernetes support for Coolify. Next up: Building the first Kubernetes Destination model.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>opensource</category>
      <category>devops</category>
      <category>coolify</category>
    </item>
    <item>
      <title>EP1: They Said Kubernetes Isn't Coming to Coolify. I'm Going to Find Out If That's True.</title>
      <dc:creator>drtobbyas</dc:creator>
      <pubDate>Tue, 14 Apr 2026 13:08:46 +0000</pubDate>
      <link>https://dev.to/drtobbyas/they-said-kubernetes-isnt-coming-to-coolify-im-going-to-find-out-if-thats-true-4eee</link>
      <guid>https://dev.to/drtobbyas/they-said-kubernetes-isnt-coming-to-coolify-im-going-to-find-out-if-thats-true-4eee</guid>
      <description>&lt;p&gt;&lt;strong&gt;22 months open. $250 bounty. 46 reactions. One unexpected answer.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Reach-Out
&lt;/h2&gt;

&lt;p&gt;On March 14, 2026, I did something that felt important.&lt;/p&gt;

&lt;p&gt;I commented on &lt;a href="https://github.com/coollabsio/coolify/issues/2390" rel="noopener noreferrer"&gt;Coolify issue #2390&lt;/a&gt; — the Kubernetes support request that has been sitting open since June 2024. I offered to help. I shared my background (8 years DevOps, deep K8s specialization). I asked if they were open to collaboration.&lt;/p&gt;

&lt;p&gt;Then I took it to Discord and asked the team directly: "What do you think about this?"&lt;/p&gt;

&lt;p&gt;The response came from Peak, a core maintainer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We will use our own custom solution (for v5) that integrates directly with Docker Compose and uses Docker in the background, as it is more flexible and tightly integrated into Coolify, like Swarm but better."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kubernetes support, it seemed, was not coming to Coolify. Not in v5. Maybe not ever.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Gap in the Answer
&lt;/h2&gt;

&lt;p&gt;I read that response multiple times. Something struck me.&lt;/p&gt;

&lt;p&gt;They never said Kubernetes was &lt;strong&gt;technically impossible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They said their solution was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"More flexible"&lt;/li&gt;
&lt;li&gt;"Tightly integrated" &lt;/li&gt;
&lt;li&gt;"Like Swarm but better"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are &lt;strong&gt;comparative advantages&lt;/strong&gt;, not absolute constraints.&lt;/p&gt;

&lt;p&gt;The maintainers made a product decision: "We will build X instead of Y."&lt;/p&gt;

&lt;p&gt;They did not make a technical claim: "Y cannot be built."&lt;/p&gt;




&lt;h2&gt;
  
  
  The Unanswered Question
&lt;/h2&gt;

&lt;p&gt;This distinction matters because of what sits behind issue #2390:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;46 community reactions&lt;/strong&gt; (36 hearts, 10 eyes watching)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;$250 in community bounties&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;22 months&lt;/strong&gt; of sustained interest&lt;/li&gt;
&lt;li&gt;Comments from users explaining why this is the blocker preventing them from adopting Coolify&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The community clearly wants native Kubernetes support.&lt;/p&gt;

&lt;p&gt;The maintainers have chosen a different path.&lt;/p&gt;

&lt;p&gt;And no one has investigated whether the community's request is actually &lt;em&gt;possible&lt;/em&gt; to fulfill.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Investigation
&lt;/h2&gt;

&lt;p&gt;So I'm asking a different question than "Will you accept my PR?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is native Kubernetes support in Coolify actually impossible?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With 8 years of Kubernetes experience — designing clusters, integrating K8s clients into applications, debugging production deployments — I'm in a position to find out.&lt;/p&gt;

&lt;p&gt;Here's what I'm going to do:&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1: Architecture Mapping
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Clone Coolify and understand its current deployment model&lt;/li&gt;
&lt;li&gt;Identify where K8s integration would logically live&lt;/li&gt;
&lt;li&gt;Document the current "Docker-only" architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 2: Integration Point Analysis
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Map the API boundaries where K8s could interface&lt;/li&gt;
&lt;li&gt;Identify potential blockers (technical, architectural, philosophical)&lt;/li&gt;
&lt;li&gt;Research how other PaaS platforms handle dual Docker/K8s support&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 3: Proof-of-Concept
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Build a minimal K8s integration for one deployment type&lt;/li&gt;
&lt;li&gt;Document what works, what breaks, what's hard&lt;/li&gt;
&lt;li&gt;Share working code or detailed failure analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 4: Community Decision
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Publish findings: "Here's what I found when I tried"&lt;/li&gt;
&lt;li&gt;If it's possible: offer the solution to maintainers and community&lt;/li&gt;
&lt;li&gt;If it's impossible: document exactly why (valuable for future reference)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Three Possible Outcomes
&lt;/h2&gt;

&lt;p&gt;I'm not approaching this with a predetermined conclusion. There are three ways this investigation ends:&lt;/p&gt;

&lt;h3&gt;
  
  
  Outcome 1: It's Possible
&lt;/h3&gt;

&lt;p&gt;I build working K8s support that proves the architecture can accommodate it. The maintainers can choose to merge it or not — but the community will have a working solution (either in mainline or as a maintained fork).&lt;/p&gt;

&lt;h3&gt;
  
  
  Outcome 2: It's Impossible
&lt;/h3&gt;

&lt;p&gt;I discover genuine technical blockers that make K8s integration infeasible. I document these blockers in detail. The community finally has a definitive answer instead of an open question.&lt;/p&gt;

&lt;h3&gt;
  
  
  Outcome 3: It's Complicated
&lt;/h3&gt;

&lt;p&gt;The integration is technically possible but comes with significant trade-offs. I map these trade-offs clearly so the community and maintainers can make an informed decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Any of these outcomes serves the community better than the current state:&lt;/strong&gt; an open issue with demand but no investigation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I'm Doing This
&lt;/h2&gt;

&lt;p&gt;Let's be honest about the risks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The maintainers might see this as undermining their vision&lt;/li&gt;
&lt;li&gt;I could invest significant time and prove it's actually impossible&lt;/li&gt;
&lt;li&gt;The community might not care about the findings&lt;/li&gt;
&lt;li&gt;I could end up maintaining a fork that no one uses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here's what I know:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The question deserves an answer.&lt;/strong&gt; 46 reactions and $250 in bounties suggest real demand. Someone should investigate if that demand can be met.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The investigation has value regardless of outcome.&lt;/strong&gt; Even a documented failure teaches us something about Coolify's architecture.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Building in public creates connections.&lt;/strong&gt; The process of investigation — sharing blockers, breakthroughs, architecture insights — is valuable content for the DevOps community.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The maintainer decision isn't the end of the story.&lt;/strong&gt; Open source means the community can explore paths the core team chooses not to. That's not hostile — it's how open source evolves.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;This isn't just about Coolify and Kubernetes.&lt;/p&gt;

&lt;p&gt;It's about what happens when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A community clearly wants a feature&lt;/li&gt;
&lt;li&gt;The maintainers choose a different direction
&lt;/li&gt;
&lt;li&gt;No one investigates if the community's request is technically feasible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Someone has to ask: "Is this actually impossible? Or just not prioritized?"&lt;/p&gt;

&lt;p&gt;I'm asking that question. And I'm documenting the answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Follow Along
&lt;/h2&gt;

&lt;p&gt;I'll be sharing every step of this investigation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture deep-dives&lt;/li&gt;
&lt;li&gt;Integration point analysis&lt;/li&gt;
&lt;li&gt;Blockers and breakthroughs&lt;/li&gt;
&lt;li&gt;Working code or documented failures&lt;/li&gt;
&lt;li&gt;Honest assessments of what's possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you're interested in:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes architecture&lt;/li&gt;
&lt;li&gt;How PaaS platforms handle deployment abstraction&lt;/li&gt;
&lt;li&gt;The gap between maintainer vision and community demand&lt;/li&gt;
&lt;li&gt;What "impossible" actually looks like in practice&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Connect with me:&lt;/strong&gt; Follow me here on Dev.to for updates. You can also find me on &lt;a href="https://x.com/drtobbyas," rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt;, &lt;a href="https://linkedin.com/in/oluwatobiadeshina" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt; and &lt;a href="https://t.me/drtobbyas" rel="noopener noreferrer"&gt;Telegram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Issue:&lt;/strong&gt; &lt;a href="https://github.com/coollabsio/coolify/issues/2390" rel="noopener noreferrer"&gt;https://github.com/coollabsio/coolify/issues/2390&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Questions?&lt;/strong&gt; Drop them in the comments below.&lt;/p&gt;




</description>
      <category>kubernetes</category>
      <category>opensource</category>
      <category>devops</category>
      <category>coolify</category>
    </item>
  </channel>
</rss>
