Author: Annie Date: 2010-01-24 05:53:11 +0100 (Sun, 24 Jan 2010) New Revision: 27113
Added: doc/branches/1.2/jobeet/ru/23.txt Log: Russian translation for Jobeet 1.2 Lesson 23 has been added. Added: doc/branches/1.2/jobeet/ru/23.txt =================================================================== --- doc/branches/1.2/jobeet/ru/23.txt (rev 0) +++ doc/branches/1.2/jobeet/ru/23.txt 2010-01-24 04:53:11 UTC (rev 27113) @@ -0,0 +1,459 @@ +День 23: Развертывание приложения (deployment) +============================================== + +После конфигурирования системы кэширования вчера, сайт Jobeet готов к тому, +чтобы быть развернутым на промышленных серверах. + +В течение 22 дней мы разрабатывали Jobeet на машине для разработки, что +для большинства из вас, возможно, означает Ваш локальный компьютер; за исключением случая, +когда Вы разрабатываете сразу на промышленном сервере, что, конечно, является очень плохой идеей. +Теперь настало время перенести сайт на промышленный сервер. + +Сегодня мы увидим, что нужно сделать, прежде чем переносить приложение на промышленный сервер, +какие стратегии развертывания Вы можете применить, а также инструменты, которые можно использовать +для успешного развертывания. + +Подготовка промышленного сервера +-------------------------------- + +Прежде чем развертывать наше приложения на промышленном сервере, мы должны убедиться, +что сервер настроен правильно. Можете перечитать урок 1, где объяснялось, как +настраивать веб-сервер. + +В этой главе мы предполагаем, что Вы уже установили веб-сервер, сервер базы данных и PHP 5.2.4 +или более поздний. + +>**NOTE** +>Если Вы не имеете доступа к веб-серверу по SSH, пропустите ту часть, где Вам +>нужно иметь доступ к командной строке. + +### Конфигурация сервера + +Сначала Вы должны убедиться, что PHP установлено со всеми необходимыми расширениями +и правильно настроено. Так же, как в уроке 1, мы будем использовать скрипт +`check_configuration.php`, предоставляемый Symfony. Так как мы не будем устанавливать +Symfony на промышленном сервере, скачайте файл напрямую с сайта Symfony: + + http://trac.symfony-project.org/browser/branches/1.2/data/bin/check_configuration.php?format=raw + +Скопируйте файл в корневую директорию веб-сервера и запустите его и в браузере, и +из командной строки: + + $ php check_configuration.php + +Исправьте все фатальные ошибки, которые обнаружил скрипт, и повторите процесс, пока все не будет +работать хорошо в **обеих** средах. + +### PHP ускоритель (Accelerator) + +Для промышленного сервера Вы, возможно, хотите получить лучшую возможную производительность. +Установка [PHP ускорителя](http://en.wikipedia.org/wiki/PHP_accelerator) +даст Вам лучшее ускорение за Ваши деньги. + +>**NOTE** +>Из Википедии: PHP ускоритель кэширует скомпилированный байт-код +>PHP скриптов, чтобы избежать интерпретации и компиляции исходного кода на +>каждый запрос. + +[~APC~](http://www.php.net/apc) - один из самых популярных ускорителей, который очень просто +установить: + + $ pecl install APC + +В зависимости от Вашей операционной системы, Вам возможно также придется установить его при помощи +ОС-зависимого менеджера пакетов. + +>**NOTE** +>Потратьте некоторое время, чтобы изучить, как +>[настроить APC](http://www.php.net/manual/en/apc.configuration.php). + +Библиотеки Symfony +------------------ + +### Встраивание Symfony + +Одно из больших преимуществ Symfony состоит в том, что проект является самодостаточным. +Все файлы, необходимые для его работы, находятся внутри корневой директории проекта. +Вы можете полностью переместить проект в другую директорию, не изменяя ничего внутри проекта, +поскольку Symfony использует только относительные пути. Это означает, что директория на промышленном +сервере не обязательно должна совпадать с таковой на Вашей машине для разработки. + +Единственный абсолютный путь, который, возможно, существует, может быть найден в файле +`config/ProjectConfiguration.class.php`; но мы избавились от него в течение +урока 1. Проверьте, что файл действительно содержит относительный путь к загрузчику +ядра Symfony: + + [php] + // config/ProjectConfiguration.class.php + require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php'; + +### Обновление Symfony + +Даже если все сосредоточено в одной директории проекта, обновление Symfony +на более новый релиз тем не менее очень просто. + +Вы наверняка захотите обновлять Symfony до новейшей минорной версии время от времени, +поскольку мы постоянно исправляем ошибки и, возможно, проблемы с безопасностью. +Хорошая новость в том, что все версии Symfony поддерживаются разработчиками по крайней мере год, +и в течение всего периода поддержки мы никогда не добавляем новые возможности, даже самые маленькие. +Таким образом, всегда можно быстро и безопасно перейти с одного минорного релиза на другой. + +Для обновления Symfony достаточно просто сменить содержимое директории +`lib/vendor/symfony/`. Если Вы установили Symfony из архива, +удалите старые файлы и замените их новыми. + +Если Вы используете Subversion для своего проекта, Вы также можете использовать внешнюю ссылку +на последний тэг Symfony 1.2: + + $ svn propedit svn:externals lib/vendor/ + # symfony http://svn.symfony-project.com/tags/RELEASE_1_2_1/ + +Обновление Symfony заключается в простом обновлении ссылки на последнюю +версию Symfony. + +Вы также можете использовать ветку (branch) 1.2, чтобы получать все исправления быстрее: + + $ svn propedit svn:externals lib/vendor/ + # symfony http://svn.symfony-project.com/branches/1.2/ + +Теперь, каждый раз, когда Вы будете использовать `svn up`, Вы будете получать последнюю версию symfony 1.2. + +При переходе на новую версию мы советуем Вам всегда чистить кэш, +особенно, в промышленном окружении: + + $ php symfony cc + +>**TIP** +>Если Вы имеете также и FTP доступ на промышленный сервер, Вы можете эмулировать результат задачи +>`symfony cc`, просто удалив все содержимое директории `cache/`. + +Вы даже можете протестировать новую версию Symfony, не заменяя существующую. +Если Вы просто хотите проверить новый релиз, не теряя возможности простого отката +обратно, установите Symfony в другую директорию (например, `lib/vendor/symfony_test`), +измените путь в классе `ProjectConfiguration` на новую директорию, очистите кэш, +и все готово к тесту. Для отката на предыдущую версию просто удалите новую директорию +и восстановите старый путь в классе `ProjectConfiguration`. + +Тонкая настройка конфигурации +----------------------------- + +### Конфигурация базы данных + +В большинстве случаев промышленная база данных имеет другие параметры соединения, +чем локальная. Благодаря окружениям Symfony, очень просто установить +другие настройки для промышленной базы данных: + + $ php symfony configure:database + ➥ "mysql:host=localhost;dbname=prod_dbname" prod_user prod_pass + +Вы также можете вручную отредактировать конфигурационный файл `databases.yml`. + +### Стили, Javascript-ы и прочие компоненты страниц (assets) + +Поскольку Jobeet использует плагины, которые содержат собственные стили, Javascript-ы и т.д., +Symfony создает символические ссылки в директории `web/`. Задача `plugin:publish-assets` перезаписывает +или создает их, если Вы установили плагин без использования задачи `plugin:install`: + + $ php symfony plugin:publish-assets + +### Настройка страниц ошибок + +Прежде, чем переводить приложение на промышленный сервер, было бы неплохо переопределить +страницы ошибок Symfony, используемые по умолчанию, такие как "Page Not Found (ошибка 404)" +или страница показа информации об исключении. + +Мы уже настроили страницу ошибок для `YAML` в течение дня 16, +создав файлы `error.yaml.php` и `exception.yaml.php` в директории +`config/error/`. Файл `error.yaml.php` используется Symfony +в окружении `prod`, в то время как файл `exception.yaml.php` используется +в окружении `dev`. + +Чтобы создать собственные страницы отображения информации об исключении для HTML-формата, +создайте два файла: `config/error/error.html.php` и `config/error/exception.html.php`. + +Страница для ошибки `404` (страница не найдена) может быть настроена с использованием +параметров `error_404_module` и `error_404_action`: + + [yml] + # apps/frontend/config/settings.yml + all: + .actions: + error_404_module: default + error_404_action: error404 + +Настройка структуры директорий +------------------------------ + +Для лучшей структуризации и стандартизации Вашего кода, Symfony использует +стандартную структуру директорий с предопределенными именами. Но иногда Вы не имеете +выбора и вынуждены менять структуру из-за некоторых внешних требований. + +Настройка имен директорий может быть сделана в классе `config/ProjectConfiguration.class.php`. + +### Корневая веб-директория + +На некоторых веб-серверах Вы не можете менять имя корневой веб-директории. Скажем, +пусть на Вашем сервере она называется `public_html/` вместо `web/`: + + [php] + // config/ProjectConfiguration.class.php + class ProjectConfiguration extends sfProjectConfiguration + { + public function setup() + { + $this->setWebDir($this->getRootDir().'/public_html'); + } + } + +Метод `setWebDir()` принимает в качестве параметра абсолютный путь корневой веб-директории Вашего сервера. +Если Вы к тому же переместили всю директорию проекта в другое место, не забудьте проверить контроллеры, +чтобы убедиться, что путь к файлу `config/ProjectConfiguration.class.php` по-прежнему верен: + + [php] + require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php'); + +### Директории для кэша и логов + +Фреймворк Symfony осуществляет запись только в две директории: `cache/` и `log/`. +Из соображений безопасности, некоторые веб-сервера не дают прав записи +в главную веб-директорию. Если это Ваш случай, +Вы можете переместить директории для кэша и логов в любое место в файловой системе: + + [php] + // config/ProjectConfiguration.class.php + class ProjectConfiguration extends sfProjectConfiguration + { + public function setup() + { + $this->setCacheDir('/tmp/symfony_cache'); + $this->setLogDir('/tmp/symfony_logs'); + } + } + +Так же, как и метод `setWebDir()`, методы `setCacheDir()` и `setLogDir()` принимают +абсолютные пути к `cache/` и `log/` директориям. + +Фабрики (Factories) +------------------- + +В течение всего учебника Jobeet, мы говорим об объектах ядра Symfony, таких как +`sfUser`, `sfRequest`, `sfResponse`, `sfI18N`, `sfRouting` и тому подобных. Эти +объекты автоматически создаются, настраиваются и управляются фреймворком Symfony. +Все они доступны при помощи объекта `sfContext`, и так же, как многие вещи во +фреймворке, они настраиваются в конфигурационном файле: +`factories.yml`. Этот файл позволяет настраивать различные окружения. + +Когда `sfContext` инициализирует фабрики объектов ядра, он читает файл +`factories.yml`, чтобы узнать имя класса (`class`) и параметры +(`param`), которые будут переданы в конструктор объекта: + + [yml] + response: + class: sfWebResponse + param: + send_http_headers: false + +В предыдущем фрагменте кода, чтобы создать фабрику ответов сервера, Symfony создает +объект `sfWebResponse` и передает его конструктору значение опции `send_http_headers` +в качестве параметра. + +Возможность настройки объектов ядра означает, что Вы можете использовать свой собственный +класс для объектов ядра Symfony вместо используемого по умолчанию. Вы можете также +изменять поведение этих классов, меняя параметры конструкторов. + +Давайте взглянем на несколько классических замен, которые Вы можете захотеть сделать. + +### Имена куки-объектов (cookies) + +Для хранения информации о сессии пользователя, Symfony использует куки. Эти куки имеют +имя по умолчанию `symfony`, которое может быть изменено в файле `factories.yml`. После ключа +`all` добавьте следующую конфигурацию, чтобы сменить имя куки на `jobeet`: + + [yml] + # apps/frontend/config/factories.yml + storage: + class: sfSessionStorage + param: + session_name: jobeet + +### Хранение сессии + +По умолчанию для хранения сессий используется класс `sfSessionStorage`. Он использует +файловую систему для хранения информации о сессиях. Если у Вас несколько веб-серверов, +Вы можете захотеть хранить информацию о сессии в централизованном хранилище, таком, как +таблица базы данных: + + [yml] + # apps/frontend/config/factories.yml + storage: + class: sfPDOSessionStorage + param: + session_name: jobeet + db_table: session +<propel> + database: propel +</propel> +<doctrine> + database: doctrine +</doctrine> + db_id_col: id + db_data_col: data + db_time_col: time + +### Таймаут сессии + +По умолчанию время жизни пользовательской сессии `1800` секунд. +Этот параметр может быть изменен в секции `user`: + + [yml] + # apps/frontend/config/factories.yml + user: + class: myUser + param: + timeout: 1800 + +### Логгирование + +По умолчанию в окружении `prod` логгирование выключено, поскольку +имя класса логгера `sfNoLogger`: + + [yml] + # apps/frontend/config/factories.yml + prod: + logger: + class: sfNoLogger + param: + level: err + loggers: ~ + +Вы можете, к примеру, разрешить логгирование в файловой системе, изменив имя +класса логгера на `sfFileLogger`: + + [yml] + # apps/frontend/config/factories.yml + logger: + class: sfFileLogger + param: + level: error + file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%.log + +>**NOTE** +>В конфигурационном файле `factories.yml`, строки вида `%XXX%` заменяются +>соответствующими значениями из объекта `sfConfig`. Так, `%SF_APP%` в файле +>конфигурации эквивалентно `sfConfig::get('sf_app')` в коде PHP. +>Эта нотация также может быть использована в файле `app.yml`. Это очень удобно, +>когда Вам нужно использовать путь в конфигурационном файле без жесткого +>кодирования пути (`SF_ROOT_DIR`, `SF_WEB_DIR`, ...). + +Развертывание +------------- + +### Что надо развертывать? + +Развертывая веб-сайт Jobeet на промышленном сервере, мы должны быть аккуратны, +чтобы не выложить ненужные файлы и не перезаписать файлы, загруженные нашими пользователями, +например, логотипы компаний. + +В Symfony-проекте, три директории должны быть исключены из процесса +переноса: `cache/`, `log/`, и `web/uploads/`. Все остальное должно +быть скопировано, как есть. + +По соображениям безопасности, Вы также не должны копировать "непромышленные" +фронт-контроллеры, т.е. файлы `frontend_dev.php`, `backend_dev.php` и `frontend_cache.php`. + +### Стратегии развертывания + +В этой секции мы предполагаем, что Вы имеете полный доступ к промышленному серверу +(серверам). Если Вы имеете доступ к промышленному серверу только по FTP, единственный +возможный способ развертывания для Вас - это копирование всех файлов при каждом +развертывании приложения. + +Простейший способ развернуть Ваш веб-сайт - это использование встроенной задачи +`project:deploy`. Она использует `SSH` и `rsync`, чтобы установить соединение с сервером +и передать все файлы с одного компьютера на другой. + +Сервера для задачи `project:deploy` могут быть настроены в конфигурационном файле +`config/properties.ini`: + + [ini] + # config/properties.ini + [production] + host=www.jobeet.org + port=22 + user=jobeet + dir=/var/www/jobeet/ + +Чтобы развернуть приложение на вновь настроенном сервере `production`, используйте +задачу `project:deploy`: + + $ php symfony project:deploy production + +>**NOTE** +>Перед первым запуском задачи `project:deploy`, Вам нужно подсоединиться к серверу +>вручную, чтобы добавить ключ в файл с доверенными хостами. + +Если Вы выполните эту команду, Symfony будет только симулировать передачу данных. +Чтобы действительно развернуть веб-сайт, добавьте опцию `--go`: + + $ php symfony project:deploy production --go + +>**NOTE** +>Даже если Вы можете указать свой пароль SSH-соединения в файле `properties.ini`, лучше +>будет сконфигурировать Ваш сервер при помощи SSH-ключа, чтобы разрешить беспарольное соединение. + +По умолчанию Symfony не будет передавать ни директории, о которых мы говорили в предыдущей секции, +ни `dev` фронт-контроллер. Это происходит потому, что задача `project:deploy` игнорирует файлы и директории, +которые перечислены в файле `config/rsync_exclude.txt`: + + # config/rsync_exclude.txt + .svn + /web/uploads/* + /cache/* + /log/* + /web/*_dev.php + +Для Jobeet нам нужно добавить еще файл `frontend_cache.php`: + + # config/rsync_exclude.txt + .svn + /web/uploads/* + /cache/* + /log/* + /web/*_dev.php + /web/frontend_cache.php + +>**TIP** +>Вы можете также создать файл `config/rsync_include.txt`, чтобы принудительно +>отправить на сервер некоторые файлы и директории. + +Даже насмотря на то, что задача `project:deploy` очень гибкая, Вы можете захотеть +еще доработать ее. Поскольку развертывание может выполняться очень по-разному, +в зависимости от конфигурации Вашего сервера и топологии, не стесняйтесь расширять +исходную задачу. + +Каждый раз, когда Вы разворачиваете сайт на промышленный сервер, не забудьте по крайней мере +очистить конфигурационный кэш на сервере: + + $ php symfony cc --type=config + +Если Вы изменили несколько маршрутов, Вам также нужно очистить кэш маршрутизации: + + $ php symfony cc --type=routing + +>**NOTE** +>Выборочная очистка кэша позволяет сохранить некоторые его части, такие как +>кэш шаблонов. + +Увидимся завтра +--------------- + +Развертывание приложения - это последний шаг в жизненном цикле разработки Symfony-проекта. +Но это не означает, что Вы закончили. Как раз наоборот. Веб-сайт - это нечто, что живет +собственной жизнью. Возможно, Вы должны будете исправлять какие-то ошибки и можете захотеть +добавить несколько новых возможностей. Но благодаря структуре Symfony и инструментам, +имеющимся в Вашем распоряжении, обновление Вашего сайта делается просто, быстро и безопасно. + +Завтра - последний день учебника Jobeet. Это будет время для того, чтобы оглянуться назад +и окинуть взглядом то, что мы уже изучили за 23 дня работы над Jobeet. + +__ORM__ -- You received this message because you are subscribed to the Google Groups "symfony SVN" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/symfony-svn?hl=en.
