Installation

This guide covers installing Uncloud from source on a fresh server.

Step 1: Clone the Repository

git clone https://github.com/dukaancloud/dukaancloud.git
cd dukaancloud

Step 2: Install the Backend

cd backend

# Download Go dependencies
go mod download

# Build the binary
go build -o dukaancloud-api cmd/api/main.go

Step 3: Configure

Create or edit config.yaml in the project root:
apps:
  base_domain: apps.example.com
  default_tls_secret_name: wildcard-cert
  cert_manager_cluster_issuer: letsencrypt-prod

storage:
  block_class: longhorn
  object:
    endpoint: http://127.0.0.1:9000
    region: us-east-1
    access_key: minioadmin
    secret_key: minioadmin
    bucket_prefix: dkc
Set environment variables:
export HTTP_PORT=8080
export DB_PATH=data/nebula.db
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml  # For K3s

Step 4: Start the API Server

./dukaancloud-api
Or run directly with Go:
go run cmd/api/main.go
The API server starts on http://localhost:8080. The SQLite database is created automatically.

Step 5: Install the Frontend

cd ../frontend

# Install dependencies
npm install

# Create environment file
echo "VITE_API_URL=http://localhost:8080" > .env

# Build for production
npm run build

# Or start in development mode
npm run dev
For production, serve the dist/ directory with any static file server (nginx, caddy, etc.).

Step 6: Run Infrastructure Setup

Open the dashboard and navigate to Admin → Setup, or use the API:
# Run all provisioner steps
curl -X POST http://localhost:8080/api/v1/admin/setup/run-all
This installs:
  1. K3s (if not already installed)
  2. KubeVirt
  3. Storage provisioner
  4. Metrics Server
  5. CoreDNS
  6. Container Registry
  7. CloudNativePG
  8. Prometheus
  9. Object Storage
You can run individual steps if you only need specific components:
curl -X POST http://localhost:8080/api/v1/admin/setup/kubevirt/run

Step 7: Verify Installation

# Check admin status
curl http://localhost:8080/api/v1/admin/status

# Check cluster nodes
curl http://localhost:8080/api/v1/nodes

# List available images
curl http://localhost:8080/api/v1/images

Running as a Service

Create /etc/systemd/system/dukaancloud.service:
[Unit]
Description=Uncloud API Server
After=network.target

[Service]
Type=simple
User=dukaancloud
WorkingDirectory=/opt/dukaancloud/backend
ExecStart=/opt/dukaancloud/backend/dukaancloud-api
Environment=HTTP_PORT=8080
Environment=DB_PATH=/opt/dukaancloud/data/nebula.db
Environment=KUBECONFIG=/etc/rancher/k3s/k3s.yaml
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable dukaancloud
sudo systemctl start dukaancloud

Next Steps