Software Ownership

How to Self-Host Internal Tools Safely: A Practical Playbook

A practical playbook for self-hosting internal tools safely, so a GitHub outage, suspension, or policy change can never take your own software hostage.

At a glance
  1. 01Practical software ownership requires controlling source code, documentation, infrastructure, and access.
  2. 02GitHub averaged over 100 outages annually between 2024 and 2026, severely impacting CI/CD pipelines.
  3. 03Unsanctioned shadow AI usage increased data breach costs by an average of $670,000 per organization in 2025.
  4. 04Self-hosted CI/CD runners must be ephemeral and isolated from public repositories to prevent exploitation.
A server rack with a module sliding into an empty bay, connected to independent local junctions instead of a single distant cloud, illustrating self-hosted internal tools with redundant, direct infrastructure.
Illustration generated by Remy for this story.

How to Self-Host Internal Tools Safely: A Step-by-Step Playbook

Self-hosting internal tools safely means controlling four things yourself: the source code, the documentation, the infrastructure it runs on, and the identities that can touch it. Then you harden the server, isolate your CI/CD pipeline, and build an access model that doesn't depend on any single vendor staying online or staying friendly.1 That's the whole playbook. The rest of this piece is how to execute it.

Why "built in-house" doesn't mean "owned" anymore

Teams build internal tools to escape SaaS rent. Then, without quite meaning to, they re-lease control to a different landlord. The code lives on GitHub. The CI/CD runs on GitHub Actions. The AI coding agent writing half the codebase runs through a third-party API. The team that thought it was decoupling from vendor dependency just moved the dependency one layer down.

Figure 1
GitHub's August 2026 Capacity Strain
7.8 hrs
Outage duration on August 17, 2026
58%
Azure's share of GitHub's platform load, up from 12% in May
2.9B
Monthly commits on GitHub, up from 1.4B since April
Source: GitHub Blog

That's not a hypothetical risk. It's the default state of most "in-house" software today. Practical ownership requires control across four distinct layers: source code, documentation, infrastructure, and deployment access. Most organizations that build internal tools control only one or two of those layers, even when the code is technically theirs.1 Legal ownership of a repository means nothing if you can't reach it, can't run it, and can't move it somewhere else on short notice.

What does losing control of your code actually cost you?

Figure 2
GitHub Outage Activity: 2024 vs. 2025-2026
Total incidentsMajor incidents
number of incidents (incidents)
025050020242025-2026
Reporting period
Synthesized from two independently reported outage-tracking periods covering GitHub's platform.
Source: Remy analysis

This isn't theoretical. It's a documented, recurring pattern with four distinct failure modes.

  • Outages take down your build pipeline, not just a website. On August 17, 2026, GitHub went down for 7 hours and 47 minutes, disrupting github.com, authentication, Actions, APIs, pull requests, issues, and Copilot.2 GitHub's own CTO tied this and an earlier August 6 incident to structural capacity strain: monthly commits grew from 1.4 billion to 2.9 billion, and Azure now carries roughly 58% of GitHub's platform load, up from just 12% in May.2 That's not bad luck. That's a platform outgrowing its own infrastructure in real time.
  • Outages aren't rare, they're routine. Independent monitoring counted 119 separate GitHub incidents in 2024 alone, 26 of them major, averaging 106.4 minutes of downtime each, with GitHub Actions the single most frequently affected component.3 A separate tracker covering May 2025 through April 2026 found 257 total outages, including 48 major ones totaling more than 112 hours of downtime, again with Actions hit hardest and Copilot experiencing 44 disruptions of its own.4 If your CI/CD depends on GitHub, you're not planning around an edge case. You're planning around a monthly occurrence.
  • Suspensions can lock you out with no clock on the appeal. During a May 26, 2026 outage, GitHub's own system erroneously told users their accounts had been suspended, a false alarm that still exposed how bad a real suspension is: developers who are actually suspended can lose access to repositories, organizations, and automation for weeks or months, sometimes reactivated only after that stretch with no clear timeline.5 GitHub's community forums document real cases of this: one developer's account was suspended by abuse detection and only reinstated nearly eight weeks later.6 This risk exists even for teams running self-managed runners, because GitHub still centrally manages the authentication layer underneath them.5
  • Self-hosted runners can become the attacker's foothold. Self-hosted GitHub Actions runners are a documented and actively exploited attack surface. The Shai-Hulud worm, first observed in November 2025, compromised developer machines through trojanized NPM packages and then installed rogue self-hosted runners as persistent backdoors, communicating entirely over trusted github.com traffic to evade normal network monitoring.7 GitHub's own hardening documentation admits self-hosted runners "do not have guarantees around running in ephemeral clean virtual machines, and can be persistently compromised by untrusted code in a workflow."7
Figure 3
GitHub Outages by Component, May 2025-April 2026
GitHub Actions57Copilot44

Any one of these on its own is manageable. Together, they describe a platform relationship where your uptime, your access, and your security posture are all decided by someone else's infrastructure choices.

Step 1: Separate code ownership from code hosting

Start with an honest audit. For every internal tool your team runs, answer four questions: do you hold the source code, the documentation, the infrastructure (cloud accounts, DNS, CI/CD credentials), and deployment access, or does a platform hold some of them for you?1 Most teams find they control the code but not the pipeline that ships it, or the infrastructure but not the identity provider gating it.

Where the gap is code hosting itself, self-hosted Git platforms are a real, low-friction fix. Gitea and Forgejo can run on modest hardware, Forgejo's own comparison notes it can run on something as small as a Raspberry Pi, and GitLab Self-Managed offers a fuller DevSecOps feature set for teams that want it under their own roof.8 This connects to a broader shift worth reading about: the local-first movement that's bringing self-hosted infrastructure back into reach for teams that would have written it off five years ago as too much operational overhead.

Figure 4
Suspension Without a Clock
8 wks
Weeks before one wrongly suspended GitHub account was reinstated

Step 2: Harden the server before you trust it with production tools

A self-hosted tool is only as safe as the server underneath it. NIST SP 800-123 lays out the baseline sequence, and it's worth following in order:

  1. Define the server's role first. Decide exactly what services it needs to run, then remove everything else rather than just disabling it. A disabled service can be re-enabled by an attacker with the right access; a removed one can't.9
  2. Lock authentication down with MFA. CISA calls multifactor authentication "the most important step an organization can make" against account compromise, and recommends phishing-resistant methods like hardware security keys over SMS or email codes, especially for admin accounts and remote access.10
  3. Enforce account lockout and logging. Lock accounts after repeated failed logins and log every access attempt, so intrusion attempts show up before they succeed, not after.9
  4. Patch on a fixed cadence. Treat patching as a schedule, not a someday task.
  5. Back up with the 3-2-1 rule and actually test restores. Keep three copies of your data, on two different media, with one copy offsite or offline, and test the restore process regularly. Untested backups tend to fail exactly when you need them most.

If this sounds like more operational weight than your team wants to carry alone, it's worth reading up on the turn-key platforms that have made self-hosting far less painful than it used to be. The hard infrastructure part has largely been solved for teams willing to look.

Step 3: Isolate and monitor your CI/CD and self-hosted runners

If you keep any GitHub Actions runners, treat them as a security boundary, not a convenience feature.

Figure 5
The AI Governance Gap
63%No policy or still building one
No policy or still building one63%
Has an AI governance policy37%
Source: IBM Newsroom
  • Use ephemeral runners. Spin one up per job, then destroy it. Persistent runners accumulate risk with every workflow they run.7
  • Never attach self-hosted runners to public repositories. This is GitHub's own explicit recommendation, and the Shai-Hulud campaign exploited exactly this gap.7
  • Restrict runner groups by repository. Don't let one compromised workflow reach every repo in the org.7
  • Minimize secrets on runner machines. A runner with no credentials to steal isn't worth attacking.7
  • Restrict runner network access. Malware that hides inside trusted github.com traffic is much easier to catch if the runner has no legitimate reason to talk to anywhere else.

Teams building or running their own AI coding agents should apply the same logic to agent infrastructure. Self-hosted agent stacks carry the same sandboxing and credential-isolation requirements as any other automated pipeline touching production code.

Step 4: Build an access and identity model that survives a vendor's bad day

Owning your code means nothing if you don't own the accounts, DNS, and credentials wrapped around it. Apply the same least-privilege and role-based access principles that mature security frameworks already require: nobody gets more access than their role needs, every privileged action gets logged, and every account has an owner who can be held accountable for it.

Figure 6
What Shadow AI Costs When It Breaches
$670,000
Extra breach cost for organizations with high shadow AI use
$4.4M
Global average cost of a data breach in 2025
97%
AI-breached organizations lacking proper AI access controls
Source: IBM Newsroom

This is also where the platform-risk conversation turns into a legal one. Businesses that build on someone else's API or account structure are, in effect, one policy change away from losing everything they depend on. That risk has played out publicly when platforms have moved to cut off access with a single letter from a lawyer. Internal tools deserve the same scrutiny you'd apply to any external dependency, because from a risk standpoint, they are one.

Step 5: Plan for shadow AI and shadow tools before they plan for you

Self-hosting discipline only works if it covers every tool that gets built, not just the ones IT signed off on. Right now, most organizations aren't close. Globally, 75% of knowledge workers already use AI at work, and 78% of them bring their own AI tools rather than using anything sanctioned by their employer, a pattern even more common at small and midsize companies.11

Figure 7
Shadow AI Adoption at Work
75%
Knowledge workers who already use AI at work
78%
Of those, who bring their own AI tools (BYOAI) instead of sanctioned ones

The governance gap behind that number is stark. IBM's 2025 Cost of a Data Breach Report found 63% of breached organizations either have no AI governance policy or are still building one, and even among those with a policy, only a minority audit regularly for unsanctioned AI use.12 That gap has a price tag: organizations with high shadow AI usage absorbed an average of $670,000 in additional breach costs compared to those with low or no shadow AI, and of the organizations that reported AI-related breaches, 97% lacked proper AI access controls.12 The global average cost of a data breach in 2025 was $4.44 million, the first year-over-year decline in five years, but shadow AI is one of the few categories still pushing costs up rather than down.12

Every internal tool an employee spins up with an AI agent or no-code builder needs the same four-layer ownership check as anything your engineering team ships deliberately. Some teams are now managing this with dedicated platforms built specifically for self-hosted internal tooling, like Remy, which folds ownership and access control into the build step rather than bolting it on afterward.

A pre-flight checklist before you flip the switch on any internal tool

Before any internal tool goes live, confirm:

Figure 8
Self-Hosted Git Platforms: Who Really Controls the Forge
Self-Hosted Git Platforms: Who Really Controls the Forge
Runs on tiny hardware (e.g. Raspberry Pi)Governance modelDemocratic decision-making
RecommendedForgejoTeams wanting community governance and minimal hardwareYesNon-profit (Codeberg e.V.)Yes
GitLab Self-ManagedTeams wanting a fuller self-hosted DevSecOps suiteNoFor-profitNo
GitHubTeams comfortable staying on the incumbent SaaS platformNoFor-profit (Microsoft)No
GitHub is included for comparison as the incumbent SaaS platform; it is not self-hostable, which is why it is included as a baseline rather than an option teams are choosing between.
Source: Forgejo
  1. You control all four ownership layers: source, docs, infrastructure, and deployment access, not just the code itself.1
  2. The server has been hardened per NIST guidance, with unnecessary services removed, MFA enforced on admin access, and logging turned on.910
  3. Backups follow the 3-2-1 rule and have been restore-tested, not just scheduled.
  4. CI/CD runners are ephemeral, isolated from public repos, and minimally credentialed.7
  5. Access follows least privilege, with role-based permissions and an audit log that names a human for every privileged action.
  6. The tool is on your organization's inventory, whether it was built by engineering, IT, or an employee with an AI coding agent.11

If any box is unchecked, the tool isn't ready. Not because it will definitely fail, but because you don't yet know what happens when it does.

The bottom line: decoupling is a governance decision, not just an infrastructure one

Self-hosting an internal tool is a technical project. Owning it is a governance commitment. The servers, the runners, the backups, all of that is solvable with a checklist. What actually determines whether your internal software is an asset or a liability is whether someone in your organization is accountable for every layer of it, all the time, including the tools employees quietly built themselves. Outages end. Suspensions eventually get resolved, or they don't. Either way, the businesses that keep shipping through both are the ones that never handed over the keys in the first place.

Frequently asked
Questions readers ask
What does it mean to self-host an internal tool safely?

It means controlling all four layers of ownership, source code, documentation, infrastructure, and deployment access, and then applying standard server hardening (NIST SP 800-123), MFA, tested backups, and isolated CI/CD runners so the tool's availability and security never depend on a third-party platform's decisions.1910

Is it safe to keep using GitHub Actions self-hosted runners?

Only with strict isolation. GitHub's own hardening docs warn that self-hosted runners can be persistently compromised by untrusted workflow code, and the Shai-Hulud worm exploited exactly this in late 2025 to install backdoors that blend into trusted GitHub traffic. Use ephemeral runners, never attach them to public repos, restrict them by repository group, and minimize the secrets stored on them.7

How often does GitHub actually go down?

More often than most teams assume. Independent trackers counted 119 incidents in 2024 alone, and 257 outages between May 2025 and April 2026, including 48 major outages totaling over 112 hours of downtime, with GitHub Actions the most frequently affected service both times.34

What happens if a GitHub account gets suspended?

Access to repositories, organizations, and automation can be frozen with no guaranteed timeline for restoration. Documented cases show recovery taking weeks to months through an opaque appeals process, and this exposure exists even for teams running self-managed runners, since GitHub still centrally controls authentication.56

Why does shadow AI matter for internal tool ownership?

Because employees are already building tools outside IT's visibility. 78% of AI users at work bring their own AI tools rather than sanctioned ones, and organizations with high shadow AI usage absorb roughly $670,000 more in breach costs on average, largely because those tools lack the same access controls applied to sanctioned software.1211

Sources
  1. 1Vendor Lock-In in Software Development: Do You Own What You Paid For?Nexa Devs
  2. 2The August 17 outage, and the work aheadGitHub Blog
  3. 3How Often Has GitHub Gone Down? A Data-Backed Look at 2024 OutagesIsDown
  4. 4GitHub Outages 2025 - 2026: Reliability Analysis and Outage HistoryIncidentHub Blog
  5. 5GitHub outage incorrectly reports accounts being suspendedTechzine
  6. 6My GitHub account was suspended by abuse detection and reinstated after nearly 8 weeksGitHub Community Discussions
  7. 7How threat actors are using self-hosted GitHub Actions runners as backdoorsSysdig
  8. 8Comparison with other ForgesForgejo
  9. 9NIST server hardening: Guide for NIST 800-123CalCom Software
  10. 10Require Multifactor AuthenticationCISA
  11. 112024 Work Trend Index Annual Report (Executive Summary)Microsoft / LinkedIn
  12. 12IBM Report: 13% Of Organizations Reported Breaches Of AI Models Or Applications, 97% Of Which Reported Lacking Proper AI Access ControlsIBM Newsroom
Portrait of Marcus Bello
Marcus Bello
Build vs Buy
Marcus writes about when teams should build their own tools instead of buying.
More from Marcus Bello
© 2026 The Official Remy BlogDrafted by AI authors, reviewed by human editors.