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迁移过来了,依旧是没什么技术含量。有空再记录。

May 122009
 

这里的玩法指的不是内容,仅仅是指支撑起Blog的底层设施。

既然决定了独立Blog,一个独立的域名就是首要问题了。域名注册的选择有很多,但要注意有两个地雷尽量不要去碰:

  •   一个是请避免使用.cn域名。对于这个国家后缀的域名,有太多曲折的故事,但不幸得是没有任何一个故事是对网民有利的。再加上前几年CNNIC自作主张地将其调整为1元1年,同时对于域名管理不作为,导致.cn域名在世界范围的名声差到极点,以这个后缀的网站中充斥着很多垃圾站,病毒站,钓鱼站。所以在对Blog域名选择的过程中,请一定不要选用.cn域名。
  •   第二请尽量规避国内的域名注册商。国内域名商对于在其名下注册地域名有诸多限制,比如国内域名商大部分限制转入转出,即使允许也有额外附加条件。同时域名商本身的安全隐患却很大,以前就曾出现过号称国内最大的域名注册商域名被盗的事件,最近窃取域名的情况时有发生。然而,即使没有限制,安全性还凑合过得去,国内域名注册商还有一个非常致命的问题是,只要有钱或有背景,某些人或部门可以直接通知域名注册商在未经客户允许的情况下对其所有的域名做任何处理。例如前段时间的TGbus被停事件。
  • 域名解决,下面的问题就是选用哪一种Blog程序了,这个选择不难,因为可选范围比较小,首选自然是全世界使用最广泛的WordPress了,对于这套程序,相信大部分人的要求都可以满足。其次是一些老Blogger的钟爱MT,最大的特点是全文静态化。其他类型的Blog程序使用者较少,不过也有不少好东西,有兴趣的人可以慢慢挖。

接下来问题是运行这套程序的软硬件平台。Blog算是在线服务,因此至少需要有Web服务和存储服务,对于目前流行的Blog程序来说,存储大多是通过数据库实现。因此所需要的就是一个Web Server和Database Server。而这两项服务以及其所需的网络接入,普通用户自己来实现的成本太高,也非常困难,所以大部分人的选择,都是将其托管到专业的服务商,也就是Hosting Provider。传统的Provider有2种方案:Shared Hosting和Dedicated Hosting,在国内来说,就是虚拟主机和独立服务器。前者是多个客户共享Web Server和DataBase,服务商负责具体服务器的运维,提供给客户一个统一的控制面板来操作,客户通过FTP或web面板等手段来维护其服务。而后者则是客户使用独立的服务器来运行所需要的所有服务。显而易见,前者便宜且简单,后者复杂但功能强大,只要不是特别牛B的Blogger,选择前者就足够了。近年由于虚拟化的流行,出现了一种介于二者之间的产品-VPS(Virtual Private Server)。属于二者之间的折中选择。

下面说一下我的选择:

域名,注册于全世界最大的域名商Godaddy。价钱是8刀左右每年,比国内稍微贵一点,但域名本身花费并不高,这点开销完全可以接受,同时Godaddy经常会有优惠活动,有时能拿到非常低的折扣价。因此没有必要为了省几毛钱来降低域名品质。

空间服务商,早期其实是利用职务之便挂在以前任职公司的服务器上。而现在没有这个条件了。我首先选择的是Dreamhost,它提供了几乎让人用不完的空间以及流量,并且第一次注册时可以享受到近$80的优惠,我记得大约是只需要$21一年,而后第二年全价为$120。算起来每月只需10刀,一顿饭钱而已,对于大多数Blogger,都是比较有性价比的花费。

在去年的某个时候,因为比较无聊想折腾,将自己的Blog迁移到了国外某家VPS。自此间或折腾了1年多,时而自己编译Web Server架起来跑,时而装个Web Pannel来自己当Hosting Provider。VPS的优势在于灵活,几乎能做任何在真正服务器上想做的操作。慢慢下来,我的Blog平台又多了很多用处和玩法,比如VPN(用来跳墙),http proxy(同上,也用来加速国外网站访问),邮件服务器(做备份),各种软件测试平台(跑着玩),TeamSpeak(给朋友玩游戏),编译器(CPU闲着也是闲着),备份调度(做cronjob跑任务),甚至有一段时间跑了一个EQEmu,可惜只有我自己玩,后来VPS迁移给弄没了。

可见VPS是不想花费太多而又爱折腾的人的最好选择。我在一年的期间内换过近2位数的VPS厂商,倒并不是其服务不好,只是为了体验不同厂商的差别,因为VPS的迁移和域名指向转移都是很简单的事,所以搬起家来速度很快。对于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页面,说明配置成功。

Nov 252008
 

先把Load Average弄了出来,如图:

本来是自己简单用Nginx搭起来的,发现几乎没什么负载,内存也总在40M上下浮动,加上MySQL也不过80M,基本资源都在闲置种浪费了。于是就直接换上LXAdmin这个免费Panel来管理,起初Lighttpd也没什么负载,后来发现这个Panel还可以管理Apache,于是又回归了Apache。等那一堆HTTPD进程一起来,发现内存占用一下子上去了。反正闲着是浪费,用着也是浪费,那就用着吧,感觉会好一些儿XD

从这个Load Average图来看一般情况是没什么负载的,就一个破Blog而已。偶尔的突起估计是某些蠕虫扫描或暴力破解FTP,SMTP和SSH导致,因为LXAdmin还是使用Xinetd来管理这些连接,导致碰到穷举的时候负载会上升比较厉害。有空再稍微调整下,毕竟现在很多默认设置太糙了,就像默认一下子起10个20M大的HTTPD一样糙。

内存的图以后慢慢做,因为只取free的值似乎没什么说服力。

Oct 302008
 

最近实在是忙,Blog都没空照看,搬家也很粗暴地扔上去了事,本来计划要上到Nginx,无奈配起来需要点时间,所以先用了Lxadmin这套CP,这套CP控制的是Lighttpd,基本点几下鼠标就完成了架站工作。所以就先这样吧。

似乎URL Rewrite没搞好,不少图片Broke了,有空慢慢修吧。

有觉得速度快了或慢了的麻烦吱个声。

Oct 172008
 

这两天Dreamhost的速度真的是越来越慢了。然后又风闻目前海外VPS Hosting的价格比以前低了不少,于是就想搞一个来玩玩。比较下来发现现在VPS Hosting的平均价格水平确实是低了很多了。大概是因为经济不景气?不过应该也有技术层面的原因吧,低于$20/Mo的VPS大多是使用OpenVZ或Xen这样的免费平台,而且大多是Unmanaged类型(也就是服务商除了硬件和网络外其它一概不做技术支持,只保证VPS能正常工作,具体使用方面都要客户自己动手)。不过这对于Linux熟手来说,反倒是更喜欢得方式。

简单拟定了一下自己的需求:价位是最重要的,网速其次,性能最末,因为基本上也就是用来承载自己这个越来越没人关注的Blog,再加上能作为一个24×7待命的存储空间、Shell Terminal、Linux Lab,所以价格自然是越低越好,网速越快越好,性能基本靠自己手工来榨取。

另外关于性能,以我做过不算太长时间的VPS Hosting Provider经验来说,CPU资源基本不是大问题,关键问题在内存,现在的应用程序吃内存非常厉害,CPU变成瓶颈了顶多速度慢些,内存耗尽却经常来个OOM然后process被Kill掉,尤其是对于VPS应用,本身内存量就非常少,而且很多Provider还不给开Swap(开了也基本没效果,就是一个立即死和挣扎着死的问题而已),因此对应用的承载能力几乎就是由内存指标决定的。另外内存限制最好有一个较高的Burst,因为有些应用会有瞬时申请大块内存,但实际使用不到这么多内存的行为,而且此类程序还不少。恐怕是现在很多应用流行把软件做成类似CLR或JVM那样自己管理内存分配的原因。

基本上考察了知名的数家VPS Provider之后,敲定了SWVPS这家的LVPS-1 Plan,因为价格只有$9.95/Mo,却可以得到10G Disk/250G Traffic/400M Mem(600M Burst),这样的指标对于我来说足够了,另外花了$2.5选了LA的Data Center,在这个DC的网络从国内连过去延迟基本在200ms左右,非常了不起的数据,当然部分也归功于上海电信离骨干网出口距离比较近。

SWVPS并不是最便宜的Provider,最便宜的应该是VPSLink,不过从网上找到的评论来看vpslink基本上没什么好评,问题在于对内存限制过死,最便宜的Link-1 Plan只有64M内存而且不设Burst,基本上这种配置系统能启动起来就基本跑满了,所以除非是真的买来耍的,还是不要考虑这个Provider。

回到SWVPS,这个Provider看起来不是个大公司,Support有限,不过还好订购流程基本都是自动完成,而且支持各种订购方式,于是就下单先买一个月玩玩。使用Paypal方式支付,基本没碰到什么问题,有意思的是这家在注册为会员后会要你提供一个电话号码,它们有一套自动的语音系统会拨给你提供一个Pin码来验证身份,也就是和验证码差不多的东西了。我在点完注册后几秒钟电话就响了,一个机械但是还不算难听的女声说了句大意是我们现在给你提供SWVPS的pin码之类的话,然后就报了4个数字,完了就自动挂线,把这4个数字写进去注册才算完事。想想为了个只有10刀的业务而打越洋电话,这公司成本也太高了点。

订单下完之后就是付款,Paypal支付基本上是立刻就到账了,不过貌似我的招行卡还没有收到Paypal的结算通知,按照以前的经验,是要等几天才会出现的。但至少SWVPS那边认为你已经付款了,订单变成Pending状态,然后就是漫长地等待,大约8个小时候VPS才正式开通,也可能我订购的时间不是美国上班时间导致的吧。

最后晒一下配置:

image

对了忘了一点,这个VPS我选了Debian 4的OS template,是OpenVZ的实现,然后管理面板使用了HyperVM,都是开源并免费的东东,简单但强大。只有这种时候技术优势才能体现出生产力,这也是低价VPS为什么能生存并赚钱的原因,不过基本上国内是别想了,公司运营成本会远远高于技术优势带来的cost down。对于国内公司,能想到来减低成本的东西往往不是技术,而是类似三聚氰胺之类的东西,所以还是老老实实玩国外产品吧XD

先待个续,以后有空慢慢写VPS怎么搭建应用的文章,目前的计划是先装个Nginx+MySQL,把Blog跑起来玩玩。

Technorati Tags: