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 non 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 ?

Cette compétence couvre l'administration complète d'un cluster Uncloud via la CLI `uc`. Uncloud est une plateforme d'auto-hébergement décentralisée reposant sur des conteneurs Docker, un maillage WireGuard et le proxy inverse Caddy. Elle permet de déployer et gérer des services, configurer l'ingress HTTP/HTTPS/TCP/UDP, gérer les machines et volumes, et inspecter les logs. Le SKILL.md détaille les commandes essentielles (machine, service, deploy, scale, logs, volume, caddy, dns), les extensions Compose (x-ports, x-caddy, x-machines), le routage vers des périphériques externes (non cluster), et les workflows courants (déploiement sans temps d'arrêt, mise à l'échelle). Il inclut également une référence rapide pour les erreurs fréquentes et des exemples concrets pour chaque fonctionnalité.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/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'auto-hébergement décentralisée utilisant des conteneurs Docker, le maillage réseau WireGuard et le proxy inverse Caddy.

Quand activer cette compétence

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

Fonctionnement

Uncloud exécute des services Docker sur plusieurs machines relié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 les 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 clés

  • Pas de plan de contrôle central — toutes les machines sont des pairs égaux connectés par WireGuard
  • Caddy s'exécute comme un service global sur chaque machine ; obtient automatiquement les certificats TLS 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 autogénéré — ne l'éditez 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 à un cluster existant
uc machine lsLister les machines
uc machine update NOM --public-ip IPMettre à jour l'IP publique pour l'ingress
uc machine rm NOMSupprimer une machine

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

Services

CommandeObjectif
uc service ls / uc lsLister les services
uc service run IMAGEExécuter un service conteneur unique
uc deployDéployer depuis compose.yaml
uc deploy --no-buildDéployer des images déjà poussées sans reconstruction
uc deploy --recreateForcer la recréation des services
uc scale SERVICE NDéfinir le nombre de réplicas
uc service logs SERVICEVoir les logs
uc service exec SERVICEShell 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 du 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 NOM -m MACHINE
uc volume rm NOM

Caddy

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

DNS & 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 de cluster
uc ctx use prod    # Changer de contexte

Publication de ports

HTTP/HTTPS (via le proxy inverse Caddy)

-p [nom_hote:]port_conteneur[/protocole]
ExempleSignification
-p 8080/httpsHTTPS avec nom d'hôte automatique nom-service.domaine-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_hote:]port_hote:port_conteneur[/protocole]@hote
ExempleSignification
-p 5432:5432@hoteTCP 5432 sur toutes les interfaces
-p 127.0.0.1:5432:5432@hoteTCP 5432 loopback uniquement
-p 53:5353/udp@hoteUDP

Extensions de fichier Compose

Uncloud ajoute ces extensions par-dessus 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 multi-services complet

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 (non cluster)

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

1. Créer 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 clair : reverse_proxy http://192.168.1.x:port

2. Enregistrer comme service nommé avec un conteneur no-op :

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

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

3. Vérifier :

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

--caddyfile ne peut pas être combiné avec des ports publiés non-@hote.

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


DNS des services (interne)

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

Nom DNSRésout en
nom-serviceTout conteneur sain
nom-service.internalIdem
rr.nom-service.internalRound-robin
nearest.nom-service.internalPriorité locale à la machine

Mise à l'échelle & 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 balises d'image (dans compose.yaml)

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

Workflows courants

Déployer depuis les sources :

uc deploy                          # Build + push + déploiement
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 temps d'arrêt se font automatiquement ; Uncloud attend les health checks avant de terminer les anciens conteneurs.

Forcer la recréation :

uc deploy --recreate

Erreurs fréquentes

ErreurCorrection
Éditer 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 router 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/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 associés