Использование MoinMoin с FastCgi
FastCGI это метод, позволяющий Apache общаться с "долгоиграющими" скриптами. Он имеет то преимущество, что скрипты запускаются и инициализируются только однажды, и данные кешируются в памяти от запроса к запросу, увеличивая производительность CGI-приложений.
Развертывание на Apache
Чтобы развернуть MoinMoin с использованием FastCGI вам нужен Apache с mod_fastcgi. Пожалуйста, ознакомьтесь с документацией по mod_fastcgi, описывающей, как его собрать.
Выполните базовую apache-инсталляцию для вашей операционной системы, как описано в других частях установочной документации MoinMoin. В большинстве случаев это HelpOnInstalling/ApacheOnLinux. Там, где в документации упоминается moin.cgi вам следует использовать вместо этого moin.fcg. Убедитесь, что .fcg обрабатывается модулем FastCGI (AddHandler fastcgi-script .fcg в вашем конфиге apache).
Обычно, Apache запускает CGI-скрипты под своим собственным пользователем и группой, или с пользователем и группой соответствующего виртуального хоста, если вы используете suexec wrapper. Чтобы делать это с помощью FastCGI вам нужно включить в вашем конфиге apache опцию FastCgiWrapper On (см. документацию по FastCGI).
Убедитесь, что вы перезапустили Apache после изменения py-файлов (таких как config) для запуска сервера FastCGI, иначе вы не увидите никаких изменений!
Запуск как отдельного приложения и/или на Windows
MoinMoin может быть запущен как внешнее приложение, отвечающее на запросы FastCGI через локальный TCP/IP-сокет. Это хорошо работает на Windows. Всё, что вам нужно (имея установленный mod_fastcgi и работающий экземпляр MoinMoin) это:
- Выбрать номер порта для внутренней связи. Он должен быть больше 1023. В этом примере, мы выбрали 8888 (просто по приколу).
- Добавить следующие строки в ваш httpd.conf:
Alias /moin.fcg "/your/path/to/moin.fcg" FastCgiExternalServer "/your/path/to/moin.fcg" -host localhost:8888
Отредактировать moin.fcg. Заменить
fcg = thfcgi.THFCGI(handle_request)
наfcg = thfcgi.THFCGI(handle_request, 0, 8888)
Запустить файл moin.fcg вручную, как обычный скрипт Python:
python moin.fcg
- Запустить Apache.
Откат на CGI если FastCGI недоступен
Установите и протестируйте MoinMoin согласно HelpOnInstalling/ApacheOnLinux. Потом сделайте и проверьте нужные правки для запуска mod_fastcgi. Если вы удовлетворены, то можете добавить следующий блок в свой конфиг Apache:
<IfModule !mod_fastcgi.c> ScriptAlias /mywiki "/your/path/to/moin.cgi" </IfModule> <IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcg ScriptAlias /mywiki "/your/path/to/moin.fcg" </IfModule>
Теперь Apache будет использовать mod_fastcgi если он доступен, и медленный cgi-скрипт в противном случае.
Развертывание на lighttpd
Лучшим вариантом будет запуск moin как внешнего приложения. В этом случае вам не понадобится перезапускать веб-сервер для перезапуска moin.
Настройка
fastcgi.server = ( "/mywiki" => ( "localhost" => ( "host" => "127.0.0.1", "port" => 8888, "check-local" => "disable", "broken-scriptfilename" => "enable", ) ) )
Вы увидите в логе ошибок lighttpd много ошибок "2005-12-02 16:30:11: (mod_fastcgi.c.2373) FastCGI-stderr:", причина которых не ясна.
Запуск экземпляра MoinMoin
Чтобы запустить экземпляр MoinMoin либо следуйте изменениям из "Запуск как отдельного приложения и/или на Windows" выше, или запустите moin.fcg, пользуясь spawn-fcgi (установлено с lighttpd).
cd /www/org.mywiki/bin sudo -u www /usr/local/bin/spawn-fcgi -f ./moin.fcg -P moin.pid
Чтобы остановить экземпляр позже:
sudo kill `cat moin.pid`
Запуск spawn-fcgi под root и используя -u www -g www приводит к выходу по ошибке Python ImportError, причина не ясна. sudo -u www даёт тот же эффект.
Множество процессов moin
Если вы запускаете много экземпляров moin на разных портах, lighttpd автоматически распределяет нагрузку между ними, используя все CPU.
Используйте такие настройки:
fastcgi.server = ( "/mywiki" => ( "localhost" => ( "host" => "127.0.0.1", "port" => 1080, "check-local" => "disable", "broken-scriptfilename" => "enable", ), ( "host" => "127.0.0.1", "port" => 1081, "check-local" => "disable", "broken-scriptfilename" => "enable", ), ) )
Скрипт для автоматического запуска MoinMoin
Вот скрипт автоматического запуска для Mac OS X, использующий систему DarwinPortsStartup. Возможно, он будет полезен и для других UNIX-подобных платформ.
# Start and stop multiple moin fast cgi instances runnings on PORTS NAME="moin" DIR="/www/org.mywiki/bin" FCGIAPP="./moin.fcg" PREFIX="/usr/local" # List of ports to start moin instances on, separated with whitesapce # Keep in sync with fastcgi.server in lighttpd.conf PORTS="1080 1081" start_on_port () { # Start moin instance on port, leaving pid file port=$1 cd "${DIR}" && sudo -u www "${PREFIX}/bin/spawn-fcgi" \ -f "${FCGIAPP}" \ -p $port \ -P "${NAME}-${port}.pid" \ > /dev/null } kill_on_port () { # Try to kill process using pid in pid file, then remove the pid file pidFile="${DIR}/${NAME}-$1.pid" kill `cat "$pidFile"` && rm -f "$pidFile" > /dev/null } start () { for port in $PORTS; do start_on_port $port; done } stop () { for port in $PORTS; do kill_on_port $port; done } case "$1" in start) # XXX starting twice will break pid files (bug in spawn-fcgi) start && echo -n " $NAME" ;; stop) stop && echo -n " $NAME" ;; restart) stop start && echo -n " $NAME" ;; *) echo "Usage: `basename $0` {start|stop|restart}" >&2 ;; esac exit 0
Добавление скрипта автоматического запуска MoinMoin на Mac OS X
При помощи этого скрипта экземпляры moin будут автоматически запускаться при загрузке.
Установите drarwinports
Установите пакет DarwinPortsStartup:
sudo port install DarwinPortsStartup
Скопируйте moin.sh в /opt/local/etc/rc.d:
sudo cp moin.sh /opt/local/etc/rc.d