Я хочу сделать резервную копию своего боевого сервиса OwnCloud 10 не как бекап (хотя это одно и тоже), а прям вот один работает и будет работать второй с идентичными настройками, а действиями ниже я переношу базу, файлы на другой, и он путем перенастройки проброса порта на моем vpn сервисе (роли OpenVPN Server + брандмауэр на базе firewalld) сразу же начинает работать. А сразу потому, что из вне сервис OwnCloud 10 доступен по адресу https://vpn.host.ru с сертификатом от Let'S Encrypted.

Предварительные действия для данной заметки.

  • Развернуты на тестовом полигоне (Debian 10 + Proxmox 6) две виртуальные машины (srv-own1 & srv-own2) и через скрипт установки OwnCloud 10 воздвигнут сервис (скрипт самописный), взаимодействие с обоими системами выполняю со своего рабочего ноутбука Lenovo E555 (Ubuntu 18.04 Desktop: hostname: navy)
  • На одну машину srv-own1 заливаю файлы через Web-интерфейс дабы на основе их проверять цель преследуемую данной заметкой.

Шаг №1: На обоих серверах настраиваю выполнение команд через sudo без запроса пароля суперпользователя:

sudo visudo

ekzorchik ALL=(ALL) NOPASSWD:ALL

Шаг №2: Настраиваю, что с одного хоста на другой вход под учетной записью ekzorchik будет производиться через ключи, а не через пароль:

ekzorchik@srv-own1:~$ ssh-keygen -t rsa

ekzorchik@srv-own1:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ekzorchik@srv-own2

ekzorchik@srv-own1:~$ sudo sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config

ekzorchik@srv-own1:~$ sudo service ssh restart

ekzorchik@srv-own1:~$ ssh-keygen -t rsa

ekzorchik@srv-own2:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ekzorchik@srv-own1

ekzorchik@srv-own2:~$ sudo sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config

ekzorchik@srv-own2:~$ sudo service ssh restart

и для также для системы hostname: navy что она может подключаться к выше указанным обоим:

ekzorchik@navy:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ekzorchik@srv-own1

ekzorchik@navy:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ekzorchik@srv-own2

Шаг №3: Перевожу хост srv-own1 & srv-own2 в режим обслуживания:

ekzorchik@navy:~$ ssh -l ekzorchik srv-own1 "cd /var/www/owncloud;sync;sudo -u www-data php occ maintenance:mode --on"

Maintenance mode enabled

Please also consider to stop the web server on all ownCloud instances

ekzorchik@navy:~$ ssh -l ekzorchik srv-own2 "cd /var/www/owncloud;sync;sudo -u www-data php occ maintenance:mode --on"

Maintenance mode enabled

Please also consider to stop the web server on all ownCloud instances

Шаг №4: Останавливаю Webсервис на srv-own1 & srv-own2, у меня это Apache2:

ekzorchik@navy:~$ ssh -l ekzorchik srv-own1 "sudo service apache2 stop"

ekzorchik@navy:~$ ssh -l ekzorchik srv-own2 "sudo service apache2 stop"

Шаг №5: Делаю бекап базы OwnCloud 10 хоста srv-own1 и переношу ее на srv-own2, а затем подгружаю:

ekzorchik@navy:~$ ssh -l ekzorchik srv-own1 "sudo mysqldump --single-transaction -h localhost -u root -p866%sacred.77 db_owncloud > db_owncloud.bak"

ekzorchik@navy:~$ ssh -l ekzorchik srv-own1 "rsync -v /home/ekzorchik/db_owncloud.bak ekzorchik@srv-own2:/home/ekzorchik/"

ekzorchik@navy:~$ ssh -l ekzorchik srv-own2 "sudo mysql -h localhost -u root -p866%sacred.77 db_owncloud < /home/ekzorchik/db_owncloud.bak"

Шаг №6: На обоих серверах включаю учетную запись ekzorchik в группу www-data и даю права на запись в каталог /var/www/owncloudэто нужно чтобы синхронизировать каталоги:

ekzorchik@navy:~$ ssh -l ekzorchik srv-own1 "sudo usermod -aG www-data ekzorchik"

ekzorchik@navy:~$ ssh -l ekzorchik srv-own1 "sudo chmod -R 775 /var/www/owncloud/"

ekzorchik@navy:~$ ssh -l ekzorchik srv-own1 "sudo chown -R www-data:www-data /var/www/owncloud"

ekzorchik@navy:~$ ssh -l ekzorchik srv-own2 "sudo usermod -aG www-data ekzorchik"

ekzorchik@navy:~$ ssh -l ekzorchik srv-own2 "sudo chmod -R 775 /var/www/owncloud/"

ekzorchik@navy:~$ ssh -l ekzorchik srv-own2 "sudo chown -R www-data:www-data /var/www/owncloud"

Шаг №7: Синхронизирую каталоги с srv-own1 на srv-own2:

ekzorchik@navy:~$ ssh -l ekzorchik srv-own1 "rsync -avt /var/www/owncloud/{apps,config,data} ekzorchik@srv-own2:/var/www/owncloud"

sent 166,771,228 bytes  received 296,564 bytes  111,378,528.00 bytes/sec

total size is 305,410,851  speedup is 1.83

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2]

ekzorchik@navy:~$

Шаг №8: Изменяем IP или DNSимя в /var/www/owncloud/config/config.php на второй системе и приводим настройки доступа через Webинтерфейс с учетом обращения по IP и DNS именам:

ekzorchik@srv-own2:~$ hostname -I

172.33.33.122

ekzorchik@srv-own2:~$ sudo nano /var/www/owncloud/config/config.php

  'trusted_domains' =>

  array (

    0 => 'localhost',

    1 => '172.33.33.122',

    2 => 'srv-own2.polygon.lan',

    3 => 'srv-own2',

  ),

ekzorchik@srv-own2:~$ sudo chown -R www-data:www-data /var/www/owncloud/

ekzorchik@srv-own2:~$ sudo service apache2 restart

Шаг №9: Убираем режим обслуживания на обоих srv-own1 (+ запускаем Web-сервис apache) & srv-own2:

ekzorchik@navy:~$ ssh -l ekzorchik srv-own1 "cd /var/www/owncloud;sync;sudo -u www-data php occ maintenance:mode --off"

Warning: Permanently added 'srv-own1,172.33.33.121' (ECDSA) to the list of known hosts.

ownCloud is in maintenance mode - no app have been loaded

Maintenance mode disabled

ekzorchik@navy:~$

ekzorchik@navy:~$ ssh -l ekzorchik srv-own1 "sudo service apache2 restart"

ekzorchik@navy:~$ ssh -l ekzorchik srv-own2 "cd /var/www/owncloud;sync;sudo -u www-data php occ maintenance:mode --off"

Шаг №10: Со своей рабочей системы запускаю браузер и обращаюсь ко второй системе https://srv-own2авторизуюсь учетными данными с первой системы и вижу файлы, добавленные для проверки выше. Делаю вывод, я получил идентичную копию работоспособного сервиса OwnCloud 10 на Ubuntu 18.04 Server, т.е. я теперь могу с рабочей системы выполнить боевой переезд наработок и если что откатиться назад, т.к. первый будет доступен и новый, а после на vpn.host.ru выполнить замену:

(к примеру, у меня еще задействован proxy_pass для nginx)

root@host.ru:~# nano /etc/nginx/sites-enabled/owncloud.conf

location / {

    proxy_pass https://172.33.33.122;

    proxy_set_header Host $host;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_set_header X-Real-IP $remote_addr;

    }

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

Задача заметка выполнена, с уважением автор блога Олло Александр aka ekzorchik.