Тема
Резервные копии
Без двух вещей установку не восстановить: базы данных и тома kvalli_data (вложения, доказательства прогонов, кэш репозиториев). Рядом с ними нужно хранить ENCRYPTION_KEY: учётные данные интеграций в базе зашифрованы им. И лицензионный ключ: без него восстановленная установка на новом сервере будет работать как Starter.
Через install.sh
bash
sudo /opt/kvalli/install.sh backupКопирует дамп базы, том kvalli_data, .env и файл лицензии в /opt/kvalli/backups/<время>. Хранятся 14 последних копий (--backup-keep).
Ночные копии
Включите при установке или повторным install с теми же --domain и --email:
bash
sudo /opt/kvalli/install.sh install --domain kvalli.acme.com --email qa-lead@acme.com \
--backup daily --backup-keep 14 --backup-copy-to /mnt/nas/kvalli--backup dailyсоздаёт/etc/cron.d/kvalli-backup: копия в 02:30, лог —/opt/kvalli/backup.log. Ночь, когда идёт обновление (автообновление в 03:15 или ещё не закончившийсяupgrade), пропускается: обновление делает копию само.--backup-copy-toкопирует каждую копию в каталог на другом диске или в смонтированный NAS. Без этого копии лежат на том же диске, что и база, и отказ диска заберёт и то и другое. В каталоге назначения удаляются только каталоги копий, остальное в общем каталоге не трогается. Если копирование не удалось, копия остаётся на сервере, и в логе это сказано.--backup-keep— сколько копий хранить, на сервере и в каталоге назначения.--backup offи--backup-copy-to offвыключают их.
Восстановление
bash
sudo /opt/kvalli/install.sh restore /opt/kvalli/backups/<время>Сначала копирует текущее состояние, затем возвращает базу и файлы к состоянию из копии. Если на сервере нет файла лицензии, берётся лицензия из копии.
В каждой копии лежит копия .env. Восстановление на сервере с другим ENCRYPTION_KEY предупредит об этом и возьмёт ENCRYPTION_KEY и JWT_SECRET из копии. Пароль базы, домен и остальные настройки сервера останутся прежними, а остальная часть старого .env останется в копии — её можно прочитать.
Чего нет в копии
backup архивирует том kvalli_data, но не kvalli_qa_agents, и restore возвращает только то, что взял. На текущей установке этот том пуст или почти пуст: встроенные навыки лежат в образе, а навыки проектов и пользовательские агенты — в PostgreSQL. В нём могут остаться только старые файлы agents/*.md, которые писали ранние версии; они один раз импортированы в проект по умолчанию и теперь лишь копия того, что есть в базе. Если установка обновлялась с такой версии и вам нужна и эта копия:
bash
docker run --rm -v kvalli_kvalli_qa_agents:/agents:ro -v "$PWD":/backup alpine tar czf /backup/kvalli-agents.tgz -C / agentsИмя тома начинается с имени compose-проекта — по умолчанию kvalli.
Docker Compose вручную
bash
docker compose exec -T postgres pg_dump -U kvalli -Fc kvalli_db > kvalli-db.dump
docker run --rm -v <project>_kvalli_data:/data -v "$PWD":/backup alpine \
tar czf /backup/kvalli-files.tgz /data<project> — имя compose-проекта, обычно имя каталога. Сохраните рядом .env и файл лицензии.