Резервное копирование и восстановление Nextcloud

Обновлено Обновлено: Опубликовано Опубликовано:

В данной инструкции мы рассмотрим процедуры резервного копирования и восстановления Nextcloud. Работать будем с Linux.

В инструкции предполагается, что Nextcloud установлен в каталог /var/www/nextcloud, а база данных называется nextcloud. Сохранять данные будем в каталог /backup. Также в конце инструкции будут ссылки на полезные материалы.

В продуктивной среде необходимо хранить резервные копии на сетевом диске или внешнем сервере.

Резервное копирование

Для сохранения информации Nextcloud нам нужно скопировать файлы приложения и каталог data, где хранятся пользовательские данные, а также сделать дамп базы данных. Рассмотрим процессы по шагам.

Включение режима обслуживания

Рекомендуется перевести работу Nextcloud в режим обслуживания. В данном режиме пользователи не могут войти в систему и работать с ней. С одной стороны, это обеспечит консистентность данных, но с другой, приведет к деградации сервиса. Поэтому выполнять данную команду стоит в то время, когда никто не работает с облаком.

Команда будет зависеть от того, под каким пользователем запускается php интерпретатор.

а) Если пользователь www-data (как правило, в Linux на основе DEB):

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on

б) Если пользователь apache (как правило, в Linux на основе RPM):

sudo -u apache php /var/www/nextcloud/occ maintenance:mode --on

* предполагается, что nextcloud установлен в каталог /var/www/nextcloud, в противном случае, поменяйте путь на другой.

Копирование данных

Как было сказано выше, наш каталог с полезными данными находится по пути /var/www/nextcloud.

По умолчанию, каталог с пользовательскими данными находится там же, где и файлы nextcloud. Однако, это не всегда так — администратор имеет возможность перенести данные в другое место. Посмотреть текущее местополоежение каталога можно в конфигурационном файле (директива datadirectory). Пример команды:

cat /var/www/nextcloud/config/config.php | grep datadirectory

* где /var/www/nextcloud — каталог, куда установлен nextcloud.

Если путь хранения данных отличается от пути расположения nextcloud, копировать пользовательские данные нужно отдельно.

У нас есть несколько способов сделать архив данных. Рассмотрим несколько примеров.

1. С помощью rsync. Данная утилита позволяет быстро синхронизировать данные в разных каталогах. Плюс — процесс проходит быстро для повторных запусков, минус — если удалить данные, то изменения попадут в бэкап.

Для начала создадим каталог, в который будем копировать данные:

mkdir -p /backup/nextcloud-rsync

После выполняем команду:

rsync -a --delete /var/www/nextcloud/ /backup/nextcloud-rsync/

* все данные из каталога /var/www/nextcloud будут сохранены в /backup/nextcloud-rsync.

2. С помощью tar. Мы можем создать архив каталога с помощью команды tar.

Для начала создадим каталог, в который будем копировать данные:

mkdir -p /backup/nextcloud-tar

После переходим в каталог с nextcloud и выполняем команду:

cd /var/www/nextcloud

tar -zcf /backup/nextcloud-tar/nextcloud.tar.gz .

* данной командой мы создадим архив /backup/nextcloud-tar/nextcloud.tar.gz.

Дамп базы данных

Сначала создадим каталог, где будут храниться архивы базы данных:

mkdir -p /backup/database

Следующие действия зависят от того, какая у нас используется СУБД. Рассмотрим варианты для MySQL/MariaDB и PostgreSQL. Напомню, что в нашем примере база данных называется nextcloud

MySQL/MariaDB

Выполняем команду:

mysqldump -uroot -p nextcloud | gzip > /backup/database/nextcloud.sql.gz

Система запросит пароль от root пользователя MySQL.

PostgreSQL

Для создания дампа базы PostgreSQL используем такую команду:

sudo -u postgres pg_dump nextcloud | gzip > /backup/database/nextcloud.sql.gz

Выключение режима обслуживания

Ранее, нами был включен режим обслуживания для обеспечения большей целостности данных. Данный режим не позволяет выполнить вход в систему и работать с ней, поэтому его нужно сразу выключить после создания резервной копии.

Команда будет зависеть от того, под каким пользователем запускается php интерпретатор.

а) Если пользователь www-data (как правило, в Linux на основе DEB):

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

б) Если пользователь apache (как правило, в Linux на основе RPM):

sudo -u apache php /var/www/nextcloud/occ maintenance:mode --off

* предполагается, что nextcloud установлен в каталог /var/www/nextcloud, в противном случае, поменяйте путь на другой.

Скрипт для автоматического резервного копирования

Напишем небольшой скрипт для автоматизации процесса создания резервной копии. Пример будет приведен для СУБД MySQL.

Для начала подготовим систему. Входим в оболочку SQL:

mysql -uroot -p

Создадим пользователя, который будет иметь права выполнения резервных копий:

> CREATE USER 'backup'@'localhost' IDENTIFIED BY 'backup123';

> GRANT SELECT, SHOW VIEW, EVENT, TRIGGER, LOCK TABLES, EXECUTE ON nextcloud.* TO backup@localhost; 

> GRANT RELOAD, REPLICATION CLIENT, EVENT, TRIGGER, LOCK TABLES, EXECUTE ON *.* TO backup@localhost;

* в нашем примере будет создана учетная запись backup с паролем backup123. Ей будет предоставлены права создания дампа для базы nextcloud.

Чтобы в скрипте не нужно было указывать пароль, создадим файл:

vi /root/.my.cnf

[mysqldump]
host = localhost
user=backup
password="backup123"

* данный файл хранит настройки подключения к базе при выполнении mysqldump. Предполагается, что скрипт резервного копирования будет запускаться от пользователя root. Именно поэтому, мы создали данный файл в домашней директории этого пользователя.

Теперь можно написать и сам скрипт:

mkdir /scripts

vi /scripts/nextcloud_backup.sh

#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

dbname='nextcloud'
nextcloud_dir='/var/www/nextcloud'
destination_root='/backup'
destination_mysql=${destination_root}/mysql
destination_archive=${destination_root}/archive
destination_rsync=${destination_root}/rsync
apache_user='www-data'

dow=$(date +%u)
fdate=`date +%Y-%m-%d`

test -d ${destination_mysql} || mkdir -p ${destination_mysql}
test -d ${destination_rsync} || mkdir -p ${destination_rsync}
test -d ${destination_archive} || mkdir -p ${destination_archive}

#Delete old mysql backups
if [ `ls ${destination_mysql} | wc -l` -gt 2 ];
then
  find ${destination_mysql} -type f \( -name "*-1[^5]" -o -name "*-[023]?" \) -mtime +30 -exec rm -R {} \; 2>&1
  find ${destination_mysql} -type f -name "*-*" -mtime +180 -exec rm -R {} \; 2>&1
fi

#Delete old archive backups
if [ `ls ${destination_archive} | wc -l` -gt 2 ];
then
  find ${destination_archive} -type f \( -name "*-1[^5]" -o -name "*-[023]?" \) -mtime +30 -exec rm -R {} \; 2>&1
  find ${destination_archive} -type f -name "*-*" -mtime +180 -exec rm -R {} \; 2>&1
fi

# Enable maintenance mode
sudo -u ${apache_user} php ${nextcloud_dir}/occ maintenance:mode --on

# Backup Database
mysqldump --databases --skip-comments --no-tablespaces ${dbname} | gzip > ${destination_mysql}/${dbname}_${fdate}.sql.gz

# Create archive
if [ ${dow} -eq 6 ];
then
  pushd ${nextcloud_dir}
  tar -zcf ${destination_archive}/nextcloud_${fdate}.tar.gz .
  popd
fi

# Sync backup
rsync -a --delete ${nextcloud_dir}/ ${destination_rsync}/

# Disable maintenance mode
sudo -u ${apache_user} php ${nextcloud_dir}/occ maintenance:mode --off

* в двух словах, скрипт создаст дамп базы данных, по субботам будет делать архив и каждый день синхронизировать каталог. Все копии будут храниться в папке /backup.

Разрешаем запуск скрипта:

chmod +x /scripts/nextcloud_backup.sh

В cron создаем задание:

crontab -e

30 0 * * * /scripts/nextcloud_backup.sh

* наш скрипт будет запускаться каждый день в 00:30.

Восстановление Nextcloud

Выполним восстановление из ранее созданного бэкапа. Пошагово, процесс следующий:

  1. Разворачиваем СУБД и веб-сервер. Подробнее процесс описан в инструкциях по установке и настройке Nextcloud — ссылки ниже. Желательно, установить ту же версию PHP, что и на исходном сервере.
  2. Восстанавливаем файлы с порталом и пользовательскими данными.
  3. Восстанавливаем базу данных.
  4. Обновляем отпечаток данных.

Мы рассмотрим все процессы, кроме первого.

Восстановление файлов

Нам необходимо распаковать созданный ранее архив в каталог, где должен находиться портал. В нашем примере название у архива будет nextcloud.tar.gz, а путь до каталога портала определяется настройкой веб-сервера — если Вы руководствовались инструкциями с данного сайта, то это /var/www/nextcloud

И так, создаем данный каталог, если его еще нет:

mkdir -p /var/www/nextcloud

И распакуем в него наш архив:

tar -zxf nextcloud.tar.gz -C /var/www/nextcloud/ --strip-components 1

После нам необходимо убедиться, что владелец всех файлов будет пользователь, от которого работает веб. Это зависит от типа Linux.

а) Если пользователь www-data (как правило, в Linux на основе DEB):

chown -R www-data:www-data /var/www/nextcloud

б) Если пользователь apache (как правило, в Linux на основе RPM):

chown -R apache:apache /var/www/nextcloud

Восстановление базы данных

Если база еще не создана, подключимся к sql и выполним команду:

mysql -uroot -p

Если в нашей СУБД уже есть база nextcloud и она содержит старую информацию, которая должна быть заменена данными из бэкапа, сначала нужно удалить данную базу:

> DROP database nextcloud;

> CREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

> CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'nextcloud';

> GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost;

> quit

Ранее для базы данных был создан архив nextcloud.sql.gz. Распакуем его:

gunzip nextcloud.sql.gz

И выполняем восстановление базы данных:

mysql -uroot -p nextcloud < ./nextcloud.sql

Обновление fingerprint для файлов

Напоследом нам нужно выполнить команду maintenance:data-fingerprint. Она также будет зависеть от пользователя, под которым запускается php интерпретатор.

а) Если www-data (DEB):

sudo -u www-data php /var/www/nextcloud/occ maintenance:data-fingerprint

б) Если apache (RPM):

sudo -u apache php /var/www/nextcloud/occ maintenance:data-fingerprint

Ошибки в работе Nextcloud

Сервис Nextcloud зависит от различных компонентов и расширений. Если мы забыли что-то установить или настроить, при попытке зайти на веб-интерфейс, мы получим ошибку 500.

Как правило, причины разные, и чтобы узнать подробности, открываем лог:

tail -f /var/www/nextcloud/nextcloud.log

* где /var/www/nextcloud — каталог, в котором находится Nextcloud.

Читайте также

Данная информация может оказаться вам полезной:

1. Установка и настройка Nextcloud + Apache на Ubuntu.

2. Установка и настройка Nextcloud + NGINX на Ubuntu.

3. Установка и настройка NextCloud на Rocky Linux.

4. Настройка и использование Rsync Server.

5. Использование tar в Linux и FreeBSD для работы с архивами.

6. Пример настроек и использования rclone.

7. Как сделать дамп базы MySQL / MariaDB.

8. Резервное копирование PostgreSQL.

9. Как восстановить базу MySQL.

# Linux # MySQL # Резервное копирование # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет