Communitygithub.com

uncloud

Úsalo al gestionar un clúster Uncloud — desplegar servicios, configurar el ingress de Caddy, añadir rutas proxy estáticas para dispositivos fuera del clúster, publicar puertos, escalar, inspeccionar logs o administrar máquinas y volúmenes con la CLI `uc`.

¿Qué es uncloud?

Uncloud es una plataforma de auto-hosting descentralizada que utiliza Docker, malla WireGuard y el proxy inverso Caddy. La habilidad `uncloud` proporciona acceso completo a la CLI `uc`, permitiendo a los desarrolladores arrancar clústeres, unir máquinas pares, desplegar servicios desde archivos Compose, publicar puertos HTTP/HTTPS/TCP/UDP, configurar el ingress de Caddy mediante extensiones `x-caddy` y `x-ports`, inspeccionar logs, escalar servicios y gestionar volúmenes. A diferencia de soluciones centralizadas, Uncloud no tiene un plano de control central: todas las máquinas son pares iguales conectadas por WireGuard, y Caddy se ejecuta de forma global para terminar tráfico público con TLS automático de Let's Encrypt. Es útil para equipos que buscan una alternativa simple, segura y auto-gestionada a Kubernetes o soluciones de nube pública para aplicaciones auto-hospedadas.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/uncloud

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Gestión de Clúster Uncloud

Referencia para la CLI uc — una plataforma de auto-hosting descentralizada que utiliza contenedores Docker, malla de red WireGuard y proxy inverso Caddy.

Cuándo Activarla

Usa esta habilidad cuando trabajes con clústeres Uncloud, especialmente para:

  • Inicializar o unir máquinas con uc machine
  • Desplegar servicios desde archivos Compose con uc deploy
  • Publicar puertos HTTP, HTTPS, TCP o UDP a través de Uncloud
  • Configurar el ingress de Caddy con x-caddy, x-ports o --caddyfile
  • Enrutar dispositivos LAN externos a través del proxy del clúster
  • Inspeccionar logs, estado de servicios, volúmenes, DNS o ubicación de máquinas

Cómo Funciona

Uncloud ejecuta servicios Docker en máquinas pares conectadas por una malla WireGuard. Cada máquina es un miembro igual del clúster; los servicios se comunican en la red superpuesta y Caddy se ejecuta globalmente para terminar tráfico público HTTP/HTTPS. Los archivos Compose pueden usar extensiones de Uncloud para ingress, ubicación y configuración generada de Caddy, mientras que la CLI uc maneja la distribución de imágenes, planificación, escalado, logs y estado del clúster.

Ejemplos

uc machine init usuario@host --name maquina-1
uc service run --name web -p app.example.com:8080/https nginx:latest
uc deploy

Conceptos Clave

  • Sin plano de control central — todas las máquinas son pares iguales conectadas por WireGuard
  • Caddy se ejecuta como un servicio global en cada máquina; obtiene TLS automáticamente de Let's Encrypt
  • Red superpuesta — los servicios se comunican mediante 10.210.0.0/16 por defecto; DNS proporcionado dentro de la malla
  • Caddyfile se autogenera — nunca lo edites directamente; usa x-caddy / --caddyfile en su lugar

Referencia Rápida de la CLI

Máquinas

ComandoPropósito
uc machine init usuario@hostInicializar primera máquina / nuevo clúster
uc machine add usuario@hostUnir máquina al clúster existente
uc machine lsListar máquinas
uc machine update NOMBRE --public-ip IPActualizar IP pública para ingress
uc machine rm NOMBREEliminar máquina

Banderas clave de init: --name, --network 10.210.0.0/16, --no-caddy, --no-dns, --public-ip auto|IP|none

Servicios

ComandoPropósito
uc service ls / uc lsListar servicios
uc service run IMAGENEjecutar un servicio de un solo contenedor
uc deployDesplegar desde compose.yaml
uc deploy --no-buildDesplegar imágenes ya subidas sin reconstruir
uc deploy --recreateForzar recreación del servicio
uc scale SERVICIO NEstablecer número de réplicas
uc service logs SERVICIOVer logs
uc service exec SERVICIOAcceder al shell del contenedor
uc service inspect SERVICIOInformación detallada
uc service rm SERVICIOEliminar servicio (conserva volúmenes con nombre)
uc psTodos los contenedores en todo el clúster

Imágenes

uc image push miapp:latest                    # Subir imagen local a todas las máquinas
uc image push miapp:latest -m maquina1,maquina2  # Subir a máquinas específicas
uc images                                     # Listar imágenes en el clúster

Volúmenes

uc volume ls                  # Todos los volúmenes
uc volume ls -m maquina1      # En una máquina específica
uc volume create NOMBRE -m MAQUINA
uc volume rm NOMBRE

Caddy

uc caddy config    # Mostrar el Caddyfile generado actual (solo lectura)
uc caddy deploy    # Desplegar/actualizar Caddy en todo el clúster

DNS y Contexto

uc dns show        # Mostrar dominio *.uncld.dev reservado
uc dns reserve     # Reservar un nuevo dominio
uc ctx ls          # Listar contextos del clúster
uc ctx use prod    # Cambiar de contexto

Publicación de Puertos

HTTP/HTTPS (mediante proxy inverso de Caddy)

-p [nombre_host:]puerto_contenedor[/protocolo]
EjemploSignificado
-p 8080/httpsHTTPS con nombre de host automático nombre-servicio.dominio-cluster
-p app.example.com:8080/httpsHTTPS con nombre de host personalizado
-p 8080/httpSolo HTTP, sin TLS

TCP/UDP (vinculado al host, omite Caddy)

-p [ip_host:]puerto_host:puerto_contenedor[/protocolo]@host
EjemploSignificado
-p 5432:5432@hostTCP 5432 en todas las interfaces
-p 127.0.0.1:5432:5432@hostTCP 5432 solo loopback
-p 53:5353/udp@hostUDP

Extensiones del Archivo Compose

Uncloud añade estas extensiones sobre Docker Compose:

x-ports — publicar puertos con dominios

services:
  app:
    image: app:latest
    x-ports:
      - example.com:8000/https
      - www.example.com:8000/https
      - api.example.com:9000/https

x-caddy — configuración personalizada de Caddy para el servicio

services:
  app:
    image: app:latest
    x-caddy: |
      example.com {
        redir https://www.example.com{uri} permanent
      }
      www.example.com {
        reverse_proxy {{upstreams 8000}} {
          import common_proxy
        }
        basic_auth /admin/* {
          admin $2a$14$...
        }
      }

Funciones de plantilla disponibles dentro de x-caddy:

  • {{upstreams [servicio] [puerto]}} — IPs de contenedores saludables
  • {{.Name}} — nombre del servicio
  • {{.Upstreams}} — mapa de todos los servicios → IPs

x-machines — restricciones de ubicación

services:
  db:
    image: postgres:18
    x-machines: db-machine          # Nombre de una sola máquina
  app:
    image: app:latest
    x-machines:
      - maquina-1
      - maquina-2

Ejemplo completo de múltiples servicios

services:
  api:
    build: ./api
    x-ports:
      - api.example.com:3000/https
    environment:
      DATABASE_URL: postgres://db:5432/mydb

  web:
    build: ./web
    x-ports:
      - example.com:8000/https
      - www.example.com:8000/https
    environment:
      API_URL: http://api:3000

  db:
    image: postgres:18
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db-data:/var/lib/postgresql/data
    x-machines: db-machine

volumes:
  db-data:

Enrutamiento a Dispositivos Externos (Fuera del Clúster)

Para exponer un dispositivo externo (ej. BMC, NAS, interfaz de router) a través de Caddy sin ejecutar un contenedor real:

1. Crea un fragmento de Caddyfile (ej. ~/dispositivo.caddyfile):

https://device.example.com {
    reverse_proxy https://192.168.1.x {
        transport http {
            tls_insecure_skip_verify   # necesario para certificados BMC autofirmados
        }
    }
    log
}

Para upstream en texto plano: reverse_proxy http://192.168.1.x:puerto

2. Regístralo como un servicio con nombre con un contenedor sin operación:

uc service run \
  --name dispositivo-bmc \
  --caddyfile ~/dispositivo.caddyfile \
  registry.k8s.io/pause:3.9

pause es un contenedor mínimo sin operación — no hace nada, pero le da a Uncloud una entrada de servicio para adjuntar el Caddyfile.

3. Verifica:

uc caddy config   # El bloque device.example.com debería aparecer

--caddyfile no se puede combinar con puertos publicados que no sean @host.

Consejo de DNS: Un registro comodín (*.sudominio.com → ip-publica-cluster) significa que cualquier nuevo subdominio funciona de inmediato — sin necesidad de cambios de DNS por servicio.


DNS del Servicio (Interno)

Los servicios dentro del clúster se resuelven entre sí por nombre:

Nombre DNSResuelve a
nombre-servicioCualquier contenedor saludable
nombre-servicio.internalIgual
rr.nombre-servicio.internalRound-robin
nearest.nombre-servicio.internalPrimero el de la máquina local

Escalado y Servicios Globales

uc scale web 5    # 5 réplicas (distribuidas entre máquinas)
uc scale web 1    # Reducir escala
services:
  caddy:
    deploy:
      mode: global   # Un contenedor en cada máquina

Plantillas de Etiquetas de Imagen (en compose.yaml)

image: miapp:{{gitdate "20060102"}}.{{gitsha 7}}
image: miapp:{{gitsha 7}}.${GITHUB_RUN_ID:-local}
FunciónSalida
{{gitsha N}}Primeros N caracteres del SHA del commit
{{gitdate "formato"}}Fecha del commit de Git en formato Go
{{date "formato"}}Fecha actual

Flujos de Trabajo Comunes

Desplegar desde el código fuente:

uc deploy                          # Construir + subir + desplegar
uc build --push && uc deploy --no-build   # Pasos separados

Inspeccionar un servicio:

uc inspect web
uc logs -f web
uc logs --since 1h web
uc exec web                        # Abre shell
uc exec web /bin/sh -c "env"       # Ejecutar comando específico

Despliegues sin tiempo de inactividad ocurren automáticamente; Uncloud espera las comprobaciones de salud antes de terminar contenedores antiguos.

Forzar recreación:

uc deploy --recreate

Errores Comunes

ErrorSolución
Editar el Caddyfile directamenteUsa x-caddy en compose o --caddyfile en uc service run
Proxy de un upstream HTTPS con certificado autofirmadoAñade transport http { tls_insecure_skip_verify }
uc caddy config no muestra bloques definidos por el usuarioEl socket admin de Caddy no es accesible — verifica uc inspect caddy y uc logs caddy
El servicio no puede alcanzar una IP LAN externa desde el contenedorVerifica que el host del contenedor Caddy pueda enrutar a la red de destino
Volúmenes perdidos después de uc service rmLos volúmenes con nombre persisten; solo se eliminan automáticamente los volúmenes anónimos

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Skills relacionados