Статьи

Разверните ваш сайт с помощью Laravel и Git

Используйте Git и Laravel для развертывания ваших сайтов одним щелчком мыши с помощью закладки.

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

Существует много разных способов развернуть ваш сайт на вашем производственном сервере. У каждого из них есть свой список плюсов и минусов, и каждый начинает и заканчивает одинаково. Что делает хороший рабочий процесс развертывания веб-сайтов, это то, что происходит между ними.

На днях я работал над проектом, в котором я использовал FileZilla для передачи файлов по FTP на рабочий сервер. Я никогда не считал FileZilla самым простым в использовании интерфейсом, но долгое время я думал, что это стандартная практика.

Для того же проекта я также использовал Git для отслеживания изменений в моих файлах. Я начал печатать git push origin когда перестал думать сам с собой. Разве это не было бы удобно, если бы развертывание веб-сайтов было таким же простым, как загрузка Git-репозиториев?

Если подумать, Git — идеальный инструмент для обработки файлов веб-сайтов при развертывании. Он отслеживает все ваши изменения файла, и он выталкивает или вытягивает только то, что ему нужно, с помощью одной команды. Я решил отправиться в путешествие по Google, чтобы найти способ использовать Git при развертывании моих собственных сайтов.

Один из популярных методов, которые я нашел с помощью Git для развертывания ваших веб-сайтов, — это использование Git Hooks ( Том Орам любит использовать подобный подход ). Представьте, как только вы git push origin в консоль терминала, Git Hooks запустит предопределенный скрипт. Этот предопределенный сценарий обращается к вашему производственному серверу и извлекает ваши последние изменения файла. С помощью той же команды, которую вы использовали для отправки изменений, вы также смогли обновить свой веб-сайт. Я думал, что этот метод был потрясающим, пока не понял, что только потому, что я загружаю свой локальный репозиторий, не значит, что я готов с этим жить.

Я хотел что-то такое же простое, как создание репозитория с помощью Git. Что еще более важно, я хотел получить полный контроль над публикацией контента в прямом эфире. Мне удалось найти аналогичный рабочий процесс, который использовал Git для обработки передачи файлов. Кроме того, я узнал, что могу также использовать PHP-фреймворк Laravel для автоматизации более повторяющихся задач.

Вот рабочий процесс развертывания веб-сайта, который я придумал:

Начало работы со структурой

В этом разделе мы --bare репозиторий --bare качестве нашего центрального репозитория и создадим два репозитория путем клонирования. Один для нашего локального веб-сайта, на котором мы будем выполнять наш процесс развертывания, а другой для нашего живого веб-сайта. Мы также будем устанавливать Laravel.

Пример визуальной структуры файла, который мы будем использовать в этом уроке.

Перед началом работы вам понадобится локальный сервер и рабочий сервер с установленным Git на обоих.

Полезные ресурсы:

1. Инициализируйте ваш --bare репозиторий

SSH на ваш рабочий сервер и найдите каталог, который вы хотели бы, чтобы ваш центральный репозиторий был.

 ssh [email protected] cd repos 

Теперь инициализируйте ваш репозиторий.

 git init --bare --shared mywebsite.git 

Обычно рекомендуется хранить эту папку вне структуры общих папок. Таким образом, кто-то не может случайно наткнуться на ваш личный репозиторий.

2. Клонировать, чтобы создать живой сайт

Определите, где в вашем public_html вы хотите разместить файлы своего сайта.

 cd ~/public_html/ 

Теперь вы клонируете только что созданный центральный репозиторий --bare из сеанса SSH.

 git clone [email protected]:~/repos/mywebsite.git mywebsite exit 

3. Клонировать, чтобы создать локальный сайт

Если вы используете что-то вроде Homestead , вам может понадобиться использовать команду Vagrant для SSH на вашем локальном сервере для доступа к вашим файлам.

 vagrant ssh 

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

 cd websites git clone [email protected]:~/repos/mywebsite.git mywebsite 

4. Настройка Laravel

Перед настройкой Laravel вы должны установить его на свой локальный сайт.

Полезные ресурсы:

Добавьте настройки удаленного сервера в файл конфигурации, открыв /app/config/remote.php .

 'connections' => array( 'production' => array( 'host' => 'domain.com', 'username' => 'username', 'password' => '********************', 'key' => '', 'keyphrase' => '', 'root' => '/var/www', ), ), 

Запомните ключ «производства», потому что нам нужно будет ссылаться на него позже.

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

 git add . 

Выполните ваш начальный коммит.

 git commit -m 'initial commit with laravel' 

Наконец, нажмите на ваш центральный репозиторий на вашем производственном сервере.

 git push origin master 

Установите Laravel для развертывания веб-сайтов.

Когда вы посещаете своего локального хоста, вы должны увидеть экран Laravel «Вы прибыли».

Прекрасная работа! Вы все настроены и настроены, так что теперь вы должны быть готовы погрузиться в забавные вещи.

Основной рабочий процесс с использованием Git

После того, как все настроено, развертывание ваших сайтов с помощью Git — это просто. Давайте посмотрим на код, чтобы попытаться понять, что происходит в его основе.

Важно понимать рабочий процесс, потому что мы переписываем его позже на PHP с Laravel. Это также поможет нам отладить любые проблемы, которые могут возникнуть.

1. Идите вперед и вставьте SSH на свой работающий сервер, а затем найдите свой производственный репозиторий.

 ssh [email protected] cd public_html/mywebsite 

2. Теперь потяните вниз свой центральный репозиторий, чтобы объединить новые изменения файла.

 git pull origin master 

Если вы все сделали правильно до этого момента, вы должны увидеть экран Laravel «Вы прибыли», когда вы посещаете сайт в реальном времени.

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

Автоматизация развертывания с помощью Laravel

Хорошо, теперь, когда мы знаем, как развернуть сайт с помощью Git, давайте использовать Laravel для автоматизации процесса. Эта часть может не понадобиться, но если вы уже используете Laravel, я спрашиваю: «Почему бы и нет?». Использование Laravel здесь делает этот рабочий процесс развертывания веб-сайта простым, эффективным, управляемым и настраиваемым.

1. Давайте начнем с создания простого маршрута, который ссылается на контроллер.

Откройте страницу routes.php в папке /app и добавьте следующую строку PHP в файл.

 Route::get('/deploy', 'Server@deploy'); 

Всякий раз, когда мы заходим на http://localhost/deploy выполняется публичная функция deploy в контроллере Server .

2. Теперь давайте создадим контроллер, на который мы ссылаемся, и сохраним его.

Начните с пустого класса Server который расширяет BaseController .

 class Server extends BaseController { } 

Теперь вставьте публичную функцию deploy в контроллер.

 class Server extends BaseController { public function deploy() { } } 

Сохраните его в папке /app/controllers и назовите его Server.php .

Вот где это весело!

3. Вставьте фасад SSH Laravel в функцию развертывания и повторите рабочий процесс развертывания Git.

Вставьте фасад SSH . Мы хотим получить доступ к production удаленным конфигурациям, которые мы настроили ранее.

 SSH::into('production')->run(); 

Теперь функция run() будет принимать два аргумента, которые мы должны предоставить. Первая и самая важная из них — это массив команд терминала, которые мы хотим запустить при выполнении нашей функции deploy .

 SSH::into('production')->run(array( 'cd ~/public_html/mywebsite', 'git pull origin master' )); 

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

 SSH::into('production')->run(array( 'cd ~/public_html/mywebsite', 'git pull origin master' ), function($line){ echo $line.PHP_EOL; // outputs server feedback }); 

Теперь, когда мы хотим развернуть наш веб-сайт, все, что нам нужно сделать, это посетить http://localhost/deploy и все готово. Достаточно просто, верно? Да и нет.

Есть несколько нарушений безопасности, с которыми нам нужно разобраться, прежде чем мы сможем назвать это ночью. Любой и их мать могут наткнуться на http://domain.com/deploy и развернуть наш сайт как есть. Что нам нужно сделать, это установить что-то на месте, чтобы предотвратить это.

Есть много способов сделать это, и мы могли бы обсудить, какой метод является наиболее безопасным, пока мы не посинели. Вы можете защитить паролем маршрут, вы можете запретить доступ по IP-адресу и т. Д.

В этом примере мы будем использовать .gitignore и проверять, существует ли файл, прежде чем мы запустим только что созданный route .

4. Создайте файл .gitignore в контроллерах, чтобы игнорировать Server.php .

Создайте новый файл и сохраните его в /app/controllers как .gitignore .

Добавьте следующую строку текста в файл и сохраните его.

 Server.php 

5. Убедитесь, что файл Server.php существует до запуска route который развертывает наш веб-сайт.

Помните route мы создали ранее для развертывания нашего сайта? Нам нужно обернуть это этим условным утверждением, и тогда мы будем готовы с этим жить.

 if (file_exists(__DIR__.'/controllers/Server.php')) { // route goes here } 

Это должно выглядеть так, когда мы все закончим.

 if (file_exists(__DIR__.'/controllers/Server.php')) { Route::get('/deploy', 'Server@deploy'); } 

Завершите, становясь Творческим

Так что у вас есть это! Просто поместите все свои обновленные файлы, зафиксируйте, отправьте, и вы готовы начать развертывание с Git-дружественным рабочим процессом.

Добавьте новую страницу развертывания в закладки для развертывания одним щелчком мыши.

Если вы хотите, вы можете сделать этот урок дальше. Просто добавьте http://localhost/deploy к своим закладкам для быстрого развертывания одним щелчком. Вы даже можете создать простую HTML-форму, которая отправляет сообщения на страницу, которая позволяет вам тянуть определенные ветви. Возможности безграничны.

Развертывание с помощью Git и Laravel заняло скучную и сложную задачу развертывания моих веб-сайтов и снова сделало это забавным. Это легко настроить, если вы понимаете Git, но еще проще в использовании.

Пожалуйста, поделитесь со мной творческими способами, которые вы используете, чтобы упростить развертывание веб-сайта!