В Movable Type 5.2 появилась встроенная поддержка PSGI. В связке с nginx это даёт значительный прирост производительности — страницы открываются не просто быстро, а невероятно быстро.
Единственный минус PSGI — для настройки Movable Type необходимы права root, поэтому пользователям виртуального хостинга, к сожалению, радоваться не приходится. А для тех, у кого свой сервер или VPS, я подготовил подробную инструкцию.
Вся процедура установки и настройки разделена на 3 этапа: Debian, nginx и Movable Type. Для других операционных систем процесс будет аналогичен, но, возможно, процесс запуска системного сервиса будет немного отличаться.
Debian
Для начала необходимо установить дополнительные Perl-модули. Можно использовать стандартный установщик CPAN, а можно воспользоваться более удобным cpanminus.
Для установки cpanminus выполните команду (другие варианты установки):
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
Теперь можно устанавливать модули. При помощи cpanminus установка происходит командой «cpanm ИМЯ-МОДУЛЯ». Выполним установку 3 модулей за раз:
cpanm Task::Plack XMLRPC::Transport::HTTP::Plack Starman
После установки модулей необходимо создать системный сервис (daemon), который будет автоматически загружаться с системой. Разместите в папке /etc/init.d файл mt-starman со следующим содержанием (отредактируйте необходимое):
#!/bin/sh
### BEGIN INIT INFO
# Provides: starman-mt
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starman daemon
# Description: Start and stop Starman daemon.
### END INIT INFO
DIR=/absolute/path/to/mt-directory
SCRIPT=/absolute/path/to/mt.psgi
USER=www-data
GROUP=www-data
WORKERS=3
LISTEN=127.0.0.1:50000
ERROR_LOG=/var/log/mt-starman.log
# If you have a permission problem,
# move PID-file to USER home directory
PIDFILE=/var/run/mt.pid
case "$1" in
start)
start-stop-daemon --start --chuid $USER --chdir $DIR \
--pidfile=$PIDFILE \
--exec /usr/local/bin/starman -- -D --pid $PIDFILE \
--listen $LISTEN --error-log $ERROR_LOG \
--user $USER --group $GROUP \
--workers $WORKERS $SCRIPT
;;
stop)
start-stop-daemon --stop --pidfile $PIDFILE
;;
*)
echo "Usage: $SCRIPTNAME {start|stop}" >&2
exit 3
;;
esac
Количество процессов (WORKERS) может быть любым — от одного до бесконечности, в зависимости от того, сколько на сервере памяти.
На файл mt-starman необходимо установить права доступа 755, из терминала достаточно выполнить команду:
chmod 755 /etc/init.d/mt-starman
Чтобы сервис автоматически загружался со стартом системы, выполните команду:
update-rc.d mt-starman defaults
Если у вас Debian Squeeze или более новая, то команда будет такая:
insserv mt-starman
nginx
Сперва необходимо добавить в основной конфигурационный файл nginx (nginx.conf) в раздел http следующий блок:
upstream starman {
server 127.0.0.1:50000;
}
После этого нужно настроить сайты. Для этого в раздел server каждого сайта, где используется Movable Type, добавьте следующее:
location /cgi-bin/mt/ {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://starman;
}
Movable Type
Теперь добавляем в mt-config.cgi информацию, где расположен PID-файл:
PIDFilePath /var/run/mt.pid
Для удобства можно также сменить названия скриптов Movable Type, для этого в том же mt-config.cgi нужно добавить:
AdminScript app
CommentScript comments
TrackbackScript trackbacks
SearchScript ftsearch
XMLRPCScript xmlrpc
AtomScript atom
UpgradeScript upgrade
Сами файлы также нужно переименовать. Например, если основной файл был mt.cgi, то в соответствии с примером нужно переименовать его в app.
Теперь осталось перезагрузить nginx и запустить Starman:
/etc/init.d/mt-starman start && /etc/init.d/nginx restart
После этого Movable Type будет доступен по адресу example.com/cgi-bin/app.
Обратите внимание, при использовании PSGI, если вы изменили что-нибудь в mt-config.cgi, установили плагин или обновили Movable Type, нужно будет перезапускать процесс mt-starman.
Все примеры из этого поста можно скачать на Github: github.com/saahov/mt-starman-daemon.
Кроме того, вместо nginx можно использовать Lighttpd.
Movable Type также отлично работает в связке nginx + FastCGI.
Обратите внимание, чтобы в логах Movable Type отображался реальный IP, нужно указать в mt-config.cgi следующее:
TransparentProxyIPs 1
Movable Type 5.2.9