LAMP-buildout для Wordpress и других PHP-приложений

Будучи Консультантом Plone в течение вот уже нескольких лет, мне очень неприятно иметь дело с технологиями, написанными не на Python. Недавно я пошел по другому, более долгому пути, чтобы избежать их … Автор: Alex Clark

LAMP buildout для Wordpress и других PHP-приложений

Я должен был отправить новые версии PHP 5 и MySQL 5 на сервер Redhat Enterprise Linux 3 (RHEL3), и не смог заставить себя скомпилировать пакеты, искать RPMы, или заняться еще чем-нибудь скучным, поэтому я начал искать альтернативу. LAMP-buildout! Я уверен, что это уже сделано, но я не смог найти достойных примеров, поэтому решил:

  1. Развернуть моё PHP-приложение с помощью zc.buildout .
  2. Написать об этом.

Я надеюсь, это поможет пользователям 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

Вам также может помочь