LAMP-buildout для Wordpress и других PHP-приложений
Я должен был отправить новые версии PHP 5 и MySQL 5 на сервер Redhat Enterprise Linux 3 (RHEL3), и не смог заставить себя скомпилировать пакеты, искать RPMы, или заняться еще чем-нибудь скучным, поэтому я начал искать альтернативу. LAMP-buildout! Я уверен, что это уже сделано, но я не смог найти достойных примеров, поэтому решил:
- Развернуть моё PHP-приложение с помощью zc.buildout .
- Написать об этом.
Я надеюсь, это поможет пользователям Plone узнать больше о концепции создания и редактирования их собственных buildouts.
ПРЕДУПРЕЖДЕНИЕ!
Это получилось не так удачно, как я надеялся. Пришлось иметь дело с некоторыми неочевидными вначале параметрами конфигурации. Это было утомительно, а иногда даже тяжело, но могу Вас уверить, что достижение конечного результата было очень полезным опытом! Фактически, большинство проблем было связано с индивидуальными компонентами ПО, а не с buildout, с которым было одно удовольствие работать. Это является одной из основных причин, по которой я пишу эту статью. В Plone buildout, в большинстве случаев, крупные части обрабатываете не Вы, а Вам надо всего лишь добавить Plone egg, запустить инструмент buildout, и начинать создавать свой сайт .
Теперь, об инструменте buildout! Он был разработан и протестирован на Mac OS X 10.5, затем развернут на RHEL3. У меня возникли небольшие проблемы на RHEL3 с библиотекой изображений GD, поэтому я удалил ее (и установил затем вручную в /usr/local). Кроме этого, все прошло гладко, и я развернул несколько PHP-приложений только для kicks, включая:
- Phorum
- SugarCRM
- WordPress
- phpMyAdmin
Итак, надо создать компоненты Apache, PHP, MySQL, GD, и Supervisor. Давайте посмотрим.
Сначала, мы определяем компоненты. Для каждого из них, мы делаем что-нибудь полезное, способствующее конечному результату.
[buildout] parts = # Aspeli-style line-spacing to emphasize the functionality # of each part or group of parts ;-) env grp mysql apache gd php ports mycnf mysql-bin mysql-admin mysql_install_db apache-conf php-conf # Uncomment only one of these at a time # phpmyadmin # sugarcrm # phorum wordpress supervisor
Теперь, когда все компоненты намечены, остальная часть buildout должна определить их.
Сначала добавляем несколько утилит, необходимых для buildout.
[env] recipe = gocept.recipe.env [grp] recipe = collective.recipe.grp
Затем, создаём основные компоненты.
[mysql] recipe = hexagonit.recipe.cmmi url = http://mysql.mirrors.hoobly.com/Downloads/MySQL-5.1/\ mysql-5.1.33.tar.gz keep-compile-dir = true [apache] recipe = hexagonit.recipe.cmmi url = http://www.trieuvan.com/apache/httpd/httpd-2.2.11.tar.gz configure-options = --enable-so keep-compile-dir = true [gd] recipe = hexagonit.recipe.cmmi url = http://www.libgd.org/releases/gd-2.0.35.tar.gz keep-compile-dir = true [php] recipe = zc.recipe.cmmi environment = PATH=${mysql:location}/bin:${env:PATH} url = http://us2.php.net/get/php-5.2.9.tar.gz/from/this/mirror # Beware, the new line below (i.e. '\') may need to be undone. extra_options = --prefix=${buildout:directory}/parts/apache/php \ --with-config-file-path=${buildout:directory}/etc/php.ini \ --with-gd=${buildout:directory}/parts/gd \ --with-apxs2=${buildout:directory}/parts/apache/bin/apxs \ --with-mysql=${mysql:location} \ --enable-mbstring
После этого, еще несколько настроек. (Вы можете прочесть комментарии ниже для получения дополнительной информации).
# Make it easy to change the various port settings [ports] recipe = plone.recipe.command command = echo These ports are used to configure this LAMP: echo Supervisor: ${ports:supervisor} echo Apache: ${ports:apache} echo MySQL: ${ports:mysql} supervisor = 9001 apache = 8080 mysql = 3306 # All the mysql compile options [mycnf] recipe = plone.recipe.command command = echo echo These options are passed to mysqld_safe: ${mycnf:opt} echo basedir=${mysql:location} datadir=${buildout:directory}/var pid=${mycnf:datadir}/mysql.pid err = ${mycnf:datadir}/log/mysql.err sock = ${mycnf:datadir}/mysql.sock # Beware, the new line below (i.e. '\') may need to be undone. opt = --port=${ports:mysql} --pid-file=${mycnf:pid} \ --log-error=${mycnf:err} --basedir=${mycnf:basedir} \ --datadir=${mycnf:datadir} --socket=${mycnf:sock} # Setup the mysql databases. [mysql_install_db] recipe = plone.recipe.command command = ${mysql:location}/bin/mysql_install_db --datadir=${mycnf:datadir} echo echo After starting supervisord, you may want to run: echo ${buildout:directory}/parts/mysql/bin/mysqladmin -u root password 'new-password' echo update-command = ${mysql_install_db:command} # Generate Config files for Apache and PHP [apache-conf] recipe = collective.recipe.template input = ${buildout:directory}/templates/httpd.conf.in output = ${buildout:directory}/etc/httpd.conf [php-conf] recipe = collective.recipe.template input = ${buildout:directory}/templates/php.ini.in output = ${buildout:directory}/etc/php.ini # Make it easy to run mysql and mysqladmin [mysql-bin] recipe = collective.recipe.template input = ${buildout:directory}/templates/mysql.in output = ${buildout:directory}/bin/mysql [mysql-admin] recipe = collective.recipe.template input = ${buildout:directory}/templates/mysqladmin.in output = ${buildout:directory}/bin/mysqladmin
Теперь, компоненты, загружаемые различными PHP-приложениями.
[wordpress] recipe = hexagonit.recipe.download url = http://wordpress.org/latest.tar.gz destination = ${buildout:directory}/htdocs strip-top-level-dir = true [phpmyadmin] recipe = hexagonit.recipe.download url = http://prdownloads.sourceforge.net/phpmyadmin/ \ phpMyAdmin-3.1.3.2-english.tar.bz2 destination = ${buildout:directory}/htdocs strip-top-level-dir = true [sugarcrm] recipe = hexagonit.recipe.download url = http://www.sugarforge.org/frs/download.php/5252/\ SugarCE-5.2.0c.zip destination = ${buildout:directory}/htdocs strip-top-level-dir = true [phorum] recipe = hexagonit.recipe.download url = http://www.phorum.org/downloads/phorum-5.2.10.tar.gz destination = ${buildout:directory}/htdocs strip-top-level-dir = true
И контроллер (supervisor), который будет всем управлять.
[supervisor] recipe = collective.recipe.supervisor port = ${ports:supervisor} serverurl = http://127.0.0.1:${ports:supervisor} pp = ${buildout:directory}/eggs/ supervisor-3.0a6-py2.4.egg/supervisor/pidproxy.py # Beware, the new line below (i.e. '\') may need to be undone. programs = 10 mysql ${supervisor:pp} \ [ ${mycnf:pid} ${mysql:location}/bin/mysqld_safe ${mycnf:opt} ] 20 apache ${apache:location}/bin/httpd \ [ -c "ErrorLog /dev/stdout" -DFOREGROUND \ -f ${buildout:directory}/etc/httpd.conf ]
Вот и все!
Если Вам интересно испытать это самому, загляните сюда:
http://svn.aclark.net/svn/public/buildout/lamp/trunk/
Сообщите мне в комментариях, как все прошло!
Оригинал статьи на
http://aclark.net
Перевод ООО «Комтет» komtet.ru