Skip to content

What is Self-Hosted and Why It's So Popular

You’re paying for Notion, Dropbox, and Google Drive. Then Notion raises prices, Dropbox caps storage, and Google “improves” the Docs interface. Self-hosted is taking infrastructure into your own hands and breaking the vendor dependency loop.

Definition: Not Your Cloud

Self-hosted means deploying and operating applications on your own servers or VPS instead of using SaaS alternatives. The server can sit at home, in a data center, or be a VM at a hosting provider—the point is that the hardware is under your control, not a third party’s.

The difference from classic hosting is straightforward: with virtual hosting you rent part of a server with pre-installed software. With self-hosted you install whatever you want and configure it however you like. It’s closer to VPS or bare metal, but focused on applications rather than websites.

Note

Self-hosted ≠ self-administered. You can hire an admin, use managed servers, or deploy ready-made images. The point is that data and the service belong to you, not a cloud provider.

Typical Self-Hosted Stack

Most self-hosted setups revolve around Docker and Docker Compose. It’s the de facto standard for isolation and reproducibility.

# Install Docker on Ubuntu
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

# Minimal docker-compose.yml for Nextcloud
cat << 'EOF' > docker-compose.yml
version: "3.8"
services:
  app:
    image: nextcloud:latest
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./data:/var/www/html
    environment:
      - MYSQL_HOST=db
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=changeme
  db:
    image: mariadb:latest
    restart: unless-stopped
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=rootpw
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=changeme
EOF

docker compose up -d

Nextcloud usually sits behind a reverse proxy—Traefik or Caddy. Traefik auto-discovers containers via labels, Caddy works with zero-config TLS.

# Traefik with Docker provider
cat << 'EOF' >> docker-compose.yml
  traefik:
    image: traefik:v3.0
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik/acme.json:/acme.json
    command:
      - "--providers.docker"
      - "--providers.docker.exposedbydefault=false"
EOF

Common home setup stack:

CategoryExamplesPurpose
FilesNextcloud, SyncthingStorage and sync
MediaJellyfin, PlexPersonal streaming
PasswordsBitwarden, VaultwardenPassword manager
CodeGitea, ForgejoGit repositories
Smart homeHome AssistantIoT controller
MonitoringGrafana, PrometheusMetrics and alerts

Why It’s Gone Mainstream

The main driver is data control. When clouds regularly leak data and corporate privacy policies shift with profit margins, the idea of “my server, my rules” appeals beyond just the paranoid.

Financial factors matter too. One server for $10–20/month replaces a stack of subscriptions. Bitwarden Premium costs $10/year, Nextcloud AIO is $29/year. Even a personal NAS with multiple disks pays for itself in a couple years versus Dropbox and Google One.

Less obvious: vendor lock-in. Notion exports data poorly, Slack doesn’t provide proper exports, and Discord keeps closing APIs. When you run your own instance, migration is just a backup and spin-up on a new server.

Tip

Keep your configuration in Git. Twenty docker-compose.yml and compose-override.yml files in a repo isn’t just a backup—it’s a reproducible setup that deploys to new hardware in minutes.

The last factor is the learning curve. Self-hosted has gotten easier: ready-made images, auto-TLS, Compose files on GitHub. This attracts people who want to understand infrastructure, not just use a service.

What Holds People Back

The main issue is maintenance burden. SaaS updates without your involvement. Self-hosted requires regular apt update && docker compose pull && docker compose up -d and monitoring for outdated images.

Security is the second bottleneck. Your server is your responsibility. Vulnerability in Nextcloud? That’s your CVSS, your patches, your downtime. Clouds at least patch faster and notify users.

# Check for outdated images
docker images --format "{{.Repository}}:{{.Tag}}"
# Or via Trivy
trivy image --severity HIGH,CRITICAL nextcloud:latest

Uptime is the third barrier. For a home setup it’s not critical. For a work tool you need backup connectivity, monitoring, and a process supervisor. Systemd unit or Watchtower with auto-restart is the minimum.

TaskToolComplexity
Auto-update imagesWatchtowerLow
Container monitoringcAdvisor + GrafanaMedium
Downtime alertsHealthchecks.io, Uptime KumaLow
Data backupRestic, DuplicatiMedium

When It Makes Sense

Self-hosted pays off in three scenarios.

Homelab and personal use. You effectively get a private cloud for the cost of a server. Files, passwords, photos, media library—all under your control. For many it’s both a hobby and hands-on practice.

Small teams without compliance requirements. Gitea for code, Vaultwarden for passwords, Outline or HedgeDoc for documents replace GitHub, 1Password, and Confluence. Budget is $20–50/month on a VPS.

Specific requirements. Custom integrations, above-average privacy, data that can’t live with third parties. This can be a personal project, a cleaning company handling personal data, or an early-stage startup.

Warning

Don’t try to replace managed services with self-hosted if your team has no time budget for operations. An SRE engineer on half-time will cost more than a Notion subscription and burn through goodwill faster.

Typical path: start with one service, add a second, then a third. By the sixth you realize you have a homelab with ten containers and a 200-line Ansible playbook. That’s fine—many people found their way into DevOps exactly this way.