Синхронизация файлов через WinSCP
В комплекте полной версии Albireo CMS есть файл winscp-sync.php с помощью которого можно быстро синхронизировать файлы между удаленным и локальным серверами.
Программа WinSCP
WinSCP — программа для работы с FTP (+ sFTP). Это многофункциональная программа, которая часто используется именно как FTP-клиент.
У WinSCP есть режим синхронизации файлов, например по времени изменения.
Например у вас есть локальная копия сайтов на albireo.loc и есть ваш сайт, где вы также можете создавать новые страницы, загружать изображения и т.п. В какой-то момент вам нужно синхронизировать эти два сайта между собой. С помощью WinSCP это делается достаточно просто: нужно выбрать два каталога и нажать кнопку «Синхронизация».
В этом режиме WinSCP по FTP просканирует каталоги и по заданным критериям (например время модификации файлов) выдаст таблицу расхождений. Дальше нужно выполнить синхронизацию вручную или автоматом (на выбор).
ВАЖНО! При работе через FTP всегда отмечайте опцию «Сохранить время модификации файла»!
Синхронизация через winscp-sync.php
Файл winscp-sync.php — это универсальный скрипт, который выполняется либо как web-версия (по url-адресу), либо как CLI (в консоли).
Когда происходит обращение к winscp-sync.php через адрес, то он просканирует каталоги сервера и отдаст данные в JSON-формате.
Если же выполнить winscp-sync.php как консольное приложение, то он сформирует специальный bat-файл sync-winscp.bat в формате, который понимает WinSCP.
Особенностью использования winscp-sync.php в том, что получение данных с сервера происходит намного быстрее, чем по FTP. На выходе получается bat-файл, который уже и нужно запустить отдельно для физической синхронизации. То есть сам по себе winscp-sync.php файлы не копирует, он только готовит данные.
Настройка winscp-sync.php
Вначале нужно настроить файл. В нём нужно указать секретный ключ и, если нужно, каталоги и файлы для синхронизации. По умолчанию он уже настроен на работу с Albireo CMS, но формально не имеет значения какие именно вы хотите каталоги синхронизировать. Также нужно указать путь к WinSCP.exe.
Поскольку WinSCP работает по FTP, то в winscp-sync.php нужно указать данные для ftp-входа. Обратите внимание, что данные хранятся в открытом виде, поэтому храните файл только для себя!
После этого файл нужно загрузить на удаленный сервер.
Если вы изменили настройки локального winscp-sync.php, то не забудьте его заново загрузить на удаленный сервер (данные FTP на удаленном сервере не используются, поэтому их можно заменить на фиктивные или пустые).Локальная копия запускается командой:
php winscp-sync.php
Скрипт быстро отработает и создаст sync-winscp.bat. Если же различий с удаленным сервером не будет, то такой файл создан не будет.
Также вы можете переименовать winscp-sync.php, нужно только указать правильный путь в его настройках.Файл sync-winscp.bat
Этот файл будет примерно такого вида:
"C:\Programs\WinSCP\WinSCP.exe" /newinstance /console /command ^ "option batch abort" ^ "open ftp://ЛОГИН@ПАРОЛЬ" ^ "cd /domains/ДОМЕН/public_html" ^ "lcd C:\domains\albireo-loc" ^ "echo put server < local" ^ "put -preservetime albireo\pages\install.php albireo/pages/install.php" ^ "echo put server < new local" ^ "put -preservetime albireo\pages\winscp.php albireo/pages/winscp.php" ^ "exit"
Строчки с put server < local позволяют понять как скрипт будет делать синхронизацию. Есть варианты:
-
put server < local— загрузка локального файла на удаленный сервер -
get server > local— загрузка файла с удаленного сервера -
put server < new local— новый локальный файл загрузить на удаленный сервер -
get new server > local— новый удаленный файл загрузить на локальный
То есть перед тем, как запускать sync-winscp.bat откройте его просмотрщиком и проверьте, что это именно то, что нужно сделать.
Если для входа в WinSCP вы установили пароль (обычно так и делают), то нужно будет ввести его после запуска sync-winscp.bat (он сам спросит). Обратите внимание, что символы пароля не отображаются при вводе.После того, как синхронизация выполнена, вы можете ещё раз запустить php winscp-sync.php — он опять проверит различия и если их не будет, то удалит sync-winscp.bat.
Ограничения синхронизации
Скрипт winscp-sync.php проверяет даты файлов и их отсутствие. Например если вы локально удалили файл, то скрипт предложит загрузить его с удаленного сервера. Таким образом, если вы намеренно удалили файл или его переименовали, то для синхронизации это будет означать, что нужно загрузить отсутствующий файл.
Такие случаи достаточно специфичны, поэтому для них лучше воспользоваться обычным FTP, чтобы удалить ненужные файлы. Либо «родным» режимом синхронизации WinSCP, который позволяет удалять отсутствующие файлы на одной из сторон.
Другое ограничение относится непосредственно к работе WinSCP в консольном режиме: он не может синхронизировать большое количество файлов. Точное число сказать сложно, но оно где-то около 20 файлов. Таким образом, если на сайте большие обновления, то лучше воспользоваться обычным FTP.
Советы
1. Если вы работаете локально над каким-то файлом, то достаточно один раз запустить winscp-sync.php, который создаст sync-winscp.bat для синхронизации. После этого вы можете уже не запускать winscp-sync.php, а использовать всё тот же sync-winscp.bat для быстрой отправки файла на удаленный сервер.
2. Если в файле sync-winscp.bat есть файлы, которые вы не хотите синхронизировать, то можно вручную удалить строки с этими файлами. Это команды put и get.