OroCRM — это CRM-приложение, которое мы опишем в посте, посвященном этому завтра. Это руководство просто описывает его установку и первый запуск на Vagrant Box — в частности, на нашей старой доброй Homestead Improved. Если вам нужно начать работать с Homestead, ознакомьтесь с оригинальным Quick Tip . Если вы хотите следить за публикацией завтрашнего дня на OroCRM, начните с установки, следуя приведенным ниже инструкциям!
Установка
Прежде чем мы начнем, убедитесь, что ваш оригинальный экземпляр Homestead Improved работает хорошо, а затем уничтожьте его. Если вы хотите поддержку символических ссылок и находитесь в Windows, перезапустите командную строку и / или окно Git Bash, через которое вы будете использовать команды Vagrant с правами администратора:
Это необязательно — символические ссылки не требуются для работы Oro.
Шаг 1: Добавить сайт
В Homestead.yaml
добавьте сайт:
- map: test.app to: /home/vagrant/Code/orocrm/web
web
подпапка необходима, потому что Symfony является основой, на которой построен Oro.
Чтобы Symfony мог писать в свои родительские папки, нам нужно изменить режим монтирования общих папок. В scripts / homestead.rb обновите следующую строку из:
config.vm.synced_folder folder["map"], folder["to"], type: folder["type"] ||= nil
в
config.vm.synced_folder folder["map"], folder["to"], type: folder["type"] ||= nil, :mount_options => ["dmode=777,fmode=777"]
Это последняя операция, которую мы сделаем вне виртуальной машины. Введите его сейчас с помощью vagrant ssh
после запуска vagrant up
.
Шаг 2: клонировать
cd Code git clone http://github.com/orocrm/crm-application.git orocrm
Шаг 3: Создайте базу данных
mysql -u homestead -psecret CREATE SCHEMA `oro_crm` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Шаг 4: Настройте Nginx и PHP
Конфигурация, необходимая для OroCRM в этом случае, следующая (замените пути к папкам на ваши, если это необходимо). Поместите это в /etc/nginx/sites-available/test.app
, заменив оригинальный контент:
server { listen 80; server_name test.app; root /home/vagrant/Code/orocrm/web; index app.php; access_log /var/log/nginx/test.app.access_log; error_log /var/log/nginx/test.app.error_log info; location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } try_files $uri $uri/ @rewrite; sendfile off; location @rewrite { rewrite ^/(.*)$ /app.php/$1; } location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } fastcgi_index app.php; fastcgi_read_timeout 10m; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Не забудьте перезапустить Nginx с помощью sudo service nginx restart
.
Из-за некоторых ошибок в Composer или из-за способа установки зависимостей нам нужно повысить ограничение использования ОЗУ для экземпляра командной строки PHP до 1G. Виртуальная машина, на которой мы работаем, имеет зарезервированный 2G, так что это не проблема.
sudo vim /etc/php5/cli/php.ini
Попав в файл, нажмите кнопку косой черты, если вы используете Vim для входа в режим поиска, введите «memory» и нажмите enter, чтобы перейти к строке с надписью 512M. Войдите в режим вставки с «i» и замените «512M» на «1G». Сохранить и выйти.
Далее, нам нужно активировать pathinfo в php-fpm, согласно этому ответу StackOverflow .
sudo vim /etc/php5/fpm/php.ini
Найдите строку cgi.fix_pathinfo
и установите значение 1. Также увеличьте максимальное время выполнения сценариев PHP до 300 вместо 30 (поиск max_execution
), поскольку приложения Symfony невероятно перегружены и требуют большого времени при первых запросах для генерации. кэш, который они затем используют при последующих запусках.
Наконец, нам нужно сделать еще один твик.
sudo vim /etc/php5/mods-available/xdebug.ini
Добавьте в этот файл строку xdebug.max_nesting_level = 1000
. Мы делаем это, потому что Xdebug подавляет уровень вложенности по умолчанию 100, когда имеет дело с раздуванием Symfony. При этом мы позволяем этому «идти глубже». Сохраните и выйдите, и перезапустите php5-fpm (перезапуск sudo service php5-fpm restart
).
Нам также нужно установить расширение php-intl, как и в большинстве проектов Symfony.
sudo apt-get update sudo apt-get install php5-intl
Шаг 5: Композитор
Во-первых, давайте ускорим Symfony. Перейдите в app/AppKernel.php
и добавьте следующие два метода в класс:
public function getCacheDir() { if (in_array($this->environment, array('dev', 'test', 'prod'))) { return '/dev/shm/appname/cache/' . $this->environment; } return parent::getCacheDir(); } public function getLogDir() { if (in_array($this->environment, array('dev', 'test', 'prod'))) { return '/dev/shm/appname/logs'; } return parent::getLogDir(); }
Согласно этому сообщению , это перемещает журналы и папки кэша за пределы общей папки guest / host и сохраняет операции ввода-вывода внутри виртуальной машины. Symfony печально известен сверхвысоким количеством операций ввода-вывода, и сохранение этих папок на своих местах по умолчанию является смертным приговором для любого проекта Symfony на Vagrant.
Наконец, давайте установим зависимости CRM.
cd orocrm export COMPOSER_PROCESS_TIMEOUT=3000; composer install --prefer-dist --no-dev
Команда «export» перед командой «install» существует, чтобы убедиться, что Composer продолжает работать, даже если он сталкивается с безумно большим репо. Параметр предпочтения dist означает, что зависимости загружаются не как источники под управлением версиями, а как просто источники или даже пакет phar. Когда используется --prefer-sources
(по умолчанию), также загружается все дерево версий, что замедляет загрузку и увеличивает необходимый объем дискового пространства, что бессмысленно, если вы не собираетесь взламывать фактические зависимости ,
Во время установки (которая может занять более 30 минут из-за явного раздувания зависимостей Symfony), у вас спросят имя пользователя и пароль для Github из-за их политики анонимного ограничения скорости загрузки. Это не о чем беспокоиться. В конце загрузки вам будет предложено указать некоторые параметры конфигурации базы данных, почтовой программы и т. Д.
Затем запустите php app/console oro:install --env dev
чтобы полностью установить приложение, или перейдите на страницу http://test.app:8000
в браузере хост-компьютера. Это займет еще 10 минут или около того, но это последний шаг. По какой-то причине установка флага --env
здесь на «prod» завершается ошибкой с классом not found, но работает с «dev», поэтому я использую это. Если вы решите проблему, дайте мне знать, пожалуйста.
Возможно, вам придется активировать сервер WebSockets и crontab, хотя это не обязательно:
php app/console clank:server --env prod php app/console oro:cron --env prod
Шаг 6: Демо [опционально]
OroCRM поставляется с набором демонстрационных данных, которые вы можете импортировать в свой экземпляр, чтобы у вас было что поиграть. Это идентично тому, что вы можете найти на их демонстрационной странице , но более гибко, поскольку позволяет изменять исходный код, расширять приложение и правильно поиграть в него.
Чтобы установить демонстрационные данные, просто запустите следующую orocrm
папке orocrm
:
php app/console oro:migration:data:load --fixtures-type=demo --env=prod
Вывод
Было ли это слишком сложно? Может быть. С другой стороны, не так много разработчиков фреймворков и приложений оптимизируют свои приложения для установки виртуальных машин, поэтому это не удивительно. Во всяком случае, команда Oro мало что может сделать, поскольку она зависит от некоторых из самых крупных платформ (Zend и Symfony устанавливаются во время установки Composer, а в режиме --prefer-sources
вся папка в итоге достигает 420 МБ, что нелепо для веб-приложений любого уровня; --prefer-dist
оборачивает его примерно в 190 МБ).
Я надеюсь, что они найдут способы сделать процедуру легче или что они, по крайней мере, сосредоточатся на том, чтобы сделать версию 2.0 намного более дружественной к Vagrant с самого начала и более многоплатформенной — тем более, что теперь Symfony общеизвестно приложения часто имеют проблемы с Vagrant. Вы уже дали эту процедуру установки? Дайте мне знать, если вы застряли где-нибудь, и мы постараемся проработать это вместе.