Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 09.04.2017 02:05:33

Деплой (deploy): ищу готовое решение под Laravel (для адаптации)

Всем привет!

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

Ищу такое решение для разворачивания сервера и последующего деплоя ларавел на Ubuntu 16.04. Все дополнительные необходимые вещи прикручу сам smile (ещё большим счастьем для меня будет то, если не нужно будет ставить дополнительных пакетов, чтобы оно было независимое и работало без установки чего-то через композер/в систему)

Про envoy знаю, но даже с ним всё сведется к тому, что нужно будет писать полностью деплой с нуля. И меня больше всего страшит работа с композером (признаюсь: я юзаю его первый раз сейчас с ларой, локально на макоси проблем не возникло, всё поставил по инструкции Valet).
Я не понимаю могу ли я просто взять директорию с ларой из локального окружения и залить её по ftp (есессно, поменяв .env). Не понимаю есть ли в композере такие вещи как "develop" и "production" окружение?

Когда ранее работал с Django (python) - было множество прекрасных готовых решений под Ansible, Chef, Puppet для неё. Надеюсь, что и в сообществе Laravel что-то такое присутствует smile

Изменено Lord_Alfred (09.04.2017 02:07:56)

Не в сети

#2 09.04.2017 17:17:01

Re: Деплой (deploy): ищу готовое решение под Laravel (для адаптации)

git pull – наше всё smile

ну на самом деле конечно там ещё некоторые команды надо выполнить, всё-таки есть в ларавеле и продакшен-специфичные оптимизации, и в maintenance mode есть смысл приложение переводить при обновлении. плюс если ассеты собираются на сервере – запускать gulp или mix. плюс если используются очереди – рестартовать обработчики

у меня в одном из проектов скрипт-обновлятор выглядит так:

#!/bin/bash

php artisan down
git pull
composer install
composer dump-autoload -o
php artisan config:cache
php artisan route:cache
php artisan laroute:generate
gulp --production
php artisan queue:restart
php artisan up

gulp – потому что проект на L5.2, laroute – пакет, который позволяет генерить маршруты в js-коде, аналогично route() на пхп-стороне. composer install включает в себя php artisan optimize, и в config/compile.php у меня добавлены некоторые из своих часто используемых классов

кроме «полного» обновлятора, есть ещё мини-обновлятор, который не пересобирает ассеты и работает намного быстрее

Не в сети

#3 09.04.2017 19:08:12

Re: Деплой (deploy): ищу готовое решение под Laravel (для адаптации)

constb пишет:

git pull – наше всё smile

ну на самом деле конечно там ещё некоторые команды надо выполнить, всё-таки есть в ларавеле и продакшен-специфичные оптимизации, и в maintenance mode есть смысл приложение переводить при обновлении. плюс если ассеты собираются на сервере – запускать gulp или mix. плюс если используются очереди – рестартовать обработчики

у меня в одном из проектов скрипт-обновлятор выглядит так:

#!/bin/bash

php artisan down
git pull
composer install
composer dump-autoload -o
php artisan config:cache
php artisan route:cache
php artisan laroute:generate
gulp --production
php artisan queue:restart
php artisan up

gulp – потому что проект на L5.2, laroute – пакет, который позволяет генерить маршруты в js-коде, аналогично route() на пхп-стороне. composer install включает в себя php artisan optimize, и в config/compile.php у меня добавлены некоторые из своих часто используемых классов

кроме «полного» обновлятора, есть ещё мини-обновлятор, который не пересобирает ассеты и работает намного быстрее

Большое спасибо за ценный ответ, подчерпнул для себя кое что новое smile

Но остались некоторые вопросы:

1. Есть ли готовые решения для разворачивания всего необходимого на сервере (Ubuntu 16.04)? В питонячих пакетах это много где называлось bootstrap или provision.

2. Git - воистину самое полезное и необходимое в разработке, но если думать о том, что мою разработку будут запускать win-юзеры, которые привыкли к установке CMS аля "скопируйте все файлы по ftp": как мне лучше построить систему, чтобы потом у них не возникло проблем?
Перефомулирую вопрос для лучшего понимания: могу ли я копировать локальную папку vendor на сервер без запуска "composer install"? И нужно ли предварительно как-то сказать локальному композеру, что это продакшен окружение?

Не в сети

#4 10.04.2017 10:17:17

Re: Деплой (deploy): ищу готовое решение под Laravel (для адаптации)

но если думать о том, что мою разработку будут запускать win-юзеры, которые привыкли к установке CMS аля "скопируйте все файлы по ftp": как мне лучше построить систему, чтобы потом у них не возникло проблем?

ох, сожрут такие пользователи тебе весь мозг. но если хочешь – видимо нужно что-то вроде https://github.com/RachidLaasri/LaravelInstaller взять за основу и сделать свой собственный веб-установщик. как потом решать задачу обновления на новые версии через веб-интерфейс, тут я не подскажу, скорее всего надо будет писать всё своё

Перефомулирую вопрос для лучшего понимания: могу ли я копировать локальную папку vendor на сервер без запуска "composer install"? И нужно ли предварительно как-то сказать локальному композеру, что это продакшен окружение?

можно, более того, если вместе с composer.json распространять composer.lock – он будет при composer install устанавливать только версии идентичные тем что в окружении разработки, а не обновлять их на последние доступные. это очень удобно, поскольку позволяет обновлять зависимости локально и хорошо тестировать перед деплоем

если ты включаешь vendor в пакет, то на целевой системе композер вообще не нужен. просто перед заворачиванием пакета достаточно сгенерить оптимизированный автолоадер (composer dump-autoload -o) и всё. то же самое с ассетами – можно миксом сразу собрать продакшен-сборку стилей и скриптов, сразу версионировать их (mix.version()) и вместе с манифестом положить в распространяемый пакет – на целевой системе уже не нужны будут node.js, npm, webpack и пр. то же самое с кэшированием маршрутов и конфига. фактически ты исполняешь что-то аналогичное моему скрипту-деплоеру в своей системе и получаешь готовую продакшен-сборку, которую остаётся упаковать и выложить

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

но наверное самая большая засада будет с тем что 99 из 100 будут лить твой код в корень веб-сервера и ругаться что ничего не работает. о том что корнем должен быть public – они сначала не прочитают, а потом если ты будешь это объяснять – не поймут что ты им объясняешь. я смотрю с CMS-ками на ларавеле в этом плане ситуация такая, что они поголовно «перемещают» паблик в корень проекта, что само по себе создаёт больше проблем чем решает – в ларавеле не предусмотрена защита кода и файлов от любопытного юзера при такой установке, а .htaccess работает не у всех хостеров и не всегда

в итоге, например, можно попалить все зависимости конкретной установки – http://www.atlantis-cms.com/composer.json или раскрыть локальные пути – http://www.atlantis-cms.com/server.php – в общем непонятно как лучше – сделать хорошо или лечить всех чайников

Не в сети

#5 10.04.2017 10:37:24

Re: Деплой (deploy): ищу готовое решение под Laravel (для адаптации)

@constb, огромное вселенское СПАСИБО за такое подробное описание, всё наконец-то сошлось в голове smile

constb пишет:

нужно что-то вроде https://github.com/RachidLaasri/LaravelInstaller взять за основу и сделать свой собственный веб-установщик. как потом решать задачу обновления на новые версии через веб-интерфейс, тут я не подскажу, скорее всего надо будет писать всё своё

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

constb пишет:

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

Тут проблем не возникнет, изначально всё будет сводиться к установке VestaCP + настройке чистого сервера под требуемое окружение (установка memcached (скорее всего), supervisord, monit и т.д.), поэтому априори они не смогут на шареде всё это добро развернуть smile

constb пишет:

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

Да, думал над этим, пока первичным решением вижу разместить index.html в корень пакета (не в public), где написать о том, что они не поменяли DOCUMENT_ROOT. Потом, возможно, переделаю инсталлер, чтобы он менял эту настройку и ребутил веб-сервер, но это может оказаться сомнительной затеей, если они будут складывать конфиги апача/nginx куда-то в другие места smile

Не в сети

#6 19.04.2017 20:53:04

Re: Деплой (deploy): ищу готовое решение под Laravel (для адаптации)

Вот стандартный скрипт с Laravel Forge, может пригодится:

cd /home/forge/website.com
git fetch --all
git reset --hard origin/master

git pull
composer install --no-interaction --prefer-dist
composer dumpauto
php artisan migrate --force

Не в сети

Подвал раздела