Статьи

Контрольный список Symfony 2 для разработки и развертывания

В моей серии « Создание личного веб-приложения с головы до пят», опубликованной на Sitepoint, я рассмотрел некоторые основы начальной загрузки, разработки и доработки (по некоторым продвинутым методам) использования Symfony 2 для разработки веб-приложения. Однако из-за ограничения длины серии мы не очень подробно рассмотрели «последний» шаг: развертывание приложения Symfony 2 в производственной среде.

Когда мы занимаемся разработкой, скорее всего, мы находимся в «корневой» роли; но в производственной среде мы можем быть лишены этой привилегии. Также настройки могут отличаться. Что еще хуже, иногда мы не можем изменить эти настройки, как на собственных машинах.

Таким образом, очень важно проверить «совместимость» нашего производственного сервера ПЕРЕД любой реальной разработкой на нашем собственном сервере. Это позволит избежать таких ужасных ситуаций, как: отсутствует библиотека, от которой зависит Symfony, некоторые глобальные параметры, на которые опирается приложение, являются неизменяемыми и т. Д.

Тестирование «совместимости» нашего производственного сервера должно быть чем-то, что мы делаем в самом начале. Есть также некоторые другие аспекты, которые необходимо учитывать при развертывании, например шаблоны для различных сообщений об ошибках и т. Д.

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

Пустой фреймворк Symfony на рабочем сервере

Следуйте инструкциям в моей первой статье о Symfony 2, чтобы настроить пустую среду Symfony на рабочем сервере.

Это также полезно для проверки того, что на сервере включена функция cURL, не только установленная на сервере, но и как расширение PHP, чтобы убедиться, что мы можем захватывать внешние ресурсы. В моем конкретном случае это очень важно — composer.org заблокирован в моей стране, и мне нужно использовать прокси-сервер для получения и установки Symfony Framework.

Этот пустой фреймворк позже можно будет проверить в системе контроля версий.

Конфиг файл

Symfony 2 поставляется с файлом config.php который находится в web каталоге. Это скрипт для проверки большей части проблемы «готовности». Чтобы посетить эту страницу, нам нужно немного ее настроить:

 <? php if   (! isset ( $_SERVER [ 'HTTP_HOST' ]))   { 
     exit ( 'This script cannot be run from the CLI. Run it from a browser.' ); 
 } 

 if   (! in_array ( @$_SERVER [ 'REMOTE_ADDR' ],  array ( 
     '127.0.0.1' , 
     '::1' , 
 )))   { header ( 'HTTP/1.0 403 Forbidden' ); 
     exit ( 'This script is only accessible from localhost.' ); 
 } 
 ... 

Этот файл предназначен для вызова только из локального браузера. Нам нужно закомментировать второй блок if чтобы мы могли посетить его удаленно.

Мой сервер настроен правильно и не имеет критических проблем:

Этот файл проверяет проблемы готовности, которые я суммирую в таблице ниже. Фактическое тестирование выполняется в app/SymfonyRequirements.php поэтому мы также можем взглянуть на этот файл.

Настройки / Модули требование серьезность действия
Версия PHP

= 5.3.3

Требуется, но не должно быть 5.3.16 Обновление до последней версии. Предлагаю использовать хотя бы PHP 5.4.8 и выше.
Библиотеки поставщиков Установленный composer.phar необходимые Обновление с использованием composer.phar
cache , каталог logs Writable необходимые Выпустив chmod для предоставления разрешений. Обычно привилегия должна быть 755 или 777 .
Часовой пояс Что-то вроде 'Asia/Shanghai' или ваш часовой пояс необходимые Измените php.ini .
json_encode , session_start , ctype_alpha , token_get_all , simplexml_import_dom Включено необходимые Включить соответствующие библиотеки PHP. На большинстве серверов PHP они включены.
APC Включено выключено Включено, если используется APC Включите APC или отключите APC, если вы используете другой кеш / ускоритель.
Xdebug Различные настройки Обязательно, рекомендуется Измените настройки xdebug соответственно.
DomDocument , mb_strlen , icony , utf8_decode , intl и т. Д. Различные модули рекомендуемые Включите, если хотите.
Ускорители Различные настройки рекомендуемые Установите и включите по вашему запросу.
<? короткий открытый тег, magic_quotes_gpc , register_globals , session.auto_start Отключено рекомендуемые Предложите следовать предложениям. В последних версиях PHP некоторые из них отключены по умолчанию.
PDO Драйвер базы данных рекомендуемые Пожалуйста, установите и включите его. Это обязательно, если вы используете Doctrine ORM.

Уровень серьезности « Требуется » означает, что мы должны изменить настройки нашего сервера в соответствии с требованиями. В противном случае Symfony 2 не будет работать и, следовательно, не должен быть правильным выбором для разработки наших приложений. « Рекомендованный » пункт можно смело игнорировать, но я предлагаю выполнить эти рекомендации настолько, насколько мы можем. В моем случае (показанном выше) мой рабочий сервер имеет только одно предупреждение. Это создает прочную и надежную основу для дальнейшего развития.

Использование git для синхронизации файлов

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

В этом случае подходящий .gitignore (или эквивалент в других системах контроля версий) станет удобным. Ниже приведена выдержка из моего файла .gitignore для справки:

 # Composer vendor vendor /* !public/assets/js/vendor !public/assets/js/vendor/* !public/assets/css/vendor !public/assets/css/vendor/* composer.phar composer.lock # Symfony app/cache/* app/logs/* # Logs error.log access.log # Netbeans nbproject .nbproject .nbproject/* nbproject/* nbproject/private/ build/ nbbuild/ dist/ nbdist/ nbactions.xml nb-configuration.xml 

Это никогда не является исчерпывающим или универсальным списком. Например, если вы используете PhpStorm, но не Netbeans, вы можете удалить раздел Netbeans и заменить его фильтрами, подходящими для PhpStorm:

 # IntelliJ - PhpStorm and PyCharm 
 . idea . idea / 
 . idea /* *.iml *.ipr *.iws 

Или просто оставьте их обоих, чтобы вы автоматически включили других разработчиков, которые могут использовать другие IDE. Рекомендуется всегда включать первые 3 раздела ( Composer , Symfony , Logs ).

Очистка кеша

Когда приложение Symfony запускается в первый раз на удаленном сервере, оно создает скомпилированную версию нашего приложения в каталоге app/cache/prod . Когда наши файлы, особенно наши контроллеры и маршруты, обновляются, нам нужно обновить кэш, иначе вывод может быть неправильным и часто вызывает 500 ошибок.

Чтобы очистить кеш, я обычно rm -rf cache SSH к производственному серверу и выполняю rm -rf cache в каталоге app . console cache:clear или console cache:warmup команда console cache:warmup возможно, не самый чистый способ сделать это.

Режим удаленной разработки

Используйте это с осторожностью и только когда это абсолютно необходимо!

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

Для этого мы используем аналогичный подход, чтобы отключить проверку localhost , комментируя приведенный ниже блок кода в app_dev.php :

 // This check prevents access to debug front controllers that are deployed by accident to production servers. 
 // Feel free to remove this, extend it, or make something more sophisticated. 
 if   ( isset ( $_SERVER [ 'HTTP_CLIENT_IP' ]) 
     ||  isset ( $_SERVER [ 'HTTP_X_FORWARDED_FOR' ]) 
     ||   ! in_array ( @$_SERVER [ 'REMOTE_ADDR' ],  array ( '127.0.0.1' ,   'fe80::1' ,   '::1' )) 
 )   { header ( 'HTTP/1.0 403 Forbidden' ); 
     exit ( 'You are not allowed to access this file. Check ' . basename ( __FILE__ ). ' for more information.' ); 
 }   

Затем мы можем посетить домен и страницы с чем-то вроде: http://rsywx_remote/app_dev.php . Когда что-то идет не так, этот режим dev отображает более полезную отладочную информацию и может помочь нам найти некоторые глубоко укоренившиеся проблемы. Для обеспечения дополнительной безопасности в течение этого периода отладки добавьте проверку, разрешающую посещения только с вашего собственного IP-адреса, в вышеупомянутый файл — для всех остальных режим dev будет отключен. Большинство проблем будут связаны с настройкой базы данных (неправильная база данных и / или учетные данные), неправильными URI API (локальные и удаленные URI могут различаться), устаревшим кешем, отсутствующими библиотеками, которые используются локально, но не включены удаленно, и т. Д.

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

Настройте страницы ошибок

Движок шаблона Twig по умолчанию в Symfony 2 предоставляет некоторые страницы ошибок (404, 500 и т. Д.). Но дизайн этих страниц обычно не подходит для нашего приложения. На официальном сайте есть подробное объяснение того, как это сделать. Мы можем разрабатывать свои собственные страницы ошибок на основе нашего собственного макета и темы.

Мы можем настроить страницы ошибок и поместить их в app/Resources/TwigBundle/views/Exception . Файлы могут называться error404.html.twig для 404 ошибок, error403.html.twig для 403 ошибок и т. Д. Или просто error.html.twig для общих целей.

Важно отметить, что в Symfony 2 страницы сообщений об ошибках не поддерживают расширение шаблона Twig. Это означает, что у нас не может быть страницы ошибки, расширенной с существующего макета, предназначенного для других страниц. Мы должны разработать страницы ошибок с нуля. Это немного неудобно, но все же стоит сделать для серьезного сайта.

Вывод

В этой статье мы рассмотрели некоторые темы, связанные с развертыванием Symfony: готовность сервера, управление версиями, режим удаленной dev , обновление кэша, настройка страниц с ошибками и т. Д.

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

Пожалуйста, поделитесь этой статьей, если вы нашли ее интересной или полезной, и оставьте комментарий ниже, если у вас есть отзывы, это очень ценится!