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.
Prerequisites
- A Fully Qualified Domain Name (FQDN): This guide uses
k8s.cyou
as an example. - Advanced DNS Management: Your DNS provider must support custom
A
andNS
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
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, while953
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
Configure systemd-resolved
to use a public DNS resolver and free up port 53 for Taubyte.
sudo nano /etc/systemd/resolved.conf
Set the following values:
DNS=1.1.1.1
DNSStubListener=no
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
3. Install Docker
Docker is used as a containerization engine by tau.
curl -fsSL https://get.docker.com | sh
docker --version
4. Install Tau
Tau is the core of Taubyte's Developer Cloud Platform Solution.
curl https://get.tau.link/tau | sh
Primary Node Configuration (Run on node 1 only)
1. Generate Master Configuration
Get your node's public IP address.
curl ifconfig.me -4
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
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
4. Validate and Launch
Always validate before proceeding:
sudo tau conf validate -s compute
A successful validation will output a unique cryptographic ID for your node. Now, launch the services manually to test.
sudo tau start -s compute
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
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
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
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
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
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
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
Get the public IP of your new node.
# On Node 2
curl ifconfig.me -4
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
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
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>
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.
- Collect the multiaddress from all nodes with
sudo tau config show
. - On each node, edit
/tb/config/compute.yaml
. - Add all collected multiaddresses to the
peers
list under thep2p
section. - 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
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:
- Choose your domain from the dropdown.
- Choose a function from the templates that returns "PONG".
- Push to GitHub to trigger the automatic build and deploy pipeline.
- Monitor build progress in the console.
- Test the function using the lightning bolt icon.
For more, see the documentation at tau.how.
Top comments (0)