Laravel настройка и запуск под Apache, Nginx, OpenServer

Автор: | 23.04.2017

laravel-nastrojkaВсем хэллоу :-)

Мы продолжаем цикл публикаций, посвящённых самостоятельному созданию сайтов на Laravel 5. В предыдущих статьях из данной серии я рассказал вам, что такое Laravel и какими способами его можно установить на хостинг или локальный веб-сервер.

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

Не понимаете, о какой настройке идёт речь? Тогда просто попробуйте запустить Laravel в браузере после его установки — думаю, что все вопросы отпадут сами собой :-)

А о том, как исправить данную ситуацию — читайте далее.

В чём будет заключаться настройка Laravel

Ну, вот мы и произвели установку Laravel. Теперь, казалось бы, остаётся радоваться жизни и начинать работу над реальными проектами… Но, не тут-то было :-)

Файловая структура Laravel обладает одной раздражительной для новичков особенностью – файл index.php, который распознаётся web-серверами как точка входа на сайт, расположен не в корне проекта, а в папке «public».

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

laravel-public-problemy-pri-zapuske

Сайт, конечно, можно запустить, если вбить URL сайта в формате «http://localhost/laravel.corp/public», но вы только посмотрите на этот адрес… Сколько букв, а это всего лишь адрес корня сайта :-)

Работать с такой простынёй в будущем будет крайне неудобно и ни о каком ЧПУ даже и думать не приходится.

Для того, чтобы сообщить серверу, что точка входа находится не в корне сайта, а в его директории public, нам необходимо либо изменить настройки самого сервера, либо, если вы используете Web-сервер Apache, отредактировать файл .htaccess.

А ещё, помимо чистых веб-серверов существуют различные сборки ПО для комфортной работы веб разработчиков. Они называются LAMP, WAMP, MAMP, XAMP.

Первая буква данных аббревиатур означает ОС, на которой сборка будет работать (Linux, Windows, MacOS, X- любая). А последние три — это заглавные буквы основных программ для создания сайтов, входящих в дистрибутив (Apache, MySQL, PHP).

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

И, хотя, сегодня активно применяются и другие средства для быстрого старта веб проектов — виртуализаторы и виртуальные среды разработки, о которых я упоминал в предыдущей статье об установке Laravel, я всё так же являюсь сторонником использования *AMP сборок.

Сам я веду разработку под ОС Windows и пользуюсь WAMP-сборкой OpenServer, о чём уже неоднократно говорил в статьях на данном блоге.

Кстати, продукт, несмотря на свои возможности, бесплатный и развивается исключительно силами его создателя. Поэтому настоятельно рекомендую вам также попробовать OpenServer, если вы ещё не пользуетесь им, и помочь проекту, если он вас впечатлил.

Ну, а поскольку я начал рассказывать об OpenServer, то и настройку Laravel для полноценного запуска проектов начну на его примере.

Установка Laravel на OpenServer

Прежде всего, хочу сказать, что использование OpenServer значительно упрощает запуск Laravel проектов, т.к. вам не нужно производить никаких манипуляций в консоли и тратить своё время на дополнительные настройки серверного ПО, необходимые для корректного взаимодействия друг с другом.

Для всего этого в OpenServer есть уже всё необходимое. Нужно только знать, где и что клацать :-)

Итак, после установки OpenServer и его запуска нам нужно настроить Laravel для запуска проекта по прямому запросу к его доменному имени, а не к папке public.

Перед этим действием предполагается, что Laravel вы уже установили и разместили его файлы в папке domains на OpenServer, которая предназначена как раз для будущих сайтов, запускаемых с помощью сервера. В моём примере Laravel находится по пути «C:\openserver\domains\localhost\laravel.corp».

Запустить в браузере я его сейчас могу только послав запрос на URL «http://localhost/laravel.corp/public», что крайне неудобно. Итак, чтобы избавиться от этой неприятности, первым делом нам нужно зайти в настройки OpenServer, что можно сделать следующим образом:

laravel-openserver-nastrojki

В открывшемся окне переходим на вкладку «Домены» и в списке «Управление доменами» выбираем пункт «Ручное управление» или «Ручное + Автопоиск», чтобы можно было задавать своим проектам произвольные доменные имена.

В качестве примера я использовал первый вариант, но всё же рекомендую последний, т.к. он позволяет как добавлять произвольные доменные имена, так и запускать проекты из папки «openserver/domains», обращаясь к ним по их названиям каталогов.

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

laravel-openserver-nastrojka-domena

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

Кстати! При данном варианте добавления новых сайтов на сервер файлы ресурса могут быть расположены в любом месте, не обязательно в «openserver/domains».

Если вы всё сделали правильно, то при вводе в браузере доменного имени (laravel.portfolio в моём случае), которое вы добавили, вы увидите стандартную страницу приветствия Laravel:

laravel-openserver-rabochij-sajt

Поздравляю, на этом установка Laravel на OpenServer подошла к концу. Сайт заработал, причём теперь исчезла необходимость обращаться к папке public!

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

Для этого просто скопируйте каталог с проектом или сделайте его архив в отдельном месте, кратко описав текущий функционал и дату создания.

Также не лишним будет сделать Git репозиторий для хранения списка изменений и быстрого их восстановления в будущем.

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

Как видите, сайт на Laravel из коробки выглядит так себе :-) В общем-то, страницу приветствия назвать сайтом можно при наличии определённой доли смелости и фантазии.

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

Но, это не беда. Стоит только начать… И, со временем, занимаясь разработкой сайтов на framework, у вас под рукой уже будет собственная мини-CMS благодаря готовым фрагментам кода и отдельным модулям.

А мы с вами начнём заниматься непосредственно разработкой уже в следующей статье, где я покажу вам, как «натянуть» чистый HTML-шаблон на фреймворк, на базе которого мы в дальнейшем создадим полнофункциональный сайт-визитку с админкой и возможностью ведения блога.

Поэтому подписывайтесь на обновления проекта, чтобы не пропустить самое интересное :-)

Итак, для фанатов Windows и OpenServer мы Laravel настроили. А как же быть тем, кто пользуется Linux-дистрибутивами или MacOS, на которых OpenServer не работает?

Когда-то передо мной стояла подобная задача — настроить Laravel на Ubuntu сервере.

На stackoverflow.com каких только способов я не находил… вплоть до изменения файловой структуры самого Laravel проекта (способ хоть и рабочий, но не рекомендую им пользоваться, чтобы у других разработчиков при виде «сего творения» не вставали дыбом волосы) :-)

Как же быть?

Достойным внимания является настройка виртуальных хостов, корнем которых будет являться папка public вашего Laravel проекта (по сути, это мы и сделали при запуске Laravel на OpenServer). Но, этот вариант подойдёт только для локального использования и на выделенных серверах.

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

Рассмотрим данные операции для различных веб-серверов.

Настройка Laravel проекта на различных веб-серверах

Поскольку самыми распространёнными программными веб серверами на сегодня являются Nginx и Apache, то рассмотрю данный процесс для них.

Настройка Laravel для Apache

Для Apache настройка Laravel может быть произведена двумя способами, каждый из которых мы подробно рассмотрим:

Способ 1.

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

1. Переходим в папку виртуальных хостов Apache: apache2/sitesavailable

2. Если вы ещё не создавали виртуальные хосты, то в данной папке у вас будет всего лишь один файл default. Откройте его для редактирования либо скопируйте и переименуйте его в название вашего будущего сайта. Например, laravelsite.local.

3. Внутри файла прописываем следующие настройки:

<VirtualHost *:80>
    
    ServerName laravelsite.local
    DocumentRoot "path_to_site/myapp/public"
        
    <Directory "path_to_site/myapp/public">
        AllowOverride all
    </Directory>
        
</VirtualHost>

4. Если вы создавали новый файл в sites-available, то для активации виртуального хоста нужно будет сделать ссылку на файл из apache2/sitesavailable в apache2/sites-enabled (в Unix-подобных системах это производится с помощью команды ln). Если вы редактировали существующий файл default, то данные действия будут лишними.

5. Перезапускаем Apache.

Вот и всё, после запуска Apache сайт будет доступен по адресу http://laravelsite.local/. Если что-то пойдёт не так, то ищите текст ошибки в логах Apache.

Способ 2.

Благо, что Apache предоставляет ещё один, более простой способ настройки корня Laravel сайта на директорию public с помощью директив в файле .htaccess, размещённом в корне проекта. Я сам активно пользуюсь данным способом при разворачивании Laravel сайтов на shared хостингах, т.к. он максимально прост и быстр — достаточно однажды подготовить соответствующий файл — и вперёд :-)

Код его должен быть следующим:

DirectoryIndex /public/index.php
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+) $1 [L]

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f
RewriteRule ^(.+) /public/$1 [L]

Options +SymLinksIfOwnerMatch
RewriteRule ^(.*)$ /public/ [QSA,L]

Этот нужно разместить в папке с Laravel в .htaccess, который находится в корне самого проекта. Тот .htaccess, который лежит в директории public, трогать не нужно!

Всё, с настройкой Laravel для Apache мы разобрались. Теперь самое время сделать то же самое для Nginx, который также достаточно активно применяется для запуска веб-проектов ввиду своей фантастической скорости работы.

Настройка Laravel проекта на Nginx сервере

Итак, для настройки Laravel для Nginx, к сожалению, нет такого изобилия различных способов, как для Apache. По крайней мере, я знаю только один в виде настроек Laravel проекта в виде виртуального хоста.

Если вы знаете больше, то не отмалчивайтесь и поделитесь ими в комментариях со мной и всеми остальными :-)

В случае с Nginx для настройки виртуальных хостов нужно произвести действия, аналогичные в случае с Apache:

1. Переходим в папку виртуальных хостов Nginx: nginx/sitesavailable.

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

3. Внутри файла прописываем следующие настройки:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only = on;
    root path_to_app/myapp/public;
    index index.php index.html index.htm;

    server_name server_domain_or_IP;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri /index.php = 404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

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

4. Если создавали новый виртуальный хост, то активируем его созданием ссылки на файл с настройками из папки sites-available в sites-enabled. Если новый хост вы не создавали, а редактировали существующий, то данный шаг пропускаем.

5. Перезапускаем Nginx.

Итак, после данных действий, при вводе в веб браузере адреса сайта (в моём примере он будет http://laravelsite.local/) вы увидите не список файлов, как прежде, а ожидаемую страницу приветствия Laravel.

Если этого не произошло, то ищите ответы на вопросе в логах вашего веб-сервера (Nginx или Apache, соответственно). Скорее всего, они будут вызваны неверными правами на различные папки (как проекта в целом, так и на отдельные внутренние каталоги). В таком случае всё, что вам потребуется, это установить их в 755 или 644 :-)

Если же вы найдёте что-то сложнее, то описывайте свою проблему в комментариях, постараюсь вам помочь.

Настройка локалей и соединений с БД в Laravel

Теперь можно приступить непосредственно к разработке.

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

Поскольку в дальнейшем я планирую продемонстрировать создание сайта-визитки с возможностью ведения блога, то нам необходимо будет создать базу данный сайта (БД) для хранения в ней текста и названия постов блога.

При написании статей на данном блоге я неоднократно описывал процесс создания БД через программу phpMyAdmin, предоставляющую веб-интерфейс для работы с базами, имеющимися на сервере.

Поэтому я не горю желанием в сотый раз описывать данный процесс. Если вы не в курсе, как это сделать, то вы можете найти данную информацию в статье, посвящённой созданию блога на WordPress, например.

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

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

Настройки различных компонентов, входящих в состав фреймворка, хранятся в отдельных файлах, расположенных внутри каталога config, который после установки чистого дистрибутива Laravel выглядит так:

nastrojka-laravel-configuratsionnye-fajly

Здесь, как вы видите, содержатся конфиги для различных вещей: сессий, кэширования, файловой системы, авторизации и т.д. Помимо всего прочего, здесь присутствует и конфиг с настройками, необходимыми для взаимодействия с БД.

Кстати! Настройки устанавливаемых сторонних расширений (пакетов) вы сможете найти в этом же каталоге после их установки и публикации конфигов. Правда, не всегда. Некоторые разработчики предпочитают хранить их вместе с остальными файлами пакета в папке vendor.

Я не буду его здесь приводить полностью, т.к. вы всегда можете сами его открыть и посмотреть. И описывать, за что отвечает каждая отдельная опция, тоже смысла не вижу, т.к. каждая из них отлично продокументирована создателями Laravel.

Единственное, на что я хочу обратить ваше внимание, так это на постоянное использование внутри конфигов функции env():

'default' => env('DB_CONNECTION', 'mysql'),

Вот по этому поводу хотелось бы внести некоторые комментарии.

Функция env() в Laravel является переработанным вариантом getenv(), являющейся частью PHP библиотеки DotEnv от Vance Lucas, которая используется в составе Laravel.

Данная библиотека позволяет создавать файл с перечнем переменных рабочего окружения — .env в корне проекта, переменные из которых становятся глобально доступными благодаря функции getenv (env для Laravel) и из суперглобальных массивов $_ENV и $_SERVER.

Причём, как вы видите в примере выше, данная функция принимает два параметра:

  1. Имя переменной окружения;
  2. Значение, которое будет использоваться, если переменная не будет найдена.

Возникает вопрос: «Что за окружение такое?». Имеется ввиду набор настроек проекта, актуальные для отдельных разработчиков, т.е. хранящиеся на его рабочем компьютере.

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

Естественно, что имя локальной БД, к примеру, может (а скорее всего, так и будет) не совпадать с основной.

Так вот, чтобы не менять каждый раз значения глобальных переменных после заливки файлов в общий репозиторий или на сервер, эти переменные хранятся в специальном файле локального окружения, который автоматически добавляется в .gitignore и недоступен к просмотру в некоторых файловых системах и программах (к примеру, в SSH клиенте WinSCP при базовых настройках его не видно).

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

К чему я всё это? Да к тому, что лучше нам свои настройки хранить в файле .env. Пока вы работаете одни над проектом, для вас, естественно, нет никакой разницы — в .env ли будут храниться настройки или в специализированных конфигах.

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

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

Итак, открываем файл .env и ищем следующий блок переменных, отвечающий за настройки соединения с базой данных:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

Кстати! Если вы устанавливали Laravel не через Composer, а, например, вручную, путём скачивания с GitHub, то файла .env у вас не будет. Вместо него вы найдёте файл .env.example, который нужно будет скопировать и переименовать в .env вручную.

Несложно догадаться, что первая переменная отвечает за СУБД, которой вы будете пользоваться, далее идёт имя (IP) сервера БД, порт для соединения, имя БД, а также логин пользователя БД и пароль для авторизации.

В моём случае я назвал БД laravel_corp. Пользователь БД у меня стандартный — root, пароль пустой. СУБД использую MySQL и сервер у меня расположен на локальном ПК.

Следовательно, мой конфиг принял такой вид:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_corp
DB_USERNAME=root
DB_PASSWORD=

Думаю, что по моему примеру вам несложно будет ввести свои настройки.

Ещё одна вещь, которую вам может понадобиться изменить в дефолтных настройках Laravel — это настройка локали и времени. Где это может пригодиться?

Локаль — это язык по умолчанию. Следовательно, если у вас сайт будет мультиязычный, то контент на данном языке будет по умолчнию.

А настройка времени (часового пояса) нам нужна для корректного хранения данных, касающихся времени (создание записи в БД, её обновление и т.д.). Лично мне некорректное значение данного параметра очень сильно подпортило нервы однажды, когда я не мог никак понять, почему у сообщения в чате, которое я только что отправил, время создания указывалось на час меньше. А виной всему был один-единственный параметр :-)

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

Итак, обе переменные находятся в одном файле — config/app.php. Открываем его и ищем следующий блок:

'timezone' => 'UTC',
'locale' => 'en',

В моём случае значения у них были ‘Europe/Kiev’/’ru’. Тут хочется сделать небольшое уточнение по поводу часового пояса.

Изначально, увидев значение «UTC», мне захотелось использовать запись в формате UTC+2, но данная переменная принимает в качестве значения PHP timezones, нужную из которых вы можете найти по указанной ссылке.

Ну вот, собственно говоря, и всё, что я хотел вам сегодня сказать. В ходе публикации мы с вами произвели комплексную настройку Laravel, начиная с запуска проекта на веб-серверах Apache, Nginx и WAMP-сборке OpenServer, и заканчивая настройкой глобальных переменных, необходимых для соединения с БД и корректной работы сайта в целом.

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

Также не забывайте пользоваться социальными кнопками под статьёй.

На этом у меня всё. До скорых встреч :-)

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
7 голосов, в среднем: 5 из 5

4 комментария к статье "Laravel настройка и запуск под Apache, Nginx, OpenServer"

  1. Николай

    Мда.. Спасибо за труд, я как для своего развития не знающий в этом ничего, но очень хотел разобраться что да как работает, смотрел иностранцев: англичан, индусов, арабов, китайцев. Все что они делали все получалось, но что именно я делал не мог понять, т.к. они делают, в основном, не так — как на официальном сайте + используют js (angular,vue,react и т.п.), и для такого чайника как я это убило какие либо попытки изучать дальше самостоятельно, пока не наткнулся на тебя) спасибо)

  2. Андрей

    Для разработки самый лучший вариант — использовать ларавелевский же homestead.

    1. Pashaster Автор

      Ну, тут на любителя, я считаю. Я лично не люблю всякого рода виртуалки. А кому-то Docker по душе…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *