Showing posts with label Server. Show all posts
Showing posts with label Server. Show all posts

Sunday, June 21, 2009

以FastCGI的方式运行PHP

让PHP以FastCGI的方式运行可以最多提高10倍左右的速度, 还是很诱人的, 那天为了测试这个性能提升有多少, 就在Ubuntu里配置了一下.

首先需要安装一个软件包, 如果按上一篇文章[使用Ubuntu源安装LAMP]里讲的过程安装好的话其实就已经不用再安了, 需要的就是php5-cgi这么一个包.

然后需要打开Apache的actions模块, 因为后面的配置需要用到. 以下操作基于源安装的Apache:
$ cd /etc/apache2/mods-enabled/
$ sudo ln -s ../mods-available/actions.* .

最后就是修改配置文件了, 参考了FastCGI的官方文档. 添加如下配置:
# FastCGI for PHP
FastCgiServer /usr/lib/cgi-bin/php
AddHandler php-fastcgi .php
Action php-fastcgi /cgi-bin/php
需要注意, 最后一句中的/cgi-bin/是一个别名, 即下面一行配置指定的:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
经过上面的一系列配置, 当php后缀的文件运行时就会自动以FastCGI的方式运行了. 还可以使用php_sapi_name这个函数测试是否配置成功, 如果运行输出的是cgi-fcgi就证明成功了, 失败通常输出apache2handler.

运行的时候需要注意两点, 一是要给PHP文件加上可执行 (x) 权限, 另一个就是PHP文件所在目录需要在Apache中设置+ExecCGI选项:
Options +ExecCGI

这时就可以使用ab工具来测试了:
$ ab -c 50 -n 1000 http://localhost/fcgi-bin/test.php
经测试, 一个简单的字符串输出的PHP程序才只有处理复杂操作的C++程序性能的2/3, 看来差距还是挺大的.

使用Ubuntu源安装LAMP

以前写过一个编译安装LAMP的文档, 放在我的Google Code的texsky项目里 (关于texsky的详细介绍参见以前的一篇文章[又建了一个项目 -- texsky]), 前段时间觉得有源还是用源好点, 毕竟更新会更加方便.

用源就简单了, 只需要记住软件包名就行了, 以下包名在9.04下测试通过:
$ sudo apt-get install apache2.2-common mysql-server php5 php5-cgi php5-cli php5-mysql
真怀疑为了一点扩展性和性能提升去折腾编译值不值得...

如果还需要FastCGI的支持, 再加上两个软件包:
$ sudo apt-get install libapache2-mod-fastcgi libfcgi-dev
顺便提一下libfcgi-dev这个包, 刚开始以为这个包只是编译的时候需要用到, 因为它的描述是: Header files of FastCGI, 所以误以为只有头文件而已. 结果运行的时候由于没安这个包就出错了, 研究了一下才发现这个包里还包含了一些so文件 (好阴险), 自然是运行时需要用到的了, 安上以后运行一切正常.

Friday, June 19, 2009

Ubuntu下安装Bugzilla

Buggie
今天整了一下Bugzilla, 过程那叫一个痛苦, 缘起还得从MySQL讲起.

由于Bugzilla依赖MySQL, 偏偏9.04里面依赖的版本是5.0, 而我以前装的是MySQL 5.1... 好吧, 肯定是免不了要把以前的MySQL卸载了的, 那就装个5.0吧 (埋怨自己干嘛非得追新...). 这时一件很悲剧的事情发生了, dpkg错误, 这是我最不愿意看到的东西, 依稀仿佛记得以前整AUCTeX的时候也遇到过类似的情况, 当时因为错误严重, 差点就重装了. 好了, 这次算我运气好, 咱又遇上了:
Aborting downgrade from (at least) 5.1 to 5.0.
dpkg: error processing /var/cache/apt/archives/mysql-server-5.0_5.1.30really5.0.75-0ubuntu10.2_i386.deb (--unpack):
subprocess pre-installation script returned error exit status 1
Selecting previously deselected package mysql-server.
Unpacking mysql-server (from .../mysql-server_5.1.30really5.0.75-0ubuntu10.2_all.deb) ...
Processing triggers for man-db ...
Errors were encountered while processing:
/var/cache/apt/archives/mysql-server-5.0_5.1.30really5.0.75-0ubuntu10.2_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
咱可是那种遇到困难就退缩的人? 显然不是! 俗话说"困难像弹簧, 你弱他就强", 这等小事算个啥啊, 在无敌的Google大法面前颤抖吧, 哇哈哈~ 下面隆重介绍Google大神的答案:
$ sudo rm /var/lib/mysql/debian-5.1.flag
主要原因是这个文件影响了MySQL的降级. 然后重新安装MySQL就行了, 我用的是下面的命令:
$ sudo apt-get -f install

经历了MySQL的煎熬, 现在开始安装Bugzilla, 中途会有对话框弹出来叫你设置, 需要输入MySQL中root用户的密码 (这就得要求安装的时候MySQL是启动的, 因为它会去建数据库和表), MySQL中新建的用户bugzilla3的密码, Bugzilla管理员的邮箱 (同时也是账户), 管理员的密码. 顺利完成之后, 麻烦事才刚刚开始.

先来讲讲怎么用Bugzilla. 首先你需要一个Web服务器, 我用的Apache. 如果你没有修改Apache的默认配置的话, 通过网址http://localhost/cgi-bin/bugzilla3/index.cgi就可以访问了. 但现在显示出来的只有文字, 图片、CSS什么的都不能访问, 这时就需要在你在Apache下设置的网站根目录下放置一个链接, 指向/usr/share/bugzilla3/web/:
$ ln -s /usr/share/bugzilla3/web/ bugzilla3
这个链接的名字是固定的.

修正: Bugzilla安装好之后会在/etc/apache2/conf.d下放置一个叫做bugzilla3的链接指向/usr/share/doc/bugzilla3/examples/basic.conf, 这是一个包含VirtualHost的配置文件, 经测试, 会影响其它VirtualHost的访问. 于是我将那个文件的内容合并到了最初始的配置文件里, 并移除了链接, 同时删除其中一行:
Alias /cgi-bin/bugzilla3 /usr/lib/cgi-bin/bugzilla3

使用刚才安装时输入的邮箱就可以登录管理员账户了, 当然, 会有一系列的东西等着你去设置, 毕竟默认配置都是不完美的.

Bugzilla使用邮箱作为账户, 如果有人来注册新账户, 在输入自己的邮箱之后, 服务器就会发送一封邮件给刚才的邮箱进行确认. 这时才发现我电脑上的邮件服务器还没配好, 就顺便折腾了一下. 我用的是Postfix, 不知道为什么, Ubuntu源里安装好的Postfix在用sendmail发邮件的时候会找不到main.cf这个配置文件, 到/etc/postfix下一看才发现根本就没有... 我也懒得自己去配了, 就用的别人的一个例子, 需要安装postfix-doc这个包, 安好之后会有/usr/share/doc/postfix-doc/examples/main.cf.default.gz这么一个文件, 解压, 把文件拷过去重命名就行了. 注意: 不要使用/usr/share/postfix/main.cf.dist这个文件, 里面的配置是不完全的, 我最开始就是用的这个, 结果运行的时候出现了一堆错误. 这时再用sendmail试试, 又发现了一个新错误:
postdrop: warning: unable to look up public/pickup: No such file or directory
在Ubuntu官方论坛的一篇帖子里找到了解决方法:
$ sudo mkfifo /var/spool/postfix/public/pickup
$ sudo /etc/init.d/postfix restart
这下就可以顺利通过sendmail发送邮件了, 不过我电脑上发出去的邮件地址还有点难看, 等有时间再弄一弄, 呵呵~

Bugzilla刚用, 配置等以后再研究了, 到时候肯定还会写一篇讲配置的.

P.S. 这是我目前为止用的标签最多的一篇文章.

Sunday, June 8, 2008

使用WAMP搭建本地服务器

最近在编动态网页, 需要首先搭建一个本地服务器作为测试场所, 以下是一些基本的设置.

1. Apache
安装很简单, 一路next, 到需要填网址那一步时, 全部写成localhost. 安装完以后需要修改配置文件.
$ cat httpd.conf
DocumentRoot 修改为网站的主目录

同时添加
<Directory "网站主目录">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

2. PHP
安装时记得把MySQL的模块支持选上. 如果你不是将Apache安装在默认的安装路径, 那么在安装结束时会有一个错误提示, 提示你需要手动去修改httpd.conf文件, 但经过我的测试, 不需要修改.

3. MySQL
安装同样很简单, 完毕后运行设置向导, 几乎可以按默认的设置配置.

P.S. 我在使用时曾经遇到过一个错误, 显示为
Can't connect to MySQL server on 'localhost' (10061)
在网上搜寻很久都没有找到解决办法, 最后干脆把MySQL重装了一遍, 结果这个错误神奇地消失了, 于是我觉得最好先安PHP, 再安MySQL.