133 lines
6.0 KiB
Markdown
133 lines
6.0 KiB
Markdown
---
|
|
title: Uncloud
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, deployment, docker-swarm, cluster, go]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=Deployment, https://github.com/psviderski/uncloud]
|
|
---
|
|
|
|
# 🚀 Uncloud
|
|
|
|
> **L'orchestrateur Docker multi-host** — cluster Docker Swarm simplifié, CLI puissante, machine images déployables en quelques secondes, idéal pour gérer un parc de serveurs hétérogènes.
|
|
|
|
## 📋 Informations Générales
|
|
|
|
| Champ | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | [uncloud.run](https://uncloud.run/) |
|
|
| **GitHub** | [psviderski/uncloud](https://github.com/psviderski/uncloud) |
|
|
| **License** | Apache-2.0 |
|
|
| **Langage** | **Go** (⚠️ binaire statique) |
|
|
| **Étoiles GitHub** | 5 204 ⭐ |
|
|
| **Catégorie** | [[cat-deployment\|Deployment & PaaS]] |
|
|
|
|
## 📝 Description
|
|
|
|
**Uncloud** est un **orchestrateur de cluster Docker** récent (2024) créé par Pavlo Shvidersky (un développeur Go réputé). Sa promesse : **rendre Docker Swarm aussi simple à utiliser que Docker Compose**, mais avec les bénéfices d'un vrai cluster multi-host (haute disponibilité, scaling, rolling updates).
|
|
|
|
La **CLI `unc`** est le cœur de l'expérience : un seul binaire Go, statique, qui se connecte à un **control plane** auto-hébergé (un seul conteneur Docker). Avec `unc deploy <image>`, on déclare un service (réplicas, ressources, ports, healthcheck) et Uncloud le **planifie sur le cluster Swarm** automatiquement, en répartissant la charge. Les `unc machine` permettent de provisionner des **machines distantes** (VPS, Hetzner, Scaleway, DigitalOcean, Vultr) depuis la CLI.
|
|
|
|
L'**innovation** est la **machine image** : un format déclaratif (YAML) qui décrit un service complet (image, env, volumes, healthcheck, scaling, réseau). On peut **versionner ces définitions dans Git** et les **redeployer** sur n'importe quel cluster Uncloud. C'est **GitOps pour Docker Swarm**.
|
|
|
|
**Différences avec les PaaS classiques** : Uncloud **n'a pas d'UI web** (CLI + éventuellement TUI), il **ne cache pas Docker Swarm** (il s'appuie dessus), il est **orienté SRE/dev** qui veulent un **workflow `compose.yml → cluster`** sans Kubernetes. C'est **plus bas niveau** que Coolify mais **plus puissant** qu'un docker-compose manuel.
|
|
|
|
**Public cible** : **devs Go / SRE** qui aiment la CLI, **équipes** qui veulent industrialiser un cluster Swarm, **homelabbers avancés** qui sortent du mono-serveur. Pour un PaaS avec UI, [[app-coolify]] / [[app-dokploy]] ; pour Swarm "PaaS-y", [[app-caprover]].
|
|
|
|
## 🚀 Installation
|
|
|
|
### Installation de la CLI (Linux/macOS)
|
|
|
|
```bash
|
|
# Via le binaire pré-compilé
|
|
curl -fsSL https://github.com/psviderski/uncloud/releases/latest/download/unc-linux-amd64 -o /usr/local/bin/unc
|
|
chmod +x /usr/local/bin/unc
|
|
unc version # vérif
|
|
```
|
|
|
|
### Initialisation d'un cluster
|
|
|
|
```bash
|
|
# Sur le premier host (control plane)
|
|
unc init
|
|
# Cette commande :
|
|
# - initialise Docker Swarm
|
|
# - démarre le control plane Uncloud
|
|
# - configure le contexte CLI local
|
|
|
|
# Sur chaque host additionnel (worker)
|
|
unc machine create ssh://user@host2.example.com
|
|
# Uncloud provisionne Swarm + joint le cluster automatiquement
|
|
```
|
|
|
|
### docker-compose.yml du control plane (auto-installé)
|
|
|
|
```yaml
|
|
# Généré par `unc init`, pas besoin de l'écrire manuellement
|
|
services:
|
|
uncloud-api:
|
|
image: ghcr.io/psviderski/uncloud:latest
|
|
container_name: uncloud-api
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8080:8080" # API
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
- ./data:/data
|
|
network_mode: host
|
|
```
|
|
|
|
> ⚠️ **L'API Uncloud a besoin d'accéder au socket Docker** de l'hôte. Isoler sur un hôte de confiance.
|
|
|
|
## ⚙️ Configuration
|
|
|
|
1. **Initialiser le cluster** : `unc init` sur le host principal
|
|
2. **Ajouter des machines** : `unc machine create ssh://user@host` (Hetzner, Scaleway, VPS perso, etc.)
|
|
3. **Déployer un service** : `unc deploy -i nginx:latest --replicas 3 --port 80:80 nginx`
|
|
4. **Machine image (GitOps)** : créer un `nginx.yml` avec `image`, `replicas`, `healthcheck`, `ports` ; `unc apply -f nginx.yml`
|
|
5. **Scaler** : `unc scale nginx=5` (rolling update sur le cluster)
|
|
6. **Load balancing** : Uncloud crée un **service mesh** Swarm interne, les services se découvrent par DNS
|
|
7. **TLS** : provisionner un reverse proxy (Traefik, Caddy) devant, ou activer le `unc proxy` intégré
|
|
8. **Logs centralisés** : `unc logs nginx -f` agrège les logs des 3 replicas
|
|
|
|
## 🔗 Alternatives
|
|
|
|
- **Docker Swarm natif** — sous-jacent à Uncloud, plus bas niveau
|
|
- **Coolify** — PaaS UI web, plus user-friendly, pas Swarm-first
|
|
- **Dokploy** — concurrent de Coolify, UI Next.js
|
|
- **CapRover** — PaaS Swarm avec UI web, plus âgé
|
|
- **Kubernetes (K3s)** — orchestrateur plus puissant mais beaucoup plus complexe
|
|
- **Nomad** — alternative à K8s par HashiCorp, plus simple
|
|
- **Pulumi / Ansible + Compose** — DIY, plus de contrôle, plus verbeux
|
|
- **Fly.io** — PaaS managé multi-région, équivalent cloud
|
|
|
|
## 🔒 Sécurité
|
|
|
|
- **SSH key auth** : Uncloud utilise SSH pour provisionner les machines, **désactiver le password auth**
|
|
- **mTLS Swarm** : activer `--listen-addr` avec un cert sur le control plane
|
|
- **Compte Uncloud** : un premier compte créé à `unc init`, **2FA recommandée**
|
|
- **Volumes chiffrés** : utiliser des **drivers de volumes chiffrés** (LUKS, ZFS crypt) sur les hosts
|
|
- **Limiter l'accès au socket Docker** : isoler le control plane sur un hôte dédié
|
|
- **Mettre à jour** : `unc update` régulièrement (CLI + control plane)
|
|
|
|
## 📚 Ressources
|
|
|
|
- [Site officiel](https://uncloud.run/)
|
|
- [Documentation](https://uncloud.run/docs)
|
|
- [Dépôt GitHub psviderski/uncloud](https://github.com/psviderski/uncloud)
|
|
- [Exemples de machine images](https://github.com/psviderski/uncloud/tree/main/examples)
|
|
- [Uncloud vs Kubernetes (blog)](https://uncloud.run/blog)
|
|
|
|
## 🔗 Pages Liées
|
|
|
|
- [[cat-deployment]]
|
|
- [[app-coolify]]
|
|
- [[app-dokploy]]
|
|
- [[app-caprover]]
|
|
- [[app-portainer]]
|
|
- [[cat-docker]]
|
|
- [[securisation-home-lab]]
|
|
- [[recettes-docker-compose]]
|