Laravel 4 на виртуальном хостинге

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

Я хотел бы начать с того , что существуют много решений способных удовлетворить ваши потребности — готовые решения для размещения проектов на таких PHP фреймворках, как Laravel. Fortrabbit — одно из таких решений, но безусловно не единственное.

Помните, что абсолютный минимум требований включает в себя расширение PHP Mcrypt. Мы будем использовать следующую структуру папок в качестве базовой для этого урока — www папка является нашим DoceumntRoot. Ваша структура папок на вашем хостинге может отличаться.

Спасибо следующим ресурсам и людям:

Нет доступа к DocumentRoot

DocumentRoot — это папка куда смотрит ваш домен на хостинге. Laravel требует смотреть в папку public, чтобы ваше основное приложение было недоступно извне. Но что, если вы не можите сопоствить свой домен с папкой public Laravel? Сам виртуальный хостинг не предоставляет такой возможности. Есть несколько способов решить эту проблему и один лучше другого:

1. Переименовать папку public

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

Для начала созданим папку с именем laravel на нашем хостинге и выложим туда структуру приложения.

Затем загрузим содержимое папки public в папку www.

Теперь, когда мы изменили местоположение и имя папки public, мы должны отразить это в файле bootstrap/paths.php.

Мы также должны изменить пути в файле www/index.php, чтобы найти новую папук laravel.

Вот мы и переместили успешно папку public и наше laravel приложение. Вы можете конечно загрузить приложение laravel в корневую папку, но в отдельной папке это выглядит более практично.

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

2. Использовать .htaccess и mod_rewrite

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

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

Для начала переместим все приложение в папку www.

Теперь в папки www, разместите файл .htaccess со следующим содержимым.

Это должно перенаправить все запросы к вашемей папке public. Запросы к вашей папке public, например файлы статики, будут по-прежнему приниматься.

3. Переместить все в DocumentRoot

Так же, как в предыдущем методе мы переместим все приложение в папку DocumentRoot. Но на этот раз мы также и сожержимое папки public в DocumentRoot

Во-первых, давайте перестим все приложение в папку www (DocumentRoot).

Теперь переместим содержимое папки public в DocumentRoot и удалим её.

Придется изменить путь в файле bootstrap/paths.php.

И наконец мы должны также изменить пути в файле index.php.

Теперь ваше Laravel приложение должно работать.

Деградация до PHP 5.3.2

Laravel 4 требует по крайней мере PHP 5.3.7 из-за Bcrypt, но есть способ дергадировать до PHP 5.3.2, если вы застряли с этим. Роб Клэнси (Rob Clancy) написал подробную инструкцию о том, как понизить до абсолютного минимума требования к версии PHP.

Нет доступа к SSH

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

К счастью есть несколько средств развертывания, которые могут вам помочь в этом. Приведу некоторые из них.

Отсутствие доступа к SSH также означает отсутствие доступа к composer, artisan и другим инструментам командной строки. И снова FTP, вероятно, твой единственный друг. Если вы решили не использовать средства развертывания, то я рекомендую делать по крайней мере слудующее.

Запускайте composer install с аргументом —no-dev перед заргузкой файлов. Это оптимизирует ваши зависимости для продакшена без ненужных зависимостей предназначенных для разработки. И перезаписывайте папку vendor с обновленными зависимостями, когда вы загружаете файлы через FTP.

Вывод

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

Оригинальнаый пост на английском языке

  • Сергей

    Приветсвтую! Не знаю жив ли данный проект, но уже не знаю куда обратиться. Я использовал Ваш пример использования mod_rewrite (номер 2 из примеров) у меня вся ссылочная система работает нормально, но не отрабатывает Auth::login(), при попытке зайти на маршрут с фильтром auth, возвращает меня на страницу аутентификации. Проблема заключается именно в mod_rewrite, потому на домашнем сервере все работает, но там использую настройку DocumentRoot. не подскажете в чем может заключаться проблема?

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

  • Natalya Potseluenok

    Спасибо огромное! Очень помог третий способ, с перемещением всего сайта в DocumentRoot. Намучилась я со своим сайтом. На моем хостинге используют PHP 5.2.9. Соответственно, сайт на laravel 4.2 просто не открылся! Показывал пустой экран и кучу ошибок в лог-файле. Проблема была решена переустановкой сайта на laravel 4.1. Деградацию PHP до 5.3.2 я не выполняла.

  • Johnnie Walker

    Спасибо за решение! Использовал 3-й способ на версии 4.2
    Но возникла проблема с роутингом, ни как не могу найти решение, перепробывал множество способов
    Могли бы Вы еще пролить свет на даннную проблему
    Заранее благодарен!

    • На самом деле за правильный роутинг отвечает .htaccess файл, могут быть конкретные случаи связанные с конфигурацией apache на сервере хостинга — я бы порекомендовал обратиться к поддержке хостинга. Подобным способом я и сам пользуюсь на разных хостингах, т.к. еще не встречал настраиваемую папку для document root, а положить php-код на уровень выше не представляется возможности из-за прав даже когда есть возможность видеть файлы и папки на этом уровне. Если бы вы привели конкретный пример проблемы с роутингом — возможно я что-то бы и посоветовал…

  • Johnnie Walker

    C 4-кой разобрался, спасибо
    А на 5-й версии данные способы работают?

    • Пока на хостинге не приходилось размещать 5-ю версию, но принцип тот же…

  • Никак не могу понять откуда у вас папка vendor берется. В архиве её нет, а из-за этого фатальные ошибки вылетают потом