231 lines
13 KiB
Markdown
231 lines
13 KiB
Markdown
---
|
|
title: Kopia
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, backups, deduplication, encryption, cloud, s3, b2, sftp, webdav, kopia, snapshot, incremental, versionning, ui, desktop, docker, go]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=Backups, https://github.com/kopia/kopia]
|
|
---
|
|
|
|
# 💾 Kopia
|
|
|
|
> **Le challenger moderne dans l'arène des backup tools** : un binaire Go, une **UI desktop** élégante, des **snapshot policies** puissantes, et un support multi-cloud natif qui fait regretter à beaucoup d'avoir découvert Borg en premier.
|
|
|
|
## 📋 Informations Générales
|
|
|
|
| Champ | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | [kopia.io](https://kopia.io) |
|
|
| **GitHub** | [kopia/kopia](https://github.com/kopia/kopia) |
|
|
| **License** | Apache-2.0 |
|
|
| **Langage** | Go |
|
|
| **Étoiles GitHub** | 13,4k ⭐ |
|
|
| **Dernière MAJ** | 2026-06-06 |
|
|
| **Catégorie** | [[cat-backups|Backups]] |
|
|
|
|
## 📝 Description
|
|
|
|
**Kopia** est un outil de sauvegarde **multi-plateforme** (Windows, Linux, macOS, FreeBSD) qui combine un **moteur de déduplication et de chiffrement** à une **interface graphique desktop** élégante. Lancé en 2017, il est né avec l'ambition de **faire mieux que [[app-restic]] et [[app-borg]]** sur trois axes : la simplicité d'usage, le support multi-cloud, et la richesse des politiques de rétention.
|
|
|
|
Le cœur de Kopia est un **format de repository propriétaire** mais bien documenté, qui combine :
|
|
- une **déduplication par bloc** (Content-Defined Chunking, type CDC) à travers **toutes les snapshots du repo** (déduplication transversale multi-snapshot, comme restic et Borg),
|
|
- un **chiffrement AES-256-GCM** par défaut, plus moderne que le CTR+Poly1305 de restic,
|
|
- une **compression zstd ou gzip** *avant* chiffrement (utile sur des données textuelles, contrairement à restic qui refuse la compression pour des raisons de pureté cryptographique),
|
|
- des **blobs packés** dans des fichiers de grande taille pour réduire le nombre d'objets S3 et donc les coûts d'API.
|
|
|
|
Kopia se distingue surtout par son **écosystème de frontends** : c'est un des rares outils de backup qui a une **UI desktop officielle** (Electron, multi-plateforme) en plus de la CLI. L'UI permet de connecter un repository, de définir des **sources** (dossiers à sauvegarder), de créer des **snapshot policies** (rétention, planification), et de **restaurer** de manière granulaire (fichier, dossier, ou snapshot complète). Pour les homelabs, c'est un **game changer** par rapport à la pure CLI.
|
|
|
|
Côté backends, Kopia supporte nativement un large panel : `local`, `sftp`, `webdav`, et tous les principaux **object stores** : `S3`, `Backblaze B2`, `Google Cloud Storage`, `Azure Blob`, `OpenStack Swift`, `Rackspace Cloudfiles`, `S3-compatible` (Wasabi, MinIO, Scaleway, OVH, etc.). Il n'a pas encore de backend SSH natif distinct du SFTP, mais le SFTP couvre les usages SSH.
|
|
|
|
Le concept de **snapshot policy** est particulièrement agréable à utiliser : on définit une politique « garder 7 daily, 4 weekly, 6 monthly, 3 yearly » une seule fois, et Kopia l'applique à *toutes* les sources qui pointent vers cette policy. Pas besoin de configurer la rétention source par source.
|
|
|
|
Comparé à ses principaux rivaux :
|
|
- **vs [[app-restic]]** : Kopia a une **UI** (que restic n'a pas nativement), la **compression** (que restic refuse), des **policies** plus ergonomiques. Restic reste plus simple, plus minimal, et a un format de repo plus transparent.
|
|
- **vs [[app-borg]]** : Kopia est plus lent sur de très gros volumes (Borg a un cache local imbattable), mais **multi-cloud natif**, contrairement à Borg qui n'a pas de backend S3.
|
|
- **vs [[app-duplicati]]** : Kopia est **plus moderne**, **plus rapide** sur les incréments, **plus actif** côté release. Duplicati reste pertinent pour qui veut une **UI web self-hosted** (Kopia a une UI desktop, pas web — sauf à passer par [[app-backrest]] qui est web au-dessus de restic, pas Kopia).
|
|
- **vs [[app-backrest]]** : Backrest est l'UI web pour restic ; si on veut une UI web + Kopia, il n'y a pas d'équivalent exact, mais Kopia Desktop + tunnel SSH = acceptable.
|
|
|
|
**Public cible** : **intermédiaire**. Pour qui veut une UI moderne et du multi-cloud sans se battre avec la ligne de commande, Kopia est **probablement le meilleur choix en 2026** dans la catégorie backup self-hosted « moderne ».
|
|
|
|
## 🚀 Installation
|
|
|
|
### Option 1 : Docker Compose (UI Desktop via VNC — niche d'usage)
|
|
|
|
Kopia n'a pas d'image Docker officielle « serveur », car son usage principal est la **CLI ou l'UI desktop** lancée par l'utilisateur. Le pattern courant est :
|
|
- soit **lancer Kopia Desktop** sur le poste qui sauvegarde (cas d'usage typique),
|
|
- soit **lancer Kopia dans un cron Docker** (un `Dockerfile` maison) qui pousse vers S3/B2.
|
|
|
|
Pour les homelabs qui veulent automatiser depuis un serveur, voici un `docker-compose.yml` minimal qui **wrap Kopia dans un cron** :
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
version: '3.8'
|
|
services:
|
|
kopia-server:
|
|
build:
|
|
context: .
|
|
dockerfile_inline: |
|
|
FROM golang:1.22-alpine
|
|
RUN apk add --no-cache ca-certificates openssh-client curl bash
|
|
RUN curl -L https://github.com/kopia/kopia/releases/download/v0.18.0/kopia-0.18.0-linux-x64.tar.gz \
|
|
| tar -xz -C /usr/local/bin kopia
|
|
RUN adduser -D -u 1000 kopia
|
|
USER kopia
|
|
ENTRYPOINT ["kopia"]
|
|
image: kopia/kopia:latest
|
|
container_name: kopia-runner
|
|
restart: unless-stopped
|
|
environment:
|
|
- KOPIA_PASSWORD=${KOPIA_PASSWORD}
|
|
- KOPIA_REPOSITORY=${KOPIA_REPOSITORY} # ex: s3://kopia-bucket/repo
|
|
- KOPIA_CACHE_DIR=/var/cache/kopia
|
|
- TZ=Europe/Paris
|
|
volumes:
|
|
- /mnt/source:/source:ro
|
|
- kopia-cache:/var/cache/kopia
|
|
- kopia-config:/home/kopia/.config/kopia
|
|
- /etc/localtime:/etc/localtime:ro
|
|
# Aucun port exposé : tout passe par cron. L'UI reste sur le poste client.
|
|
|
|
volumes:
|
|
kopia-cache:
|
|
kopia-config:
|
|
```
|
|
|
|
En pratique, **l'installation recommandée** reste le binaire natif ou l'UI desktop.
|
|
|
|
### Option 2 : Natif (toutes plateformes)
|
|
|
|
```bash
|
|
# Linux (script d'install officiel)
|
|
curl -sSLf https://get.kopia.io | sh
|
|
|
|
# macOS
|
|
brew install kopia
|
|
|
|
# Windows (Chocolatey)
|
|
choco install kopia
|
|
|
|
# Snap (Linux)
|
|
sudo snap install kopia
|
|
|
|
# Vérification
|
|
kopia --version
|
|
```
|
|
|
|
### Premier pas en CLI
|
|
|
|
```bash
|
|
# Connecter un repo S3
|
|
kopia repository create s3 --bucket=kopia-backups --prefix=homelab \
|
|
--access-key=... --secret-access-key=...
|
|
|
|
# Connecter un repo B2 (plus économique)
|
|
kopia repository create b2 --bucket=kopia-backups \
|
|
--key-id=... --key=...
|
|
|
|
# Définir une politique
|
|
kopia policy set --global --keep-latest=10 --keep-daily=7 \
|
|
--keep-weekly=4 --keep-monthly=6 --keep-annual=3 --compression=zstd
|
|
|
|
# Snapshot d'un dossier
|
|
kopia snapshot create /home /etc /var/data
|
|
|
|
# Lister
|
|
kopia snapshot list
|
|
kopia repo status
|
|
|
|
# Restaurer
|
|
kopia restore <snapshot-id> /tmp/restore
|
|
```
|
|
|
|
## ⚙️ Configuration Initiale
|
|
|
|
1. **Installer l'UI desktop** depuis [kopia.io/download](https://kopia.io/download/) (Windows / macOS / Linux) ou utiliser la CLI.
|
|
2. **Connecter un repository** : bouton *New Repository* → choisir le backend (S3, B2, SFTP, local…) → saisir credentials. Kopia chiffrera côté client avant l'upload.
|
|
3. **Définir le mot de passe du repository** : c'est la **clé maîtresse**. La stocker dans un gestionnaire de mots de passe (KeePassXC, Bitwarden). Sans elle, le repo est irrécupérable.
|
|
4. **Créer une snapshot policy globale** : *Preferences → Policies* → configurer `keep-daily=7`, `keep-weekly=4`, `keep-monthly=6`, `keep-annual=3`, et `compression=zstd` (ou `gzip` si les CPU sont limités).
|
|
5. **Ajouter des sources** : *Add source* → sélectionner un dossier → Kopia propose d'appliquer la policy globale. Répéter pour chaque source (répertoire home, `/etc`, base de données, etc.).
|
|
6. **Planifier l'exécution** : dans l'UI, onglet *Scheduling* → activer pour qu'il tourne toutes les X heures. Sous Linux, c'est Kopia qui s'auto-configure avec un timer systemd ; sur Windows, c'est une Task Scheduler entry.
|
|
|
|
## 🔄 Alternatives
|
|
|
|
### Open Source
|
|
|
|
- [[app-restic]] — Plus minimaliste, format plus simple, pas d'UI native.
|
|
- [[app-borg]] — Plus rapide, compression native, mais pas de S3 natif.
|
|
- [[app-duplicati]] — UI web self-hosted, 20+ backends, mais en perte de vitesse.
|
|
- [[app-backrest]] — UI web pour restic, le concurrent direct *UI web* de Kopia.
|
|
- [[app-duplicacy]] — Concurrent propriétaire avec déduplication globale multi-utilisateur.
|
|
|
|
### Comparaison Kopia vs alternatives modernes
|
|
|
|
| Critère | Kopia | [[app-restic]] | [[app-backrest]] | [[app-borg]] |
|
|
| :--- | :--- | :--- | :--- | :--- |
|
|
| UI | Desktop | ❌ | Web | ❌ (tiers : [[app-borg-ui]]) |
|
|
| Compression | ✅ zstd, gzip | ❌ | = restic (non) | ✅ lz4, zstd, lzma |
|
|
| Backends | 10+ | 10+ | = restic | SSH/SFTP, +rclone |
|
|
| Snapshot policies | Très riches | Basique | Basique (délégué à restic) | Basique (cron + `borg prune`) |
|
|
| Déduplication transversale | ✅ | ✅ | = restic | ✅ |
|
|
| Format de repo | Spécifique | Spécifique simple | = restic | Spécifique |
|
|
| Licence | Apache-2.0 | BSD-2-Clause | MIT | BSD-3-Clause |
|
|
| Chiffrement | AES-256-GCM | AES-256-CTR+Poly1305 | = restic | AES-256-OCB+BLAKE2b |
|
|
| Cadence de release | Très active | Active | Active | Mature |
|
|
|
|
**Verdict** : Kopia est **le meilleur compromis « moderne, UI, multi-cloud »** en 2026. Pour un homelab neuf, c'est le choix par défaut si on veut éviter la CLI.
|
|
|
|
### Propriétaires (ce que Kopia remplace)
|
|
|
|
- **Duplicati Cloud** — Pas de SaaS Duplicati, mais CrashPlan/B2 sont les équivalents commerciaux.
|
|
- **Backblaze Personal** — Pas self-hosted, mais très simple, 7 $/mois/poste.
|
|
- **iDrive** — Concurrent commercial, multi-poste, ~60 $/an pour 5 To.
|
|
- **Acronis True Image** — Référence desktop, ~50 $/an/poste, fermé.
|
|
- **MSP360 (CloudBerry)** — Outil commercial basé sur des backends S3 compatibles.
|
|
- **Veeam Agent** — Pour les VMs, ~40 $/poste/an.
|
|
|
|
### Backends de stockage
|
|
|
|
| Service | Coût (~$ / To / mois) | Egress | Idéal pour |
|
|
| :--- | :--- | :--- | :--- |
|
|
| **Backblaze B2** | 6 $ | 10 $ / To | Homelab standard |
|
|
| **Wasabi** | 7 $ | 0 $ | Lecture fréquente, EU |
|
|
| **Scaleway Object Storage** | 7,5 € | 0,01 € / Go | EU, souverain |
|
|
| **OVH Object Storage** | 7,2 € | sortant | EU |
|
|
| **Hetzner Storage Box** | ~3,5 € / To / mois | 0 | SMB EU |
|
|
| **MinIO** (self-hosted) | Coût serveur | 0 $ | 100% on-prem |
|
|
|
|
## 🔐 Sécurité
|
|
|
|
- **Chiffrement AES-256-GCM** : le repo est **chiffré côté client** avant tout upload. Le serveur de stockage (S3, B2, etc.) ne voit jamais de données en clair. La clé est dérivée du mot de passe du repository via PBKDF2/Argon2.
|
|
- **Règle 3-2-1** : Kopia ne fait pas la politique — c'est à l'utilisateur. Setup classique :
|
|
- Backup **local** sur un disque USB ou un NAS (snapshot Kopia vers `/mnt/backup-local`).
|
|
- Backup **cloud** sur B2 ou Wasabi (snapshot Kopia vers S3-compatible).
|
|
- Optionnel : rotation mensuelle d'un disque USB hors-ligne (air-gapped contre rançongiciels).
|
|
- **Clé/mot de passe du repo** : c'est **LE** point critique. Sans lui, le repo est une poubelle chiffrée. À stocker dans un gestionnaire de mots de passe **indépendant** de la machine sauvegardée (ex. : Bitwarden, KeePassXC synchronisé via un autre canal).
|
|
- **Test de restauration régulier** : restaurer **manuellement** un dossier aléatoire sur une machine vierge au moins tous les 30-90 jours. Les backups non testés ne sont **pas** des backups.
|
|
- **Vérification d'intégrité** : `kopia repository validate --verify-percent=5` lit aléatoirement 5 % des blobs et vérifie qu'ils se déchiffrent et se désérialisent correctement. À programmer en cron mensuel.
|
|
- **Air-gapped backup** : Kopia supporte `sftp` et `local` — on peut très bien avoir un script qui monte un disque USB chiffré (LUKS), fait un snapshot Kopia dessus, démonte, et range le disque dans un coffre.
|
|
|
|
## 📚 Ressources
|
|
|
|
- [Site officiel kopia.io](https://kopia.io)
|
|
- [Documentation complète](https://kopia.io/docs/)
|
|
- [GitHub kopia/kopia](https://github.com/kopia/kopia)
|
|
- [Forum communautaire](https://kopia.discourse.group/)
|
|
- [Releases et changelogs](https://github.com/kopia/kopia/releases)
|
|
|
|
## Pages Liées
|
|
|
|
- [[cat-backups]] — Catégorie Backups
|
|
- [[strategie-backup-321]] — La règle 3-2-1 expliquée
|
|
- [[app-restic]] — Concurrent direct, plus minimaliste
|
|
- [[app-borg]] — Concurrent plus rapide, compression native
|
|
- [[app-backrest]] — UI web au-dessus de restic
|
|
- [[app-duplicati]] — Concurrent UI web self-hosted
|
|
- [[app-portainer]] — Visualiser les conteneurs
|
|
- [[app-traefik]] — Reverse-proxy HTTPS
|
|
- [[securisation-home-lab]] — Bonnes pratiques de sécurité
|
|
- [[glossaire-homelab]] — Définitions
|