一直以来,在 Nginx 下都是用 FastCGI 模式运行 Movable Type,得知 PSGI 方式运行 Movable Type 在后台速度上会有很大提升,自然要尝试一番。
由于服务器用的 Debian 系统,Web Server 用的 Nginx,因此使用的方式很简单,基本按照 mt-starman-daemon 的方法照着做就行了,当然也会根据自己的实际情况做些适应性调整,记录如下:
- 安装 App::cpanminus,方便以后安装 Perl 模块
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
- 用 cpanm 工具安装必须的 Perl 模块
cpanm Task::Plack XMLRPC::Transport::HTTP::Plack Starman
- 下载 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
- 根据自己的情况修改 /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 用户有写入权限)
- 编辑 nginx.conf,在 http 小节加入:
upstream starman { server 127.0.0.1:50000; }
- 编辑 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; }
- 编辑 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
- 运行 mt-starman 并重启 Nginx,让 Movable Type 以 PSGI 方式运行:
/etc/init.d/mt-starman start && /etc/init.d/nginx restart
- 通过网址访问 Movable Type 后台,如果正常用以下命令将 mt-starman 加入开机启动项:
update-rc.d mt-starman defaults insserv mt-starman
结束。以后修改了 Movable Type 程序目录的任何文件,让这些修改起作用,必须重新启动一下 mt-starman 让这些修改生效。
平生一笑
切换为免费的https,挺好用
刘丰
执行 /etc/init.d/mt-starman start 这个命令的时候遇到了权限错误,Couldn't open log file "/var/log/mt-starman.log" [Permission denied]. at /usr/local/share/perl/5.36.0/Net/Server.pm line 221.
我还是用root来执行这个命令的,不知道有没有什么解决方法?