<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/my-server-is-a-phone-now-qtzo1fdtc" -->

---
title: my server is a phone now | daily.dev
description: A developer replaced a Hetzner VPS with a rooted CMF Phone 1 running personal infrastructure. The setup keeps stock Android for hardware support while using...
canonical: https://daily.dev/posts/my-server-is-a-phone-now-qtzo1fdtc
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: my server is a phone now | daily.dev
og:description: A developer replaced a Hetzner VPS with a rooted CMF Phone 1 running personal infrastructure. The setup keeps stock Android for hardware support while using...
og:url: https://daily.dev/posts/my-server-is-a-phone-now-qtzo1fdtc
og:image: https://api.daily.dev/og/posts/QtZo1FdTc.png
og:image:alt: my server is a phone now
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.

# my server is a phone now

**[Hacker News](https://daily.dev/sources/hn)** · 13 min read · 0 upvotes · 0 comments

## Summary

A developer replaced a Hetzner VPS with a rooted CMF Phone 1 running personal infrastructure. The setup keeps stock Android for hardware support while using Termux as the host environment, runit for service supervision, and chroot (not proot) for running Linux ARM64 OCI images. Cloudflare Tunnel handles public HTTP ingress without exposing router ports, Tailscale provides private network access, and Ansible manages the entire host state from a Git repository. The phone runs a remote Chromium browser (Surf), a personal finance tracker, a screen sharing service, and a Vue-based observability dashboard — surviving reboots and network changes automatically.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://seg6.space/posts/phone-server>

## Questions this post answers

### Why is PRoot too slow for running a Chrome-based workload on Android compared to chroot?

PRoot intercepts filesystem and process operations in userspace, so every syscall a Chrome-based workload makes (starting processes, opening libraries, walking paths, reading profiles) crosses a userspace translation layer, causing significant overhead. Rooting the phone to use a real chroot instead lets the workload reach the Android kernel through native syscalls, producing a dramatic, non-subtle performance improvement for latency-sensitive work.

_Anyone benchmarking container compatibility layers versus chroot performance can track these trade-offs on daily.dev._

### How can I expose self-hosted services on a home network without opening router ports?

A Cloudflare Tunnel can be used: the home server makes one outbound connection via cloudflared, Cloudflare routes each hostname through that tunnel, and a local reverse proxy like Caddy forwards requests to loopback services. Since only an outbound connection is required, moving the machine to a different network (even a different ISP) does not break the tunnel or require any router configuration.

_Developers designing ingress for home-hosted services can follow patterns like this one on daily.dev._

### How do you keep a low-latency, TLS-pinned connection working through a Cloudflare Tunnel when roaming networks?

Wrap the entire TLS stream inside an ordinary WebSocket so Cloudflare only sees and forwards the WebSocket while the actual authenticated connection stays encrypted end to end inside it, since a normal Cloudflare Tunnel would otherwise terminate TLS at Cloudflare and break a pinned connection. This adds roughly one extra network round trip of latency but keeps the tunnel outbound-only.

_Engineers balancing tunnel ingress with pinned TLS connections can dig into approaches like this on daily.dev._

## Community take

How the wider developer community reacted, aggregated from 2 discussions and 99 comments across hackernews, lobsters (as of 2026-09-14).

**TL;DR:** Commenters find the phone-as-server project clever and fun, but the discussion quickly branches into battery fire hazards, alternative hardware choices, and a surprisingly deep tangent on QR code restaurant menus — with genuine enthusiasm for the hack tempered by practical concerns about longevity and safety.

**Sentiment:** 45% positive · 35% mixed · 20% skeptical

**The case for**

- Phones offer a built-in UPS (battery backup) that dedicated servers lack without extra hardware.
- Old phones are abundant spare hardware that most people already own, making this a low-cost repurposing option.
- The ARM64 hardware in modern phones is genuinely capable for personal infrastructure workloads.
- Using Cloudflare Tunnel and Tailscale elegantly avoids the need to expose router ports.

**The pushback**

- Keeping a phone plugged in 24/7 risks battery degradation and is flagged by multiple commenters as a potential fire hazard.
- Not all phones support bypass/direct charging, meaning the battery may cycle continuously under load.
- Locked bootloaders on many Android phones make rooting (required for full performance and port binding) impossible without exploits.
- Alternatives like refurbished SFF PCs or fanless mini-PCs offer more storage, ECC RAM, and better endurance for similar or lower cost.
- Flash storage (eMMC) longevity under continuous server workloads is a concern compared to proper SSDs.

**By community**

- hackernews (mixed): Broadly enthusiastic about the creativity of the project, but the thread is dominated by battery safety debates, title wordplay, a long QR-menu tangent, and comparisons to cheaper/more practical alternatives like refurbished SFF PCs.
- lobsters (positive): Brief but genuinely curious engagement, raising practical questions about hardware acceleration in Termux, Wi-Fi power management, and battery fire risk — mirroring HN's safety concerns but without the skepticism.

**Hottest debate:** Whether keeping a phone plugged in continuously is a meaningful fire hazard or an overstated concern, with disagreement on bypass charging, battery chemistry degradation rates, and mitigation strategies.

**Open questions**

- Does Termux software have access to the phone's hardware acceleration?
- How does Android handle Wi-Fi power management in a always-on server role, and does it drop connections?
- What is the realistic lifespan of the phone's eMMC storage under continuous server write loads?
- Is there a reliable way to run the phone without the battery (or with a capped charge) to eliminate the fire/degradation risk?

**Highlights**

> Side comment about the difference between “My server is a phone now” and “My phone is a server now.” In linguistics, the terms “theme” and “rheme” refer to the status of information in a sentence [1]. The theme of a sentence is something that is known or can be assumed from the context (that is, old information), while the rheme is information that is newly introduced in the sentence, often as a comment on the theme. The tendency in many (most? all?) languages is for the theme to precede the rheme in connected discourse. Without context, a reader is therefore likely to assume from “my X is a Y now” that X is something the writer had previously and that Y is something new. Because most people have a phone but few have their own servers, I was initially confused by the title “My server is a phone now.” I had to read the article to realize that the word order is in fact appropriate: for the writer, the server is old information (something he has had for a while) while the phone (as a server, at least) is new. In English, theme and rheme might be inferred not only from the position in a sentence but also from how a noun is marked. Possessives like “my” are generally used before nouns referring to things that are previously known or assumed; the definite article “the” is similar. In contrast, the indefinite article “a” (or “an”) usually marks information being newly introduced, so it is more common with rhemes. I worked as a Japanese-to-English translator for many years. Because the grammatical structure of Japanese sentences is very different from that of English, sentence-by-sentence translation often ends up with paragraphs where the information flow is awkward and unnatural. I gradually learned that I could produce smoother translations by reorganizing my English sentences into an old-to-new information sequence. [1] https://en.wikipedia.org/wiki/Topic_and_comment
> — [tkgally on hackernews · 1 comments](https://news.ycombinator.com/item?id=49229026)

> FYI you can't do this on phones with locked bootloaders as well as the author did. you could use termux but if termux runs on anything lower than android 8 termux will be significantly limited and you will need postmarketos and maybe fix support for it. with termux, at best things will be slow without root, as the author mentioned rooting resulted in a speed increase. without root, you also can't bind to ports on any android phone, and rooting often requires an unlocked bootloader and not all android phones support bootloader unlocking. so you can't run a web server unless you run it through a proxy server which the author did, or containers at native speed on postmarket os because you will not be able to flash the phone with postmarket os nor root the phone for the speed increase or get missing kernel syscalls depending on your kernel version i assume. so containers may or may not work, and without root chances are it will be slow specially if you are forced to emulate it as x86 because it turns out you have missing  syscalls. not all android phones can have their bootloaders unlocked unless you find an exploit. https://github.com/zenfyrdev/bootloader-unlock-wall-of-shame
> — [alightsoul on hackernews · 2 comments](https://news.ycombinator.com/item?id=49227388)

> Cool project, but slightly better: before the rampocalypse I bought one of those aliexpress fanless linux boxes designed to be a router. I put a 32GB stick of ram in it and a 250GB SSD. I run opnsense in a virtual machine to serve as my home router and then I put the rest of my home server stuff on other virtual machines on that same box. It's still fanless/silent. It takes up zero additional space because it is my router. It would already be running 24/7 because it is my router so the additional energy usage of an additional VM is likely minuscule. The latency to my router is basically zero since it is on the same physical box. And it is using a real SSD so it has faster storage with almost certainly better endurance.
> — [craftkiller on hackernews · 2 comments](https://news.ycombinator.com/item?id=49228080)

> I still think the best bang for your buck is an old desktop PC. Something like an i5 with 8GB RAM and an SSD will suit 99% of home server uses with capacity to spare. Even in this environment of inflated hardware prices, you can get one for a reasonable price. Although I do see the appeal in getting unconventional hardware to do what you want, just for the love of the game.
> — [SturgeonsLaw on hackernews · 5 comments](https://news.ycombinator.com/item?id=49227426)

> AFAIK this is rarity in smartphones and most are charged through battery, which is why those few which have it advertise their direct/bypass charging feature
> — [Markoff on hackernews](https://news.ycombinator.com/item?id=49228829)

**Source threads**

- [hackernews](https://news.ycombinator.com/item?id=49226636) · 254 points · 98 comments
- [lobsters](https://lobste.rs/s/ykuqrc/my_server_is_phone_now) · 3 points · 1 comments

## Similar posts on daily.dev

- [My old Android phone became a Linux server, and it handles more than I expected](https://daily.dev/posts/my-old-android-phone-became-a-linux-server-and-it-handles-more-than-i-expected-iv7qpxlnk) · XDA Developers · 2 upvotes · 0 comments
- [I turned my old phone into a device that does something my $300 smart home gadgets can't](https://daily.dev/posts/i-turned-my-old-phone-into-a-device-that-does-something-my-300-smart-home-gadgets-can-t-tughk4r3c) · XDA Developers · 0 upvotes · 0 comments
- [I turned my old phone into a portable Docker server, and now I carry my self-hosted apps everywhere I go](https://daily.dev/posts/i-turned-my-old-phone-into-a-portable-docker-server-and-now-i-carry-my-self-hosted-apps-everywhere--ngkdojtrj) · XDA Developers · 4 upvotes · 0 comments
- [Tailscale’d Into Homelabbing](https://daily.dev/posts/tailscale-d-into-homelabbing-vyztndhi7) · Lobsters · 6 upvotes · 0 comments
- [Hardened Mobile Dev: A Termux \+ Docker Guide for GrapheneOS](https://daily.dev/posts/hardened-mobile-dev-a-termux-docker-guide-for-grapheneos-fp0tsuscz) · SitePoint · 0 upvotes · 0 comments

---

Tags: [#android](https://daily.dev/tags/android), [#iac](https://daily.dev/tags/iac), [#self-hosting](https://daily.dev/tags/self-hosting), [#ansible](https://daily.dev/tags/ansible)

[View this post on daily.dev](https://daily.dev/posts/my-server-is-a-phone-now-qtzo1fdtc)

```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":"my server is a phone now","url":"https://daily.dev/posts/my-server-is-a-phone-now-qtzo1fdtc","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/my-server-is-a-phone-now-qtzo1fdtc"},"datePublished":"2026-08-09T00:30:22.702Z","dateModified":"2026-09-14T06:28:55.152Z","description":"A developer replaced a Hetzner VPS with a rooted CMF Phone 1 running personal infrastructure. The setup keeps stock Android for hardware support while using...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/adab3927dd5a5e22c18a32ea7adbf767?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/adab3927dd5a5e22c18a32ea7adbf767?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Hacker News","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":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/my-server-is-a-phone-now-qtzo1fdtc","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"android,iac,self-hosting,ansible","timeRequired":"PT13M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"my server is a phone now"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/my-server-is-a-phone-now-qtzo1fdtc#faq","mainEntity":[{"@type":"Question","name":"Why is PRoot too slow for running a Chrome-based workload on Android compared to chroot?","acceptedAnswer":{"@type":"Answer","text":"PRoot intercepts filesystem and process operations in userspace, so every syscall a Chrome-based workload makes (starting processes, opening libraries, walking paths, reading profiles) crosses a userspace translation layer, causing significant overhead. Rooting the phone to use a real chroot instead lets the workload reach the Android kernel through native syscalls, producing a dramatic, non-subtle performance improvement for latency-sensitive work. Anyone benchmarking container compatibility layers versus chroot performance can track these trade-offs on daily.dev."}},{"@type":"Question","name":"How can I expose self-hosted services on a home network without opening router ports?","acceptedAnswer":{"@type":"Answer","text":"A Cloudflare Tunnel can be used: the home server makes one outbound connection via cloudflared, Cloudflare routes each hostname through that tunnel, and a local reverse proxy like Caddy forwards requests to loopback services. Since only an outbound connection is required, moving the machine to a different network (even a different ISP) does not break the tunnel or require any router configuration. Developers designing ingress for home-hosted services can follow patterns like this one on daily.dev."}},{"@type":"Question","name":"How do you keep a low-latency, TLS-pinned connection working through a Cloudflare Tunnel when roaming networks?","acceptedAnswer":{"@type":"Answer","text":"Wrap the entire TLS stream inside an ordinary WebSocket so Cloudflare only sees and forwards the WebSocket while the actual authenticated connection stays encrypted end to end inside it, since a normal Cloudflare Tunnel would otherwise terminate TLS at Cloudflare and break a pinned connection. This adds roughly one extra network round trip of latency but keeps the tunnel outbound-only. Engineers balancing tunnel ingress with pinned TLS connections can dig into approaches like this on daily.dev."}}]}
```

