DkLab, Конструктор, dkLab RealSync realtime-синхронізатор вихідників з локальної машини на

realsync
Представляю громадськості інструмент з відкритим вихідним кодом, який я написав приблизно рік тому - RealSync. Це утиліта для Windows, MacOS та Linux, яка дозволяє підтримувати на віддаленому серверіточну копію файлів(наприклад, скриптів на PHP, Python, Ruby та ін.) з папки на вашому локальному комп'ютері, навіть в умовах поганого зв'язку, коли ви працюєте з дому. Всі зміни, що відбуваються в локальній папці, потрапляють на сервер практично моментально (затримка близько 0.2 с), незалежно від того, скільки цих змін і яким чином вони були внесені (хоч через IDE, хоч через Блокнот або Far).

Головна відмінність RealSync від аналогів - у тому, що він вкрай стійкий до нестабільності інтернет-з'єднання, реконнектів та тайм-аутів. При цьому використовується SSH-з'єднання, доступ через яке конфігурується автоматично при першому запуску утиліти (тобто не потрібно возитися з ключами – налаштування здійснюється в інтерактивному режимі).

І навіщо цей велосипед, коли є Samba чи Денвер чи XAMPP?

Взагалі, існує кілька способів вести розробку веб-скриптів. Перший спосіб – використовувати локальний веб-сервер. У даного методу є як маса переваг (більший контроль, поліпшення переносимості та кросплатформенності і т. д.), так і маса недоліків, як то: потенційна відмінність конфігурації локального сервера від конфігурації дев-і продакшен-зон, необхідність або стежити за синхронністю локальної SQL-бази, або чекати, поки гальмує доступом до єдиної дев-базе з Інтернету тощо. буд. Ми не будемо в даній статті розглядати цей метод, хоча він, безумовно, має право на життя (і, як мінімум, застосовується 1 мільйоном зареєстрованих користувачів того ж таки Денвера).

Другий спосіб - використовувати веб-сервер,встановлений в офісі компанії (або на тестовій машині в датацентрі), який обслуговує штатні адміни. На такому веб-сервері може бути кілька директорій по одній для кожного розробника. Кожен програміст веде роботу у своїй директорії, щоб не заважати іншим, і дивиться результат на своєму піддомі (або на своєму номері порту). Ось цей спосіб ми розглянемо.

Використання віддаленої папки для веб-розробки

До директорії на віддаленому сервері потрібно якось "доступатися". У найбільш поширеному випадку її просто підключають як мережну папку на локальну машину по Samba. Цей спосіб має відразу кілька незручностей:

  1. Для переносної швидкості роботи ви повинні знаходитися в тій же локальній мережі, що і сервер.
  2. Але навіть у цьому випадку вам буде важко запустити пошук по всіх файлах великого проекту в IDE - занадто велика затримка.
  3. У разі розриву з'єднання (або ж ви не дай боже працюєте з дому через інтернет) - будьте готові до дивних ефектів та неприємних лагав.

Я знаю багатьох людей, які для обходу незручності (2) заходять по SSH на сервер і в консолі використовують grep для пошуку файлів, причому самі працюють в IDE. Мені це здається верхом незручності. Тим більше що в phpStorm, наприклад, пошук по всіх локальних файлах навіть дуже великого проекту працює відчутно швидше за grep-а і займає 1-2 секунди (як вони цього досягли - для мене загадка; мабуть, індексують щось заздалегідь). Особисто я постійно і з комфортом користуюся пошуком у phpStorm по локальних файлах - в середньому раз по 50 на день.

Є ще, звичайно, любителі працювати в VIM у SSH-консолі прямо на сервері; я їх поважаю, але навряд чи коли долучуся до їхнього табору: все-таки зручності,надані гарною графічною IDE, для мене переважують.

За великим рахунком, RealSync - це вирішення проблеми швидкості роботи IDE

А якщо мені потрібна двостороння синхронізація?

Це дуже популярне питання, пов'язане з тим, що RealSync завжди затирає будь-які зміни, що відбуваються безпосередньо в папці на сервері (якщо не відразу, так при черговому реконнект точно). Тільки зміни в локальній папці мають сенс та пріоритет.

Але давайте подумаємо, навіщо може знадобитися двостороння синхронізація?

  • Ви хочете працювати, наприклад, з Git у консолі на сервері? Але навіщо? Адже можна поставити Git на свою машину і користуватися всіма перевагами локальної роботи та різними GUI для Git.
  • Ваші скрипти пишуть до якоїсь локальної папки в рамках директорії документів? Додайте цю папку у виключення RealSync (це робиться легко, одним рядком у конфізі або при першому запуску). До того ж робити директорію документів доступною для запису скриптами – це антипаттерн.
  • Ви працюєте на ноутбуці вдома та на іншому десктопі – на роботі та хочете синхронізувати файли через папку веб-сервера? Але веб-сервер - це не засоби синхронізації та контролю версій. Використовуйте краще Dropbox або керуйте системою контролю версій.
  • Ви активно використовуєте симлінки у робочій копії на сервері? Ну. а чи не пробували перестати їх використовувати, це як мінімум спростить підтримку та розгортання в майбутньому?
В цілому потрібно розуміти, що RealSync - це не синхронізатор, цереплікатор. Якщо перестати сприймати папку на веб-сервері як щось самостійне, а вважати її просто автоматичним дзеркалом і перестати ходити в неї руками по SSH (справді, навіщо це робити?), все встає на свої місця. І здебільшоговипадків виявляється, що двостороння синхронізація просто не потрібна (але якщо ви, як і раніше, вважаєте інакше, користуйтеся Unison-ом - якщо він у вас приживеться, звичайно.)

Установка RealSync та перший запуск

dklab

Якщо ви вже маєте безпарольний доступ до сервера по SSH-ключу, пароль не буде запитуватись взагалі, навіть вперше. Якщо ще не маєте - RealSync сам згенерує відкритий+закритий ключ, відкритий покладеться на сервер, а закритий - у вашу домашню директорію на локальній машині (у спеціальну папку, яку сприймає RealSync).

Інші налаштування конфігурації запишуться у файл Повний Шлях До Вашої Папки Вихідників/.

Тепер можна правити будь-які вихідні коди і переконуватися, що вони моментально потрапляють на сервер. Якщо клацнути на іконку запущеного RealSync у треї, то процес можна спостерігати приблизно ось у такому вікні: