# Создание зеркал серверов автоустановки Plesk

Поддержка локальных зеркал серверов автоустановки Plesk помогает избежать значительных трат времени и трафика на загрузку одних и тех же файлов снова и снова при установке или обновлении нескольких серверов Plesk. Локальные зеркала доступны по протоколу HTTP, и их можно указывать в качестве источника для загрузки пакетов Plesk во время установки или обновления.

## Обязательные условия для создания локального зеркала репозитория

1. На виртуальном хосте, используемом для зеркала, должны быть отключены все обработчики скриптов (php, pl, cgi, py, fcgi и т. д.).
2. На виртуальном хосте или папке, используемых для зеркала, должна быть установлена опция `+FollowSymLinks`.
3. Если не указаны другие источники, то с машины, на которой запускается скрипт, и с машины, где будут устанавливаться файлы, должно быть доступно следующее:
   - `rsync://rsync.installer.plesk.com/autoinstall` для Plesk для Linux,
   - `rsync://autoinstall-win.plesk.com/autoinstall` для Plesk для Windows.
4. На машине, где запускается скрипт, PHP необходимо собрать с поддержкой следующих расширений (смотрите http://www.php.net/manual/en/ssh2.installation.php):
   - ssh2_connect,
   - simplexml,
   - XML DOM.
5. Зеркала для Plesk для Windows и Plesk для Linux нельзя располагать в одних и тех же папках. Необходимо использовать отдельные пути для создания зеркал.

## Настройка локального зеркала репозитория

1. Скачайте и распакуйте инструмент Plesk Mirror Setup

       # wget https://support.plesk.com/hc/en-us/article_attachments/360041549033/mirrorctl-3.1.0.zip
       # unzip mirrorctlv2.0.1.zip
       # cd mirrorctl

2. Проверьте наличие доступных версий продукта

   Используйте команду `show-all-releases` для просмотра доступных продуктов и команду `os-list` для просмотра ОС, поддерживаемых определенным продуктом:

       # ./mirrorctl show-all-releases

   # ./mirrorctl os-list –release=PLESK_12_0_18

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

   Используйте команды `cfg --add` и `cfg --remove` для изменения списка версий продукта, которые должны быть на зеркале:

       # ./mirrorctl cfg --add --release=PLESK_12_0_18 --os=cos5_i386
       # ./mirrorctl cfg --add --win --release=PANEL_12_0_18_WIN --cfg-file=./plesk_win_mirror

4. Сохраните настройки локального зеркала репозитория в файл

   Используйте команду `cfg --export` для сохранения созданной конфигурации в файл:

       # ./mirrorctl cfg --export --path=./

   Конфигурация будет сохранена в файл `mirror.xml` в указанном месте.

       <?xml version="1.0" encoding="UTF-8"?>
       <xml>
         <release name="PLESK_12_0_18" version="12.0.18">
           <os name="cos5_i386"/>
         </release>
       </xml>

   Для загрузки сохраненной конфигурации из файла используйте команду `cfg --import`:

       # ./mirrorctl cfg --import --cfg-file=./mirror.xml

5. Создайте зеркало репозитория

   Прежде всего, создайте папку для зеркала:

       # mkdir /var/www/html/mirror/
       # mkdir /var/www/html/mirror_windows/

   Затем используйте команду `update` для синхронизации зеркала с официальным репозиторием:

       # ./mirrorctl update --path=/var/www/html/mirror/
       # ./mirrorctl update --win --path=/var/www/html/mirror_windows/ --cfg-file=./plesk_win_mirror

Примечание

Этот репозиторий можно использовать для установки только тех версий продукта и ОС, которые были указаны в конфигурации зеркала. Все остальные версии будут недоступны для утилиты `autoinstaller` в этом репозитории.

Проверьте список доступных версий продукта в созданном репозитории:

    # ./mirrorctl show-all-releases --src-host=/var/www/html/mirror/
    # ./mirrorctl show-all-releases --win --src-host=/var/www/html/mirror_windows/

Теперь можно использовать локальное зеркало репозитория в процессе установки и обновления Plesk.

## Использование локального зеркала репозитория

Зеркало можно использовать одним из следующих способов:

- изменив преобразование DNS и настроив веб-хост зеркала так, чтобы `https://autoinstall.plesk.com` (для Plesk для Linux) или `http://autoinstall-win.plesk.com/` (для Windows) указывали на зеркало;

- указав URL зеркала в переменной `SOURCE` в файле `/root/.autoinstallerrc` на машине, где запускается автоустановщик;

      [root@container ~]# cat  /root/.autoinstallerrc
      SOURCE=http://uri.of.local.mirror/here/

- указав URL зеркала в опции `--source` при запуске автоустановщика в интерактивном режиме.

## Поддержка удаленных локальных зеркал репозиториев

Инструмент Plesk Mirror Setup может управлять репозиториями, расположенными как в той же файловой системе, так и на удаленных серверах. Для указания удаленного исходного и удаленного целевого зеркал используются опции `--path` и `--src-host`.

Используйте `--path` для указания удаленного целевого зеркала:

1. С использованием конкретного пользователя, пароля и хоста:

       --path=user:UserSecurePassword@mymirror.tld:344/var/www/html/
       --path=user:UserSecurePassword@192.168.100.100:22/var/www/html/
       --path=root:RootSecurePassword@localhost:/var/www/html/

2. С использованием авторизации ключами SSH (требуются и закрытый, и открытый ключи):

       --path=192.168.100.100:/var/www/html/

   Если для данного пользователя не существует пары RSA по умолчанию (id_rsa и id_rsa_pub), то будет использоваться пара DSA по умолчанию (id_dsa и id_dsa.pub) из папки `$HOME/.ssh/`.

       --path=user@mymirror.tld:344/var/www/html/

3. Используйте конкретные ключи SSH как дополнительные опции утилиты mirrorctl:

       --path=root@mymirror.tld:344/var/www/html/ --private-key=~/.ssh/id_mirror --public-key=~/.ssh/id_mirror.pub

Используйте `--src-host` для указания удаленного исходного зеркала:

1. С помощью rsync по протоколу SSH:

       --src-host=test@192.168.100.100:/var/www/html/test-mirror/
       --src-host=mytestmirror.tld:/var/www/html/test-mirror/

   - В приведенном выше случае запрещено указывать пароль пользователя или порт SSH (22).
   - В случае использования опции `--src-host` для пользователя, запустившего инструмент, должна быть настроена авторизация ключами SSH, чтобы он мог получить доступ к хосту, указанному опцией `--src-host`, в качестве пользователя, указанного этой опцией.
   - Если опция `--src-host` используется вместе с опцией `--path`, то, опять же, для пользователя, указанного опцией `--path`, должна быть настроена авторизация ключами SSH, чтобы он мог получить доступ с хоста, указанного опцией `--path`, к хосту, указанному опцией `--src-host`, в качестве пользователя, указанного опцией `--src-host`.

2. Использование процесса rsync на исходном хосте:

       --src-host=rsync://mytestmirror.tld:873/testmirror

Пример настройки rsync:

    # head /etc/rsyncd.conf
    [testmirror]
    path = /var/www/html/test-mirror/
    comment = Test repository

    # cat /etc/xinetd.d/rsync
    service rsync
    {
    # disable = yes
    socket_type = stream
    wait = no
    user = root
    server = /usr/bin/rsync
    server_args = --daemon
    log_on_failure += USERID
    }

## Пример 1: Настройка периодических обновлений для локального зеркала репозитория

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

1. Создайте конфигурацию зеркала, добавив необходимые версии продуктов и операционные системы:

       # /home/user/mirrorctl/mirrorctl cfg --add --release=PLESK_12_0_18 --os=cos5_i386 --cfg-file=/var/www/html/mirror/myconfig.xml
       # /home/user/mirrorctl/mirrorctl cfg --add --release=PLESK_12_0_18 --os=rhel5_i386 --cfg-file=/var/www/html/mirror/myconfig.xml
       # /home/user/mirrorctl/mirrorctl cfg --add --release=PLESK_11_5_30 --os=cos5_i386 --cfg-file=/var/www/html/mirror/myconfig.xml
       # /home/user/mirrorctl/mirrorctl cfg --add --win --release=PANEL_12_0_18_WIN --cfg-file=/var/www/html/mirror/windows_myconfig.xml

2. Настройте автоматическое обновление зеркала с помощью crontab:

       $ crontab -l
       # m h dom mon dow command
       59 23 * * * cd /home/user/mirrorctl/ && ./mirrorctl update --path=/var/www/html/mirror/ --cfg-file=/var/www/html/mirror/myconfig.xml > ./mirror-cron.log 2>&1
       59 22 * * * cd /home/user/mirrorctl/ && ./mirrorctl update --win --path=/var/www/html/mirror_windows/ --cfg-file=/var/www/html/mirror/windows_myconfig.xml > ./mirror-cron-win.log 2>&1

## Пример 2: Добавление новых операционных систем

Цель: добавить на зеркало еще одну операционную систему для конкретной версии продукта.

1. Импортируйте с помощью утилиты mirrorctl текущую конфигурацию репозитория, которую вы создали ранее:

       # ./mirrorctl cfg --import --path=/var/www/html/mirror/ --cfg-file=myconfig

2. Добавьте новую ОС для нужной версии продукта:

       # ./mirrorctl cfg --add --release=PLESK_12_0_18 --os=deb6.0_i386 --cfg-file=myconfig

3. Синхронизируйте зеркало:

       # ./mirrorctl update --path=/var/www/html/mirror/ --cfg-file=myconfig

## Пример 3: Скачивание определенной версии/ОС

Цель: скачать конкретную ОС для конкретной версии продукта на зеркало из официального репозитория, не скачивая остальные отображаемые на зеркале версии/ОС.

1. Создайте файл конфигурации, содержащий только те версии ОС/продукта, которые вы хотите скачать:

       # ./mirrorctl cfg --add --release=PLESK_12_0_18 --os=cos5_i386 --cfg-file=./temp-config
       # ./mirrorctl cfg --add --release=PLESK_12_0_18 --os=cos5_x86_64 --cfg-file=./temp-config

2. Скачайте указанные ОС в существующий репозиторий с помощью команды push:

       # ./mirrorctl push --path=/var/www/html/mirror/ --cfg-file==./temp-config

## Пример 4: Создание зеркала для тестирования новых версий продукта

Цель: создать тестовое зеркало для новой версии продукта, протестировать эту версию и загрузить только эту протестированную версию (без последних официальных обновлений, которые вы еще не тестировали) в основной репозиторий.

1. Создайте тестовое зеркало для всех ОС новой версии продукта:

       # ./mirrorctl cfg --add --release=PLESK_12_0_18 --os=all --cfg-file=./test-config
       # ./mirrorctl update --path=/var/www/html/test-mirror/ --cfg-file=./test-config

2. Протестируйте новую версию;

3. Загрузите всю версию продукта в основной репозиторий:

       # ./mirrorctl push --src-host=/var/www/html/test-mirror/ --path=/var/www/html/mirror/ --cfg-file=./test-config

Предупреждение

Если опция `--src-host` не используется, то новая версия продукта будет загружена из официального репозитория и может отличаться от той, которую вы только что тестировали.

## Пример 5: Создание зеркала для тестирования выпусков продукта для новых ОС

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

1. Создайте тестовое зеркало, где будут доступны несколько ОС для выбранной версии продукта:

       # ./mirrorctl cfg --add --release=PLESK_12_0_18 --os=cos5_i386 --cfg-file=./test-config
       # ./mirrorctl cfg --add --release=PLESK_12_0_18 --os=cos5_x86_64--cfg-file=./test-config
       # ./mirrorctl update --path=/var/www/html/test-mirror/ --cfg-file=./test-config

2. Получите список доступных выпусков продукта и ОС с тестового зеркала, созданного выше:

       # ./mirrorctl show-all-releases --src-host=/var/www/html/test-mirror/
       # ./mirrorctl os-list --release=PLESK_12_0_18 --src-host=/var/www/html/test-mirror/

3. Создайте новый файл конфигурации, содержащий только те выпуски и ОС с тестового зеркала, которые вы хотите добавить на основное зеркало:

       # ./mirrorctl cfg --add --release=PLESK_12_0_18 --os=cos5_i386 --src-host=/var/www/html/test-mirror/ --cfg-file=push.xml

4. Проверьте созданный файл конфигурации на наличие выпусков/ОС в тестовом репозитории:

       # ./mirrorctl cfg --check --src-host=/var/www/html/test-mirror/ --cfg-file=push.xml

5. Загрузите выбранные выпуски и ОС с тестового зеркала в основной репозиторий:

       # ./mirrorctl push --src-host=/var/www/html/test-mirror/ --path=/var/www/html/mirror/ --cfg-file=push.xml

Предупреждение

Если опция `--src-host` не используется, то новая версия продукта будет загружена из официального репозитория и может отличаться от той, которую вы только что тестировали.

Предупреждение

Если не указана опция `--cfg-file`, будет использоваться конфигурационный файл по умолчанию `BUILD/config.xml` (относительно папки, в которой находится инструмент). То есть только версии/ОС из этого конфигурационного файла будут загружены в основной репозиторий.

Предупреждение

Если неверно указана опция `--cfg-file`, будет использоваться конфигурационный файл, указанный для команды push.