Skip to content
yisusvii Blog
Go back

CapRover: The Free, Self-Hosted PaaS with a Proven Track Record

Suggest Changes

Before Coolify and Dokploy entered the scene, CapRover was already quietly powering thousands of self-hosted deployments. It is one of the oldest and most mature open-source PaaS solutions, built on Docker Swarm, and it remains a rock-solid choice for anyone who wants a free, self-hosted Heroku.

If you are looking for a proven, battle-tested platform to deploy your apps — CapRover deserves your attention.

Table of Contents

Open Table of Contents

What Is CapRover?

CapRover is an open-source PaaS (Platform as a Service) that automates app deployment and web server management. It uses Docker Swarm under the hood and provides a web GUI, CLI, and API for managing your applications, databases, and services.

The project was originally known as CaptainDuckDuck and was renamed to CapRover in 2019.

Official page: https://caprover.com

GitHub: https://github.com/caprover/caprover

Key Features

Getting Started — How to Install

Prerequisites

Step 1: Set Up DNS

Point a wildcard DNS record to your server:

*.captain.yourdomain.com → YOUR_SERVER_IP

This allows CapRover to create subdomains for each app automatically.

Step 2: Install CapRover

# Install Docker (if not already installed)
curl -fsSL https://get.docker.com | sh

# Install CapRover
docker run -p 80:80 -p 443:443 -p 3000:3000 \
  -e ACCEPTED_TERMS=true \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /captain:/captain \
  caprover/caprover

Step 3: Initial Setup

# Install the CLI
npm install -g caprover

# Set up your CapRover instance
caprover serversetup

# This wizard will:
# 1. Connect to your server
# 2. Set the root domain
# 3. Enable SSL for the dashboard
# 4. Set the admin password

Step 4: Access the Dashboard

Open https://captain.yourdomain.com and log in with your password.

Deploying an Application

Option 1: One-Click Apps

CapRover has over 100 one-click app templates:

  1. Go to Apps → One-Click Apps/Databases.
  2. Browse the marketplace (WordPress, PostgreSQL, Redis, Minio, Gitea, etc.).
  3. Click Deploy and fill in the configuration.

Option 2: Deploy from Git (CLI)

# Navigate to your project
cd my-app

# Create a Captain Definition file
echo '{ "schemaVersion": 2, "dockerfileLines": ["FROM node:20-alpine", "WORKDIR /app", "COPY . .", "RUN npm install", "EXPOSE 3000", "CMD [\"node\", \"index.js\"]"] }' > captain-definition

# Deploy
caprover deploy -a my-app

Option 3: Deploy via Webhook

Set up a webhook URL in your CI/CD pipeline:

# The webhook URL format:
POST https://captain.yourdomain.com/api/v2/user/apps/webhooks/triggerbuild?namespace=captain&token=YOUR_TOKEN

# From GitHub Actions:
- name: Deploy to CapRover
  run: |
    curl -X POST \
      "https://captain.yourdomain.com/api/v2/user/apps/webhooks/triggerbuild?namespace=captain&token=${{ secrets.CAPROVER_TOKEN }}"

Option 4: Dockerfile Deploy

Create a captain-definition file in your project root:

{
  "schemaVersion": 2,
  "dockerfilePath": "./Dockerfile"
}

Then deploy via CLI:

caprover deploy

Adoption Level (2025–2026)

CapRover is one of the most established open-source PaaS solutions:

MetricValue (as of early 2026)
GitHub Stars~13,000+
First release2017 (as CaptainDuckDuck)
One-click app templates100+
Docker SwarmNative support
CommunityActive GitHub discussions, Stack Overflow

Why CapRover endures:

Where CapRover falls short:

Best Examples for Implementing

1. WordPress + MySQL (One-Click)

From the CapRover dashboard:

  1. Go to One-Click Apps.
  2. Select WordPress.
  3. Configure the MySQL password and domain.
  4. Deploy — WordPress is running in minutes.

2. Custom Node.js API

// captain-definition
{
  "schemaVersion": 2,
  "dockerfileLines": [
    "FROM node:20-alpine",
    "WORKDIR /app",
    "COPY package*.json ./",
    "RUN npm ci --production",
    "COPY . .",
    "EXPOSE 3000",
    "CMD [\"node\", \"server.js\"]"
  ]
}
caprover deploy -a my-api

3. Multi-Server Cluster with Docker Swarm

# On the main server (manager)
docker swarm init --advertise-addr YOUR_MANAGER_IP

# On worker servers
docker swarm join --token <token> YOUR_MANAGER_IP:2377

# CapRover automatically distributes apps across the cluster

4. CI/CD Pipeline with GitHub Actions

# .github/workflows/deploy.yml
name: Deploy to CapRover
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: caprover/deploy-from-github@v1.1.2
        with:
          server: https://captain.yourdomain.com
          app: my-api
          token: ${{ secrets.CAPROVER_APP_TOKEN }}

Cost Analysis

CapRover is completely free — no premium tiers, no enterprise licenses.

Server Costs

Provider1 vCPU / 1 GB2 vCPU / 4 GB4 vCPU / 8 GB
Hetzner€3.50/month€4.50/month€8.50/month
DigitalOcean$6/month$12/month$24/month
Vultr$5/month$12/month$24/month
OVH€3.50/month€6/month€12/month

Real-World Estimate for a Startup

A full stack on a Hetzner CX22 (2 vCPU / 4 GB):

Total: ~$6.50/month — for a complete deployment platform.

CapRover vs. Managed PaaS Cost Comparison

Running a typical SaaS (API + DB + Redis + Worker):

PlatformMonthly Cost
CapRover (Hetzner)~$10
Railway~$20–30
Render~$28–35
Heroku~$50–75
AWS (ECS + RDS)~$100+

Verdict

CapRover is the reliable workhorse of the self-hosted PaaS world. It may not have the flashiest UI or the newest features, but it has eight years of production reliability behind it. For teams that want a proven, stable platform with the largest one-click app library, CapRover is a safe and solid choice.

TL;DR: CapRover is the “Toyota Corolla” of self-hosted PaaS — not the most exciting, but incredibly reliable, well-documented, and free. If you want a battle-tested platform that just works, CapRover is your pick.


Follow my blog for more reviews of modern deployment platforms for startups.


Suggest Changes
Share this post on:

Previous Post
Dokku: The Smallest PaaS Implementation You'll Ever See
Next Post
Dokploy: The Lightweight Self-Hosted PaaS Built on Docker