Планирование

Добрый день, мой дорогой читатель. Немного поговорим о таком этапе как “планирование”.
Первый вопрос в нашей ситуации, а зачем мигрировать? Чтобы ответить, на этот вопрос, то мы погружаемся в бизнес. Есть такие понятия как бюджет на инфраструктуру, отказоустойчивость, меняем провайдера услуг или закупили свое собственное оборудование, возможно улетаем в облака (означает это, что будет весело, но больно).

Итак, нам каким-то образом ответили на наш вопрос, зачем же мы мигрируем. Мы с вами отвечаем:
- “Сделаем, без проблем”.
Вопрос, который нам задают в ответ:
-”Сколько же понадобится времени на миграцию?”
Теперь мы начинаем смотреть, а сколько у нас занято места на сервере.
(Я не буду углубляться настолько подробно, вплоть до подключения к серверу через ssh или консоль, я верю, что вы это уже умеете или научитесь, прежде, чем сюда заходить)
Посмотрим наш диск базовой командой (на моем личном nextcloud-сервере все просто с разметкой LVM, почти все пространство монтировано в корень)
# df -h
Вывод команды:

Использовано 72G из 400G, хорошо, значит сервер на который мы должны мигрировать, обязан иметь диск не менее 100G с возможностью дальнейшего увеличения и добавления внешних средств хранения данных.

Сколько будет длится простой?

В целом берем с запасом, простой сервиса будет около 2-4 часов, если у нас примерно столько же как и в примере данных для переноса. Во время передачи архива бэкапа сервис будет доступен, недоступность будет в двух местах, во время начала бэкапа на исходном сервере, далее когда будем выполнять переключение между серверами.
Планируем работы на ночь и все у нас хорошо. (На время работ при желание можно выставить maintenance mode в конфигурационном файле php, чтобы никто не попытался ломится на сервер)

# nano /var/snap/nextcloud/current/nextcloud/config/config.php

Меняем строчку:

# maintenance mode => false, на maintenance mode => true.

Хорошо, далее, мы должны понимать, что переезжать на более слабый сервер, не очень хорошая идея. Nextcloud монолит, который сильно грузит систему php-модулями. Если хранение данных будет производиться чаще всего в “холодном” режиме, то есть, зашли-скачали-вышли, то 2 vCPU/ 2RAM на виртуальном машине хватит с головой, но если у вас огромный Enterprise сервер с кучей модулей и надстроек над nextcloud, то тогда вопрос:
-“Зачем вы продолжаете смотреть данную статью?”

Посмеялись и хватит. Надеюсь, суть вы уловили.

О способе в целом

Если у вас виртуализация, есть поверх нее средства бэкапов по типу Veeam или Commvault, то наверное быстрее перенести саму виртуальную машину целиком, сделав бэкап всей файловой системы и не парится. Может вообще стоит выгрузить вм полностью, в формате .ova (для VMware), остальные форматы я не знаю)

Мой вариант нужен, если у вас нет доступа до виртуализации или же это железный сервер, когда есть две OS и у них между собой есть только соединение по ssh.
На чем он основан, этот мой способ? На работе со snap-приложением целиком и его полной архивации, далее архив передается, распаковывается, приложение начинает работать уже с ним. Способ еще подходит просто для того, чтобы иногда делать бэкап системы и выгружать к себе локально.

Сам способ в виде инструкции

(Работаю через root, вы подставляйте sudo перед командами, если нет root на сервере)

Представим, у нас уже есть сервер, который мы установили через snap.
Об установке через snap:

По умолчанию пакетного менеджера snap в системе может не быть, его надо установить:
# apt update && apt install -y snapd.

Затем можно устанавливать и nextcloud:

# snap install nextcloud

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

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

Можно подключить внешние диски, хранить на них, хранить через ftp и S3, в целом всё одно и тоже, все монтируется к вашей основной файловой системе и оттуда nextcloud берет информацию о данных пользователей. 

Прописываем доверенный домен для нашего сервер или IP.
Само значение храниться в файле конфигурации php:

# nano /var/snap/nextcloud/current/nextcloud/config/config.php

Ищем поле ‘trusted_domains’ и прописываем свое значение в поле как на скриншоте ниже:

Или можно пойти по простому пути и прописать команду ниже:

# snap run nextcloud.occconfig:system:settrusted_domains 1 --value=*example.com

(Когда будем менять на новом сервере данное значение, нужно его менять только через сам конфигурационный файл)

Выдаем нашему php необходимое значение оперативной памяти:

# snap set nextcloud php.memory-limit=1024M

Вот у нас установленный сервер, ставим свой SSL-сертификат или Let`s encrypt
(я покажу, как ставить бесплатный)

Вызываем создание сертификата командой:

# snap run nextcloud.enable-https lets-encrypt

Чтобы продолжить, введите "у".

Затем нужно предоставить адрес электронной почты.
# Please enter an email address (for urgent notices or key recovery): your_email@domain.com

В конце нужно ввести домен сервера nextcloud:
# Please enter your domain name(s) (space-separated): example.com

После этого запрос на сертификат будет отправлен в Let’s Encrypt, и при условии, что все хорошо, для немедленного внедрения SSL демон Apache будет перезапущен автоматически.

# Attempting to obtain certificates... done Restarting apache... done

Теперь вы можете войти в Nextcloud.

В целом на исходном сервере всё, работаем, создаем пользователей и радуемся до момента необходимости миграции)

Немного об управлении через snap:

# snap list --all (вывести все snap-демоны)

# snap start/stop/disable/enable/restart/ *snapd (обычные действия как и в systemctl)

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

# cat /snap/nextcloud/current/meta/snap.yaml

Процедура обновления snap nextcloud (не забываем о снапшотах системы через snap или виртуализацию)

Останавливаем сервис:

# snap stop nextcloud

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

# snap refresh nextcloud --stable

Выбрать из листа стабильных версий:

# snap refresh --channel=25/stable nextcloud (downgrade так просто не работает, проверено)

Подробнее о snap по ссылке: https://snapcraft.io/nextcloud

О снапшотах:

Останавливаем сервис (опционально, необходимо чтобы клиенты не заливали данные сервис)

# snap stop nextcloud

Создаем снапшот сервиса:

# snap save nextcloud

Получаем примерно следующее:

root@nextcloud:/# snap save nextcloud

Set Snap Age Version Rev Size Notes

1 nextcloud 9m22s 27.1.8snap1 41 512 14.3GB -

Сам снапшот можно найти по пути /var/lib/snapd/snapshots/*

Включаем сервис, если останавливали:

# snap start nextcloud

Далее восстанавливаем по ID снапшота сервис, в нашем случае это "1"

# snap restore "snapshot-ID"

Если снапшот не нужен, то просто удаляем его следующей командой:

# snap forget "snapshot-ID"

Ну и наконец-то, сам способ миграции:

Для удобства восприятия пути, создаем директорию на исходном сервере:

# mkdir /bakups/snap

Создаем скрипт:

# nano backups.sh

Прописываем в файл следующее:

nextcloud.export
tar cvpzf /backups/snap/backup_snap_$(date +%Y%m%d-%H.%M.%S).tgz /var/snap/nextcloud/common/backups/*
rm -rf /var/snap/nextcloud/common/backups/*


Даем ему привилегии для исполнения:

# chmod 700 backups.sh

Выполняем его:

# ./backup.sh

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

На новом сервере создаем аналогичные директории для бэкапа:

# mkdir /backups
# mkdir /backups/snap
# mkdir /var/snap/nextcloud/common/backups

Заходим на старый сервер и переносим архив бэкапа сделанного через скрипт:

# scp /backups/snap/*имя файла архива root@*адрес нового сервера:/backups/snap

На новом сервере даем привилегии до этой директории:

# chown -R root:root /backups/snap

На новом сервере даем привилегии до этой директории:

# chown -R root:root /var/snap/nextcloud/common/

Распаковываем архив:

# tar -xvzf backup_snap_20240412-00.24.44.tgz -C /var/snap/nextcloud/common/backups/ --strip=5

Импортируем конфигурацию:

# nextcloud.import /var/snap/nextcloud/common/backups/

Проверяем и радуемся, в целом на этом всё с переносом, далее прописываем наш домен в конфигурацию php и выдаем сертификат, смотрим выше как это сделать.

Так как данные копируется из директории /var/snap/nextcloud/common/backups/20240414-010325/data, в директорию /var/snap/nextcloud/common/nextcloud/data/ (или в указанную ранее при установке).
Поэтому чтобы не тратить столько места на диске, удаляем лишние данные, которые уже итак скопированы:

# rm -rf /var/snap/nextcloud/common/backups/20240414-010325/data

Как использовать всё вышеописанное для резервного копирования?

Используем скрипт, для создания архива выше, только в путь можем указать удаленное хранилище, типа Ceph или чего-то еще, дальше на ваше усмотрение.
Далее этот скрипт передаем в Cron:

# crontab -e


Настраиваем частоту выполнения и сохраняем изменения.

Вот и всё, всем спасибо за внимание, это моя первая статья, не судите строго!

Комментарии (6)


  1. MountainGoat
    17.05.2024 12:50
    +2

    У меня был в snap socks-сервер весом 300кб и одним файлом конфига. Он сам без спроса посреди дня обновился на новую версию, не совместимую с ядром оси, и отказался откатываться назад.

    Ставить туда группу связанных сервисов с тучей зависимостей и конфигов - это гарантия, что всё внезапно упадёт.

    С тех пор чем ставить сервис в Snap, я его лучше на смартфон поставлю, который с собой таскаю на работу и домой - надёжность выше будет.


    1. Delagen
      17.05.2024 12:50
      +1

      Поддерживаю snap хорош для десктоп каких то приложений, но никак ни для серверных. Лучше как то иметь контроль над сервисом. Ставлю только руками Nginx-FPM + всё остальное. Более того иногда ну просто необходимо слазить рукам и в исходный код. Недавно мигрировал базу с MySQL в PostgreSQL того же NextCloud, не знаю насколько бы мне это было комфортно, когда бы это было всё промазано обертками. Если мне нужен сервис довольной стабильности и изолированности, то проще запилить виртуалку и не мучать голову с бекапами, бекапя сразу виртуалку с гипервизора.

      Ну и да, у меня далеко не энтерпрайс. Обычный домашний сервер для фоточек.


      1. K1_haa Автор
        17.05.2024 12:50

        Спасибо за обратную связь. Согласен, но тут описан частный случай, с миграцией, если хостинг вас перестал устраивать, но вам нужно переместить весь сервис без использования гипервизора. Насчет контроля над всеми составными частями согласен, но проблем со Snap не испытывал, возможно еще испытаю)


    1. K1_haa Автор
      17.05.2024 12:50

      Интересно, честно говоря с новыми сервисами в snap не сталкивался с такими проблемами, которые вызваны несовместимостью с ядром OC. Nextcloud активно поддерживается разработчиками, если ставить полноценные stable-релизы, то не должно быть таких проблем. Обновление делаются исключительно руками, все autoupdate отключены.
      Спасибо за обратную связь.


  1. ink_off
    17.05.2024 12:50
    +1

    Первый разворачиваемый некст тоже был в снап обернут.

    Но время показало, что вся эта махина с кучами зависимостей завернутая в снап - весьма не надежная структура, плохо обновляемая и еще хуже с кастомизацией некоторых моментов внутри самой структуры некста.

    Второй, уже зная эти моменты - полностью отдельными зависимостями( в рамках разумного).

    И еще момент по переезду - достаточно просто хороший диск в локалке на емкость хранимых данных, и параллельно подключенные нексты к одной директории. И простой занимает 4 минуты .

    Полагаю не применимо для объема больше 11Тб. Но 11Тб - это прям не маленький бизнес, сосответственно там и схд будет иначе организованнна, а не парой дисков в zfs.


    1. K1_haa Автор
      17.05.2024 12:50

      Благодарю за комментарий!
      Но очень хочу подсветить некоторые моменты.
      Данную статью делал исходя из того, что не нашел одного простого и быстрого способа по развертыванию, резервному копированию и миграции Nextcloud в рамках одной OC (когда у вас нет под рукой больших решение по типу VMware + Veeam)
      Именно поэтому, я подчеркнул в данной статье простоту Snap, понятное дело, что это решение не для всех, даже в статье есть момент в котором я постарался намекнуть для кого данная статья.
      Цитирую сам себя:
      ...но если у вас огромный Enterprise сервер с кучей модулей и надстроек над nextcloud, то тогда вопрос:
      -“Зачем вы продолжаете смотреть данную статью?"

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

      Но я очень надеюсь, что кому-то это было полезно и помогло немного лучше разобраться в Nextcloud в целом.