- PVSM.RU - https://www.pvsm.ru -
В этой статье я расскажу как мы построили процесс разработки сайта не поднимая локальных копий веб-сервера в небольшой команде разработчиков с использованием Xdebug на тестовом сервере и автоматического развертывания репозитория на боевой сервер.
Но отказываясь от создания локальной копии сервера, мы теряем массу плюсов такого подхода:
Если отладку можно получить с помощью Xdebug, а скорость переехав на другой сервер, то третье преимущество может стать серьезной помехой, поэтому моя статья актуальна в первую очередь небольшим командам, где можно давать задачи т.о. чтобы они практически не пересекались между собой.
Есть еще один вариант организации серверов разработки — каждому участнику проекта создается своя копия файлов и домены на сервере, т.о. сервер один, причем удаленный, но при этом каждый разработчик не мешает другому… минус такого подхода в высокой сложности организации, особенно если у проекта много поддоменов.
в нашем случае проект существовал без репозитория, отдельная тема как его туда добавить(т.к. надо исключить массу файлов которые не нужно добавлять в репу), но допустим репа уже есть на Bitbucket, а файлы на сервере лежат в обычной директории
su myproject
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
и добавляем его на Bitbucket в раздел Deployment keys в настройках проекта
mkdir ~/tmp
mkdir ~/tmp/myproject.ru
cd ~/tmp/myproject.ru
git clone git@bitbucket.org:username/myproject.ru.git
cp -r .git .gitignore /vhosts/myproject.ru/
rm -rf ~/tmp/myproject.ru
cd /vhosts/myproject.ru
git reset --hard
Если у вас еще не установлен Git — ставим [1]
В PHPStorm прописываем путь до Git'а (это файл bin/git.exe) — Settings -> Version Control -> Git -> Path to Git executable
В PHPStorm вкладка VSC -> Checkout from Version Control -> Git
указываем имя новой директории проекта и путь к репозиторию, например
https://username@bitbucket.org/username/myproject.ru.git
Теперь файлы которые вы правите локально будут автоматически загружаться на сервер.
#!/bin/sh
cd /vhosts/myproject.ru && git reset --hard && git status --porcelain -uall | egrep '^??' | awk '{ print $2; }' | xargs rm && git pull
Поскольку git выдает ошибку при pull, если добавлены новые файлы, но при этом не зафиксированы, а git reset --hard их не удаляет, то мы парсим вывод git status и удаляем новые файлы, чтобы они были загружены из репозитория, кроме того git reset --hard отменяет все изменения в файлах, чтобы не было конфликтов.
Не забываем добавить права на исполнение скрипту
chmod a+x /vhosts/myproject.ru/gitsync.sh
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
#Чтобы можно было выполнять sudo без терминала, т.е. прямо от веб-сервера
Defaults:www-data !requiretty
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL) ALL
# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d
#разрешаем запуск скрипта от чужого имени без пароля
www-data ALL = (myproject) NOPASSWD: /vhosts/myproject.ru/gitsync.sh
<?php
$output = array();
exec('sudo -u myproject /vhosts/myproject.ru/gitsync.sh 2>&1', $output);
foreach ($output as $line)
{
echo $line."rn";
}
die();
?>
http://myproject.ru/gitsync.php
и жмем SaveТеперь после каждого push'а все файлы на сервере будут приводится к файлам из репозитория, можно такой же подход реализовать и на тест сервере, но в этом случае если один разработчик имеет незапушеные файлы, то на сервере они затрутся и их придется заново загружать.
Как установить его не буду описывать, будем считать что Xdebug установлен, правим конфиг /etc/php5/conf.d/xdebug.ini:
zend_extension=/usr/lib/php5/20090626/xdebug.so
xdebug.remote_enable=1
xdebug.remote_connect_back=1
xdebug.idekey=PHPSTORM
xdebug.remote_port=9000
Обратите внимание на директиву remote_connect_back — она позволяет коннектиться не к заданному IP машины разработчика, а к IP клиента который находится в окружении PHP (REMOTE_ADDR), т.о. с Xdebug могут работать одновременно несколько человек. Это не значит что Xdebug будет запущен при каждом обращении к серверу, для его старта по прежнему требуется передать определенные cookies — подробнее [2]
Вбиваем тут [3] IDE key указанный нами в xdebug.idekey ключ PHPSTORM и появившиеся ссылки внизу перестакиваем на панель закладок
Настраивать в PHPStorm специально ничего не надо, все уже настроено, но на всякий случай настройки тут — Project Settings -> PHP -> Debug
теперь чтобы отладчик заработал нужно:
Поскольку соединение идет из вне, а многие теперь сидят за роутерами, то на роутере нужно сделать проброс порта 9000 на ваш локальный IP адрес, на D-link DIR 300 это выглядит примерно так:
Если debugger выдает ошибку, что не может найти соответствующий текущий исполняемый файл на локальной машине, то в настройках PHP -> Servers можно задать соответствие путей на сервере путям на локале.
Ссылки:
http://git-scm.com/ [1]
http://xdebug.org/ [4]
http://bitbucket.org/ [5]
http://jetbrains.com/phpstorm/ [6]
Автор: DexizeR
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/38324
Ссылки в тексте:
[1] ставим: http://git-scm.com/
[2] подробнее: http://www.xdebug.org/docs/all
[3] тут: http://www.jetbrains.com/phpstorm/marklets/
[4] http://xdebug.org/: http://xdebug.org/
[5] http://bitbucket.org/: http://bitbucket.org/
[6] http://jetbrains.com/phpstorm/: http://jetbrains.com/phpstorm/
[7] Источник: http://habrahabr.ru/post/186080/
Нажмите здесь для печати.