При использовании «домашнего» облака Nextcloud на Raspberry Pi мы должны быть готовы, что сломаются: сама малина, системная карта или диск с данными пользователей.
Надо защитить облако от этой напасти, поэтому надо регулярно делать копии папки с программой nextcloud, базы данных sql и папки с личными файлами пользователей.
Итак, настраиваем архивирование облака.
Нужно примонтировать второй резервный диск по адресу /mnt/hdd2.
Подключая диски к Raspberry, вы увеличиваете нагрузку на ее шину питания, это может приводить к зависанию микрокомпьютера и разным глюкам.
Безопаснее всего воспользоваться USB хабом со своим питанием.
Я пробовал вот такие варианты:
Это абсолютно бесполезная вещь. Даже один диск при подключенном питании без малины не раскручивает шпиндель с этом хабе! Что уж говорить о двух и более дисках?
Путем проб и ошибок был найден идеал:
Вот эта штука запускает диски без проблем. Но мы отвлеклись. Итак…
Набираем команду:
ls -l /dev/disk/by-uuid
находим UUID
Создаем точку монтирования. В данном случае это hdd2:
sudo mkdir /mnt/hdd2
Открываем fstab:
sudo nano /etc/fstab
Добавляем строку:
UUID=A69E29769E294063 /mnt/hdd2 ntfs nofail,uid=user,gid=group,dmask=0007 0 0
В это строке есть UUID диска A69E29769E294063, точка монтирования /mnt/hdd2, формат системы диска — ntfs (вы ведь форматировали диск в нтфсе, да?), пользователь и группа пользователя — вместо user и group поставьте своего юзера и группу. dmask=0007 0 0 — оставьте как есть. Т.е. диском с данными Nextcloud у нас владеет пользователь www-data, а диском для бэкапа — Ваш пользователь.
Перезагружаемся
sudo reboot
Первый USB-диск у нас содержит папку с данными пользователей.
Второй диск — резервный. Это место для хранения бэкапов.
Создаем на рабочем стол и открываем файл:
nano /home/user/Desktop/nextcloud.sh
Вставляем туда следующие строки:
#!/bin/bash #включение режима обслуживания sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mode --on #создание дампа базы данных на диск hhd2 mysqldump -u user -ppassword database > /mnt/hdd2/mariadb/nextcloud-$(date +"%d.%m.%y")_$(date +"%H:%M:%S").sql #синхронизация папки nextcloud на диск hdd2 rsync -azrv --delete /var/www/html/nextcloud /mnt/hdd2/ #синхронизация папки с данными пользователей с диска data2 на диск hdd2 rsync -azrv --delete /mnt/data2/data /mnt/hdd2/ #выключение режима обслуживания sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mode --off
Команда «mysqldump» создает дамп базы данных .sql.
Команда «rsync -azrv —delete» синхронизирует папку программы и папку с файлами пользователей. Она не перезаписывает их, а только изменяет, добавляет и удаляет новые, измененные или удаленные файлы. Это происходит быстрее, чем при полном копировании, и экономит количество циклов перезаписи на диске.
Закрываем и сохраняем файл — сохраняем, закрываем — ctrl+X, Y, Enter, делаем его исполняемым:
chmod +x /home/user/Desktop/nextcloud.sh
Открываем в терминале:
crontab -e
добавляем внизу:
#синхронизация папок nextcloud и базы данных на диске hdd2, в 1-00 ежедневно 0 1 * * * /home/user/Desktop/nextcloud.sh #удаление баз данных старше 2 дней, в 5-00 ежедневно 0 5 * * * find /mnt/hdd2/mariadb -type f -mtime +2 -delete
сохраняем, закрываем — ctrl+X, Y, Enter.
Таким образом мы настроили:
— сохранение рабочей папки /var/www/html/nextcloud на резервный диск.
— сохранение папки с данными пользователей
— сохранение базы данных из mariadb.
Это все, что необходимо.
Если например сгорела малина или диск, а архивный диск цел — покупаем новую малину или новый диск, устанавливаем свежую Raspberry OS, Apache2, php, mariadb, добавляем базу nextcloud, пользователя nextcloud (пароли создавайте прежние!), настраиваем SSL, «включаем» сайт по умолчанию в apache2, убеждаемся, что вебсервер доступен по ssl, настраиваем php (увеличиваем лимиты).
Монтируем диски, используя старые названия точек монтирования!
Копируем с резервного диска на основной рабочую папку /var/www/html/nextcloud
sudo cp /mnt/hdd2/nextcloud /var/www/html/nextcloud -r
Восстанавливаем базу данных из дампа:
mysql -u user -ppassword database < /mnt/hdd2/mariadb/nextcloud.sql
Вставляем свои: user, password, database и /mnt/hdd/mariadb/nextcloud_3.10.2023.sql — путь к файлу с дампом базы.
Проверяем правильность адреса домена, расположения папок и т.д.
Пробуем открыть облако из браузера. Если все делали правильно — должно заработать.
Открываем crontab в новой системе и настроить бэкап заново, как написано выше.
Если все работает, не забываем восстановить работу cron для nextcloud, как в этой статье.