Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

PHPStorm XDebug Bitbucket: разработка на удаленном сервере в маленький команде

Anna | 31.05.2014 | нет комментариев

В этой статье я расскажу как мы возвели процесс разработки сайта не поднимая локальных копий веб-сервера в маленький команде разработчиков с применением Xdebug на тестовом сервере и механического развертывания репозитория на боевой сервер.


Немножко о причинах НЕ поднимать локальную копию веб-сервера:

  1. Если вы трудитесь под Windows, а веб-сервер на линукс, то локальный сервер для трудного портала(в котором много специфического софта) под винду поднять бывает вообще немыслимо, остается поднимать копию на виртуальной машине, но в этом случае разница в настройке ПО разработчика между настройкой под виртуальную машину и настройкой под удаленный веб-сервер заключается лишь в IP адресе.
  2. Если таки поднимать локальную копию, то придется непрерывно синхронизировать настройки ПО сервера, базу данных и помимо того остается вопрос как быть с крон-задачами, которые Зачастую обязаны выполняться под утро.
  3. Если сайт распологается на нескольких серверах либо даже отдельные его части занимают несколько серверов(скажем, масштабированные таблицы — часть таблицы на одном, часть на ином сервере), то все это тоже может крепко усложнить задачу создания локального сервера.
  4. Эффективность вашей машины и сервера может крепко различаться, что может иметь воздействие и на код.
  5. Вдалеке не все участники плана могут распологать довольными навыками системного администрирования.

Но отказываясь от создания локальной копии сервера, мы теряем массу плюсов такого подхода:

  1. Запуск интерпретатора из IDE и соответственно отладка.
  2. Скорость закачки файлов и пинг.
  3. Разработчики работают всякий со своей копией сервера, следственно они друг другу никак не могут воспрепятствовать.

Если отладку дозволено получить с поддержкой Xdebug, а скорость переехав на иной сервер, то третье превосходство может стать серьезной помехой, следственно моя статья востребована в первую очередь небольшим командам, где дозволено давать задачи т.о. Дабы они фактически не пересекались между собой.

Есть еще один вариант организации серверов разработки — всем участнику плана создается своя копия файлов и домены на сервере, т.о. сервер один, причем удаленный, но при этом всякий разработчик не мешает другому… минус такого подхода в высокой трудности организации, исключительно если у плана много поддоменов.

 

Пояснения к схеме:

 

  • Разработчик имеет копию репозитория
  • Тестовый и боевой веб-сервер в качестве корневой директории плана имеет рабочую копию репозитория
  • Файлы плана связаны в PHPStorm с рабочей директорией тестового веб-сервера, это значит при Ctrl S происходит механический аплод редактируемого файла на сервер

 

Как происходит разработка:

 

  1. разработчик правит код локально
  2. нажимает Ctrl S файл загружается на сервер
  3. запускает в браузере необходимую станицу тестового веб-сервера(либо исполняет на ней надобное действие), глядит итог
  4. если нужно запускает дебаггер с поддержкой Xdebug
  5. если все устраивает делает коммиты в репозиторий и потом Push
  6. хранилище(в нашем случае это Bitbucket) механически позже всякого Push’а опрашивает указанный скрипт на боевом сервере
  7. при опросе данный скрипт вызывает git pull и т.о. приводит рабочую директорию боевого веб-сервера до востребованной версии из репозитория

 

Подготовка сервера

в нашем случае план существовал без репозитория, отдельная тема как его туда добавить(т.к. нужно исключить массу файлов которые не необходимо добавлять в репу), но возможен репа теснее есть на Bitbucket, а файлы на сервере лежат в обыкновенной директории

  1. логинимся под юзером плана:
    su myproject
    
  2. генерим SSH ключи для авторизации на bitbucket без пароля
    ssh-keygen -t rsa
    
  3. получаем публичный ключ
    cat ~/.ssh/id_rsa.pub

    и добавляем его на Bitbucket в раздел Deployment keys в настройках плана

  4. клонируем план во временную директорию ~/tmp/myproject.ru:
    mkdir ~/tmp
    mkdir ~/tmp/myproject.ru
    cd ~/tmp/myproject.ru
    git clone git@bitbucket.org:username/myproject.ru.git
    
  5. копируем .git и .gitignore в рабочую директорию плана (у нас это /vhosts/myproject.ru/), остальные файлы не копируем!
    cp -r .git .gitignore /vhosts/myproject.ru/
    rm -rf ~/tmp/myproject.ru
    
  6. приводим файлы к состоянию из репозитория
    cd /vhosts/myproject.ru
    git reset --hard
    

 

Подготовка заказчика

Если у вас еще не установлен Git — ставим
В 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

Сихноризируем файлы с удаленным сервером:

 

  1. Добавляем сервер и указываем его доступы File -> Settings -> Deployment
  2. в Root path указываем путь до корня плана (в моем случае /vhosts/myprojet.ru/) — корень плана на сервере должен совпадать по иерархии файлов с корневой директорией репозитория
  3. Переходим во вкладку Mappings и указываем в Deployment path on server — / и в Web path on server тоже — / (если тот начинается с корня сайта)
  4. Выбираем наш сервер в списке и жмем на кнопку Use as default
  5. Дальше в Deployment -> Options необходимо предпочесть On explicit save action (Ctrl S) в Upload changed files automatically to the default server
  6. В Warn when uploading over newer file выбираем Compare timestamp & size (правда дозволено и по содержимому) и подмечаем Notify about remote changes, это дозволит узнать если кто-то правил тот же файл

Сейчас файлы которые вы правите локально будут механически загружаться на сервер.

Настройка автопула на боевом сервере:

 

  1. Создаем shell скрипт для механического pull’а плана /vhosts/myproject.ru/gitsync.sh:
    #!/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
    
  2. От того что операции с репозиторием проходят от пользователя-обладателя файлов, а веб-сервер работает от иного пользователя, то необходимо ему добавить разрешение на запуск авто-pull скрипта от чужого имени без пароля через /etc/sudoers
    # /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
    
  3. Созадем php скрипт, тот, что будет из веба запускать наш shell скрипт /vhosts/myproject.ru/htdocs/gitsync.php (наименование дозволено предпочесть больше тайное, как и добавить передачу пароля):
    <?php
        $output = array();
        exec('sudo -u myproject /vhosts/myproject.ru/gitsync.sh 2>&1', $output);
        foreach ($outputas $line)
        {
            echo $line."rn";
        }
        die();
    ?>
    
  4. в Bitbucket в настройках плана во вкладке Services в раздел POST пишем путь до скрипта автопула:http://myproject.ru/gitsync.php и жмем Save

Сейчас позже всякого push’а все файлы на сервере будут приводится к файлам из репозитория, дозволено такой же подход реализовать и на тест сервере, но в этом случае если один разработчик имеет незапушеные файлы, то на сервере они затрутся и их придется снова загружать.

Подключаем Xdebug

Как установить его не буду описывать, будем считать что 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 — подробнее

Вбиваем здесь IDE key указанный нами в xdebug.idekey ключ PHPSTORM и появившиеся ссылки внизу перестакиваем на панель закладок

Настраивать в PHPStorm намеренно ничего не нужно, все теснее настроено, но на каждый случай настройки здесь — Project Settings -> PHP -> Debug

сейчас Дабы отладчик заработал необходимо:

  1. в PHPStorm включить прослушку коннектов дебаггеров — кнопка Start Listen PHP Debug Connection
  2. открыть сайт, тыкнуть закладку Start debugger, перезагрузить страницу
  3. PHPStorm должен маякнуть о входящем подключении и открыть дебаггер

От того что соединение идет из вне, а многие сейчас сидят за роутерами, то на роутере необходимо сделать проброс порта 9000 на ваш локальный IP адрес, на D-link DIR 300 это выглядит приблизительно так:

Если debugger выдает ошибку, что не может обнаружить соответствующий нынешний исполняемый файл на локальной машине, то в настройках PHP -> Servers дозволено задать соответствие путей на сервере путям на локале.

Ссылки:
http://git-scm.com/
http://xdebug.org/
http://bitbucket.org/
http://jetbrains.com/phpstorm/

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB