Artamananda.

How I Run My Own Server Without the Cloud or a Static Public IP

5 min read

Deploying a server used to be a straightforward decision for me: pick a hosting provider like Vercel, Fly.io, or a VPS service, and get going. But as I dove deeper into my projects, I realized there were limitations and costs that made me rethink this approach. In this post, I want to share how I ended up running my own server without relying on cloud providers or a static public IP address.


Starting Point: The Cloud and VPS Route

At first, my go-to option was to deploy on popular hosting services:

  • Vercel for serverless deployments
  • Fly.io for globally distributed apps
  • Traditional VPS for full control

These options offered ease of use and decent performance, but each came with trade-offs:

  • Cost: Even the cheapest VPS or cloud hosting incurs recurring monthly fees. For hobby projects or long-term personal use, these costs add up.
  • Resource limitations: On free or low-tier plans, CPU, RAM, and disk space can be very limited. Sometimes you can’t install certain software or run persistent background processes.
  • Vendor lock-in: Deploying on cloud services means you’re dependent on their infrastructure and policies.

While a VPS provides the most control among them, it usually costs significantly more, especially if you want a reliable, always-on server.


The Idea: Build My Own Server at Home

To avoid monthly bills and resource limits, I thought: why not build my own server? Setting up a dedicated machine at home that runs 24/7 seemed like the ideal solution.

Challenges Faced

  • Hardware cost: Buying a proper server or a decent PC to act as a server is expensive.
  • Power consumption: A server running non-stop means higher electricity bills.
  • Space and noise: Servers can be bulky and noisy.
  • Network constraints: Home ISPs usually don’t provide a static public IP, making it difficult to expose services to the internet.

Despite the challenges, I was determined to find a low-cost and low-power alternative.


The Breakthrough: Using an Android TV Box as a Server

One day, I had an idea: repurpose an Android TV box — an affordable device based on ARM hardware — into a full-fledged Linux server.

Why an Android TV Box?

  • Low cost: These devices are relatively cheap compared to buying a dedicated server.
  • Low power consumption: Designed to be energy-efficient.
  • ARM architecture: Popular Linux distributions support ARM, which means I can install lightweight Linux distros.
  • Compact size: Easy to tuck away somewhere.

Installing Linux (Armbian) on the Android TV Box

The next step was to install a proper Linux OS on the device. I chose Armbian, a Debian-based OS optimized for ARM devices.

What is Armbian?

Armbian is a lightweight Linux distribution tailored for ARM single-board computers. It provides a familiar Debian environment with good hardware support and low overhead.

Process Overview

  1. Root and unlock the Android TV box: This step allows me to modify the device at a low level.
  2. Flash Armbian onto the device: Using an SD card or USB drive, I replaced the original Android OS.
  3. Configure Linux environment: Set up SSH, install necessary packages, and configure services.
  4. Run the device as a server: I could now run web servers, databases, and other services just like a VPS.

This setup gave me a self-hosted, always-on server with virtually zero recurring hosting costs.


The Biggest Hurdle: No Static Public IP

After successfully turning the Android TV box into a Linux server, I ran into my biggest challenge: exposing my server to the internet.

Most home ISPs provide dynamic IP addresses and often no public static IP, meaning:

  • The IP address changes regularly, making it hard to point a domain name consistently.
  • Sometimes, the IP is behind carrier-grade NAT, preventing incoming connections.
  • Port forwarding may be blocked or limited.

Without a static public IP, I couldn’t directly expose my web or API server to the world.


The Solution: Cloudflare Zero Trust Tunnel

Enter Cloudflare Zero Trust, a service that can securely tunnel your localhost or internal server through Cloudflare’s network, effectively exposing it under your own domain without needing a public IP.

How It Works

  1. Install the Cloudflare Zero Trust client on the mini server (my Android box running Armbian).
  2. Authenticate and connect the client to my Cloudflare account.
  3. Configure a tunnel that routes traffic from a Cloudflare-managed domain to my local server.
  4. Use Cloudflare’s DNS to point my domain/subdomain to the tunnel.

Benefits

  • No need for a public static IP.
  • Traffic goes through Cloudflare’s secure network.
  • Easy to configure and manage.
  • Supports HTTP(s) and TCP tunneling.
  • Free or low-cost depending on usage.

The Result: A Fully Functional Server Without Traditional Hosting

Thanks to this setup:

  • My self-hosted web and API services are accessible worldwide.
  • I avoid monthly hosting fees.
  • I use very little power with the ARM-based Android TV box.
  • I maintain full control over my environment.
  • I bypass the limitations of traditional home internet setups.

Final Thoughts

Building my own server using an Android TV box flashed with Armbian and exposed to the internet via Cloudflare Zero Trust has been a rewarding journey. It’s a creative way to save costs and overcome ISP restrictions while learning more about Linux, networking, and security.

If you’re interested in DIY server projects but discouraged by hosting costs or network limitations, this approach might inspire you to try something similar.


Summary

Aspect Traditional Hosting DIY Android TV Box Server
Cost Monthly fees (varies) One-time hardware + minimal electricity
Control Limited by provider Full root access and customization
Network Requirements Public static IP recommended Uses Cloudflare Zero Trust to bypass NAT
Power Consumption Varies (cloud-managed) Low power ARM device
Maintenance Complexity Low Moderate (requires Linux knowledge)

If you’d like, I can also help with a step-by-step guide on flashing Armbian or setting up Cloudflare tunnels!


Thanks for reading! Feel free to ask any questions or share your experiences with DIY servers.


Artamananda.

I’m Artamananda, a software developer based in South Sumatera, Indonesia. I focused on building modern web and mobile applications. I use TypeScript, React, Svelte, and Next.js for high-performance frontends, and React Native for seamless cross-platform mobile apps. On the backend, I work with NestJS and GoFiber (Golang) to create scalable and efficient APIs. I’m passionate about exploring new technologies, optimizing performance, and building innovative end-to-end solutions.