Добрый день!
Моя задача: создать seo-дружелюбный коммерческий проект с использованием laravel + vuejs + mysql. Сайт мультиязычный. Для оптимальной загрузки каждой из страниц - сделать отдельные js и css файлы.
Но перед мной возникло несколько проблем:
1. Если использовать вариант: ларовские вюхи + компоненты vuejs, все что я увижу в коде страницы (бот тоже) - только спиннер компонента. Соответственно нужно использовать рендеринг на стороне сервера.
2. Если использовать рендеринг - роутинг нужно делать и на vuejs, насколько я понял. Получается мне нужно будет дублировать роуты и на стороне ларавела, и на стороне вю? И если уж придётся делать роуты vuejs, тогда может делать в ключе spa, без перезагрузки?
3. Какой вид рендеринга лучше/могу использовать среди: nuxt, vue-server-renderer, vueneue/ssr и тд?
4. Если у меня должно быть несколько языков на сайте, то локализацию делать на стороне вю и ларавел?
5. Как будет работать роутинг (при варианте без перезагрузки), если разбить под каждую страницу отдельный js? При переходах будет рендерится только та инфа, которая необходима и принадлежит данной странице? Потому-что есть пока опыт в реализации обычного spa с глобальным js под все страницы. Соответственно первая загрузка была долгой, так как грузила скрипты и стили всех страниц.
Я не прошу об готовых решениях с Вашей стороны, хотя бы источники где я могу найти ответы на свои вопросы или советы от Вас) Заранее спасибо!)
1. Ну да, SPA же должен рендериться на стороне клиента.
2. Знаете что такое MVC? Представьте, что вы разрабатываете приложение только на Vue, а в качестве ORM у Вас Laravel.
3. Я начал с Nuxt для разработки интернет магазина. И до сих пор не было проблем с чем либо, практически все вопросы решаются готовыми пакетами.
4. Мультиязычность данных на стороне Laravel. Мультиязычность интерфейса можно просто JSON файл на стороне Vue.
На ларке пилишь чистый API, на Vue полноценный SPA. Роутинг по сайту делаешь только в клиенте. Для SSR либо ставишь ноду, либо v8js (пример SSR с v8js). Вот и все дела.
Соответственно первая загрузка была долгой, так как грузила скрипты и стили всех страниц.
Ну используйте code splitting в вебпаке, чтобы попилить бандл на отдельные чанки.
Ну в моем понимании на ларавеле будет чистый API (rest or graphql)
далее отдельно совсем лежит nuxt приложуха (ну это если по простому делать) внутри которой весь твой фронт, и локализации, ну или ты можешь синхронизировать между ларавелом и нукстом единые файлы локализации.
На фронт смотрит nuxt, на него приходят все запросы, внутри он делает запросы к ларавелу, и рисует vue (для этого есть отдельные методы, читай документацию).
Если же переходы происходят на клиенте, то уходят стандартные ajax запросы на сервис ларавела. Перезагрузили страницу, nuxt сделал ajax запрос к сервису ларавела и отдал уже отрендеренный контент.
Александр Дроздов - от уже которую неделю собираю информацию по данному вопросу...
вдруг Вы поможете. Для того, чтобы запустить/разместить проект в сети - мне достаточно одного домена и одного VPS сервера? чтоб и laravel (php) и nuxt-ssr (node.js) разместить? Нигде не могу найти мануала по такой связке и понимаю, что так не делается раз никто про это не пишет не рассказывает.
dk-web, да, достаточно иметь один VPS, с доступом к нему по SSH, чтобы ты смог поставить туда все что хочешь.
Вот представь что ВПС это твой личный локальный компьютер, с ним можно работать абсолютно так же через консоль. Ведь когда разворачиваешь nuxt, ты устанавливаешь node.js и там так же.
Информации в инете полно, нужно искать именно как установить например php или node.js на ubuntu (обычно она стоит на VPS)
Александр Дроздов, спасибо за ответ. Так в том то и вопрос, что или) или php или node я могу установить....
Но мне кажется я совсем загнался и туплю в матчасти что-ли).
если делать ssr, то проект будет полностью на node.js - никаких index.blade.php и ларавель будет только отдавать данные из БД.
вот в этом и замкнуло... как на один домен, один сервер - это все прикрутить. в теории не силен( какие-то реверс прокси пишут надо настраивать... и я теряюсь сразу.
В общем решил пока кондово поступить. Возьму vps - поставлю туда ноду и попробую простейший nuxt залить. А ларавель оставлю на другом домене на обычном хостинге. Пока так(
dk-web, ну так нечего смешивать ларавел и нукст.
Если хочется писать API где идет работа с БД и т.п то лучше на laravel, будет проще.
На нуксте просто дергать этот апи по адресу my-site.ru/api/get/users например, и рисовать как угодно. Шаблоны и компоненты и все все только на нуксте, ларавле ТОЛЬКО для работы с БД, бизнес логикой и т.д.
Александр Дроздов, ну вот я так и планирую. Но я думаю, что просто перекрутил себя с точки зрения настройки сервера... какие-то реверс прокси.. в общем перечитал, наверное.
Я просто привык, что закинул в папку public на хостинг и все работает. А здесь получается, что нужно разделять на несколько папок... одна для nuxt, другая для laravel. Домен/поддомен - в общем пока каша в голове(
Сейчас взял тестовый vps - ubuntu 18.04 - попробую.
Александр Дроздов по-моему я заслужил сегодня холодного пенного... взмок, промок, поседел,
но 178.250.240.7 девять/- запустилось) и даже домен привязал... ! пока конечно без ssr - просто laravel сделал... но для меня это уже подвиг) прям радостно!
Александр, хотел Вам еще раз спасибо сказать... Вот представь что ВПС это твой личный локальный компьютер, с ним можно работать абсолютно так же через консоль. Вот это были очень простые, но настолько правильные слова!
теперь конечно кучу всего читать изучать... гит заводить, но хотя бы я теперь более менее понял для чего он нужен) чтоб по ftp не гонять. Ну и попробовать теперь уже ssr прикрутить и отделить от laravel
хороших выходных! спасибо
dk-web, молодца, куча статей на хабре есть как правильно организовать сервер, с ngnix и т.п.
Не заморачивайся по поводу нагруженности и т.п, до этого далеко)
Александр Дроздов, до нагруженности как до Луны) мне пока в принципе необходимо склеить. На Хабре много полезного, но не всегда на моем уровне написано, чаще в зарубежных источниках ищу информацию, благо что уровень владения английским позволяет - а этот it-русский тот еще птичий язык для меня пока. Хотя и продвинулся конечно прилично.
Nuxt то решит... осталось просто разделить на папки и запустить их раздельно, но думаю, что я уже более менее сообразил как через поддомен сделать. Займусь завтра уже... не все сразу)
Александр Дроздов, пенное решил не брать, но завтра походу точно придется...
я понимаю, что достал Вас, но честно - вот месяц... я читал-пытал себе мозг. а Ваши слова - ну просто вот так помогли.
Александр Дроздов, снова побеспокою( сломалось все... точнее концепция полетела из-за ерунды.
у меня встроен ckeditor для редактиования статей. А соответственно там есть загрузка картинок.
А загрузка идет через laravel. А поскольку теперь это на разных доменах, то не срабатывает. Точнее срабатывает защита...
Error in `getFileCallback`.
Blocked a frame with origin "api.dklarafullapi.loc" from accessing a cross-origin frame.
это старый вопрос, который откладывал-откладывал и теперь все сначала(
придется вообще админку выносить отдельным проектом и делать ее уже без всяких ssr на обычном vue, вшитом в лару.
печалька, а может так и правильно?
dk-web, это нормально, тут нужно просто порешать вопрос с доменами и разрешениями. Или сделать на крайняк прокси загрузку через нукст или че там, где ssr. Суть в том что надо попробовать побороть эту ошибку, или загружать на домен где открыт сайт и он уже выгружает в ларавел.
Александр Дроздов, ок, спасибо. Если будет возможность ... я так понимаю, что в nginx надо что-то дописать...
потому что на ларавеле cors стоит со звездочками. И все остальные запросы работают как надо..
Александр Дроздов, вчера в ночи после очередных танцев с бубном удалось "склеить" nginx конфиг - и запустить nuxt и лару на одном домене... конечно не уверен, что конфиг правильный, но вроде работает.
Правда сначала роуты ларовские не видел - оказалось, что теперь надо прописывать site.loc/api/api/route
То есть получилось некое дублирование... Думал-думал и вспомнил, что где-то видел api/v1 ..
в итоге поменял префикс в ларе для api на v1 ))
По крайней мере теперь это выглядит более-менее прилично. И работает... и ckeditor и все остальное.