Communitygithub.com

uncloud

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

¿Qué es uncloud?

Este skill proporciona una referencia completa para la CLI `uc`, la herramienta de línea de comandos de la plataforma de autoalojamiento descentralizado Uncloud. Uncloud utiliza contenedores Docker, una malla de red WireGuard y el proxy inverso Caddy para conectar máquinas como pares iguales, sin un plano de control central. Con este skill, un agente de IA (como Claude Code) puede gestionar todo el ciclo de vida de un clúster Uncloud: inicializar y añadir máquinas, desplegar servicios desde archivos Compose, publicar puertos HTTP/HTTPS y TCP/UDP, configurar reglas avanzadas de Caddy mediante extensiones como `x-caddy`, e incluso enrutar tráfico a dispositivos externos (como BMCs o NAS) a través del proxy del clúster. También cubre la inspección de registros, el escalado de servicios, la gestión de volúmenes y las comprobaciones de DNS internas. Al centralizar estos comandos y patrones de uso, el skill permite a un asistente de IA ejecutar operaciones de infraestructura complejas de forma rápida y coherente, reduciendo errores y acelerando el trabajo diario con plataformas Uncloud.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/ECC/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 autoalojamiento descentralizada que utiliza contenedores Docker, redes en malla WireGuard y el proxy inverso Caddy.

Cuándo Activarlo

Usa este skill 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 proxy inverso Caddy con x-caddy, x-ports o --caddyfile
  • Enrutar dispositivos LAN externos a través del proxy del clúster
  • Inspeccionar registros, estado del servicio, volúmenes, DNS o ubicación de máquinas

Cómo Funciona

Uncloud ejecuta servicios Docker en máquinas pares conectadas mediante 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 el tráfico HTTP/HTTPS público. Los archivos Compose pueden usar extensiones de Uncloud para entrada, ubicación y configuración generada de Caddy, mientras que la CLI uc gestiona la distribución de imágenes, la planificación, el escalado, los registros y el estado del clúster.

Ejemplos

uc machine init user@host --name machine-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 conectados por WireGuard
  • Caddy se ejecuta como un servicio global en cada máquina; obtiene automáticamente certificados TLS de Let's Encrypt
  • Red superpuesta — los servicios se comunican a través de 10.210.0.0/16 por defecto; DNS proporcionado dentro de la malla
  • El Caddyfile se genera automáticamente — nunca lo edites directamente; usa x-caddy / --caddyfile en su lugar

Referencia Rápida de CLI

Máquinas

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

Indicadores 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 IMAGEEjecutar un servicio de un solo contenedor
uc deployDesplegar desde compose.yaml
uc deploy --no-buildDesplegar imágenes ya enviadas sin reconstruir
uc deploy --recreateForzar recreación del servicio
uc scale SERVICE NEstablecer número de réplicas
uc service logs SERVICEVer registros
uc service exec SERVICEAcceder al shell del contenedor
uc service inspect SERVICEInformación detallada
uc service rm SERVICEEliminar servicio (conserva volúmenes con nombre)
uc psTodos los contenedores en el clúster

Imágenes

uc image push myapp:latest                    # Enviar imagen local a todas las máquinas
uc image push myapp:latest -m machine1,machine2  # Enviar 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 machine1      # En una máquina específica
uc volume create NAME -m MACHINE
uc volume rm NAME

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 reservado *.uncld.dev
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 (a través del proxy inverso Caddy)

-p [hostname:]container_port[/protocol]
EjemploSignificado
-p 8080/httpsHTTPS con nombre de host automático service-name.cluster-domain
-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 [host_ip:]host_port:container_port[/protocol]@host
EjemploSignificado
-p 5432:5432@hostTCP 5432 en todas las interfaces
-p 127.0.0.1:5432:5432@hostTCP 5432 solo en bucle local
-p 53:5353/udp@hostUDP

Extensiones de Archivos 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 [service] [port]}} — IPs de contenedores saludables
  • {{.Name}} — nombre del servicio
  • {{.Upstreams}} — mapa de todos los servicios a 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:
      - machine-1
      - machine-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 (No del Clúster)

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

1. Crear un fragmento de Caddyfile (por ejemplo, ~/device.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:port

2. Registrar como servicio con nombre con contenedor no operativo:

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

pause es un contenedor mínimo no operativo: no hace nada, pero le da a Uncloud una entrada de servicio para adjuntar el Caddyfile.

3. Verificar:

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 (*.yourdomain.com → cluster-public-ip) hace que cualquier nuevo subdominio funcione inmediatamente, 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
service-nameCualquier contenedor saludable
service-name.internalIgual
rr.service-name.internalRound-robin
nearest.service-name.internalPrimero en la misma máquina

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: myapp:{{gitdate "20060102"}}.{{gitsha 7}}
image: myapp:{{gitsha 7}}.${GITHUB_RUN_ID:-local}
FunciónSalida
{{gitsha N}}Primeros N caracteres del hash del commit
{{gitdate "formato"}}Fecha del commit en formato Go
{{date "formato"}}Fecha actual

Flujos de Trabajo Comunes

Desplegar desde el código fuente:

uc deploy                          # Construir + enviar + 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 a 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 de administración de Caddy no es accesible — verifica uc inspect caddy y uc logs caddy
El servicio no puede alcanzar la 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/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

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.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

Skills relacionados