Communitygithub.com

uncloud

Utilisez cette compétence pour gérer un cluster Uncloud : déploiement de services, configuration de l'ingress Caddy, ajout de routes proxy statiques pour les périphériques hors cluster, publication de ports, mise à l'échelle, inspection des logs ou gestion des machines et volumes avec la CLI `uc`.

Qu'est-ce que uncloud ?

La compétence **uncloud** est dédiée à l'administration d'un cluster Uncloud, une plateforme d'hébergement décentralisée reposant sur Docker, WireGuard (mesh réseau) et Caddy (reverse proxy). Elle couvre l'ensemble des opérations réalisables via la CLI `uc` : initialisation et gestion des machines, déploiement de services à partir de fichiers Compose, publication de ports HTTP/HTTPS/TCP/UDP, configuration avancée de l'ingress Caddy (via les extensions `x-caddy`, `x-ports`, ou le flag `--caddyfile`), routage de périphériques LAN externes à travers le proxy, inspection des logs et de l'état des services, gestion des volumes, et mise à l'échelle. La compétence met en avant l'architecture sans plan de contrôle central (pairs égaux via WireGuard), la génération automatique du Caddyfile, le DNS interne pour la résolution des services, et les workflows de déploiement sans interruption de service. Elle fournit une référence complète des commandes, des exemples concrets de fichiers Compose avec extensions Uncloud, et des solutions aux erreurs courantes.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/uncloud

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Gestion de Cluster Uncloud

Référence pour la CLI uc — une plateforme d'hébergement décentralisée utilisant des conteneurs Docker, un réseau maillé WireGuard et un proxy inverse Caddy.

Quand l'activer

Utilisez cette compétence lorsque vous travaillez avec des clusters Uncloud, en particulier pour :

  • Amorcer ou joindre des machines avec uc machine
  • Déployer des services à partir de fichiers Compose avec uc deploy
  • Publier des ports HTTP, HTTPS, TCP ou UDP via Uncloud
  • Configurer l'ingress Caddy avec x-caddy, x-ports, ou --caddyfile
  • Router des périphériques LAN externes via le proxy du cluster
  • Inspecter les logs, l'état des services, les volumes, le DNS ou le placement des machines

Comment ça fonctionne

Uncloud exécute des services Docker sur des machines homologues connectées par un maillage WireGuard. Chaque machine est un membre égal du cluster ; les services communiquent sur le réseau overlay et Caddy s'exécute globalement pour terminer le trafic HTTP/HTTPS public. Les fichiers Compose peuvent utiliser des extensions Uncloud pour l'ingress, le placement et la configuration Caddy générée, tandis que la CLI uc gère la distribution des images, l'ordonnancement, la mise à l'échelle, les logs et l'état du cluster.

Exemples

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

Concepts de base

  • Aucun plan de contrôle central — toutes les machines sont des paires égales connectées par WireGuard
  • Caddy s'exécute comme un service global sur chaque machine ; il obtient automatiquement les certificats TLS auprès de Let's Encrypt
  • Réseau overlay — les services communiquent via 10.210.0.0/16 par défaut ; DNS fourni à l'intérieur du maillage
  • Le Caddyfile est généré automatiquement — ne le modifiez jamais directement ; utilisez x-caddy / --caddyfile à la place

Référence rapide de la CLI

Machines

CommandeObjectif
uc machine init user@hostAmorcer la première machine / nouveau cluster
uc machine add user@hostJoindre une machine au cluster existant
uc machine lsLister les machines
uc machine update NAME --public-ip IPMettre à jour l'IP publique pour l'ingress
uc machine rm NAMESupprimer une machine

Flags clés pour init : --name, --network 10.210.0.0/16, --no-caddy, --no-dns, --public-ip auto|IP|none

Services

CommandeObjectif
uc service ls / uc lsLister les services
uc service run IMAGEExécuter un service conteneur unique
uc deployDéployer à partir de compose.yaml
uc deploy --no-buildDéployer des images déjà poussées sans reconstruire
uc deploy --recreateForcer la recréation du service
uc scale SERVICE NDéfinir le nombre de réplicas
uc service logs SERVICEVoir les logs
uc service exec SERVICEOuvrir un shell dans le conteneur
uc service inspect SERVICEInformations détaillées
uc service rm SERVICESupprimer le service (conserve les volumes nommés)
uc psTous les conteneurs dans le cluster

Images

uc image push myapp:latest                    # Pousser l'image locale vers toutes les machines
uc image push myapp:latest -m machine1,machine2  # Pousser vers des machines spécifiques
uc images                                     # Lister les images dans le cluster

Volumes

uc volume ls                  # Tous les volumes
uc volume ls -m machine1      # Sur une machine spécifique
uc volume create NAME -m MACHINE
uc volume rm NAME

Caddy

uc caddy config    # Afficher le Caddyfile généré actuel (lecture seule)
uc caddy deploy    # Déployer/mettre à niveau Caddy dans le cluster

DNS et contexte

uc dns show        # Afficher le domaine réservé *.uncld.dev
uc dns reserve     # Réserver un nouveau domaine
uc ctx ls          # Lister les contextes du cluster
uc ctx use prod    # Changer de contexte

Publication de ports

HTTP/HTTPS (via le proxy inverse Caddy)

-p [nom_hôte:]port_conteneur[/protocole]
ExempleSignification
-p 8080/httpsHTTPS avec nom d'hôte automatique nom-service.domaine-du-cluster
-p app.example.com:8080/httpsHTTPS avec nom d'hôte personnalisé
-p 8080/httpHTTP uniquement, pas de TLS

TCP/UDP (lié à l'hôte, contourne Caddy)

-p [ip_hôte:]port_hôte:port_conteneur[/protocole]@host
ExempleSignification
-p 5432:5432@hostTCP 5432 sur toutes les interfaces
-p 127.0.0.1:5432:5432@hostTCP 5432 uniquement en boucle locale
-p 53:5353/udp@hostUDP

Extensions du fichier Compose

Uncloud ajoute ces extensions aux fonctionnalités standard de Docker Compose :

x-ports — publier des ports avec des domaines

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

x-caddy — configuration Caddy personnalisée pour le service

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$...
        }
      }

Fonctions de template disponibles dans x-caddy :

  • {{upstreams [service] [port]}} — IPs des conteneurs sains
  • {{.Name}} — nom du service
  • {{.Upstreams}} — carte de tous les services → IPs

x-machines — contraintes de placement

services:
  db:
    image: postgres:18
    x-machines: db-machine          # Nom de machine unique
  app:
    image: app:latest
    x-machines:
      - machine-1
      - machine-2

Exemple complet multi-services

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:

Routage vers des périphériques externes (hors cluster)

Pour exposer un périphérique externe (ex. BMC, NAS, interface de routeur) via Caddy sans exécuter de véritable conteneur :

1. Créez un extrait de Caddyfile (ex. ~/device.caddyfile) :

https://device.example.com {
    reverse_proxy https://192.168.1.x {
        transport http {
            tls_insecure_skip_verify   # nécessaire pour les certificats BMC auto-signés
        }
    }
    log
}

Pour un amont en texte brut : reverse_proxy http://192.168.1.x:port

2. Enregistrez-le comme un service nommé avec un conteneur factice :

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

pause est un conteneur factice minimal — il ne fait rien, mais donne à Uncloud une entrée de service pour attacher le Caddyfile.

3. Vérifiez :

uc caddy config   # Le bloc device.example.com devrait apparaître

--caddyfile ne peut pas être combiné avec des ports publiés autres que @host.

Astuce DNS : Un enregistrement wildcard (*.votredomaine.com → ip-publique-du-cluster) signifie que tout nouveau sous-domaine fonctionne immédiatement — aucun changement DNS nécessaire par service.


DNS des services (interne)

Les services à l'intérieur du cluster se résolvent entre eux par leur nom :

Nom DNSRésout en
nom-serviceN'importe quel conteneur sain
nom-service.internalIdem
rr.nom-service.internalRound-robin
nearest.nom-service.internalD'abord local à la machine

Mise à l'échelle et services globaux

uc scale web 5    # 5 réplicas (répartis sur les machines)
uc scale web 1    # Réduire
services:
  caddy:
    deploy:
      mode: global   # Un conteneur sur chaque machine

Templates de tags d'image (dans compose.yaml)

image: myapp:{{gitdate "20060102"}}.{{gitsha 7}}
image: myapp:{{gitsha 7}}.${GITHUB_RUN_ID:-local}
FonctionSortie
{{gitsha N}}Les N premiers caractères du SHA du commit
{{gitdate "format"}}Date du commit Git au format Go
{{date "format"}}Date actuelle

Workflows courants

Déploiement depuis les sources :

uc deploy                          # Build + push + deploy
uc build --push && uc deploy --no-build   # Étapes séparées

Inspecter un service :

uc inspect web
uc logs -f web
uc logs --since 1h web
uc exec web                        # Ouvre un shell
uc exec web /bin/sh -c "env"       # Exécuter une commande spécifique

Les déploiements sans interruption se font automatiquement ; Uncloud attend les vérifications de santé avant de terminer les anciens conteneurs.

Forcer la recréation :

uc deploy --recreate

Erreurs courantes

ErreurCorrection
Modifier le Caddyfile directementUtilisez x-caddy dans le compose ou --caddyfile sur uc service run
Proxifier un amont HTTPS avec un certificat auto-signéAjoutez transport http { tls_insecure_skip_verify }
uc caddy config n'affiche aucun bloc défini par l'utilisateurLe socket admin Caddy est inaccessible — vérifiez uc inspect caddy et uc logs caddy
Le service ne peut pas atteindre l'IP LAN externe depuis le conteneurVérifiez que l'hôte du conteneur Caddy peut acheminer vers le réseau cible
Volumes perdus après uc service rmLes volumes nommés persistent ; seuls les volumes anonymes sont automatiquement supprimés

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 associés