Как создать среду 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
Источники: