Статьи

13 шагов, чтобы получить eZ Publish 5.x для работы на усадьбе

С тех пор я по-другому взглянул на eZ Publish (теперь eZ Platform), и ситуация значительно улучшилась. Подробности здесь .


Изначально эта статья была быстрым советом о том, как установить eZ Publish на Homestead всего за несколько шагов. Однако после того, как я увидел, сколько усилий потребовалось, чтобы запустить его и работать с нуля на коробке Vagrant, размещенной в Windows, я решил сделать ее полноценной статьей. Я страдал, так что не надо 🙂

Я надеюсь, что команда eZ рассмотрит вопросы, которые я изложу ниже, и, как они это сделают (если они это сделают), я изменю этот пост соответствующим образом. Конечно, моя среда очень специфична: Vagrant для Windows. Однако это не должно иметь значения. Каждая CMS, приложение и фреймворк, которые я пытался загрузить таким же образом, были запущены за считанные минуты. В современном современном мире Интернета нет оснований для того, чтобы это не работало одинаково на всем.

Бродячие приложения

Давайте определим цель Vagrant. Целью Vagrant является командное единство и паритет производства / разработки независимо от операционной системы хоста . Другими словами, цель Vagrant двояка:

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

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

Экспериментируя с процедурами установки, описанными ниже, я обнаружил, что eZ Publish не делает это простым. В 2014 году большинство профессиональных разработчиков с несколькими клиентами и / или проектами используют Vagrant даже в одиночку — выделенные, отдельные, разрушаемые и восстанавливаемые среды для каждого проекта бесценны, если учесть множество вариантов размещения, инструментов и версий этих инструментов на нашем сайте. удаление.

Я разочарован тем, что в эти дни больше приложений не используют Vagrant-first. Так же, как мы должны думать мобильный первый при разработке передних концов, мы должны думать VM-первых, при разработке заднего конца библиотеки, рамки и приложения — в противном случае вся Docker / Vagrant компартментализация история мир сосредотачивается на спорно, и приложения, которые не в состоянии адаптация останется позади, так как мир перейдет на Heroku, GAE, Amazon и другие.

Давайте начнем процедуру установки сейчас.

Важное примечание: если вы не работаете в Windows, Шаг 5, вероятно, не случится с вами. Если вы работаете в Windows, вы можете избежать шага 5, выполнив всю процедуру в «повышенной» Gitbash / командной строке (запустив либо от имени администратора). Только пользователи с правами администратора могут создавать символические ссылки в Windows 8. Ходили слухи, что это можно исправить , но ни одна из них не работает надежно. Запуск среды разработки в качестве администратора открывает совершенно новую банку червей, так что делайте это на свой страх и риск. Если кто-нибудь успешно даст обычному пользователю Windows 8 разрешение на создание символических ссылок через Gitbash, пожалуйста, дайте мне знать.

Шаг 1: Усадьба улучшена

Подготовьте и работайте с улучшенной коробкой Laravel Homestead . Если вы сделали vagrant up чтобы увидеть, работает ли он, выполните vagrant destroy чтобы мы могли его настроить.

Шаг 2: Добавить сайт

Откройте файл Homestead.yaml и добавьте новый сайт:

      -  map :  ez . app to :   /home/ vagrant / Code / ezpub / web 

Добавьте ez.app в файл ez.app на вашем хост-компьютере, как описано в ez.app Laravel Homestead Improved . В основном, убедитесь, что ваш файл hosts содержит 127.0.0.1 ez.app . Естественно, также сопоставьте общую папку.

Загрузите виртуальную vagrant up с vagrant up и войдите в нее с vagrant ssh .

Шаг 3: Установите предварительные условия

Проекту необходим PHP для установки расширений php-intl и php-xsl . Он также будет запрашивать у вас sendmail протяжении всего мастера установки. В Homestead вы можете установить все это с помощью:

 sudo apt - get  update sudo apt - get  install php5 - intl php5 - xsl sendmail 

Шаг 4: Получить код

 cd Code composer create - project ezsystems / ezpublish - community ezpub 

Вышеизложенное создаст проект eZ для использования , а не для разработки. Чтобы получить версию для разработчиков, обратитесь к их странице Github.

Обратите внимание, что eZ Publish невероятно велика, и для этого потребуется время. Почти гарантировано, что вы достигнете предела скорости GitHub API «60 запросов в час», поэтому вам, возможно, придется ввести имя пользователя и пароль в процессе установки, чтобы преодолеть этот барьер.

Процесс может завершиться ошибкой пару раз из-за тайм-аутов и огромного количества данных, которые необходимо загрузить. Если это произойдет, просто удалите всю папку ezpub с помощью команды rm -rf ezpub и повторно запустите rm -rf ezpub выше команду create-project — она ​​будет выполняться быстрее каждый раз, поскольку каждый раз, когда пакет загружается, он подается из локального кэша при последующих запросах. , а не перезагружается.

Установщик запросит у вас некоторые данные в конце (секрет, локаль восстановления и т. Д.). Заполните его или просто нажмите Enter, чтобы использовать значения по умолчанию.

Причина, по которой мы не используем подготовленный архив tar загруженный с веб-сайта eZ Publish, заключается в том, что подготовленный архив заполнен символическими ссылками — и они не работают, если ваша виртуальная машина размещена на компьютере с Windows. Стремясь обеспечить поддержку многоплатформенности, я выбрал composer create-project подход к composer create-project .

Шаг 5. Обработка ошибок установщика [только для хостов Windows]

В сущности, eZ Publish не очень хорошо настроен для виртуальных машин или пограничных случаев, и команда многое не учла, например, запускать его на виртуальной машине в Windows. Со всеми зависимостями, это гарантированно сломается где-нибудь во время установки. Для меня, и, вероятно, для вас, это будут сценарии после установки, которые устанавливают активы. Инсталляция ресурсов на самом деле является частью Symfony, которая в классе, который делает это, на самом деле предупреждает о Windows и символических ссылках, но не учитывает это, если родительский проект вызывает символические ссылки, как это делает eZ Publish.

Если это произойдет (вы получите ошибку о символических ссылках и некоторых других), откройте composer.json и удалите строку:

 "symfony-assets-install" :   "relative" , 

Это заставит установщик копировать ресурсы проекта, а не символическую ссылку на них.

Затем перезапустите сценарии после установки, выполнив:

 composer run - script post - install - cmd 

Вы все еще можете получить сообщение об устаревшей версии eZ и какой-то набор комментариев, но я пока не уверен, как это исправить, или важно ли это.

Шаг 6: Создайте базу данных

Создайте базу данных, которую мы передадим в eZ позже. Войдите в свой экземпляр MySQL в ВМ с помощью mysql -u homestead -psecret . Затем запустите:

 CREATE SCHEMA `ez`  DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ; 

Шаг 7. Установите разрешения для папки

Этот шаг можно пропустить в Homestead, потому что сервер уже работает под пользователем «vagrant», которому принадлежат все подпапки в папках ezpub.

Шаг 8: Запустите мастер установки

Изменить: см. Комментарий Джерома ниже для подхода, который обрабатывает часть шага 8 и шага 9 автоматически.

Посетите ez.app:8000 и увидите следующий экран.

Вот где это становится супер странным. Без причины это происходит . Да, это проблема, которая остается нерешенной в течение двух лет — серьезно, это двухлетняя нерешенная ошибка в проекте PHP . Исправление этого в ядре заняло бы семь секунд работы, включая принятие и толчок (см. 8.2). Есть два способа обойти это в нашем случае. Ни один из них не приятен, так что вам решать выбрать один.

Шаг 8.1: веселость

Чтобы обойти это, и я серьезно, это не шутка — вам нужно открыть инструменты разработчика и поместить ezsetup в конец атрибута action формы, потому что по умолчанию он говорит только index.php . Это сбивает с толку, как такая проблема все еще может существовать в 2014 году, но мы здесь:

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

Шаг 8.2: Взлом кишок

Второй, возможно, немного более простой подход — это изменение формы самого мастера и изменение его атрибута действия.

Перейдите в ezpub\ezpublish_legacy\kernel\setup\ezsetup.php и найдите строку:

 $tpl -> setVariable (   'script' ,  $script ); 

Над этим поместите это:

 $script =   ( $script ==   '/index.php' )   ?   '/index.php/ezsetup'   :  $script ; 

После этого атрибут действия будет исправлен.


Я не рекомендую вам пытаться вручную настроить eZ Publish, пропустив мастер, потому что вы сойдете с ума . Объективно, их процедура установки и документация являются одними из худших, которые я когда-либо видел. Вы потеряете все желание даже попробовать это, если попытаетесь следовать их инструкциям. Я надеюсь, что команда eZ скоро полностью удалит все зависимости и ссылки на свою унаследованную систему, оставив на месте только новое ядро ​​- я также надеюсь, что они скоро обновят свою документацию до чего-то более читабельного и более похожего на 2014 год: люди будут разрабатывать на выделенных ресурсах. Виртуальных машин все больше и больше, и короткая процедура установки наряду с простотой входа являются наиболее важными атрибутами любой CMS, которая хочет выделиться.

Шаг 9: игнорировать ошибки мастера

Настройка eZ Publish достаточно устарела, чтобы знать только один сервер (Apache), и поэтому он считает, что он не работает в режиме Vhost:

Игнорируйте это предупреждение. Перейдите к следующему экрану (если вы использовали 8.1., Не забудьте снова изменить действие формы, иначе вы начнете сначала).

В конце мастера установки вы получите ошибку тайм-аута Nginx. Это связано с тем, что eZ Publish общеизвестно медленна из-за необходимости обрабатывать как ужасную унаследованную версию, так и из-за новой версии, а также из-за запуска на ВМ, поэтому, когда это происходит, просто удалите все, что связано с ezsetup из URL-адреса и обновите. Затем вас встретит эта красавица:

Шаг 10: отключить кеш

Ошибка в приведенном выше экране происходит в то время как Ez пытается создать кэши PHP файлов, как это: /home/vagrant/Code/ezpub/ezpublish/cache/prod/stash/0fea6a13c52b4d47/25368f24b045ca84/a1e4f174919d040af6d06113d677c9e0/4a1c6be177996f9e/03934ae1c1c02ffc/9a0364b9e99bb480/dd25e1f0284c8555/caf9b6b99962bf5c/2264824231d7a40c/d3d9446802a44259/755d38e6d163e820.php (тьфу, не спрашивайте…).

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

В ezpub\ezpublish\config\ezpublish.yml измените блок ezpub\ezpublish\config\ezpublish.yml на этот:

 stash : caches : 
         default : handlers : 
                 -   BlackHole inMemory :   true registerDoctrineAdapter :   false 

«В памяти» означает, что память будет использоваться для хранения кеша вместо файловой системы. Очистите кеш с помощью команды rm -rf ezpublish/cache/* и обновите. При необходимости замените механизм кеширования на что-то более приличное, чем кэш FileSystem. Я понятия не имею, как еще устранить ошибку протокола для mkdir — я знаю, что это связано с VM, но не намного. Любой совет высоко ценится.

Теперь вас, скорее всего, встретит еще один поток предупреждений и ошибка 503 в конце:

Но по крайней мере мы получили название для рендеринга!

Шаг 11: Bootstrap.php.cache и пределы ответа

Файл, вызывающий все эти предупреждения, фактически является компиляцией всех необходимых PHP-файлов для загрузки eZ. Они были объединены в одну (!!!) и помещены в папку ezpublish , откуда она подается. Файл представляет собой беспорядок в коде, и его нелегко отладить, потому что, помимо отсутствия расширения php и недостатков подсветки IDE, он также не соответствует никаким стандартам кодирования (следовательно, десятки классов в одном файле, никаких отступов и с этим, без читабельности), в конце концов, это «просто файл кэша». Но когда все ваше приложение зависит от файла кэша, было бы неплохо иметь возможность легко его отладить.

Помимо ужасных методов кэширования, мы можем отключить весь этот беспорядок и просто загрузить eZ Publish в режиме отладки, изменив переменную среды ENVIRONMENT. Вы можете изменить это в Homestead.yaml чтобы он автоматически конфигурировался во время загрузки, добавив его в блок «переменных»:

      -  key :  ENVIRONMENT value :  dev 

Или вы можете просто отредактировать файл index.php в ezpub/web и поместить $environment = 'dev'; под $environment = getenv( "ENVIRONMENT" ); по строке 8.

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

Завершив это, вы сможете получить это для рендеринга:

Из-за того, что ответы на запросы eZ Publish были настолько абсурдны, нам нужно увеличить пределы Nginx:

 sudo vim / etc / nginx / sites - available / ez . app 

Под корневой директивой вставьте следующее:

 fastcgi_connect_timeout 60 ; fastcgi_send_timeout 180 ; fastcgi_read_timeout 180 ; fastcgi_buffer_size 128k ; fastcgi_buffers 4   256k ; fastcgi_busy_buffers_size 256k ; fastcgi_temp_file_write_size 256k ; 

Сохранить, выйти, перезапустить Nginx с помощью sudo service nginx restart .

Некоторые страницы будут работать (блог, открыть), другие, ну, не так много. Однако отладка их демонстрационного пакета выходит за рамки этой уже слишком длинной статьи.

Шаг 12: удалите index.php из URL

По умолчанию все приложения Symfony по какой-либо причине имеют в своем URL «app.php» или в случае eZ Publish «index.php». Я полагаю, что кто-то должен поддерживать этих хостинг-провайдеров и разработчиков с 2001 года. Давайте перенесем оба проекта в 21-й век, убрав его.

 sudo vim / etc / nginx / sites - available / ez . app 

В соответствии с инструкциями здесь , над блоком «location» добавьте:

 rewrite ^ /index\.php/ ?(.*) $ / $1 permanent ; 

Сохраните, выйдите и перезапустите nginx с помощью sudo service nginx restart .

Шаг 13: радуйся

После тяжелого процесса мы наконец закончили. То, что заняло у меня больше суток, надеюсь, заняло у вас менее 10 минут (исключая время загрузки). Теперь вы тоже можете попробовать эту мощную, хотя и перегруженную, слишком сложную и устаревшую CMS на своем собственном экземпляре Homestead. Дайте мне знать, как это работает!

Вывод

На мой взгляд, любая CMS, требующая такой большой работы для установки и запуска на Vagrant box, не является той CMS, на которую стоит обратить внимание. Конечно, вы, вероятно, можете легко установить его на хост-компьютер и запустить его таким образом, но это не профессиональный подход — среды разработки должны быть инкапсулированы и изолированы, а разработчики должны иметь возможность уничтожать и перестраивать экземпляр по прихоти. В CMS должны быть сценарии, которые автоматически выполняются, обнаруживают все возможные проблемы (например, недоступны символические ссылки и автоматически переключаются в режим бумажного копирования) и настраивают все (от базы данных до разрешений для папок, если необходимо), запрашивая только sudo по пути.

Этот процесс установил eZ Publish, но стоило ли оно того? Это решать вам. Хотя eZ определенно является мощной CMS, трудности с ее внедрением в лучшем случае вредны. Теперь у вас есть общая отправная точка для тестирования, и я обязательно узнаю больше об этих проблемах у людей из eZ в PHP Summer Camp и других местах. До тех пор, давайте возьмем несколько уроков по eZ, которые будут на этой коробке, не так ли?

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


Изменить: это репозиторий Github было доведено до моего внимания. Это готовая бродячая конфигурация eZ Publish, которая работает. Однако есть два предостережения:

  1. Цель этого шага — показать вам, насколько просто было иметь одинаковый экземпляр eZ и запускать его на любой машине для целей разработки (тот факт, что он оказался непростым, — совсем другая история). Это важно, потому что, например, не все используют одну и ту же ОС — репозиторий, указанный выше, работает на CentOS, а Homestead — на Ubuntu. Процедура установки должна быть одинаково простой на любой ОС.
  2. Файлы eZ Publish внутри этой виртуальной машины находятся буквально внутри нее — нет общего доступа к папкам для внешнего мира (хост-компьютера), поэтому нет проблем с символьными ссылками, но также нет возможности открывать файлы приложения в IDE, установленной на хосте. машина для того, чтобы взломать их. Это препятствует эффективному процессу разработки.