Синхронизация рабочего пространства веб-разработчика
Доброго времени суток, Хабр!
Недавно я озадачился синхронизацией рабочего пространства среди всех используемых мной компьютеров. Я понял, что таскать все файлы и базы данных сайта с одного компьютера на другой, не вариант. Решив автоматизировать этот процесс, я обратил внимание на Dropbox Google Drive Yandex.Disk любой другой облачный диск ( выбрать свой вариант ).
Первым делом я подумал о GIT ( bitbucket, github ), но с ним очень проблематично синхронизировать базы данных. Тем более хотелось полностью автоматического решения. Поэтому этот вариант отпал.
Для начала я решил поискать некий сервис, который выполнил бы все необходимые мне действия, в том числе:
- Синхронизация рабочих файлов сайтов ( PHP, HTML, CSS, etc ) таким образом, чтобы они могли редактироваться на обоих системах ( Windows, Mac )
- Синхронизация баз данных
- Синхронизация настроек IDE, плагинов и сниппетов
- Возможность локальной работы, без интернета. Поэтому были исключены многие онлайн сервисы, такие как koding.com.
- Возможность синхронизации через используемый мной облачный диск Google Drive
Потратив пару часов на поиски, я так и не нашел ничего подходящего. Но в процессе наткнулся на множество инструкций и гайдов по синхронизации рабочего пространства через Dropbox и ему подобные. Не найдя другого способа, я так же решил попробовать данное решение.
К сожалению, ни одна статья не имела исчерпывающих инструкций по всем интересующим меня пунктам. Так же, в процессе я наткнулся с немалым количеством проблем, которые и вовсе не были освещены.
Первым делом нужно было определиться со стеком инструментов. Я использовал пакет Денвера, для разработки под Windows и MAMP для работы на Mac OSX. К сожалению, эти инструменты плохо совместимы, и я решил поискать им альтернативу. Хотелось найти кросс-платформенное решение, которое исключило бы конфликт версий. Изначально я планировал использовать XAMPP, но при попытки его настройки возникли проблемы.
После недолгих поисков я наткнулся на AMPPS
Преимущества:
- Кроссплатформенный( Windows, Mac OSX )
- Бесплатный
- Удобный интерфейс запуска и настройки сервера
- Полная синхронность версий PHP, MySQL и других. Обновление в один клик
- Отличный web-интерфейс, с кучей возможностей. Например, установка любой CMS или фреймворка.
- Поддержка MongoDB ( мне он не нужен, но вдруг кому-то необходим )
Я решил попробовать данный пакет, и он оказался, пожалуй, лучшим решением. Сейчас я полностью перешел на него.
Теперь нужно было настроить этот софт для хранения всех файлов в директории облачного диска. Задача оказалась не столь тривиальной, как может показаться.
Необходимо зайти в раздел Apache, и выбрать пункт Configuration. Откроется конфигурационный файл, в котором нам надо найти и изменить строчку
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "D:путьк вашемуоблачному диску"
Следующим действием нужно синхронизировать базу данных. Здесь было больше всего проблем и конфликтов. Для того, чтобы использовать синхронизацию, нужно изменить конфигурацию. Заходим в панель, кликаем MySQL и выбираем пункт конфигурация. Далее ищем и меняем строчку:
# Replication Master Server (default)
# binary logging is required for replication
#log-bin=mysql-bin
Необходимо закомментировать логирование MySQL, т.к. из-за него происходили сбои и конфликты. Далее нужно синхронизировать сами базы. Для этого мы переходим в папку AMPPSmysql. Нужно сделать символическую ссылку на папку data и связать ее с папкой в облачном диске. Для этого открываем консоль:
Для первой машины, Windows:
cd “C:путькAMPPSmysql”
mkdir "D:путькоблачномудискуmysql"
mv data “D:путькоблачному дискуSublimeUser”
cmd /c mklink /D data "D:путькоблачномудискуmysqldata"
Для каждой последующей, Windows:
cd "C:путькAMPPSmysql"
rmdir -recurse data
cmd /c mklink /D data "D:путькоблачномудискуmysqldata"
Для первой машины, MacOSX:
cd ~/Application/AMPPS/mysql/
mkdir ~/путь/к папке/облачного диска/mysql/
mv data ~/путь/к папке/облачного диска/mysql/
ln -s /путь/к папке/облачного диска data
Для каждой последующей машины, MacOSX:
cd ~/Application/AMPPS/mysql/
rm -r data
ln -s /путь/к папке/облачного диска data
Теперь ваши базы данных синхронизированы. Для создания нового сайта, нужно пройти в web-панель управления, адрес localhost/ampps/. Далее в раздел Add domain. Главное, что нужно заполнить правильно в данном разделе — Domain path. Указываем здесь папку в облачном диске, созданную в той же директории, куда был прописан DocumentRoot Apache. Эту процедуру нужно проделать для каждой машины. После этого у вас будет доступен полностью синхронный проект.
Последним пунктом, я хотел синхронизировать проекты, настройки и плагины для моего любимого IDE Sublime text. В данный момент я использую 3 версию. Для правильной синхронизации необходимо синхронизировать только папку Packages/User, т.к. для каждой OS, может быть своя версия плагина. А в таком случае, будет синхронизирован список плагинов ( нужно заранее установить Package Control ), и правильная версия загрузится автоматически.
Для первой машины, Windows:
cd "$env:appdataSublime Text 3Packages"
mkdir “D:путькоблачному дискуSublime”
mv User “D:путькоблачному дискуSublimeUser”
cmd /c mklink /D User “D:путькоблачному дискуSublimeUser”
Для каждой последующей, машины Windows:
cd "$env:appdataSublime Text 3Packages"
rmdir -recurse User
cmd /c mklink /D User “D:путькоблачному дискуSublimeUser”
Для первой машины, MacOSX:
cd ~/Library/Application Support/Sublime Text 3/Packages/
mkdir ~/путь/к папке/облачного диска/Sublime
mv User ~/путь/к папке/облачного диска/Sublime
ln -s ~/путь/к папке/облачного диска/Sublime/User
Для каждой последующей машины, MacOSX:
cd ~/Library/Application Support/Sublime Text 3/Packages/
rm -r User
ln -s ~/путь/к папке/облачного диска/Sublime/User
Очевидно, что сохранять проекты так же можно в эту папку. Теперь синхронизация рабочего пространства полностью завершена.
Прежде чем написать этот пост, я провел тестирование данного способа синхронизации. Были написаны 3 проекта, от начала и до конца. Лишь единожды произошел сбой базы данных и не значительная потеря данных. С 90% вероятностью, причиной этому был мой косяк в коде. Скорость и удобство синхронизации покрывает всю мороку с настройкой и позволяет значительно улучшить поток работы.
Автор: DexterKZ