<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/self-hosted-ota-for-an-hour-a-month-1p5i8qthk" -->

---
title: Self-hosted OTA for an hour a month | daily.dev
description: Codemagic Patch is presented as a low-maintenance, self-hosted alternative to hosted OTA services (like Expo Updates or CodePush forks) for React Native apps....
canonical: https://daily.dev/posts/self-hosted-ota-for-an-hour-a-month-1p5i8qthk
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Self-hosted OTA for an hour a month | daily.dev
og:description: Codemagic Patch is presented as a low-maintenance, self-hosted alternative to hosted OTA services (like Expo Updates or CodePush forks) for React Native apps....
og:url: https://daily.dev/posts/self-hosted-ota-for-an-hour-a-month-1p5i8qthk
og:image: https://api.daily.dev/og/posts/1p5I8QThk.png
og:image:alt: Self-hosted OTA for an hour a month
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Self-hosted OTA for an hour a month

**[codemagic](https://daily.dev/sources/codemagic)** · 5 min read · 0 upvotes · 0 comments

## Summary

Codemagic Patch is presented as a low-maintenance, self-hosted alternative to hosted OTA services (like Expo Updates or CodePush forks) for React Native apps. The setup runs via Docker Compose on a single Linux host with an API server, Postgres, MinIO, and Caddy, taking about an hour to install. Ongoing maintenance—disk checks, backups, upgrades, and OS updates—is estimated at under an hour per month regardless of user count, because release manifests are served from a CDN rather than hit directly by device requests, avoiding the autoscaling and caching headaches typical of self-hosted update servers.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blog.codemagic.io/self-hosted-ota-for-an-hour-a-month>

## Questions this post answers

### How much ongoing maintenance does self-hosting a React Native OTA update server require?

Around an hour a month, covering a disk headroom check, OS updates when prompted, an off-box backup run with backup.sh, and an upgrade.sh run when a new release ships. First-time setup separately takes about an hour, including provisioning a Linux VM, DNS records, a GitHub OAuth app, and Cloudflare cache rules for the storage domain.

_Weighing self-hosted versus hosted OTA update infrastructure is easier with dev workflow context on daily.dev._

### How does Codemagic Patch avoid scaling problems when checking for app update versions at high traffic?

Instead of every device hitting the server and database to ask for the latest bundle version, Patch generates a small manifest.json per release describing which bundle each binary version should use, and stores it on a CDN. Devices read manifests directly from the CDN, so the origin server never absorbs thousands of requests per second, avoiding the Redis caching and autoscaling work typically needed with CodePush-style self-hosted setups.

_Engineers comparing OTA architectures for mobile apps can follow scaling design discussions on daily.dev._

## Similar posts on daily.dev

- [Announcing Codemagic Patch: an open-source CodePush rebuild for React Native](https://daily.dev/posts/announcing-codemagic-patch-an-open-source-codepush-rebuild-for-react-native-lxos7ric3) · codemagic · 0 upvotes · 0 comments
- [How to Save $3,774 a Month with Codemagic Patch](https://daily.dev/posts/how-to-save-3-774-a-month-with-codemagic-patch-c4njpae9v) · ITNEXT · 0 upvotes · 0 comments
- [React Native Over-the-Air Updates in 2026: Skip the App Store Wait with Codemagic CodePush](https://daily.dev/posts/react-native-over-the-air-updates-in-2026-skip-the-app-store-wait-with-codemagic-codepush-2jba3bybj) · codemagic · 1 upvotes · 0 comments

---

Tags: [#react-native](https://daily.dev/tags/react-native), [#self-hosting](https://daily.dev/tags/self-hosting), [#docker-compose](https://daily.dev/tags/docker-compose)

[View this post on daily.dev](https://daily.dev/posts/self-hosted-ota-for-an-hour-a-month-1p5i8qthk)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Self-hosted OTA for an hour a month","url":"https://daily.dev/posts/self-hosted-ota-for-an-hour-a-month-1p5i8qthk","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/self-hosted-ota-for-an-hour-a-month-1p5i8qthk"},"datePublished":"2026-09-01T14:19:58.998Z","dateModified":"2026-09-01T14:20:22.308Z","description":"Codemagic Patch is presented as a low-maintenance, self-hosted alternative to hosted OTA services (like Expo Updates or CodePush forks) for React Native apps....","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d4f1e256ee856032dca09bcc95639e28?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d4f1e256ee856032dca09bcc95639e28?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"codemagic","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"codemagic","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/a340f6894573448c86d1040a4687242e","url":"https://daily.dev/sources/codemagic"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/self-hosted-ota-for-an-hour-a-month-1p5i8qthk","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"react-native,self-hosting,docker-compose","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"codemagic","item":"https://daily.dev/sources/codemagic"},{"@type":"ListItem","position":3,"name":"Self-hosted OTA for an hour a month"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/self-hosted-ota-for-an-hour-a-month-1p5i8qthk#faq","mainEntity":[{"@type":"Question","name":"How much ongoing maintenance does self-hosting a React Native OTA update server require?","acceptedAnswer":{"@type":"Answer","text":"Around an hour a month, covering a disk headroom check, OS updates when prompted, an off-box backup run with backup.sh, and an upgrade.sh run when a new release ships. First-time setup separately takes about an hour, including provisioning a Linux VM, DNS records, a GitHub OAuth app, and Cloudflare cache rules for the storage domain. Weighing self-hosted versus hosted OTA update infrastructure is easier with dev workflow context on daily.dev."}},{"@type":"Question","name":"How does Codemagic Patch avoid scaling problems when checking for app update versions at high traffic?","acceptedAnswer":{"@type":"Answer","text":"Instead of every device hitting the server and database to ask for the latest bundle version, Patch generates a small manifest.json per release describing which bundle each binary version should use, and stores it on a CDN. Devices read manifests directly from the CDN, so the origin server never absorbs thousands of requests per second, avoiding the Redis caching and autoscaling work typically needed with CodePush-style self-hosted setups. Engineers comparing OTA architectures for mobile apps can follow scaling design discussions on daily.dev."}}]}
```

