Kopia на Ubuntu 24.04: пошаговая установка
Если вы уже пробовали restic или Borg и упирались в отсутствие нормального веб-интерфейса для просмотра снэпшотов и восстановления файлов — Kopia закрывает именно эту дыру. Это тот же дедуплицирующий бэкап с шифрованием на клиенте, но с собственным браузерным UI, гибкими политиками хранения и поддержкой десятка бэкендов из коробки. Ниже — установка на чистый Ubuntu 24.04, создание репозитория, первый снэпшот и настройка автоматизации через systemd.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Kopia и когда она лучше restic или Borg
Kopia — открытый инструмент резервного копирования на Go, разработанный бывшими инженерами Google (в том числе одним из авторов Borg в его ранней истории). Ключевая идея та же, что у restic и Borg: контент-адресуемое хранилище, где данные режутся на чанки, дедуплицируются и шифруются до отправки в хранилище. Но у Kopia есть три вещи, которых нет у конкурентов из коробки:
- Встроенный веб-UI —
kopia serverподнимает интерфейс, где видно все снэпшоты, можно браузером зайти внутрь бэкапа и скачать отдельный файл, не разворачивая весь архив. - Параллельная заливка чанков — при бэкапе на S3-совместимое хранилище или Backblaze B2 Kopia грузит данные несколькими потоками, что на больших объёмах заметно быстрее однопоточных restic-снэпшотов (точных цифр не привожу — разница сильно зависит от канала и хранилища, проверяйте на своих данных).
- Политики на уровне дерева каталогов — retention, compression и exclude-правила можно задавать не глобально, а для конкретного пути, с наследованием.
Из минусов: сообщество меньше, чем у restic, и формат репозитория Kopia несовместим с restic/Borg — миграция между ними требует полного повторного бэкапа.
| Kopia | restic | Borg | |
|---|---|---|---|
| Веб-UI | есть, встроенный | нет (нужен сторонний, напр. restic-browser) | нет |
| Компрессия | zstd, s2, gzip, brotli | zstd | zstd, lz4, none |
| S3 / B2 / Azure / GCS | да | да | нет (только через rclone) |
| Скорость на маленьких файлах | высокая за счёт параллелизма | средняя | средняя |
| Формат репозитория | свой | свой | свой |
Если вам нужен только CLI и максимальная предсказуемость — почитайте про установку restic или BorgBackup. Если хочется UI и меньше ручной работы с cron — Kopia стоит попробовать в первую очередь.
Установка Kopia на Ubuntu 24.04
Официальный способ — подключить APT-репозиторий Kopia и ставить пакет через apt, тогда обновления идут штатно вместе с системой.
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://kopia.io/signing-key | sudo gpg --dearmor -o /etc/apt/keyrings/kopia-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kopia-keyring.gpg] http://packages.kopia.io/apt/ stable main" | \
sudo tee /etc/apt/sources.list.d/kopia.list
sudo apt update
sudo apt install kopia
Проверьте установленную версию — команда должна отработать без ошибок:
kopia --version
Если вам не подходит системный пакет (например, сервер без доступа к сторонним APT-репозиториям), скачайте .deb напрямую со страницы релизов на GitHub (kopia/kopia) и поставьте через sudo dpkg -i kopia_*.deb. Учтите, что в этом случае обновления придётся отслеживать и накатывать вручную.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверРепозиторий: где будут храниться бэкапы
Kopia хранит данные в «репозитории» — это может быть локальный диск, смонтированная сетевая шара, SFTP-хост или объектное хранилище. Для сервера с бэкапами разумнее всего использовать отдельный диск или удалённый S3-совместимый бакет — тогда потеря самого сервера не убивает и бэкапы.
Локальный репозиторий (для теста или если бэкап-диск примонтирован отдельно):
sudo mkdir -p /mnt/backup-disk/kopia-repo
kopia repository create filesystem --path /mnt/backup-disk/kopia-repo
Kopia попросит задать пароль репозитория — это ключ шифрования, без него данные не восстановить. Сохраните его в менеджере паролей, а не в текстовом файле рядом с сервером.
S3-совместимое хранилище (Backblaze B2, Wasabi, AWS S3 или собственный MinIO):
kopia repository create s3 \
--bucket=my-backups \
--endpoint=s3.eu-central-1.wasabisys.com \
--access-key=YOUR_ACCESS_KEY \
--secret-access-key=YOUR_SECRET_KEY
Если поднимаете собственное S3-хранилище на том же сервере или в соседнем дата-центре — посмотрите статью про установку MinIO: связка «Kopia на продакшен-сервере + MinIO на отдельной VPS» даёт независимость от внешних облаков и полный контроль над стоимостью хранения.
SFTP-репозиторий (если у вас уже есть отдельная VPS под бэкапы с SSH-доступом):
kopia repository create sftp \
--host=backup.example.com \
--username=kopia \
--path=/home/kopia/repo \
--keyfile=/home/deploy/.ssh/id_ed25519
После первого создания на других машинах репозиторий подключают командой kopia repository connect с теми же параметрами и паролем — это удобно, если снэпшоты в один репозиторий шлют несколько серверов.
Первый снэпшот и политики хранения
Снэпшот — это состояние каталога на момент запуска. Начните с одного важного пути, например конфигов и данных приложения:
kopia snapshot create /etc
kopia snapshot create /var/www
kopia snapshot create /var/lib/postgresql
Посмотреть список снэпшотов и их размер:
kopia snapshot list --all
По умолчанию Kopia хранит снэпшоты без ограничения — рано или поздно репозиторий раздуется. Задайте политику retention для конкретного пути:
kopia policy set /var/www \
--keep-latest 5 \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6
Это значит: последние 5 снэпшотов хранятся всегда, плюс по одному за каждый из последних 7 дней, 4 недель и 6 месяцев — остальные при обслуживании репозитория удаляются. Глобальные настройки (действуют для всех путей, если для них не задана своя политика) меняются флагом --global:
kopia policy set --global --compression zstd
kopia policy set --global --exclude "*.log" --exclude "node_modules" --exclude "*.tmp"
Компрессию лучше сразу выставить в zstd — она даёт хороший баланс скорости и степени сжатия, особенно для текстовых конфигов и дампов БД. Для файлов, которые уже сжаты (архивы, изображения, видео), компрессия почти не поможет — не тратьте на это CPU, добавьте такие пути в исключения.
Восстановление файлов
Восстановление из снэпшота — обычная операция, которую стоит хотя бы раз проверить сразу после настройки, а не в момент аварии:
# найти ID нужного снэпшота
kopia snapshot list /var/www
# восстановить в отдельную директорию, не поверх продакшена
kopia snapshot restore <snapshot-id> /tmp/restore-test
Через веб-UI (см. следующий раздел) восстановление ещё проще: заходите в снэпшот, как в файловый менеджер, и скачиваете нужный файл прямо из браузера, не разворачивая весь архив на диск.
Веб-интерфейс: kopia server
Встроенный сервер — главное отличие Kopia от restic и Borg. Запускается он отдельным процессом, слушает локальный порт и отдаёт UI по HTTPS с базовой аутентификацией.
Заведите отдельного системного пользователя, от которого будет работать сервер:
sudo useradd --system --no-create-home --shell /usr/sbin/nologin kopia
Создайте пользователя для входа в веб-UI (это отдельная сущность от системного пользователя ОС):
kopia server users add admin@$(hostname)
Kopia спросит пароль для входа в интерфейс — задайте отдельный, не совпадающий с паролем репозитория.
Юнит systemd для постоянной работы сервера:
# /etc/systemd/system/kopia-server.service
[Unit]
Description=Kopia Backup Server
After=network.target
[Service]
Type=simple
User=kopia
ExecStart=/usr/bin/kopia server start \
--address=127.0.0.1:51515 \
--tls-generate-cert \
--server-username=admin@%H
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now kopia-server
sudo systemctl status kopia-server
Сервер слушает только 127.0.0.1 — наружу его пускать напрямую не стоит. Проброс наружу с нормальным TLS-сертификатом от Let's Encrypt делается через reverse-proxy — подробности в статье про Caddy с автоматическим SSL. Достаточно указать reverse_proxy 127.0.0.1:51515 в Caddyfile для нужного поддомена, и Caddy сам выпустит и продлит сертификат.
Автоматизация: расписание и обслуживание репозитория
Ручные снэпшоты быстро забываются, поэтому переносим их на systemd timer — это надёжнее cron в плане логирования через journalctl и обработки сбоев.
# /etc/systemd/system/kopia-backup.service
[Unit]
Description=Kopia snapshot run
[Service]
Type=oneshot
User=kopia
ExecStart=/usr/bin/kopia snapshot create /etc /var/www /var/lib/postgresql
# /etc/systemd/system/kopia-backup.timer
[Unit]
Description=Daily Kopia snapshot
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now kopia-backup.timer
systemctl list-timers | grep kopia
Отдельно не забывайте про обслуживание репозитория — оно фактически удаляет данные, помеченные политиками retention, и уплотняет хранилище. Без него старые чанки продолжат занимать место даже после того, как связанные с ними снэпшоты «удалены»:
kopia maintenance run --full
Для локального репозитория Kopia обычно сама предлагает запускать обслуживание по расписанию при подключении — можно оставить автоматику или дублировать её отдельным таймером раз в неделю, если хотите контролировать момент запуска вручную (обслуживание нагружает диск и CPU).
Общий подход к тому, каким должен быть сервер под бэкапы — сколько диска и на каком расстоянии от продакшена его держать, — разобран в статье про настройку VPS под бэкапы и архив. Если ещё не настраивали автоматизацию бэкапов в принципе, начните с базового чек-листа для Ubuntu 24.04 — там подробнее про выбор целевого хранилища и частоту снэпшотов.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли перенести существующий репозиторий restic или Borg в Kopia?
Прямой миграции нет — форматы репозиториев несовместимы. Придётся сделать полный первый снэпшот в Kopia заново и какое-то время держать оба архива параллельно, пока не убедитесь, что новый бэкап рабочий.
Что будет, если забыть пароль репозитория?
Данные восстановить не получится — Kopia шифрует всё на клиенте, и без пароля (или сохранённого токена подключения) содержимое репозитория бесполезно. Обязательно храните пароль отдельно от сервера, который бэкапите.
Нужен ли отдельный сервер под Kopia или можно ставить на продакшен-машину?
CLI и systemd timer можно ставить прямо на рабочий сервер — они лёгкие. А вот сам репозиторий (место хранения бэкапов) держать на том же диске бессмысленно: при отказе диска или взломе сервера вы потеряете и данные, и бэкап одновременно. Используйте отдельную VPS, сетевое хранилище или S3-совместимый бакет.
Насколько Kopia прожорлива по ресурсам?
Для небольших серверов (конфиги, сайты, база на несколько гигабайт) хватает 1-2 ГБ RAM и одного ядра. На больших объёмах данных индексация и дедупликация активнее используют CPU и память — при регулярных зависаниях увеличивайте ресурсы или разбивайте бэкап на несколько снэпшотов по путям.
Как проверить, что бэкап действительно восстанавливается?
Регулярно (раз в месяц минимум) выполняйте kopia snapshot restore в тестовую директорию на отдельной машине и сверяйте контрольные файлы. Бэкап, который ни разу не восстанавливали, — это не бэкап, а предположение.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →