Skip to main content
The Base Kit is designed for professional single-server deployments. It provides a carefully curated set of services that work well together out of the box, optimized for reliability and simplicity on a standalone node. This solution is built for both efficiency and complexity management on a single host, making it suitable for any skill level requiring a standalone architecture.
The Base Kit follows an IaC-first approach using OpenTofu for infrastructure provisioning and Docker Compose for service deployment.

Overview

Available variants

Choose a variant that matches your use case:
The standard variant for users without their own domain. Port-based access.
ServiceDescription
Traefik v3Reverse proxy with auto-SSL
DokployContainer platform (like Vercel for your homelab)
Uptime KumaStatus monitoring with public pages
DozzleReal-time Docker log viewer
whoamiDebug/test service
kombination.yaml
stackkit: base-kit
variant: default

Included services

Traefik v3

Reverse Proxy & SSLAutomatic HTTPS certificates (Let’s Encrypt), routing, and load balancing for all services.

Dokploy

Container PlatformSelf-hosted PaaS like Vercel/Railway. Deploy from Git, manage databases, and scale apps.

Coolify

Alternative PaaSOpen-source alternative to Heroku. Best for users with their own domain.

Uptime Kuma

Status MonitoringMonitor your services with beautiful status pages and alerts.

Beszel

Server MetricsLightweight resource monitoring (CPU, RAM, disk, network).

Dozzle

Log ViewerReal-time Docker container log viewer in your browser.

Optional identity services

TinyAuth

Lightweight Auth ProxySimple authentication middleware for protecting services with basic auth or OAuth2.

PocketID

OIDC ProviderFull-featured OpenID Connect provider for single sign-on across your homelab.

Requirements

ResourceLowStandardHigh
CPU2 cores4 cores8 cores
RAM4 GB8 GB16 GB
Storage20 GB SSD50 GB SSD100+ GB SSD
VariantForces minimalAnyAdds Prometheus/Grafana

Supported operating systems

OSVersionStatus
Ubuntu24.04 LTS✅ Recommended
Ubuntu22.04 LTS✅ Supported
Debian12 (Bookworm)✅ Supported

Quick start

1

Create your spec file

kombination.yaml
stackkit: base-kit
variant: default

# Node configuration
nodes:
  - name: main-server
    type: local  # or vps, cloud
    connection:
      host: 192.168.1.100
      user: root
      ssh_key: ~/.ssh/id_ed25519

# Domain (optional - enables auto-SSL)
domain: homelab.example.com
email: you@example.com

# Service toggles
services:
  dokploy:
    enabled: true
  uptime_kuma:
    enabled: true
  dozzle:
    enabled: true
2

Validate configuration

stackkit validate
Output:
✓ StackKit: base-kit (v1.0.0)
✓ Variant: default
✓ OS: ubuntu-24
✓ Compute tier: standard
✓ All service dependencies satisfied
✓ No port conflicts detected

Ready to deploy!
3

Generate infrastructure code

stackkit generate
Creates:
  • tofu/main.tf — OpenTofu configuration
  • tofu/variables.tf — Variables
  • docker-compose.yml — Service definitions
  • traefik/ — Reverse proxy config
4

Preview and apply

stackkit plan   # Preview changes
stackkit apply  # Deploy

Configuration reference

Node settings

nodes:
  - name: main-server
    type: local              # local, vps, cloud
    os: ubuntu-24            # ubuntu-24, ubuntu-22, debian-12
    
    connection:
      host: 192.168.1.100
      port: 22
      user: root
      ssh_key: ~/.ssh/id_ed25519
      # OR password: ${SSH_PASSWORD}
    
    resources:               # Optional — auto-detected
      cpu: 4
      memory_gb: 8
      disk_gb: 50

Domain and SSL

domain: homelab.example.com
email: you@example.com

ssl:
  provider: letsencrypt
  # Optional: wildcard for *.homelab.example.com
  wildcard: true

Service configuration

services:
  traefik:
    enabled: true           # Always required
    dashboard: true         # Enable Traefik UI
    log_level: INFO
    
  dokploy:
    enabled: true
    # Dokploy runs on port 3000 by default
    
  uptime_kuma:
    enabled: true
    public_page: true       # Enable public status page
    
  dozzle:
    enabled: true
    remote_hosts: []        # Add remote Docker hosts
    
  # Optional identity
  tinyauth:
    enabled: false
    
  pocketid:
    enabled: false

Deployment modes

The Base Kit supports two deployment modes:
ModeEngineWhen to use
SimpleOpenTofu onlyQuick setup, one-time deployment
AdvancedOpenTofu + TerramateDrift detection, Day-2 operations
Advanced mode is automatically enabled when:
  • driftDetection.enabled: true
  • autoUpdates.enabled: true
  • compliance.required: true
# Enable advanced mode
operations:
  driftDetection:
    enabled: true
    schedule: "0 */6 * * *"  # Every 6 hours
  autoUpdates:
    enabled: true
    schedule: "0 4 * * 0"    # Sunday 4am

File structure

After stackkit generate:
.
├── kombination.yaml          # Your configuration
├── tofu/
│   ├── main.tf              # Infrastructure definition
│   ├── variables.tf         # Input variables
│   ├── outputs.tf           # Output values
│   └── terraform.tfvars     # Generated values
├── docker-compose.yml        # Service definitions
├── traefik/
│   ├── traefik.yml          # Static config
│   └── dynamic/
│       └── routes.yml       # Dynamic routing
└── data/                    # Persistent volumes

Constraints

The Base Kit enforces these rules:
ConstraintValueReason
Max nodes1Single-node design
Traefik requiredYesAll services need routing
Min RAM4 GBServices won’t fit in less
If you need more than 1 node, consider:

Troubleshooting

  1. Check Traefik is running: docker logs traefik
  2. Verify DNS resolves to your server
  3. Check firewall allows ports 80/443
  4. For local: Use http://IP:PORT instead of domain
  1. Check port 3000 is not in use: netstat -tlnp | grep 3000
  2. Verify Docker socket permissions
  3. Check logs: docker logs dokploy
  1. Prune unused images: docker image prune -a
  2. Check volume sizes: docker system df
  3. Consider adding external storage

Next steps

CUE basics

Learn how to customize StackKit schemas

Create custom StackKit

Build your own StackKit from scratch