Building My Own Private Cloud with Nextcloud, Podman & Tailscale
Self-hosting cloud storage on a home lab — rootless containers with Podman, secure remote access over Tailscale, and the networking headaches in between.
Overview
I wanted to better understand Linux infrastructure, containerization, networking, and secure remote access by building my own private cloud environment.
The goal was to create a self-hosted cloud storage system I could securely access remotely, while learning more about Linux administration and containerized services.
The stack included:
- Ubuntu Linux
- Podman containers
- Nextcloud
- Tailscale
- UFW firewall
- Proxmox virtualization
Infrastructure Setup
My home lab environment was built using Proxmox virtual machines and containers. I separated services into isolated environments to make the setup cleaner and easier to manage.
The environment included a dedicated Nextcloud container, Tailscale networking, additional containerized services, and isolated Linux virtual machines for each role.
This helped me better understand virtualization, networking, service isolation, and infrastructure management.
Why I Used Podman
Instead of using Docker, I wanted to experiment with Podman to learn more about rootless containerization and Linux-native container management.
Using Podman helped me understand:
- container networking
- persistent volumes
- Linux namespaces
- service isolation
I deployed Nextcloud inside a container while managing persistent storage separately to avoid data loss between deployments.
Remote Access with Tailscale
One of the main goals was secure remote access without exposing ports publicly. To achieve this, I used Tailscale with MagicDNS, its encrypted mesh networking, and private device-to-device communication.
I also experimented with tailscale serve to expose services securely over HTTPS without opening ports on my router:
tailscale serve https / http://localhost:8080This routed external HTTPS traffic to the local Nextcloud container over the Tailscale network, without any port forwarding on the home router.
Networking & DNS Problems
While building the environment, I ran into several networking issues. One common error was:
Temporary failure in name resolution
This turned out to be related to DNS configuration problems, incorrect gateway settings, and container bridge networking.
Fixing these issues helped me better understand:
- Linux routing
- DNS resolution
- static vs DHCP addressing
- virtual network bridges
Nextcloud Troubleshooting
Setting up Nextcloud also introduced several configuration challenges. I encountered trusted-domain errors, HTTPS warnings, forwarded-header configuration issues, and persistence problems with container storage.
I spent time troubleshooting:
config.phpsettings- reverse proxy behaviour
- container networking
- service permissions
This gave me a much better understanding of how self-hosted applications behave in real environments.
What I Learned
This project significantly improved my understanding of Linux administration, SSH, containerized infrastructure, networking, DNS, remote access security, and troubleshooting distributed systems.
Building everything manually forced me to think about how services communicate, how infrastructure is secured, and how to debug issues systematically — skills that map directly to production DevOps work.