DEV Community

Cover image for Your Software, Your Cloud: Building Your Own Vercel Ain't That Hard!
Samy Fodil
Samy Fodil

Posted on

Your Software, Your Cloud: Building Your Own Vercel Ain't That Hard!

Why pay Vercel when you can build better? This is a guide to creating your own distributed cloud that rivals the big players—for a fraction of the cost.

At Taubyte, we’ve spent the last few of years building an open-source cloud platform. This guide is here to help you deploy it manually, step-by-step. It's a solid walkthrough to get a working, self-hosted Tau setup running across multiple continents.

You'll build a globally distributed developer cloud with DNS-based load balancing, service discovery, and container orchestration—all with transparency and control, and with no vendor lock-in.

And by the way, if you'd rather watch a video:

Let’s dive in.


What You're Building (And Why It's Awesome)

We're not just spinning up a few servers here. You're building a genuinely distributed cloud platform. This platform will feature:

  • Global Edge Presence: Deploy across multiple continents for maximum performance and redundancy.
  • Zero-Downtime Deployments: Built-in redundancy means your applications stay online.
  • DNS-Based Load Balancing: No expensive, dedicated load balancers needed.
  • Automatic Service Discovery: Your services find each other like magic.

Think of it as your personal Vercel, but one that you actually understand and control completely.

Your Own Cloud


Prerequisites

  1. A Fully Qualified Domain Name (FQDN): This guide uses k8s.cyou as an example.
  2. Advanced DNS Management: Your DNS provider must support custom A and NS records.

Infrastructure Plan

We will deploy across three continents for performance and redundancy:

  • host-001-spain
  • host-002-uae
  • host-003-algeria

Pro tip: Choose your hosting providers strategically. I recommend different providers in each region to avoid correlated failures.


Host Preparation (Repeat on all nodes)

1. Firewall Configuration

First, ensure SSH access is not blocked.

sudo ufw allow ssh
Enter fullscreen mode Exit fullscreen mode

Then, open the necessary ports for Taubyte services.

  • Peer-to-Peer Communication:

    sudo ufw allow 4242,4247,4252/tcp
    
  • Web & DNS Traffic:

    sudo ufw allow 80,443/tcp
    sudo ufw allow 53,953/tcp
    sudo ufw allow 53,953/udp
    

    Port 53 handles public DNS queries, while 953 is used for secure DNS control plane operations.

  • Enable Firewall:

    sudo ufw enable
    sudo ufw status
    

2. Install Tools & Free DNS Port

sudo apt update
sudo apt install -y curl nano
Enter fullscreen mode Exit fullscreen mode

Configure systemd-resolved to use a public DNS resolver and free up port 53 for Taubyte.

sudo nano /etc/systemd/resolved.conf
Enter fullscreen mode Exit fullscreen mode

Set the following values:

DNS=1.1.1.1
DNSStubListener=no
Enter fullscreen mode Exit fullscreen mode

Why these specific changes matter:

  • Cloudflare DNS (1.1.1.1): A fast, privacy-focused public DNS resolver with excellent uptime.
  • DNSStubListener=no: Prevents conflicts with Seer service, which needs direct control over DNS resolution.

Apply the changes:

sudo systemctl restart systemd-resolved.service
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Enter fullscreen mode Exit fullscreen mode

3. Install Docker

Docker is used as a containerization engine by tau.

curl -fsSL https://get.docker.com | sh
docker --version
Enter fullscreen mode Exit fullscreen mode

4. Install Tau

Tau is the core of Taubyte's Developer Cloud Platform Solution.

curl https://get.tau.link/tau | sh
Enter fullscreen mode Exit fullscreen mode

Primary Node Configuration (Run on node 1 only)

1. Generate Master Configuration

Get your node's public IP address.

curl ifconfig.me -4
Enter fullscreen mode Exit fullscreen mode

Generate the configuration that defines your cloud. This node will enable all core services and initiate Docker's clustering mode.

sudo tau config generate \
  -n k8s.cyou \
  -s compute \
  --services all \
  --ip YOUR_PUBLIC_IP \
  --dv \
  --swarm
Enter fullscreen mode Exit fullscreen mode

2. Understanding Taubyte's Service Architecture

Your cloud runs on these core services, each with a specific purpose:

Service Role Why You Need It
Auth Authentication & Authorization Secures access to your cloud APIs and resources
Patrick CI/CD Orchestration Manages code builds and deployments automatically
Monkey Job Execution Engine Runs the actual work (builds, functions, etc.)
TNS Taubyte Naming Service Service registry and discovery system
Hoarder Object Storage Handles file storage, backups, and static assets
Seer DNS Load Balancing Intelligent traffic distribution via DNS
Substrate Event Processing The compute engine for serverless functions

3. Fine-Tuning Your Configuration (Optional)

You can customize your setup by editing the generated configuration:

sudo nano /tb/config/compute.yaml
Enter fullscreen mode Exit fullscreen mode

4. Validate and Launch

Always validate before proceeding:

sudo tau conf validate -s compute
Enter fullscreen mode Exit fullscreen mode

A successful validation will output a unique cryptographic ID for your node. Now, launch the services manually to test.

sudo tau start -s compute
Enter fullscreen mode Exit fullscreen mode

As the logs scroll by, you are witnessing a distributed system come alive as services start and discover each other.

5. Test Your Cloud Node

Before moving on, verify the node is working. Use a DNS lookup tool to query your node directly.

# dig <domain> @<nameserver>
dig seer.tau.k8s.cyou @YOUR_NODE_IP
Enter fullscreen mode Exit fullscreen mode

If you get your node's IP back in the ANSWER SECTION, your first node is live and responding correctly.


Making it Production-Ready with Systemd

Running manually is great for testing, but production demands reliability. systemd provides:

  • Automatic restarts: Services restart instantly after crashes.
  • Boot-time startup: Your cloud survives server reboots.
  • Centralized logging: Integrated logs via journald for easier debugging.

First, stop the manual process with Ctrl+C. Then, create the service file:

sudo nano /lib/systemd/system/tau@.service
Enter fullscreen mode Exit fullscreen mode

Paste the following configuration:

[Unit]
Description=Tau %I
After=network.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/bin/tau start -s %i
Restart=always
RestartSec=3
LimitNOFILE=16384

[Install]
WantedBy=multi-user.target
Enter fullscreen mode Exit fullscreen mode

Enable and start the service on your primary node.

sudo systemctl enable tau@compute.service
sudo systemctl start tau@compute.service
sudo systemctl status tau@compute.service
Enter fullscreen mode Exit fullscreen mode

Look for "active (running)" to confirm success.


DNS Configuration

Configure your domain's DNS records to delegate traffic to Seer service for load balancing.

At your domain provider, create the following records:

  • A Record (for now, just the first node):

    Type: A
    Name: seer
    Value: YOUR_NODE_1_IP
    
  • NS Record (delegation):

    Type: NS  
    Name: tau
    Value: seer.k8s.cyou.
    

    The trailing dot is required. This delegates the tau subdomain to your platform.

DNS Verification

Test that your cloud is discoverable via public DNS using a tool like dig or an online equivalent.

dig tns.tau.k8s.cyou @8.8.8.8
Enter fullscreen mode Exit fullscreen mode

Success returns your node's IP, proving public DNS is working.


Scaling: Adding More Nodes (Run on nodes 2, 3...)

1. Export & Prepare Configuration

On your primary node, export the shared cluster configuration.

# On Node 1
sudo tau config export
Enter fullscreen mode Exit fullscreen mode

Copy the YAML output. On your second node, paste this into a new file: compute.tmpl.yaml. Then, edit the file and remove the location section.

2. Join the Cluster

Get the multiaddress from your primary node.

# On Node 1
sudo tau config show
Enter fullscreen mode Exit fullscreen mode

Get the public IP of your new node.

# On Node 2
curl ifconfig.me -4
Enter fullscreen mode Exit fullscreen mode

On the new node, generate its final configuration. This command uses the node's IP, the config template from the first node, and the first node's multiaddress to join the cluster.

# On Node 2
sudo tau config gen \
  --ip SECOND_NODE_IP \
  --use compute.tmpl.yaml \
  --bootstrap FIRST_NODE_MULTIADDRESS
Enter fullscreen mode Exit fullscreen mode

3. Start the Service

Set up and start the same systemd service on the new node.

# On Node 2
sudo systemctl enable tau@compute.service
sudo systemctl start tau@compute.service
Enter fullscreen mode Exit fullscreen mode

Repeat this scaling process for all remaining nodes.


Last touches

1. Update DNS Records

Go back to your domain provider and add A records for seer pointing to all your node IPs.

seer IN A <host-001-spain IP>
seer IN A <host-002-uae IP>
seer IN A <host-003-algeria IP>
Enter fullscreen mode Exit fullscreen mode

Your DNS provider will now perform round-robin load balancing for you.

2. Ensure Bootstrapping Persistence

For a fully functional cluster that can recover from a full shutdown, every node must have a persistent list of its peers.

  1. Collect the multiaddress from all nodes with sudo tau config show.
  2. On each node, edit /tb/config/compute.yaml.
  3. Add all collected multiaddresses to the peers list under the p2p section.
  4. Restart the service on each node to apply the changes: sudo systemctl restart tau@compute.service.

3. Global Load Balancing Verification

Test your global setup. You should see all node IPs in the response.

dig tns.tau.k8s.cyou
Enter fullscreen mode Exit fullscreen mode

The Grand Test: Deploying Your First Application

Time to see your cloud in action by deploying a real application. Find detailed steps here: https://tau.how/02-platform-getting-started/12-try-the-cloud/.

Accessing Taubyte Console

Navigate to console.taubyte.com and enter:

  • Email: Your email address
  • Domain: Your domain (e.g., k8s.cyou)

If the console accepts your domain, your nodes are properly configured and discoverable.

Project Creation

Log in with GitHub and create a blank project. The console will automatically detect your nodes and show them on a global map at their correct geographic locations.

Function Deployment

Create a simple "ping-pong" function to test your cloud:

  1. Choose your domain from the dropdown.
  2. Choose a function from the templates that returns "PONG".
  3. Push to GitHub to trigger the automatic build and deploy pipeline.
  4. Monitor build progress in the console.
  5. Test the function using the lightning bolt icon.

Congrats


For more, see the documentation at tau.how.

Top comments (0)