PSGI 方式运行 Movable Type

一直以来,在 Nginx 下都是用 FastCGI 模式运行 Movable Type,得知 PSGI 方式运行 Movable Type 在后台速度上会有很大提升,自然要尝试一番。

由于服务器用的 Debian 系统,Web Server 用的 Nginx,因此使用的方式很简单,基本按照 mt-starman-daemon 的方法照着做就行了,当然也会根据自己的实际情况做些适应性调整,记录如下:

  1. 安装 App::cpanminus,方便以后安装 Perl 模块
    curl -L http://cpanmin.us | perl - --sudo App::cpanminus
    
  2. cpanm 工具安装必须的 Perl 模块
    cpanm Task::Plack XMLRPC::Transport::HTTP::Plack Starman
    
  3. 下载 mt-starman 到启动目录并修改为可执行权限
    wget -P /etc/init.d https://raw.github.com/saahov/mt-starman-daemon/master/debian/mt-starman
    chmod +x /etc/init.d/mt-starman
    
  4. 根据自己的情况修改 /etc/init.d/mt-starman 文件的 DIR, SCRIPT, USER, GROUP, WORKERS 参数
    DIR=/absolute/path/to/mt-directory (#Movable Type 程序的绝对路径) 
    SCRIPT=/absolute/path/to/mt.psgi (#mt.psgi 文件的绝对路径) 
    USER=www-data(#mt-starman 运行的用户,我用了 Web 服务器配置的 www)
    GROUP=www-data (#mt-starman 运行用户组,,我用了 Web 服务器配置的 www)
    ......
    # If you have a permission problem,
    # move PID-file to USER home directory
    PIDFILE=/var/run/mt.pid(#修改这里为你的用户和用户组可写入的目录,我修改为了 /home/wwwroot 下建立的目录,这样 www 用户有写入权限)
    
  5. 编辑 nginx.conf,在 http 小节加入:
    upstream starman {
        server 127.0.0.1:50000;
    }
    
  6. 编辑 nginx.conf,在 server 小节加入:
    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;
    }
    
  7. 编辑 mt-config.cgi,加入以下内容:
    #mt-starman PIDFile的绝对路径
    PIDFilePath /var/run/mt.pid 
    
    #后台管理的友好 URL
    AdminScript app
    CommentScript comments
    TrackbackScript trackbacks
    SearchScript search
    XMLRPCScript xmlrpc
    AtomScript atom
    UpgradeScript upgrade
    
    #使用 PSGI 后正确获取评论人 IP 地址
    TransparentProxyIPs 1
    
  8. 运行 mt-starman 并重启 Nginx,让 Movable TypePSGI 方式运行:
    /etc/init.d/mt-starman start && /etc/init.d/nginx restart
    
  9. 通过网址访问 Movable Type 后台,如果正常用以下命令将 mt-starman 加入开机启动项:
    update-rc.d mt-starman defaults
    insserv mt-starman
    

结束。以后修改了 Movable Type 程序目录的任何文件,让这些修改起作用,必须重新启动一下 mt-starman 让这些修改生效。