Как создать среду Rsync на WSL для отражения изменений с ПК на VPS?

У меня есть Ubuntu 16.04.2 DigitalOcean VPS, к которому я обычно использую SSH с Putty и делаю там изменения, но недавно я обнаружил, что могу сделать копию этого сервера на моем ПК (Win10 home с WSL), сделать изменения здесь локально, а затем отразить их (в то время как SSH туннелируется) через программу под названием rsync, если все прошло хорошо. Основным преимуществом здесь является удобный, первичный уровень резервного копирования.

Если возможно использовать rsync в бета-версии WSL, как это делается с момента rsync устанавливается, например, если я поднимаю серверную среду на своем домашнем WSL Win10 с этим кодом:

apt-get update -y && apt-get upgrade -y
apt-get install tree zip unzip make php-zip php-curl php-xml php-gd
apt-get install fail2ban
apt-get install lamp-server^ -y
a2enmod rewrite
sed -i 's/post_max_size \= .M/post_max_size \= 200M/g' /etc/php/7.0/apache2/php.ini # regex dot instead of 2 or 8.
sed -i 's/upload_max_filesize \= .M/upload_max_filesize \= 200M/g' /etc/php/7.0/apache2/php.ini

cat <<-'LAMPENV' >> /etc/apache2/apache2.conf

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
LAMPENV

systemctl restart apache2.service

и затем я поднимаю сайты на моем ПК локально с localhost/site_nameкак мне отразить это rsync на VPS?

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

В ответе, пожалуйста, рассмотрите способ, который я описал выше, как основу для rsync Действуй и скажи, если чего-то не хватает, и подробно опи rsync в WSL позже.

1 ответ

Решение

Сначала убедитесь, что вы можете подключиться через SSH с удаленного компьютера к локальному. Для этого вам необходимо скопировать свой закрытый ключ в каталог /root/.ssh и это имеет достаточно ограничений - sudo chmod 400 /root/.ssh/id_rsa, Также вы можете создать /root/.ssh/config файл как это:

$ sudo cat /root/.ssh/config

Host my-localhost-name
    HostName 77.71.11.10
    IdentityFile ~/.ssh/id_rsa
    User my-user-name
    Port 22122

Теперь вы можете использовать rsync с удаленной машины следующим образом:

sudo rsync -avzp -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress my-localhost-name:/var/www/<my-folder>/ /var/www/<my-folder>/

Если у вас нет /root/.ssh/config Файл команды должен быть:

sudo rsync -avzp -e "ssh -i /root/.ssh/id_rsa -p 22122 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress my-user-name@77.71.11.10:/var/www/<my-folder>/ /var/www/<my-folder>/

Куда:

  • -a, --archive это быстрый способ сказать, что вы хотите рекурсию и хотите сохранить почти все (при этом -H - заметное упущение). Единственное исключение из вышеприведенной эквивалентности - это когда указывается --files-from, в этом случае -r не подразумевается.

  • -v, --verbose увеличивает объем информации, которую вы предоставляете во время передачи. По умолчанию rsync работает тихо.

  • -z, --compress - сжатие данных файла во время передачи.

  • -p, --perms заставляет получающий rsync устанавливать целевые разрешения так же, как исходные разрешения. (См. Также параметр --chmod, чтобы узнать, как изменить то, что rsync считает исходными разрешениями.)

  • -e, --rsh=COMMAND позволяет выбрать альтернативную программу удаленной оболочки, которая будет использоваться для связи между локальной и удаленной копиями rsync...

    Также вы можете добавить сюда дополнительные опции ssh команда. Параметры, использованные в приведенном выше примере -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null Полезно, чтобы Rsync работал тихо и не запрашивал каждый раз, когда вы подключаетесь к новому серверу.

  • --progress показать прогресс во время передачи.

Конечная косая черта в источнике изменяет это поведение, чтобы избежать создания дополнительного уровня каталога в месте назначения. Вы можете думать о трейлинг / для источника в значении "копировать содержимое этого каталога", а не "копировать каталог по имени", но в обоих случаях атрибуты содержащего каталога передаются в содержащий каталог на месте назначения. Другими словами, каждая из следующих команд копирует файлы таким же образом, включая их установку атрибутов /dest/foo:

rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo

Источники:

Другие вопросы по тегам