Dec 282009
 

新搞了个VPS,打算把Blog以及全套行头迁移过来。

以前的那套图省事,用了CentOS5 Kloxo AllinOne BOX。基本上依靠这个CP搞定了全套,主要是人懒不想折腾而已。这次换了个新的VPS提供商,心血来潮想折腾Debian。所以把过程记录下来,避免以后不折腾了却忘记自己当初怎么搭。

总体思路还是采取懒汉办法,有官方源的从官方源安装,没官方源找第三方社区源,再没有的话自己做deb,无论如何,避免从源代码直接编译。

首先把最简单的MySQL装上,用官方源,一句话搞定:

apt-get install mysql-server

MySQL配置文件稍后再搞,对于小Blog来说MySQL的优化意义不大。

其次是nginx,说实话这东西不熟,不过貌似最近挺流行,Debian Lenny也将其收进官方源了,那就简单apt之

apt-get install nginx

简单netstat看一下发现80已经在监听了,访问http://<IP>发现出现欢迎页“Welcome to nginx!”,接下来就是怎么让PHP在nginx上跑起来。

很没技术含量不是,很不幸后面的也没啥技术含量。一破Blog日IP不过300折腾个什么劲啊,不就是一个玩儿么。

PHP稍微麻烦点,因为Nginx没有像Apache那样的SAPI调用PHP的方式,而是使用FastCGI来调。这里就存在一个对PHP的FastCGI进程如何管理的问题。官方源的php5-cgi本身没有进程管理机制。一个比较好的选择是用spawn-fcgi(源自lighttpd的小东东)来起PHP进程,结果查了一下spawn-fcgi到现在还在sid呆着。还有一个选择是使用php-fpm来做FastCGI进程管理,这东西的灵活性比spawn-fcgi还要高不少,但代价是要往PHP源代码里打Patch才能用,也就意味着–要重新编译整个PHP。

简单权衡了一下,我觉得我还是想用php-fpm,但是又想偷懒不编译源代码,于是就求助于第三方二进制源了。随便搜了一下发现还真有正合适的– http://www.dotdeb.org/,这个社区致力于维护Debian下的LAMP类软件的非官方二进制包,恰好它们近期重做了PHP,使用了PHP5.3.1版本,并集成入了Suhosin安全补丁。最让人舒服的是吧php-fpm做成了一个php5-fpm的安装包,并给其加了SysV类的启动脚本,这样PHP的FastCGI方式即可以有自己单独的conf文件,又有单独的init.d控制脚本,可谓完美。

无废话说干就干。

修改/etc/apt/source.list,加入dotdeb的源设置:

deb http://php53.dotdeb.org stable all
deb-src http://php53.dotdeb.org stable all

然后apt之:

apt-get update
apt-get install php5-cgi php5-fpm

这样PHP就算完事了,简单验证一下,运行如下命令,观察phpinfo()输出是否正常:

php-cgi –i

再保险点看一下PHP的FastCGI进程有没有跑起来,ps aux|grep php,应该能看到有进程为”/usr/bin/php5-fpm –fpm-config /etc/php5/fpm/php5-fpm.conf”在跑。

剩下的事就是搞定nginx的配置文件把站点建好,并让其能调用后台的PHP。这个dotdeb社区源做的php5-fpm好心到都提供了一个nginx的example配置文件,放在/etc/php5/fpm/nginx-site-conf.sample,改改拿来用就好了。

我是将其复制到/etc/nginx/sites-enabled/opslife.com.conf,然后简单修改几个参数,改好的配置文件是这样:

#
# nginx-site-conf.sample:
# Php Site configuration for nginx webserver
#
# 1. set server root /path/to/your/website;
# 2. Rename this file. Copy it to /etc/nginx/sites-available, /etc/nginx/sites-enabled
#    or otherwise ensure that this file is included by the nginx.conf
# 3. Restart nginx webserver, and php-fpm service.
#

server {

        root  /home/dawnh/opslife.com;

        server_name     opslife.com www.opslife.com d9.opslife.com;
        listen          80;

        access_log  /var/log/nginx/opslife.com.access.log;

        location / {
                index  index.html index.htm index.php;
        }

        #error_page  404  /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /var/www/nginx-default;
        }

        # pass the *.php scripts to php-fpm listening on tcp port 9000
        #
        location ~ \.php$ {

                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;

                include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SERVER_NAME $http_host;
        fastcgi_ignore_client_abort on;
        }

}

这样站点配置就算是完成了,/etc/init.d/nginx restart重启后,新站点应该就会跑起来了,使用域名opslife.com、www.opslife.com、 d9.opslife.com都应该访问到新建立的站点。

最后再验证一下,扔一个info.php放到/home/dawnh/opslife.com,内容就一句:

<?php phpinfo();?>

由于主域名还没指过来,先用子域名访问测试,直接访问http://d9.opslife.com/info.php,看到返回正确的phpinfo信息。到此最后一步也算顺利完成。

 

剩下就是把wordpress的东西从老的VPS迁移过来了,依旧是没什么技术含量。有空再记录。

Mar 152009
 

安装这一套的目的是为了看看在VPS这种低内存配置的环境下Nginx跑Wordpress的表现,至于为什么选这么一套搭配的原因就不废话了。

为了避免复杂度就没有使用源代码方式安装,用源代码确实是能安装到最新的版本,但简单看了一下各个Changelog,基本上用发行版自带的二进制包也都没什么问题,还是一切从简吧。

目前这个VPS跑得是Fedora8,因为基本上Host provider就只有这么老的货色了。

首先按照惯例更新一下二进制包管理器数据库:

yum update

然后是安装Nginx,PHP,MySQL,能装的先一股脑装上再慢慢配:

yum install nginx

yum install php

yum install mysql mysql-server

还有要处理FastCGI调用这个环节,PHP的二进制包已经包含了FastCGI支持,因此要做的只不过是弄一个FastCGI的进程管理器而已,用脚本写个简单的wrapper就可以了,不过看了一下Nginx的Wiki发现竟然推荐使用Lighttpd附带的spawn-fcgi工具实现,难道两者除了竞争对手还是合作伙伴吗?既然人家这么写咱也就这么用了吧,好在Lighttpd的包也非常小,顺便装了算了

yum install lighttpd-fastcgi

然后是配置工作了,首先在Nginx上把站点跑起来,修改/etc/nginx/conf.d/virtual.conf,让它变成这样:

#
# A virtual host using mix of IP-, name-, and port-based configuration
#

#server {
#    listen       8000;
#    listen       somename:8080;
#    server_name  somename  alias  another.alias;

#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}

server {
    listen       80;
    server_name  vps.dawnh.net dawnh.net;

    location / {
        root   /www/dawnh.net;
        index  index.html index.htm index.php;
    }
    location ~ \.php$ {
        root           /www/dawnh.net;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        /etc/nginx/fastcgi_params;
    }
}

 

运行/etc/init.d/nginx restart重起Nginx。

接下来是让PHP的FastCGI进程跑起来,有了spawn-fcgi就简单多了,一行命令即可:

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u nginx -g nginx -f /usr/bin/php-cgi

没什么问题的话就会看到运行成功的提示。然后就可以把这行丢到自启动脚本里去了。

至此Web Server方面应该是可以跑起来了,写个phpinfo()的测试页丢到/www/dawnh.net/里去,然后通过浏览器访问测试,如果能看到phpinfo页面,说明配置成功。

Oct 182007
 

前一阵子看到了MySQL Proxy这个东西出世,就推断将会从这个玩艺发展出很多架构方面翻新的花样,还没来得及研究,这就有人有研究成果了。

如下图:

Mysql proxy r/w split

通过MySQL Proxy实现一个连接池,并在其中分辩客户端连接为读或写操作,将不同操作导向到不同的后端数据库服务器,来实现性能的提升。

具体实现方法和步骤参考原文:

http://jan.kneschke.de/2007/8/1/mysql-proxy-learns-r-w-splitting

Aug 112007
 

今天看到了这么一个新项目–MySQL Proxy,貌似最近比较热门。简单来说就是一个从MySQL Client到Server的一个代理。可能有人认为MySQL这种连接方式不应该会用到代理,因为一般来说都喜欢把MySQL Server放到后端,用内网圈起来,这样一方面保证安全,另一方面用Local  Ethernet来避免不稳定因素较多的Internet连接,因此基本没有代理这个角色出现的机会。然而,假如这个代理不仅仅是一个代理,而是一个能“懂得”连接双方传送内容,并有可能会对双方内容加以控制甚至干涉的一个角色呢?还有没有人觉得他没用?联想一下Squid之于HTTP Client和HTTP Server所能起到的作用,是不是能想到更多了呢?

是的,MySQL Proxy就是这么一个玩艺儿。代理仅仅是其最不值一提的功能,让人激动的功能都是建立在代理这个前提之上,能实现的更好玩的东西,例如以下:

Query Interception

Query Filtering

Query Rewriting

Macro Expansion

可能对于没接触过这个东西的人,这几个概念还不是十分直观,那么这样,在脑子里描绘这样一幅情景:

1,原本为Cilent-Server直连这种拓扑,现在引入MySQL Proxy,变成Client-Proxy-Server。

2,原本为了实现高容载能力,对于Server采取了多台并存,Master/Slave甚至是Master/Master等方式的复制集群,配置管理都比较复杂。而引入了Proxy以后,中间存在了这样一个Store-Forward的proxy环节。

3,在这个环节,我们可以通过一种脚本语言来控制这个proxy的行为,例如对于Client进来的查询依照某种条件过滤,甚至依照某种条件改写,再导向后端的Server。

4,凭借自己实现的filtering或rewriting,我们可以实现很多目的,例如Failover,例如Load balance。或者更无聊些我们可以对Client进来的带有弱智语法错误的SQL语句进行修正。

有了这个东西,几乎是想到什么就能完成什么,这可是大大得扩展了MySQL应用的多样性,可以用它来实现一些高端商业数据库的复杂的企业化功能。相信喜欢MySQL的架构设计师们一定会喜欢这个玩艺儿。

这里有篇Getting Start,是很好的入门教材,对于这套软件,定要保持关注。