У нас сложная структура: часть данных лежит просто в папке /opt/matrix-stack (например, база Postgres и конфиги), а часть данных (Nextcloud и Caddy) лежит в Docker Volumes (внутри глубин Докера).
Чтобы перенести всё без потерь, нужно "вытащить" данные из Volumes в файлы.
Останавливаем контейнеры (ОБЯЗАТЕЛЬНО):
Если этого не сделать, база данных может повредиться при копировании.
cd /opt/matrix-stack
docker compose stop
Архивируем Docker Volumes (Nextcloud и Caddy):
В вашем docker-compose.yml есть тома nextcloud_data, nextcloud_db_data и caddy_data. Нам нужно сохранить их содержимое в архив.
Мы запустим временный контейнер alpine, который подключит том и запакует его.
Выполните эти команды по очереди:
# 1. Бекап файлов Nextcloud
docker run --rm -v matrix_net_nextcloud_dаta:/volume -v /opt/matrix-stack:/backup alpine tar -czf /backup/nextcloud_files.tar.gz -C /volume .
# 2. Бекап базы данных Nextcloud (MariaDB)
docker run --rm -v matrix_net_nextcloud_db_dаta:/volume -v /opt/matrix-stack:/backup alpine tar -czf /backup/nextcloud_db.tar.gz -C /volume .
# 3. Бекап сертификатов Caddy (чтобы на новом сервере не перевыпускать лимиты)
docker run --rm -v matrix_net_caddy_dаta:/volume -v /opt/matrix-stack:/backup alpine tar -czf /backup/caddy_data.tar.gz -C /volume .
Примечание: Имена томов (matrix_net_...) могут отличаться. Проверьте их точные названия командой docker volume ls. Обычно Docker добавляет префикс папки (например matrix-stack_nextcloud_data). Если команда выдаст ошибку, подставьте правильное имя тома из списка.
Архивируем всю папку проекта:
Теперь, когда данные из томов лежат в файлах .tar.gz внутри нашей папки, запакуем всю папку целиком.
cd /opt
tar -czf matrix-full-backup.tar.gz matrix-stack
Восстановите Docker Volumes:
Сначала создадим пустые тома, а потом распакуем в них наши архивы.
Важно: Запустите docker compose up --no-start, чтобы Докер сам создал нужные тома с правильными именами.
docker compose up --no-start
Теперь распаковываем данные обратно в тома:
# 1. Восстанавливаем файлы Nextcloud
# (Замените 'matrix-stack_nextcloud_data' на точное имя тома, если оно другое - см. docker volume ls)
docker run --rm -v matrix-stack_nextcloud_dаta:/volume -v /opt/matrix-stack:/backup alpine sh -c "rm -rf /volume/* && tar -xzf /backup/nextcloud_files.tar.gz -C /volume"
# 2. Восстанавливаем базу Nextcloud
docker run --rm -v matrix-stack_nextcloud_db_dаta:/volume -v /opt/matrix-stack:/backup alpine sh -c "rm -rf /volume/* && tar -xzf /backup/nextcloud_db.tar.gz -C /volume"
# 3. Восстанавливаем сертификаты Caddy
docker run --rm -v matrix-stack_caddy_dаta:/volume -v /opt/matrix-stack:/backup alpine sh -c "rm -rf /volume/* && tar -xzf /backup/caddy_data.tar.gz -C /volume"
Удалите архивы внутри папки (чтобы не занимали место)
rm nextcloud_files.tar.gz nextcloud_db.tar.gz caddy_data.tar.gz
Запустите сервер:
docker compose up -d
Если на новом сервере изменился IP адрес, вам нужно:
Обновить A-записи в DNS у вашего регистратора домена.
Если вы использовали IP в конфигах (например в Caddyfile для LiveKit мы ставили 172..., это не изменится, но если где-то прописан внешний IP) — поправьте.
Очистить кэш браузера.
Всё должно заработать "как было", включая пользователей, чаты, файлы и базу данных.
Нет комментариев.
Операция выполнена успешно.