Глава 13. Zope

Содержание

Краткое руководство пользователя пакета
Установка ранее разработанного сайта
Установка и использование дополнительных пакетов

Краткое руководство пользователя пакета

Основная идея нашего варианта пакета - дать возможность эксплуатации нескольких независимых друг от друга экземпляров Zope (в пакете, полученном в рамках проекта Zope rpm такой возможности нет). Для каждого такого экземпляра создается домашний каталог, содержащий специфические для него файлы: прикладные пакеты, внешние процедуры и собственно базу данных - ZODB3.

Пакет содержит скрипты и файлы настройки, обеспечивающие интеграцию Zope с остальными компонентами операционной среды. Обеспечиваются следующие возможности:

  • рестарт сервера при перезагрузке системы,

  • переупаковка базы данных,

  • создание нового экземпляра сервера.

Формат и расположение файлов настройки

Привязка пакета к операционной среде определяется следующими конфигурационными файлами:

/etc/sysconfig/zope_default

Конфигурация экземпляров сервера по умолчанию, параметры из этого файла загружаются до файла конфигурации экземпляра;

/etc/sysconfig/zope/*

Каждый файл в этом каталоге является конфигурационным файлом экземпляра сервера;

/etc/sysconfig/zope_hosts.cfg

Список виртуальных хостов Zope, доступных через модуль proxy веб-сервера Apache, если он используется (см. также /etc/httpd/conf/zope_proxy.conf). Формат файла - две колонки, первая колонка содержит имя виртуального хоста, вторая - url соответствующего объекта в Zope.

/etc/httpd/conf/zope_proxy.conf

Дополнительный конфигурационный файл к веб-серверу Apache, его использование должно быть явно разрешено в конфиге Apacha. Конфигурационный файл описывает использование модулей proxy и rewrite для доступа к виртуальным серверам, хранимых в Zope. Список виртуальных серверов вносится в /etc/sysconfig/zope_hosts.cfg.

Переменные конфигурационных файлов экземпляров сервера

Каждый из конфигурационных файлов zope_default и /etc/sysconfig/zope/* содержит строки вида :


	<СТРОКА> :== <ПЕРЕМЕННАЯ> '=' <ЗНАЧЕНИЯ>

Предполагается наличие следующих переменных:

INSTANCE_HOME=/var/lib/zope/<ИДЕНТИФИКАТОР>

Рабочая зона экземпляра Zope. Содержит все данные, расширения и продукты уникальные для этого экземпляра;

ZOPE_HOME=/usr/share/zope

Каталог в котором расположен шаблон домашнего каталога. Из этого каталога утилита addzopesite.py копирует файлы при создании нового домашнего каталога;

ZOPE_INSTANCE_HOME=/var/lib/zope

Каталог, в котором расположены рабочие зоны экземпляров серверов. Если при создании экземпляра не указывать полный путь, а указать только идентификатор, то рабочая зона для этого экземпляра будет создана в этом каталоге и ее имя будет совпадать с идентификатором;

user=zope

Пользователь, под которым запускается Zope;

port=8000

Базовый порт относительно которого захватываются порты Zope :

port + 80

http сервер;

port + 21

ftp сервер;

threads=8

Количество тредов в стартующем севере;

days=7

Количество дней между переупаковками сервера;

ignore=0

Игнорировать наличие данного экземпляра сервера при старте, если данный сервер не был указан явно (0 - запускать, 1 - игнорировать);

name="Основной Z-сервер"

Имя сервера, отображаемое в сообщениях скриптов и др.;

LC_ALL=ru_RU.KOI8-R

Локаль сервера по умолчанию. Если не указана - сервер стартует без ключа -L и игнорирует какие-либо установки локали. Для не-англоязычных серверов это может оказаться фатальным : не будет работать поиск посредством ZCatalog и форматирование с использованием StructuredText.

ZOPE_PROFILE_PUBLISHER=0

Если установлена и не равна 0, то Zope будет работать в режиме профилирования. Посмотреть текущий профиль Zope можно на вкладке ControlPanel/DebugInfo/manage_profile. Для профилирования используется файл

    /var/tmp/zope.<ИДЕНТИФИКАТОР>.profile;

. Убедитесь что в этом каталоге достаточно места.

ZOPE_TRACE=0

Включить трассировку запросов : будет создан специальный лог

    /var/log/zope/<ИДЕНТИФИКАТОР>.trace.log

. , в котором будет сохранятся подробная трассировка запросов к серверу с указанием отметок времени;

ZOPE_STUPID_LOG=0

Включить логинг отладочной информации :

    /var/log/zope/<ИДЕНТИФИКАТОР>.stupid.log

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

ZOPE_READONLY=0

Если установлена и не равно 0, то при старте в отладочном режиме Zope будет монтировать хранилище в режиме READONLY : все завершенные транзакции будут сохранятся во временной памяти и при рестарте ZOPE произойдет автоматический откат изменений.

ZOPE_STORAGE=ZODB

Тип хранилища;

Поддерживаемые типы хранилищ

Существует несколько типов хранилищ для Zope, практически все из них находятся в состоянии вечных бета-версий, тем не менее при некоторых обстоятельствах оказывается интересным использовать хранилище, отличное от стандартного ZODB или же ZODB, смонтированное в нестандартном режиме (например "Только для чтения")

Обычный способом нестандартного монтирования хранилищ - размещение в каталоге /usr/lib/zope/lib/python модуля custom_zodb.py, который и выполняет собственно монтирование. Мы включили в ниш дистрибутив готовый модуль custom_zodb.py, управлять которым можно посредством переменных ZOPE_STORAGE и ZOPE_READONLY конфигурационных файлов экземпляра сервера.

Переменная ZOPE_STORAGE может принимать одно из следующих значений:

ZODB

Обычное хранилище ZODB;

BSDPackless

Хранилище BerceleyDB в режиме Packless;

BSDMinimal

Хранилище BerceleyDB в режиме Minimal;

BSD или BSDFull

Хранилище BerceleyDB в стандартном режиме;

ZODB

Обычное хранилище ZODB;

Для любого их этих хранилищ может быть установлена переменная ZOPE_READONY, после чего все закрываемые транзакции будут записываться во временное хранилище и исчезнут при перезапуске сервера (таким образом работает сервер demo.neural.ru).

Серьезному тестированию работоспособности подвергалось только хранилище ZODB - как в нормальном режиме так и в READONLY, остальные типы хранилищ добавлены исключительно для тех, кто знает что делает. Мы не поддерживаем хранилище ZEO (хотя частично протестировали возможность такой поддержки), так как считаем что большая часть пользователей не заинтересована в нем, а те кто заинтересован - все равно будут собирать пакет сами.

Состав и назначение утилит

Создание экземпляра Zope

С помощью этой утилиты вы можете создать новую рабочую зону для сервера Zope, установить права доступа к файлам и зарегистрировали ее в конфигурационных файлах. При создании экземпляра Zope в него копируется файл inituser, что вызывает при старте сервера установку суперпользователя admin с паролем 12345678 - помните, сразу после старта сервера вы должны создать другого пользователя, дать ему роль Manager и стереть пользователя admin

Вызов

    addzopesite.py [-sl] <КАТАЛОГ_ДЛЯ_УСТАНОВКИ> <ПОРТ>
Параметры

КАТАЛОГ_ДЛЯ_УСТАНОВКИ

Каталог, в котором будет установлена рабочая зона экземпляра сервера, в простейшем случае указывается идентификатор экземпляра, при этом установка производится в каталог /var/lib/zope/<КАТАЛОГ_ДЛЯ_УСТАНОВКИ>, если параметр начинается с символа "/" - то он рассматривается как путь к каталогу для установки от корня сервера;

ПОРТ

Базовый порт, от которого будет отсчитывать рабочие порты Zope;

Ключи

-u <UID>

Пользователь;

-g <GID>

Группа;

--zope_home=<path>

Путь к прототипам;

--cfg_default=<path>

Конфигурация по умолчанию;

--cfg_dir=<path>

Каталог с конфигурациями серверов;

--instance_name=<str>

Название сервера;

--instance_id=<str>

Идентификатор сервера;

--threads=<int>

Количество тредов;

--force

Вносить в новую конфигурацию все переменные иначе вносятся только необходимые);

--locale=<locale>

Локаль, которая будет установлена для сервера;

--storage="ZODB"|"BSDFull"|"BSDPackless"|"BSDMinimal"

тип используемого хранилища;

--[no]readonly

Хранилище должно монтироваться в режиме readonly;

--[no]profile[=<path>]

Включить профилирование;

--[no]log[=<path>]

Включить отладочный логинг;

--[no]trace[=<path>] Включить трассировку запросов;

Включить трассировку запросов;

Переупаковка ZODB

Этот скрипт должен вызываться на регулярной основе, что бы выполнять переупаковку ZODB

Вызов

    zope_pack.py [ключи] [<zope1> [<zope2> ... ]]
Параметры

zope1, zope2

конфигурационные файлы Z-сервера;

Ключи

-v

Трассировка выполнения;

-h

Помощь;

-i

Игнорировать все операции;

-d <days>

Количество дней при упаковке данных;

--max_ratio=<float>

Доля свободного пространства по отношению к размеру базы, при котором запускается переупаковка;

--min_ratio=<float>

Доля свободного пространства по отношению к размеру базы, при котором переупаковка считается невозможной;

--force = (1|2|3)

Принудительная упаковка, модификаторы: 1 - игнорировать игнор, 2 - игнорировать max_ratio, 3 - игнорировать min_ratio;

--cfg_default=<path>

Конфигурация по умолчанию;

--cfg_dir=<path>

Каталог с конфигурациями серверов.

Рестарт сервера

Скрипт для System V init scripts, выполняющий запуск сервера Zope в различных режимах и его останов.

Вызов

    zope <КОМАНДА> [<zope1> [<zope2> ... ]]
Параметры

zope1, zope2

экземпляры Zope, которые будут затронуты командой, если пусто - то команда последовательно выполняется для всех экземпляров;

Команды

-u <UID>

Пользователь;

start

старт сервера;

stop

останов сервера;

reload,restart

остановка и повторный старт сервера;

status

статус Zope;

debug

рестарт сервера в отладочном режиме, нажатие CTRL/C вызывает повторный рестарт сервера;

help

помощь по командам и переменным Z;

Генерация новой базы

Скрипт используется для создания хранилища для последующего использования в Zope в качестве основного или монтируемого хранилища.

Вызов

    ./zope_storage.py [-sl] <zope> [<path>]
Параметры

zope

экземпляр Zope в котором будет создана база;

path

путь к базе;

Ключи

-u <UID>

Пользователь;

-u <UID>

Пользователь;

-g <GID>

Группа;

--cfg_default=<path>

Конфигурация по умолчанию;

--cfg_dir=<path>

Каталог с конфигурациями серверов;

--external

Создать точку монтирования;

--external_name=<id>

Идентификатор точки монтирования;

--storage="ZODB"|"BSDFull"|"BSDPackless"|"BSDMinimal"

Тип создаваемого хранилища;

Быстрый старт

Установка и первоначальная настройка Zope включает в себя следующие шаги :

Установка пакетов

Для установки пакетов необходимо отдать команду вида :

rpm -ivh Zope-2.5.*rpm \
    Zope-Module-2.5.*.i586.rpm \
    Zope-core-2.5.*.i586.rpm \
    Zope-DateTime-2.5.*.i586.rpm \
    Zope-DocumentTemplate-2.5.*.i586.rpm \
    Zope-RestrictedPython-2.5.*.i586.rpm \
    Zope-StructuredText-2.5.*.i586.rpm \ Zope-TAL-2.5.*.i586.rpm \
    Zope-Testing-2.5.*.i586.rpm \ Zope-ZHome-2.5.*.i586.rpm \
    Zope-ZODB-2.5.*.i586.rpm \
    Zope-ZPublisher-2.5.*.i586.rpm \ Zope-ZServer-2.5.*.i586.rpm \
    Zope-ZUtils-2.5.*.i586.rpm

Если вы используете apt, то более простой и правильный способ установки:

apt-get install Zope

В процессе установки этих пакетов проводится ряд настроек :

  • Создается пользователь и группа Zope, под которыми по умолчанию будет работать сервер;

  • Создается рабочая зона Zope : /var/lib/zope;

  • Устанавливаются вспомогательные пакеты Zope, эти пакеты могут использоваться без использования Zope;

  • Устанавливается сам Zope;

Добавление рабочей зоны сайта

После установки пакетов одна рабочая зона создана - var/lib/zope/basic - вы можете добавить дополнительные рабочие зоны вызовом скрипта addzopesite.py, например, сама зона basic была создана командой :

addzopesite.py basic 8000

здесь 8000 - номер базового порта, от которого отсчитываются порты веб-сервера (базовый порт + 80) и ftp (базовый порт + 21)

Настройка рабочей зоны сайта

По умолчанию, вновь созданная рабочая зона не является автоматически запускаемой, т.е. при перезагрузке системы сервер для этой рабочей зоны не будет запущен. Изменить ситуацию можно установив в значение 0 параметр ignore в файле /etc/sysconfig/zope/<ИМЯ РАБОЧЕЙ ЗОНЫ> (/etc/sysconfig/zope/basic для основной зоны).

Старт сервера

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

   /etc/rc.d/init.d/zope debug &lt;ИМЯ РАБОЧЕЙ ЗОНЫ&gt;

например :

   /etc/rc.d/init.d/zope debug test

При работе в отладочном режиме, сервер будет выводить отладочную информацию на терминал, с которого он стартован : это удобно при диагностировании ужасных проблем, вызываемых установкой особенно кривых продуктов;

Создание пользователей

Любая вновь созданная рабочая зона имеет пользователя admin с паролем 12345678. Единственная операция, которая может быть выполнена от имени этого пользователя - редактирование других пользователей. Поэтому, рекомендуется создать пользователя с ролью "Manager" и удалить пользователя admin, в дальнейшем, все работы проводить от имени пользователя с ролью Manager. Что бы сделать это, стартуйте сервер и проделайте следующие шаги:

  1. Запустите ваш любимый браузер

  2. Введите url http://127.0.0.1:8080/manage

  3. В появившемся запросе на ввод логина и пароля введите логин "admin" пароль "12345678".

  4. Перейдите в папку acl_users (http://127.0.0.1:8080/acl_users/manage)

  5. Нажатием кнопки "добавить" добавьте пользователей, хотя бы один из которых должен иметь роль "Manager" и "Owner".

  6. Удалите пользователя admin. При возникновении аварийных ситуаций вы сможете создать его заново утилитой /usr/sbin/zpasswd, так что его удаление вполне безопасно, что нельзя сказать о противоположенном случае: дело в том, что из-под этого пользователя нельзя создавать какие-либо объекты, т.к. работать они нормально все равно не смогут. Обычно, Zope блокирует такие попытки, но, есть способы это обойти - во всяком случае, даже такая умница как я, однажды импортировала реплику от имени этого пользователя и потом четыре часа тихо отъезжала -x---X;-), так глючило все.

  7. Введите url http://127.0.0.1:8080/manage

  8. В появившемся запросе на ввод логина и пароля введите логин и пароль пользователя с ролью "Manager".

В дальнейшем, пользователь с ролью Manager всегда может изменить логины и пароли других пользователей. Если будут утеряны все логины и пароли пользователей с ролью Manager, то можно создать пользователя admin используя утилиту zpasswd.py, и затем повторить все шаги данного раздела.

Интеграция с веб-сервером Apache

Все сайты, создаваемые с использованием сервера приложений Zope, рекомендуется запускать за proxy-сервером, в качестве которого может использоваться web-сервер apache с активированным модулем mod_proxy. Такое решение позволяет обеспечить более высокую производительность, создавать сайты дя виртуальных доменов и защитить Zope от некоторых направленных против него атак.

В пакет Zope-ZUtils-2.5.*.i586.rpm входит добавление к конфигурационному файлу Apache, /etc/httpd/conf/zope_proxy.conf, содержащее пример настройки web-сервера. С этими настройками веб-сервер будет читать содержимое файла /etc/sysconfig/zope_hosts.cfg и для перечисленных в нем виртуальных серверов запросы будут отображаться на папки Zope, при этом среда означивания запроса будет настраиваться для работы с виртуальным хостом посредством экземпляра класса VirtualHostMonster, предварительно созданного в корне сайта: иначе базовые URL'ы будут строится неверно.

Активация модулей mod_proxy и mod_rewrite

Что бы активировать mod_proxy необходимо:

  1. В конфигурационном файле /etc/httpd/conf/httpd.conf нужно раскомментировать следующие строки :

    LoadModule rewrite_module     modules/mod_rewrite.so LoadModule
    proxy_module modules/libproxy.so
    AddModule mod_rewrite.c AddModule mod_proxy.c
    

    Желательно убрать из файла существующее определение прокси, хотя будет работать и с ним. Какие проблемы при этом возникнут - потом расскажите.

  2. В конец файла добавить вызов конфига прокси директивой :

    Include conf/zope_proxy.conf
    

    Обратите внимание на то, что данный файл должен существовать. Он входит в пакет ZUtils).

  3. Рестартовать web-сервер командой /etc/rc.d/init.d/httpd restart

Добавление виртуального сервера в конфигурацию

Список виртуальных серверов хранится в файле /etc/httpd/zope.cfg, каждая строка которого соответствует одному виртуальному серверу и содержит два параметра: URL, видимый при обращении к прокси, и URL, на который такие обращения будут отображаться. Например, для сервера zope.localdomain:

 zope.localdomain  http://localhost:8080/VirtualHostBase/http/zope.localdomain:80/Zope/Main/VirtualHostRoot

Каталоги VirtualHostBase и VirtualHostRoot не должны специально создаваться : это псевдоимена, активирующие объект класса VirtualHostMonster, расположенный в корневом объекте Zope, и вызывающие переопределение среды таким образом, что в качестве базового URL при обработке запроса будет использоваться http://zope.localdmain:80/, а пути будут отсчитываться от папки /Zope/Main - это совсем не тоже самое, что chroot на файловой системе, но приводит к сходным последствиям при программировании.

Создание контейнера под виртуальный сервер в Zope

После того, как отображение виртуального сервера добавлено в Конфигурацию прокси, можно создать контейнер под этот сервер в Zope. Мы рекомендуем для любого виртуального сервера создавать в иерархии Zope два уровня контейнеров:

  • Контейнер служебного уровня ("подвал"), имя которого совпадает с именем виртуального сайта;

  • Вложенную в него папку Main, содержащую корень сайта.

При таком планировании сервера, в контейнере служебного уровня будут размещаться файлы, необходимые для дизайна, коннекторы к базам данных и почтовым серверам, контейнеры авторизации пользователей (acl_users) и хранимые процедуры, а в папке Main - собственно контент-наполнение сайта.

Настройка VirtualHostMonster

Вы должны создать объект класса VirtualHostMonster в корне сайта, для этого нужно набрать в браузере url http://localhost:8080/manage и добавить объект (п. меню Add VirtualHostMonster) с именем VirtualHostMonster. Без добавления этого объекта при обращении к серверу через proxy не произойдет смещение корня виртуального сайта и вы получите ошибку 404 (not found);

Проверка

После выполнения предыдущих шагов, при вводе URL http://zope.localhost вы должны видеть страницу index_html означенную в контексте папки Zope/Main. Обратите внимание, все вычисляемые ссылки (конструкцией вида <dtml-var absolute_url>) должны указывать на URL'а сайта http://zope.localhost.

Настройка сервера для работы через https-соединение

Говорят, для этого есть специальный продукт под Zope - я даже не смотрел его, так как в любом случае использование таких специфических сервисов непосредственно в Zope выглядит не самой лучшей идеей. Более привлекательной кажется идея использования для закрытия канала между сервером и пользователем модуля mod_ssl веб-сервера apache. Входящий в наш пакет конфигурационный файл apache zope_proxy.conf предусматривает такой механизм. Для его активации вы должны проделать следующее (предполагается, что вы уже настроили сервер для обычной работы):

  1. Установить модуль mod_ssl для веб-сервера apache;

  2. При установке модуля будет создан каталог /etc/httpd/conf/ssl, содержащий конфиги mod_ssl;

  3. После установки модуля вы должны сгенерировать ключи к серверу обычным способом - т.е. так, как это описано в руководстве к apache, mod_ssl и openssl;

  4. Файл /etc/httpd/conf/ssl/ssl.default-vhost.conf содержит конфигурацию доступа к сайту по умолчанию. Вы должны добавить в эту конфигурацию, непосредственно перед закрывающей скобкой вызов того же конфигурационного файла что и для обычного сайта, что бы в защищенном режиме также происходила обработка виртуального хостинга, конец файла после добавления должен выглядеть так :

    Include conf/zope_proxy.conf 
    </VirtualHost>
    

    Такая конфигурация, возможно, не совсем идеальна, но достаточна для демонстрации принципа решения;

  5. Рестартуйте apache;

Для проверки попробуйте ввести в браузере url'ы вида :

http://zope.localdomain/

м

https://zope.localdomain/

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

Как должна была показать проверка, проведенных настроек вполне достаточно для того, что бы пользователи могли работать с сайтом как через http, так и через https. Но желательно, что бы через https работали только зарегистрированные пользователи, тогда как обычным лучше работать через http (кэширование, нагрузка на железо при выполнении процедуры зашифрования и т.п.). Кроме того, желательно гарантировать что бы никто из авторизованных пользователей в следствии ошибок или же злого умысла не начал работать через http.

Простейший способ добиться этого - выполнить редирект на https-канал при попытке авторизации. Если на вашем сайте используется http-авторизация, то раскомментируйте в файле zope_proxy.cfg следующие строки:

RewriteCond   	%{SERVER_PORT}		!^443$
RewriteCond   	%{HTTP:Authorization}	^Basic.*					
RewriteRule  	^(.*)			https://%{HTTP_HOST}$1	[R,L]

Теперь, увидев в запросе заголовок авторизации, apache инициирует редирект на защищенный канал.

Для проверки такого редиректа, попробуйте ввести в браузере URL вида :

	http://zope.localdomain/manage

Обычно, этот url используется для входа в менеджерский интерфейс Zope. Если сайт использует http-авторизацию, то вы увидите запрос для ввода логина и пароля, а после удачного ввода обнаружите что уже работаете в с url'ом вида :

	https://zope.localdomain/manage

Обратите внимание, что уведомление о входе в https режим появилось уже после ввода пароля : это означает, к сожалению, что вы передали-таки пароль по открытому каналу. Такой автоматический редирект не гарантирует сокрытия вашего пароля но гарантирует, что авторизованные пользователи после ввода пароля будут работать только по https.

Для гарантированного сокрытия пароля вы должны либо явно вызывать https сразу при попытке обращения к закрытой части ресурса (попробуйте настроить соответствующим образом ссылке на вашем сайте), либо вызывать редирект на https до выполнения авторизации, по факту обращения к защищаемой странице.

Это было бы легко сделать, если бы не гибкая система настройки прав в Zope : любая страница может быть защищена. Таким образом, мы не можем предложить универсального решения, но можем предложить решение частного случая : редирект при попытке доступа к ZMI.

Что бы включить такой редирект, раcкомментируйте в zope_proxy.cfg следующие строки:

RewriteCond   	%{SERVER_PORT}	!^443$
RewriteCond	$1		.*/manage_.*
RewriteRule  	^(.*)		https://%{HTTP_HOST}$1	[R,L]

Этот код будет инициировать редирект при обращении к странице вида ".*manage.*", т.е. странице интерфейса ZMI.

Хотя работа через https возможна и для других способов авторизации, автоматического редирект в момент авторизации будет организовать несколько труднее. Для частного случая использования mysqlUserFolder можно попробовать раскомментировать следующие строки в zope_proxy.conf:

RewriteCond   	%{SERVER_PORT}	!^443$
RewriteCond   	%{HTTP_COOKIE}	.*__ac_user.*					
RewriteRule  	^(.*)		https://%{HTTP_HOST}$1	[R,L]

Эксплуатация сервера

Дальнейшая эксплуатация сайта требует регулярного выполнения таких операций, как переупаковка базы данных и репликация каталогов сайта. Объектная база ZODB3, поверх которой построен сервер приложений, предоставляет возможность отменяемых транзакции: любая последовательность операций, изменяющих содержимое базы данных, может быть отменена без потери целостности сайта. Это полезное свойство имеет сторонний эффект: при любых изменениях размер базы данных увеличивается. Именно поэтому, на регулярной основе должна инициироваться процедура переупаковки базы, стирающая старые версии объектов. Эта процедура может быть инициирована со страницы http://zope.localhost/Control_Panel/Database/manage_pack, где можно указать параметры упаковки, но, т.к. процедура должна проводится на регулярной основе, в состав нашего пакета Zope-ZUtils входит скрипт инициирующий процедуру переупаковки по crontab посредством утилиты zope_pack.py.

Скрипт запускается ежедневно, но переупаковка базы инициируется при соблюдении двух условий:

  1. База занимает объем не меньше указанного в процентах от свободного пространства на диске;

  2. Свободное пространство на диске не меньше указанного в процентах от размера базы.

Эти параметры хранятся в конфигурационном файле etc/sysconfig/zope_default.cfg. Старт скрипта проверяет все экземпляры сервера, конфиги которых размещены в /etc/sysconfig/zope.

Бакап сайтов, размещенных в Zope, может осуществляться сохранением базы ZODB3 :


/var/lib/zope/<ИМЯ ЭКЗЕМПЛЯРА СЕРВЕРА>/var/Data.fs

или репликацией отдельных папок сервера приложений. В первом случае ряд источников рекомендует пользоваться утилитой rsync (см. www.zope.org), но второй подход существенно более удобен и может выполнятся, например, регулярным запуском команды wget со строкой вида :

wget -sS -O <ID> $(date +%Y%m%d).zexp \
  "http://<LOGIN>:<PASSWD>@localhost:8080/manage_exportObject?download:int=1&id=<ID>"

ID

идентификатор сохраняемой папки в корне Zope;

LOGIN

логин пользователя в Zope;

PASSWD

пароль пользователя в Zope;

При этом сервер отдает файл реплики в формате zexp. Вы можете получать реплику в формате *.xml, но: это будет работать более медленно, процесс репликации при ряде условий может сбоить и полученная реплика может занимать существенно больший объем - иными словами, это не выгодно (как впрочем и многие другие "модные" технологии).

Реплика может быть восстановлена импортом в Zope - в тот же самый экземпляр сервера или в любой другой. Для этого реплика должна быть размещена в каталоге :

/var/lib/zope/<ИМЯ ЭКЗЕМПЛЯРА СЕРВЕРА>/import,

после чего импорт может быть инициирован нажатием на кнопку "import/export" в любом контейнере менеджерского интерфейса. Подробно, импорт реплик описан в ImportSite.txt.

Эксплуатация сайта также включает в себя решение ряда административных проблем связанных с устранением ошибок и противостоянием вторжению. Существует ряд пакетов, помогающих справится с этими проблемами, часть которых подробно описана в InstallExtensionPackages.txt, кроме того, Digital Creations регулярно выпускает т.н. Hotfixes к текущим версиям Zope: Hotfix не изменяет сервер и не требует выполнения сложных процедур миграции сервера, он лишь в момент старта сервера переопределяет часть методов, исправляя таким образом ошибки, связанные, как правило, с дырами в защите. Hotfixes должны размещаться в каталоге /usr/lib/zope/lib/python/Products, более подробно процедура их установки описана в InstallExtensionPackages.txt и на сайте www.zope.org. Русскоязычным пользователям мы рекомендуем обязательно устанавливать продукт CrayFIX - это исправление ошибок не вошедшее в основной релиз и выполненное нами специально для русскоязычной аудитории: это не только правка языковых проблем, но и противодействие ошибкам в браузерах, распространенных на территории России.

Заключение

В заключении просто дадим ряд ссылок:

  • http://www.zope.org — сайт Zope, содержит продукты расширения и много подробной документации;

  • http://www.python.org — Zope реализован на языке Python, этот сайт содержит всю необходимую документацию;

  • http://www.neural.ru — мой сайт, я на нём вывешиваю некоторую информацию по поддерживаемым пакетам.