<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky8.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/saberma" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/saberma" type="application/rss+xml"></fs:self_link><lastBuildDate>Tue, 29 Nov 2011 08:00:00 GMT</lastBuildDate><title>saberma的博客</title><description>分享技术实践，创业历程</description><link>http://saberma.me/</link><link xmlns="http://www.w3.org/2005/Atom" href="http://saberma.me/atom.xml" rel="self"></link><link xmlns="http://www.w3.org/2005/Atom" href="http://saberma.me/"></link><id xmlns="http://www.w3.org/2005/Atom">http://saberma.me/</id><author xmlns="http://www.w3.org/2005/Atom"><name>saberma</name><email>mahb45@gmail.com</email></author><pubDate>Tue, 29 Nov 2011 04:23:04 GMT</pubDate><managingEditor>saberma</managingEditor><item><title>免费的持续集成测试服务</title><link>http://item.feedsky.com/~feedsky/saberma/~8395768/582199607/6499449/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">http://saberma.me/other/2011/11/29/travis-ci-is-a-free-continuous-integration-test-server</id><content xmlns="http://www.w3.org/2005/Atom" type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/saberma/shopqi&quot;&gt;ShopQi&lt;/a&gt; 大部分的功能都是被自动化测试覆盖的，每次代码提交之前如果都要在本地把所有测试跑一遍所花费的时间也不少。所以我们需要有一个服务器，代码提交后自动触发运行所有测试用例。&lt;/p&gt;
&lt;p&gt;排除自建服务器这条路子，就只能在网上寻找了，优先考虑免费的&lt;/p&gt;
&lt;p&gt;当时(几个月前)找的时候，travis-ci还没有出来，其他收费的持续集成也不太满意。&lt;br /&gt;
在一次偶然的机会，看到github上某个项目的README中显示了一个building status的图标，才发现了 &lt;code&gt;travis-ci&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;从6月初使用到现在， &lt;code&gt;travis-ci&lt;/code&gt; 的功能已经非常完善稳定，因此推荐给大家试用一下&lt;/p&gt;
&lt;h2&gt;travis-ci&lt;/h2&gt;
&lt;p&gt;A distributed build system for the open source community.&lt;br /&gt;
专为开源社区打造的分布式编译系统，也就是持续集成测试了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/travis/travis.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;它有以下特点:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;免费，虽然是免费，但比收费的还要简单好用!&lt;/li&gt;
	&lt;li&gt;支持多语言: 支持Clojure Erlang Javascript(Node.js) &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; Ruby，我只试用了Ruby&lt;/li&gt;
	&lt;li&gt;支持多环境: 例如同时测试项目在 ruby1.8.6, 1.9.2, 1.9.3, jruby等的运行情况，支持多数据库mysql, postgres等&lt;/li&gt;
	&lt;li&gt;支持浏览器headless测试: 结合Xvfb可以跑集成测试了&lt;/li&gt;
	&lt;li&gt;非侵入式，只需要一个.travis.yml，就可以了，项目不用做过多的改动&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;配置.travis.yml&lt;/h3&gt;
&lt;p&gt;项目的根目录要加入 &lt;code&gt;.travis.yml&lt;/code&gt; 文件&lt;br /&gt;
在里面指定rvm使用的ruby版本，指定bundler的运行参数等等&lt;/p&gt;
&lt;p&gt;可以参考 &lt;a href=&quot;https://github.com/saberma/shopqi/blob/master/.travis.yml&quot;&gt;.travis.yml&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;使用&lt;/h3&gt;
&lt;p&gt;要有一个 &lt;a href=&quot;https://github.com/saberma&quot;&gt;github&lt;/a&gt; 帐号，在 &lt;a href=&quot;http://travis-ci.org&quot;&gt;travis-ci网站&lt;/a&gt; 使用该帐号登录&lt;br /&gt;
在 &lt;a href=&quot;http://travis-ci.org/profile&quot;&gt;profile&lt;/a&gt; 选中您要使用的 项目 就可以了&lt;/p&gt;
&lt;p&gt;以后向github提交代码时，travis-ci就会自动跑测试了，测试結果会发送到邮箱&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/travis/building.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://about.travis-ci.org/docs/user/getting-started/&quot;&gt;Getting Started&lt;/a&gt;&lt;/p&gt;</content><content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/saberma/shopqi&quot;&gt;ShopQi&lt;/a&gt; 大部分的功能都是被自动化测试覆盖的，每次代码提交之前如果都要在本地把所有测试跑一遍所花费的时间也不少。所以我们需要有一个服务器，代码提交后自动触发运行所有测试用例。&lt;/p&gt;
&lt;p&gt;排除自建服务器这条路子，就只能在网上寻找了，优先考虑免费的&lt;/p&gt;
&lt;p&gt;当时(几个月前)找的时候，travis-ci还没有出来，其他收费的持续集成也不太满意。&lt;br /&gt;
在一次偶然的机会，看到github上某个项目的README中显示了一个building status的图标，才发现了 &lt;code&gt;travis-ci&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;从6月初使用到现在， &lt;code&gt;travis-ci&lt;/code&gt; 的功能已经非常完善稳定，因此推荐给大家试用一下&lt;/p&gt;
&lt;h2&gt;travis-ci&lt;/h2&gt;
&lt;p&gt;A distributed build system for the open source community.&lt;br /&gt;
专为开源社区打造的分布式编译系统，也就是持续集成测试了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/travis/travis.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;它有以下特点:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;免费，虽然是免费，但比收费的还要简单好用!&lt;/li&gt;
	&lt;li&gt;支持多语言: 支持Clojure Erlang Javascript(Node.js) &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; Ruby，我只试用了Ruby&lt;/li&gt;
	&lt;li&gt;支持多环境: 例如同时测试项目在 ruby1.8.6, 1.9.2, 1.9.3, jruby等的运行情况，支持多数据库mysql, postgres等&lt;/li&gt;
	&lt;li&gt;支持浏览器headless测试: 结合Xvfb可以跑集成测试了&lt;/li&gt;
	&lt;li&gt;非侵入式，只需要一个.travis.yml，就可以了，项目不用做过多的改动&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;配置.travis.yml&lt;/h3&gt;
&lt;p&gt;项目的根目录要加入 &lt;code&gt;.travis.yml&lt;/code&gt; 文件&lt;br /&gt;
在里面指定rvm使用的ruby版本，指定bundler的运行参数等等&lt;/p&gt;
&lt;p&gt;可以参考 &lt;a href=&quot;https://github.com/saberma/shopqi/blob/master/.travis.yml&quot;&gt;.travis.yml&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;使用&lt;/h3&gt;
&lt;p&gt;要有一个 &lt;a href=&quot;https://github.com/saberma&quot;&gt;github&lt;/a&gt; 帐号，在 &lt;a href=&quot;http://travis-ci.org&quot;&gt;travis-ci网站&lt;/a&gt; 使用该帐号登录&lt;br /&gt;
在 &lt;a href=&quot;http://travis-ci.org/profile&quot;&gt;profile&lt;/a&gt; 选中您要使用的 项目 就可以了&lt;/p&gt;
&lt;p&gt;以后向github提交代码时，travis-ci就会自动跑测试了，测试結果会发送到邮箱&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/travis/building.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://about.travis-ci.org/docs/user/getting-started/&quot;&gt;Getting Started&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/582199607/saberma/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/saberma/~8395768/582199607/6499449/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><pubDate>Tue, 29 Nov 2011 16:00:00 +0800</pubDate><guid isPermaLink="false">http://saberma.me/other/2011/11/29/travis-ci-is-a-free-continuous-integration-test-server</guid><fs:srclink>http://saberma.me/other/2011/11/29/travis-ci-is-a-free-continuous-integration-test-server.html</fs:srclink><fs:srcfeed>http://saberma.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/saberma/~8395768/582199607/6499449</fs:itemid></item><item><title>服务器DIY</title><link>http://item.feedsky.com/~feedsky/saberma/~8395768/582199608/6499449/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">http://saberma.me/other/2011/10/21/how-to-diy-a-server</id><content xmlns="http://www.w3.org/2005/Atom" type="html">&lt;h2&gt;&lt;span class=&quot;caps&quot;&gt;CPU&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;目前AMD服务器CPU主要有Opteron(皓龙)4000和6000系列，AMD的CPU都带内存控制器，直接与内存交互，而不再通过北桥芯片&lt;br /&gt;
价格差异点在于内核数量、主频及功耗，功耗节能版对服务器领域来说意义不大，而且价格高昂，不考虑(型号后缀为HE低功耗或EE超低功耗)&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.amd.com/cn/products/server/processors/4000-series-platform/Pages/4000-series-platform.aspx&quot;&gt;4000系列&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;核心数量有4核、6核，最高支持DDR3-1333，核心独占一二级缓存，共享三级缓存&lt;br /&gt;
候选表格如下：&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号&lt;/td&gt;
		&lt;td&gt;内核&lt;/td&gt;
		&lt;td&gt;主频&lt;/td&gt;
		&lt;td&gt;插槽类型  &lt;/td&gt;
		&lt;td&gt;功耗&lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;4184&lt;/td&gt;
		&lt;td&gt;6   &lt;/td&gt;
		&lt;td&gt;2.8 &lt;/td&gt;
		&lt;td&gt;Socket C32&lt;/td&gt;
		&lt;td&gt;75W &lt;/td&gt;
		&lt;td&gt;3500&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;4180&lt;/td&gt;
		&lt;td&gt;6   &lt;/td&gt;
		&lt;td&gt;2.6 &lt;/td&gt;
		&lt;td&gt;Socket C32&lt;/td&gt;
		&lt;td&gt;75W &lt;/td&gt;
		&lt;td&gt;2500&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;4130&lt;/td&gt;
		&lt;td&gt;4   &lt;/td&gt;
		&lt;td&gt;2.6 &lt;/td&gt;
		&lt;td&gt;Socket C32&lt;/td&gt;
		&lt;td&gt;75W &lt;/td&gt;
		&lt;td&gt;1650&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;4122&lt;/td&gt;
		&lt;td&gt;4   &lt;/td&gt;
		&lt;td&gt;2.2 &lt;/td&gt;
		&lt;td&gt;Socket C32&lt;/td&gt;
		&lt;td&gt;75W &lt;/td&gt;
		&lt;td&gt;1050&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.amd.com/cn/products/server/processors/6000-series-platform/Pages/6000-series-platform.aspx&quot;&gt;6000系列&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;核心数量有8核、12核，候选表格如下：&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号&lt;/td&gt;
		&lt;td&gt;内核&lt;/td&gt;
		&lt;td&gt;主频&lt;/td&gt;
		&lt;td&gt;插槽类型  &lt;/td&gt;
		&lt;td&gt;功耗&lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6174&lt;/td&gt;
		&lt;td&gt;12  &lt;/td&gt;
		&lt;td&gt;2.2 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;8500&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6172&lt;/td&gt;
		&lt;td&gt;12  &lt;/td&gt;
		&lt;td&gt;2.1 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;7500&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6168&lt;/td&gt;
		&lt;td&gt;12  &lt;/td&gt;
		&lt;td&gt;1.9 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;6000&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6136&lt;/td&gt;
		&lt;td&gt;8   &lt;/td&gt;
		&lt;td&gt;2.4 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;5600&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6134&lt;/td&gt;
		&lt;td&gt;8   &lt;/td&gt;
		&lt;td&gt;2.3 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;3890&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6128&lt;/td&gt;
		&lt;td&gt;8   &lt;/td&gt;
		&lt;td&gt;2.0 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;3111&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;初步选用 6134，性价比高&lt;/p&gt;
&lt;h3&gt;芯片组&lt;/h3&gt;
&lt;p&gt;使用AMD自家的服务器芯片组:北桥SR5690/SR5670/SR5650、南桥SP5100，详见 &lt;a href=&quot;http://www.amd.com/cn/products/server/processors/Pages/amd-platform-specifications.aspx&quot;&gt;AMD平台规范&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;用于高能效云的SR5650芯片组&lt;/li&gt;
	&lt;li&gt;用于可扩展SMB 的SR5670芯片组&lt;/li&gt;
	&lt;li&gt;用于高I/O系统的SR5690&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;主板&lt;/h2&gt;
&lt;p&gt;主要生产商:超微(Supermicro)、泰安(&lt;span class=&quot;caps&quot;&gt;TYAN&lt;/span&gt;)、Intel、华硕&lt;br /&gt;
具体要求:支持SAS硬盘、DDR3(1333MHZ最大内存至少32&lt;br /&gt;
有些主板带iKVM功能(Keyboard,Video,Mouse)，用来实现远程管理功能(&lt;span class=&quot;caps&quot;&gt;KVM&lt;/span&gt; Over IP)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.supermicro.com/c32/AMD_C32.cfm?pg=MOBO&quot;&gt;超微C32系列主板&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.supermicro.com/g34/AMD_G34.cfm?pg=MOBO&quot;&gt;超微G34系列主板&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号   &lt;/td&gt;
		&lt;td&gt;最大内存容量                               &lt;/td&gt;
		&lt;td&gt;插槽&lt;/td&gt;
		&lt;td&gt;数量&lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;结构 &lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;H8DCL-6&lt;/td&gt;
		&lt;td&gt;128GB Registered &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt; or 32GB Unbuffered &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;C32 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;  &lt;/td&gt;
		&lt;td&gt;$408&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;H8DG6  &lt;/td&gt;
		&lt;td&gt;256GB Registered &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt; or 64GB Unbuffered &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;G34 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;$573&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href=&quot;http://www.supermicro.com/wheretobuy/asia.cfm?rgn=133&quot;&gt;代理商&lt;/a&gt;&lt;br /&gt;
海红微电子,深圳市福田区天安数码城创新科技广场A座1803室,0755-83434282&lt;br /&gt;
星宏宝博,深圳市福田区福华一路98号卓越606B-608B,0755-83005009,13823305008,覃碧玉&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.tyan.com.cn/product_boards2.aspx&quot;&gt;泰安主板&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://www.tyan.com.cn/product_boards2_list_socket.aspx?cpuid=4&amp;amp;socketid=24&amp;amp;chipsetid=all&amp;amp;socketnum=all&amp;amp;formfactor=all&quot;&gt;泰安C32系列主板&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.tyan.com.cn/product_boards2_list_socket.aspx?cpuid=4&amp;amp;socketid=25&amp;amp;chipsetid=all&amp;amp;socketnum=all&amp;amp;formfactor=all&quot;&gt;泰安G34系列主板&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在不确定选择哪一个主板的情况下，可以先看主板的编号；要求主板支持SAS，则编号一定要带W字母，比如:WAGM4NRF型号是支持SAS的，而AGM4NRF不支持，具体编号意义可查看 &lt;a href=&quot;http://www.tyan.com.cn/tech/product_matrix.aspx&quot;&gt;产品矩阵&lt;/a&gt; 的底端说明&lt;br /&gt;
所以型号一定要包含WGNR(G=Onboard Gf / N=&lt;span class=&quot;caps&quot;&gt;LAN&lt;/span&gt; / R= &lt;span class=&quot;caps&quot;&gt;RAID&lt;/span&gt; / W= &lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;候选表格，泰安主板AMD系列在国内找不到网上报价，先从 &lt;a href=&quot;newegg.com&quot;&gt;newegg.com&lt;/a&gt; &lt;a href=&quot;http://www.newegg.ca/Product/Productcompare.aspx?Submit=ENE&amp;amp;N=100007628%2050001424%20600008002&amp;amp;IsNodeId=1&amp;amp;bop=And&amp;amp;CompareItemList=302|13-151-227^13-151-227-TS%2C13-151-225^13-151-225-TS%2C13-151-215^13-151-215-TS%2C13-151-214^13-151-214-TS%2C13-151-220^13-151-220-TS&quot;&gt;比较价格&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号          &lt;/td&gt;
		&lt;td&gt;最大内存容量         &lt;/td&gt;
		&lt;td&gt;插槽&lt;/td&gt;
		&lt;td&gt;数量&lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;   &lt;/td&gt;
		&lt;td&gt;主板结构    &lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8010WGM2NR   &lt;/td&gt;
		&lt;td&gt;64GB &lt;span class=&quot;caps&quot;&gt;RDIMM&lt;/span&gt;/16GB &lt;span class=&quot;caps&quot;&gt;UDIMM&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;C32 &lt;/td&gt;
		&lt;td&gt;1   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;$365&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8225WAGM4NRF &lt;/td&gt;
		&lt;td&gt;64GB &lt;span class=&quot;caps&quot;&gt;RDIMM&lt;/span&gt;/32GB &lt;span class=&quot;caps&quot;&gt;UDIMM&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;C32 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;   &lt;/td&gt;
		&lt;td&gt;Extended &lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;$615&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8226WGM3NR   &lt;/td&gt;
		&lt;td&gt;96GB                 &lt;/td&gt;
		&lt;td&gt;C32 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SSI&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;EEB&lt;/span&gt;     &lt;/td&gt;
		&lt;td&gt;$560&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8230WGM4NR-LE&lt;/td&gt;
		&lt;td&gt;128GB                &lt;/td&gt;
		&lt;td&gt;G34 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;Extended &lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;$550&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8230WGM4NR   &lt;/td&gt;
		&lt;td&gt;128GB                &lt;/td&gt;
		&lt;td&gt;G34 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;Extended &lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;$580&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8236WGM3NR   &lt;/td&gt;
		&lt;td&gt;128GB                &lt;/td&gt;
		&lt;td&gt;G34 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SSI&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;EEB&lt;/span&gt;     &lt;/td&gt;
		&lt;td&gt;$570&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href=&quot;http://www.tyan.com.cn/wtb_asia.aspx#CHINA&quot;&gt;华南区代理商&lt;/a&gt;&lt;br /&gt;
深圳市亿时空科技有限公司,深圳市福田区华强北路宝华大厦A629室,0755-88863168,孙先生&lt;/p&gt;
&lt;h2&gt;内存&lt;/h2&gt;
&lt;p&gt;以下应用技术也是影响内存价格的重要因素&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;Unbuffered Ecc &lt;span class=&quot;caps&quot;&gt;DIMM&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;低端服务器工作站内存&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Registered &lt;span class=&quot;caps&quot;&gt;DIMM&lt;/span&gt;    &lt;/td&gt;
		&lt;td&gt;高端服务器工作站内存&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Fully Buffered &lt;span class=&quot;caps&quot;&gt;DIMM&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;全缓冲服务器内存    &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;在产品报价上看到产品名称带FB的，一般都为全缓冲服务器内存，暂不需要考虑此类产品&lt;/p&gt;
&lt;p&gt;要带ECC纠错技术，通过IC颗粒的分布可以看出是否带有ECC功能，ECC比普通NO ECC内存多1颗IC芯片&lt;br /&gt;
买DDR3的，电压低至1.5v，数据传输率(800/1066/1333/1600)&lt;/p&gt;
&lt;p&gt;为了让双通道技术发挥作用，假如需要的内存总量为8G的，则买两条4G的，分别插入 &lt;strong&gt;同颜色&lt;/strong&gt; 的DIMM&lt;/p&gt;
&lt;p&gt;候选表格如下:&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号                     &lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Ramax &lt;span class=&quot;caps&quot;&gt;REG&lt;/span&gt;/DDR3/1333/4G   &lt;/td&gt;
		&lt;td&gt;959 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;三星8GB DDR3 1333 &lt;span class=&quot;caps&quot;&gt;REG&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;799 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;三星4GB DDR3 1333 &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt;    &lt;/td&gt;
		&lt;td&gt;350 &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;硬盘&lt;/h2&gt;
&lt;p&gt;最大的选择点在于是选择传统的机械硬盘还是SSD固态硬盘，后者在IOPS上有极大地物理优势，但价格较高&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;机械硬盘HDD&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里只考虑希捷的硬盘，选用SAS2.0（串行连接SCSI）6Gb/s接口；2.5英寸的Savvio 15K系列没有货源；只能选择3.5英寸&lt;br /&gt;
根据 &lt;a href=&quot;http://www.seagate.com/www/zh-cn/products/enterprise-hard-drives/cheetah-15k&quot;&gt;希捷官网面向企业级Cheetah® 15K&lt;/a&gt; 的描述，支持SAS2.0，15K的候选表格如下:&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号                                     &lt;/td&gt;
		&lt;td&gt;编号       &lt;/td&gt;
		&lt;td&gt;缓存&lt;/td&gt;
		&lt;td&gt;盘片&lt;/td&gt;
		&lt;td&gt;报价&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;希捷 Cheetah(捷豹) 15K.7 &lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt; 6Gb/秒 300GB&lt;/td&gt;
		&lt;td&gt;ST3300657SS&lt;/td&gt;
		&lt;td&gt;16MB&lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;1520&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;希捷 Cheetah(捷豹) 15K.7 &lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt; 6Gb/秒 450GB&lt;/td&gt;
		&lt;td&gt;ST3450857SS&lt;/td&gt;
		&lt;td&gt;16MB&lt;/td&gt;
		&lt;td&gt;3   &lt;/td&gt;
		&lt;td&gt;1840&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;希捷 Cheetah(捷豹) 15K.7 &lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt; 6Gb/秒 600GB&lt;/td&gt;
		&lt;td&gt;ST3600057SS&lt;/td&gt;
		&lt;td&gt;16MB&lt;/td&gt;
		&lt;td&gt;4   &lt;/td&gt;
		&lt;td&gt;2410&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;固态硬盘SSD&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果服务器应用并不需要海量存储，可以选择SSD固态硬盘。SSD产品非常多，主要选择适用企业应用的产品&lt;/p&gt;
&lt;p&gt;固态硬盘的价格差异点在于主控、存储方式、容量&lt;/p&gt;
&lt;p&gt;主控：连接闪存和外部SATA接口，决定数据要存储在哪个闪存block，常见品牌有:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;intel 芯片(PC29AS21BA0)采用34nm颗粒工艺的Gen2版本，X25-E Extreme SATA系列专用于服务器，也为威刚、金士顿等品牌代工&lt;/li&gt;
	&lt;li&gt;SandForce 芯片(SF-1565TA2-&lt;span class=&quot;caps&quot;&gt;SBH&lt;/span&gt;)的SF1500面向服务器，代表性产品:海盗船Force系列&lt;/li&gt;
	&lt;li&gt;Jmicron &lt;strong&gt;别买来做服务器&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;存储方式分为:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;acronym title=&quot;单层式储存&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SLC&lt;/span&gt;&lt;/acronym&gt; 一个block只记录0和1数值，速度快(特别是随机写)，稳定，寿命长(10万次擦写)，成本高&lt;/li&gt;
	&lt;li&gt;&lt;acronym title=&quot;多层式储存&quot;&gt;&lt;span class=&quot;caps&quot;&gt;MLC&lt;/span&gt;&lt;/acronym&gt; 一个block记录00,01,11,10四组数值，存储空间翻倍，寿命短(1万次擦写)，成本低&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;候选表格如下(尺寸都为2.5英寸,NAND闪存类型都为SLC):&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号                 &lt;/td&gt;
		&lt;td&gt;编号           &lt;/td&gt;
		&lt;td&gt;读取速度&lt;/td&gt;
		&lt;td&gt;写入速度&lt;/td&gt;
		&lt;td&gt;接口类型   &lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Intel X25-E 50nm(32G)&lt;/td&gt;
		&lt;td&gt;SSDSA2SH032G1GN&lt;/td&gt;
		&lt;td&gt;250MB/S &lt;/td&gt;
		&lt;td&gt;170MB/S &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SATA&lt;/span&gt; II    &lt;/td&gt;
		&lt;td&gt;2385&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Intel X25-E 50nm(64G)&lt;/td&gt;
		&lt;td&gt;SSDSA2SH064G101&lt;/td&gt;
		&lt;td&gt;250MB/S &lt;/td&gt;
		&lt;td&gt;170MB/S &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SATA&lt;/span&gt; II    &lt;/td&gt;
		&lt;td&gt;4550&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;希捷Pulsar XT.2(100G)&lt;/td&gt;
		&lt;td&gt;ST100FX0002    &lt;/td&gt;
		&lt;td&gt;360MB/S &lt;/td&gt;
		&lt;td&gt;300MB/S &lt;/td&gt;
		&lt;td&gt;&lt;acronym title=&quot;6-Gb/s&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;&lt;/acronym&gt;&lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;4K随机读写性能，顺序读写速度对于大数据量来说非常重要，但作为系统盘(即非单纯的数据存储)，最关键的还是4k随机读写这一参数&lt;/p&gt;
&lt;p&gt;供应商:&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;名称         &lt;/td&gt;
		&lt;td&gt;地址                   &lt;/td&gt;
		&lt;td&gt;联系人&lt;/td&gt;
		&lt;td&gt;电话         &lt;/td&gt;
		&lt;td&gt;手机       &lt;/td&gt;
		&lt;td&gt;网店                               &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;风驰计算机   &lt;/td&gt;
		&lt;td&gt;华强北国利大厦1711-1716&lt;/td&gt;
		&lt;td&gt;杨颖  &lt;/td&gt;
		&lt;td&gt;0755 83743198&lt;/td&gt;
		&lt;td&gt;13823752475&lt;/td&gt;
		&lt;td&gt;&lt;a href=&quot;http://m.pconline.com.cn/shop495935&quot;&gt;网址&lt;/a&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;服务器专卖   &lt;/td&gt;
		&lt;td&gt;现代之窗b座8楼8i       &lt;/td&gt;
		&lt;td&gt;谢先生&lt;/td&gt;
		&lt;td&gt;             &lt;/td&gt;
		&lt;td&gt;13715330262&lt;/td&gt;
		&lt;td&gt;&lt;a href=&quot;http://shop34747127.taobao.com&quot;&gt;网址&lt;/a&gt;     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;LBC服务器专卖&lt;/td&gt;
		&lt;td&gt;赛格电子市场5楼        &lt;/td&gt;
		&lt;td&gt;黄先生&lt;/td&gt;
		&lt;td&gt;             &lt;/td&gt;
		&lt;td&gt;13510979215&lt;/td&gt;
		&lt;td&gt;&lt;a href=&quot;http://diyservers.taobao.com&quot;&gt;网址&lt;/a&gt;       &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;机箱&lt;/h2&gt;
&lt;h3&gt;大小&lt;/h3&gt;
&lt;p&gt;宽(48.26cm＝19英寸)，高(1u=4.445cm的倍数)&lt;br /&gt;
长度主要分为两组&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;标准组 长度约为625－725毫米，支持双CPU服务器主板(含12×13英寸超大尺寸)&lt;/li&gt;
	&lt;li&gt;短款组 长度约为360－525毫米，仅支持单CPU服务器主板&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;主板结构&lt;/h3&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt; 12&amp;#8243;&amp;#215;9.5&amp;#8243; (30.5cmx24.2cm)&lt;/li&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;MEB&lt;/span&gt; 16.2&amp;#8243;&amp;#215;13&amp;#8243; (411&amp;#215;330mm)&lt;/li&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;SSI&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;EEB&lt;/span&gt; 12&amp;#8243;&amp;#215;13&amp;#8243; (305&amp;#215;330mm)&lt;/li&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;EATX&lt;/span&gt; 12&amp;#8243;&amp;#215;13&amp;#8243; (305&amp;#215;330mm) 大小于EEB相同，但是两者不可替换使用(因为螺丝口都不一样)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;散热&lt;/h3&gt;
&lt;p&gt;重中之重，安装6个以上的风扇&lt;br /&gt;
主要散热点为CPU、主板芯片组、内存、硬盘&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.fywx.cc/Product_List.php?root_id=5&amp;amp;cat_id=28&quot;&gt;超微机箱&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号                        &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;CPU&lt;/span&gt;  &lt;/td&gt;
		&lt;td&gt;适用主板           &lt;/td&gt;
		&lt;td&gt;硬盘位      &lt;/td&gt;
		&lt;td&gt;IO slots    &lt;/td&gt;
		&lt;td&gt;电源功率&lt;/td&gt;
		&lt;td&gt;报价&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC815TQ-560UV/SC815TQ-560UB &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;13.68&amp;#8243;&amp;#215;13&amp;#8243;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;    &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;2x FF, 1x LP&lt;/td&gt;
		&lt;td&gt;560W    &lt;/td&gt;
		&lt;td&gt;3200&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC815TQ-560V/SC815TQ-560B   &lt;/td&gt;
		&lt;td&gt;DP   &lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;13&amp;#8243;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;       &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FF, 1x LP&lt;/td&gt;
		&lt;td&gt;560W    &lt;/td&gt;
		&lt;td&gt;3200&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC815TQ-560CV/SC815TQ-560CB &lt;/td&gt;
		&lt;td&gt;DP   &lt;/td&gt;
		&lt;td&gt;(12&amp;quot;,13.68&amp;quot;)x10&amp;quot;ATX&lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FF       &lt;/td&gt;
		&lt;td&gt;560W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813TQ-520/SC813TQ-520B    &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;13&amp;#8243;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;       &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FF, 1x LP&lt;/td&gt;
		&lt;td&gt;520W    &lt;/td&gt;
		&lt;td&gt;3178&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813TQ-520C/SC813TQ-520CB  &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;13&amp;#8243;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;       &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FF       &lt;/td&gt;
		&lt;td&gt;520W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813TQ-500/SC813TQ-500B    &lt;/td&gt;
		&lt;td&gt;DP   &lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;13&amp;#8243;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;       &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH, 1x LP&lt;/td&gt;
		&lt;td&gt;500W    &lt;/td&gt;
		&lt;td&gt;3743&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813MFTQ-520CB             &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;520W    &lt;/td&gt;
		&lt;td&gt;2635&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813MTQ-520C/SC813MTQ-520CB&lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;520W    &lt;/td&gt;
		&lt;td&gt;2688&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813MT-420C/SC813MS-420CB  &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;420W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813MT-410C/SC813MT-410CB  &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;410W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813MT-300C/SC813MT-300CB  &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;300W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC811TQ-520/SC811TQ-520B    &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;2&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;520W    &lt;/td&gt;
		&lt;td&gt;2368&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC811TQ-350B                &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;2&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;350W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;型号带Twin，是专为双子星产品而设计的，1u空间可以装入2块主板；&lt;br /&gt;
型号带Q，支持SAS/SATA；S，支持SCSI；R，冗余双电源，U指支持单路主板；V或者B指颜色&lt;br /&gt;
IO slots:FF=全高，全长的扩展卡;FH=全高，半长的扩展卡;LP=矮板扩展卡&lt;/p&gt;
&lt;h2&gt;其他&lt;/h2&gt;
&lt;p&gt;操作过程一定要带防静电手套&lt;br /&gt;
在查询时应该多使用&amp;quot;实测&amp;quot;、&amp;quot;评测&amp;quot;、&amp;quot;企业级&amp;quot;、&amp;quot;如何选购&amp;quot;，以最大可能地了解各种配件在实际中的使用情况&lt;/p&gt;
&lt;h2&gt;后记&lt;/h2&gt;
&lt;p&gt;由于AMD的CPU在服务器市场的占用率非常少,各种型号都经常缺货,就算有货价格也特别高,对应的主板款式也非常少,因此决定放弃采用AMD架构&lt;/p&gt;
&lt;h3&gt;intel&lt;/h3&gt;
&lt;p&gt;intel的E5645,集成6核,主频2.4GHZ,具备超线程技术,单核可同时处理两个任务,性价比最高&lt;/p&gt;
&lt;h3&gt;主板&lt;/h3&gt;
&lt;p&gt;E5645属于intel至强 &lt;a href=&quot;http://www.intel.com/zh_CN/products/server/processor/xeon5000/index.htm&quot;&gt;5000&lt;/a&gt; 系列,支持此系列的 &lt;a href=&quot;&quot;&gt;芯片组&lt;/a&gt;%u670D%u52A1%u5668&amp;amp;s2=all&amp;amp;s3=all 主要有 intel5500,intel5520,主要差别在于 &lt;a href=&quot;http://ark.intel.com/compare/36784,36783&quot;&gt;最大内存容量&lt;/a&gt;&lt;br /&gt;
主要选择基于5500芯片组的双路主板&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;超微&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号    &lt;/td&gt;
		&lt;td&gt;最大内存容量&lt;/td&gt;
		&lt;td&gt;插槽&lt;/td&gt;
		&lt;td&gt;数量&lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;   &lt;/td&gt;
		&lt;td&gt;结构 &lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;X8DTH-6F&lt;/td&gt;
		&lt;td&gt;192GB       &lt;/td&gt;
		&lt;td&gt;1366&lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;X8DT6-F &lt;/td&gt;
		&lt;td&gt;192GB       &lt;/td&gt;
		&lt;td&gt;1366&lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;3300&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;X8DTL-6F&lt;/td&gt;
		&lt;td&gt;96GB        &lt;/td&gt;
		&lt;td&gt;1366&lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;6-SAS2.0(6G),F-带IPMI功能&lt;/p&gt;
&lt;p&gt;最好带IPMI芯片,用于远程监控cpu,风扇等状态&lt;br /&gt;
参考 &lt;a href=&quot;http://blog.5ilinux.com/archives/2006/07/ipmidell2850.html&quot;&gt;使用IPMI远程控制管理&lt;/a&gt; &lt;a href=&quot;http://www.ibm.com/developerworks/cn/linux/l-ipmi/index.html&quot;&gt;使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://news.mydrivers.com/1/167/167758.htm&quot;&gt;AMD服务器新平台第二波：Opteron 4100登场&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.amd.com/cn/products/server/processors/Pages/server-processors.aspx&quot;&gt;AMD服务器平台&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://detail.zol.com.cn/servercpu_index/subcate383_55_list_s2775_1.html&quot;&gt;&lt;span class=&quot;caps&quot;&gt;AMD&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;CPU&lt;/span&gt; 报价&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.liusuping.com/it-tech/server-rdimm-udimm.html&quot;&gt;UDIMM与RDIMM区别&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://hi.baidu.com/tyc6982/blog/item/b75d55ce519deb37b700c870.html&quot;&gt;如何选购固态硬盘&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://storage.it168.com/a2011/0104/1145/000001145668_all.shtml&quot;&gt;测试探究SSD固态硬盘性能下降的谜题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ittong.net/News_37191.html&quot;&gt;DIY服务器机箱组装经验谈&lt;/a&gt;&lt;/p&gt;</content><content:encoded>&lt;h2&gt;&lt;span class=&quot;caps&quot;&gt;CPU&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;目前AMD服务器CPU主要有Opteron(皓龙)4000和6000系列，AMD的CPU都带内存控制器，直接与内存交互，而不再通过北桥芯片&lt;br /&gt;
价格差异点在于内核数量、主频及功耗，功耗节能版对服务器领域来说意义不大，而且价格高昂，不考虑(型号后缀为HE低功耗或EE超低功耗)&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.amd.com/cn/products/server/processors/4000-series-platform/Pages/4000-series-platform.aspx&quot;&gt;4000系列&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;核心数量有4核、6核，最高支持DDR3-1333，核心独占一二级缓存，共享三级缓存&lt;br /&gt;
候选表格如下：&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号&lt;/td&gt;
		&lt;td&gt;内核&lt;/td&gt;
		&lt;td&gt;主频&lt;/td&gt;
		&lt;td&gt;插槽类型  &lt;/td&gt;
		&lt;td&gt;功耗&lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;4184&lt;/td&gt;
		&lt;td&gt;6   &lt;/td&gt;
		&lt;td&gt;2.8 &lt;/td&gt;
		&lt;td&gt;Socket C32&lt;/td&gt;
		&lt;td&gt;75W &lt;/td&gt;
		&lt;td&gt;3500&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;4180&lt;/td&gt;
		&lt;td&gt;6   &lt;/td&gt;
		&lt;td&gt;2.6 &lt;/td&gt;
		&lt;td&gt;Socket C32&lt;/td&gt;
		&lt;td&gt;75W &lt;/td&gt;
		&lt;td&gt;2500&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;4130&lt;/td&gt;
		&lt;td&gt;4   &lt;/td&gt;
		&lt;td&gt;2.6 &lt;/td&gt;
		&lt;td&gt;Socket C32&lt;/td&gt;
		&lt;td&gt;75W &lt;/td&gt;
		&lt;td&gt;1650&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;4122&lt;/td&gt;
		&lt;td&gt;4   &lt;/td&gt;
		&lt;td&gt;2.2 &lt;/td&gt;
		&lt;td&gt;Socket C32&lt;/td&gt;
		&lt;td&gt;75W &lt;/td&gt;
		&lt;td&gt;1050&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.amd.com/cn/products/server/processors/6000-series-platform/Pages/6000-series-platform.aspx&quot;&gt;6000系列&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;核心数量有8核、12核，候选表格如下：&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号&lt;/td&gt;
		&lt;td&gt;内核&lt;/td&gt;
		&lt;td&gt;主频&lt;/td&gt;
		&lt;td&gt;插槽类型  &lt;/td&gt;
		&lt;td&gt;功耗&lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6174&lt;/td&gt;
		&lt;td&gt;12  &lt;/td&gt;
		&lt;td&gt;2.2 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;8500&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6172&lt;/td&gt;
		&lt;td&gt;12  &lt;/td&gt;
		&lt;td&gt;2.1 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;7500&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6168&lt;/td&gt;
		&lt;td&gt;12  &lt;/td&gt;
		&lt;td&gt;1.9 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;6000&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6136&lt;/td&gt;
		&lt;td&gt;8   &lt;/td&gt;
		&lt;td&gt;2.4 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;5600&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6134&lt;/td&gt;
		&lt;td&gt;8   &lt;/td&gt;
		&lt;td&gt;2.3 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;3890&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;6128&lt;/td&gt;
		&lt;td&gt;8   &lt;/td&gt;
		&lt;td&gt;2.0 &lt;/td&gt;
		&lt;td&gt;Socket G34&lt;/td&gt;
		&lt;td&gt;80W &lt;/td&gt;
		&lt;td&gt;3111&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;初步选用 6134，性价比高&lt;/p&gt;
&lt;h3&gt;芯片组&lt;/h3&gt;
&lt;p&gt;使用AMD自家的服务器芯片组:北桥SR5690/SR5670/SR5650、南桥SP5100，详见 &lt;a href=&quot;http://www.amd.com/cn/products/server/processors/Pages/amd-platform-specifications.aspx&quot;&gt;AMD平台规范&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;用于高能效云的SR5650芯片组&lt;/li&gt;
	&lt;li&gt;用于可扩展SMB 的SR5670芯片组&lt;/li&gt;
	&lt;li&gt;用于高I/O系统的SR5690&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;主板&lt;/h2&gt;
&lt;p&gt;主要生产商:超微(Supermicro)、泰安(&lt;span class=&quot;caps&quot;&gt;TYAN&lt;/span&gt;)、Intel、华硕&lt;br /&gt;
具体要求:支持SAS硬盘、DDR3(1333MHZ最大内存至少32&lt;br /&gt;
有些主板带iKVM功能(Keyboard,Video,Mouse)，用来实现远程管理功能(&lt;span class=&quot;caps&quot;&gt;KVM&lt;/span&gt; Over IP)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.supermicro.com/c32/AMD_C32.cfm?pg=MOBO&quot;&gt;超微C32系列主板&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.supermicro.com/g34/AMD_G34.cfm?pg=MOBO&quot;&gt;超微G34系列主板&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号   &lt;/td&gt;
		&lt;td&gt;最大内存容量                               &lt;/td&gt;
		&lt;td&gt;插槽&lt;/td&gt;
		&lt;td&gt;数量&lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;结构 &lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;H8DCL-6&lt;/td&gt;
		&lt;td&gt;128GB Registered &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt; or 32GB Unbuffered &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;C32 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;  &lt;/td&gt;
		&lt;td&gt;$408&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;H8DG6  &lt;/td&gt;
		&lt;td&gt;256GB Registered &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt; or 64GB Unbuffered &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;G34 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;$573&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href=&quot;http://www.supermicro.com/wheretobuy/asia.cfm?rgn=133&quot;&gt;代理商&lt;/a&gt;&lt;br /&gt;
海红微电子,深圳市福田区天安数码城创新科技广场A座1803室,0755-83434282&lt;br /&gt;
星宏宝博,深圳市福田区福华一路98号卓越606B-608B,0755-83005009,13823305008,覃碧玉&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.tyan.com.cn/product_boards2.aspx&quot;&gt;泰安主板&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://www.tyan.com.cn/product_boards2_list_socket.aspx?cpuid=4&amp;amp;socketid=24&amp;amp;chipsetid=all&amp;amp;socketnum=all&amp;amp;formfactor=all&quot;&gt;泰安C32系列主板&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.tyan.com.cn/product_boards2_list_socket.aspx?cpuid=4&amp;amp;socketid=25&amp;amp;chipsetid=all&amp;amp;socketnum=all&amp;amp;formfactor=all&quot;&gt;泰安G34系列主板&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在不确定选择哪一个主板的情况下，可以先看主板的编号；要求主板支持SAS，则编号一定要带W字母，比如:WAGM4NRF型号是支持SAS的，而AGM4NRF不支持，具体编号意义可查看 &lt;a href=&quot;http://www.tyan.com.cn/tech/product_matrix.aspx&quot;&gt;产品矩阵&lt;/a&gt; 的底端说明&lt;br /&gt;
所以型号一定要包含WGNR(G=Onboard Gf / N=&lt;span class=&quot;caps&quot;&gt;LAN&lt;/span&gt; / R= &lt;span class=&quot;caps&quot;&gt;RAID&lt;/span&gt; / W= &lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;候选表格，泰安主板AMD系列在国内找不到网上报价，先从 &lt;a href=&quot;newegg.com&quot;&gt;newegg.com&lt;/a&gt; &lt;a href=&quot;http://www.newegg.ca/Product/Productcompare.aspx?Submit=ENE&amp;amp;N=100007628%2050001424%20600008002&amp;amp;IsNodeId=1&amp;amp;bop=And&amp;amp;CompareItemList=302|13-151-227^13-151-227-TS%2C13-151-225^13-151-225-TS%2C13-151-215^13-151-215-TS%2C13-151-214^13-151-214-TS%2C13-151-220^13-151-220-TS&quot;&gt;比较价格&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号          &lt;/td&gt;
		&lt;td&gt;最大内存容量         &lt;/td&gt;
		&lt;td&gt;插槽&lt;/td&gt;
		&lt;td&gt;数量&lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;   &lt;/td&gt;
		&lt;td&gt;主板结构    &lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8010WGM2NR   &lt;/td&gt;
		&lt;td&gt;64GB &lt;span class=&quot;caps&quot;&gt;RDIMM&lt;/span&gt;/16GB &lt;span class=&quot;caps&quot;&gt;UDIMM&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;C32 &lt;/td&gt;
		&lt;td&gt;1   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;$365&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8225WAGM4NRF &lt;/td&gt;
		&lt;td&gt;64GB &lt;span class=&quot;caps&quot;&gt;RDIMM&lt;/span&gt;/32GB &lt;span class=&quot;caps&quot;&gt;UDIMM&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;C32 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;   &lt;/td&gt;
		&lt;td&gt;Extended &lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;$615&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8226WGM3NR   &lt;/td&gt;
		&lt;td&gt;96GB                 &lt;/td&gt;
		&lt;td&gt;C32 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;   &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SSI&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;EEB&lt;/span&gt;     &lt;/td&gt;
		&lt;td&gt;$560&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8230WGM4NR-LE&lt;/td&gt;
		&lt;td&gt;128GB                &lt;/td&gt;
		&lt;td&gt;G34 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;Extended &lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;$550&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8230WGM4NR   &lt;/td&gt;
		&lt;td&gt;128GB                &lt;/td&gt;
		&lt;td&gt;G34 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;Extended &lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;$580&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;S8236WGM3NR   &lt;/td&gt;
		&lt;td&gt;128GB                &lt;/td&gt;
		&lt;td&gt;G34 &lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SSI&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;EEB&lt;/span&gt;     &lt;/td&gt;
		&lt;td&gt;$570&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href=&quot;http://www.tyan.com.cn/wtb_asia.aspx#CHINA&quot;&gt;华南区代理商&lt;/a&gt;&lt;br /&gt;
深圳市亿时空科技有限公司,深圳市福田区华强北路宝华大厦A629室,0755-88863168,孙先生&lt;/p&gt;
&lt;h2&gt;内存&lt;/h2&gt;
&lt;p&gt;以下应用技术也是影响内存价格的重要因素&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;Unbuffered Ecc &lt;span class=&quot;caps&quot;&gt;DIMM&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;低端服务器工作站内存&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Registered &lt;span class=&quot;caps&quot;&gt;DIMM&lt;/span&gt;    &lt;/td&gt;
		&lt;td&gt;高端服务器工作站内存&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Fully Buffered &lt;span class=&quot;caps&quot;&gt;DIMM&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;全缓冲服务器内存    &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;在产品报价上看到产品名称带FB的，一般都为全缓冲服务器内存，暂不需要考虑此类产品&lt;/p&gt;
&lt;p&gt;要带ECC纠错技术，通过IC颗粒的分布可以看出是否带有ECC功能，ECC比普通NO ECC内存多1颗IC芯片&lt;br /&gt;
买DDR3的，电压低至1.5v，数据传输率(800/1066/1333/1600)&lt;/p&gt;
&lt;p&gt;为了让双通道技术发挥作用，假如需要的内存总量为8G的，则买两条4G的，分别插入 &lt;strong&gt;同颜色&lt;/strong&gt; 的DIMM&lt;/p&gt;
&lt;p&gt;候选表格如下:&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号                     &lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Ramax &lt;span class=&quot;caps&quot;&gt;REG&lt;/span&gt;/DDR3/1333/4G   &lt;/td&gt;
		&lt;td&gt;959 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;三星8GB DDR3 1333 &lt;span class=&quot;caps&quot;&gt;REG&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;799 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;三星4GB DDR3 1333 &lt;span class=&quot;caps&quot;&gt;ECC&lt;/span&gt;    &lt;/td&gt;
		&lt;td&gt;350 &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;硬盘&lt;/h2&gt;
&lt;p&gt;最大的选择点在于是选择传统的机械硬盘还是SSD固态硬盘，后者在IOPS上有极大地物理优势，但价格较高&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;机械硬盘HDD&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里只考虑希捷的硬盘，选用SAS2.0（串行连接SCSI）6Gb/s接口；2.5英寸的Savvio 15K系列没有货源；只能选择3.5英寸&lt;br /&gt;
根据 &lt;a href=&quot;http://www.seagate.com/www/zh-cn/products/enterprise-hard-drives/cheetah-15k&quot;&gt;希捷官网面向企业级Cheetah® 15K&lt;/a&gt; 的描述，支持SAS2.0，15K的候选表格如下:&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号                                     &lt;/td&gt;
		&lt;td&gt;编号       &lt;/td&gt;
		&lt;td&gt;缓存&lt;/td&gt;
		&lt;td&gt;盘片&lt;/td&gt;
		&lt;td&gt;报价&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;希捷 Cheetah(捷豹) 15K.7 &lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt; 6Gb/秒 300GB&lt;/td&gt;
		&lt;td&gt;ST3300657SS&lt;/td&gt;
		&lt;td&gt;16MB&lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;1520&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;希捷 Cheetah(捷豹) 15K.7 &lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt; 6Gb/秒 450GB&lt;/td&gt;
		&lt;td&gt;ST3450857SS&lt;/td&gt;
		&lt;td&gt;16MB&lt;/td&gt;
		&lt;td&gt;3   &lt;/td&gt;
		&lt;td&gt;1840&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;希捷 Cheetah(捷豹) 15K.7 &lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt; 6Gb/秒 600GB&lt;/td&gt;
		&lt;td&gt;ST3600057SS&lt;/td&gt;
		&lt;td&gt;16MB&lt;/td&gt;
		&lt;td&gt;4   &lt;/td&gt;
		&lt;td&gt;2410&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;固态硬盘SSD&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果服务器应用并不需要海量存储，可以选择SSD固态硬盘。SSD产品非常多，主要选择适用企业应用的产品&lt;/p&gt;
&lt;p&gt;固态硬盘的价格差异点在于主控、存储方式、容量&lt;/p&gt;
&lt;p&gt;主控：连接闪存和外部SATA接口，决定数据要存储在哪个闪存block，常见品牌有:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;intel 芯片(PC29AS21BA0)采用34nm颗粒工艺的Gen2版本，X25-E Extreme SATA系列专用于服务器，也为威刚、金士顿等品牌代工&lt;/li&gt;
	&lt;li&gt;SandForce 芯片(SF-1565TA2-&lt;span class=&quot;caps&quot;&gt;SBH&lt;/span&gt;)的SF1500面向服务器，代表性产品:海盗船Force系列&lt;/li&gt;
	&lt;li&gt;Jmicron &lt;strong&gt;别买来做服务器&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;存储方式分为:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;acronym title=&quot;单层式储存&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SLC&lt;/span&gt;&lt;/acronym&gt; 一个block只记录0和1数值，速度快(特别是随机写)，稳定，寿命长(10万次擦写)，成本高&lt;/li&gt;
	&lt;li&gt;&lt;acronym title=&quot;多层式储存&quot;&gt;&lt;span class=&quot;caps&quot;&gt;MLC&lt;/span&gt;&lt;/acronym&gt; 一个block记录00,01,11,10四组数值，存储空间翻倍，寿命短(1万次擦写)，成本低&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;候选表格如下(尺寸都为2.5英寸,NAND闪存类型都为SLC):&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号                 &lt;/td&gt;
		&lt;td&gt;编号           &lt;/td&gt;
		&lt;td&gt;读取速度&lt;/td&gt;
		&lt;td&gt;写入速度&lt;/td&gt;
		&lt;td&gt;接口类型   &lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Intel X25-E 50nm(32G)&lt;/td&gt;
		&lt;td&gt;SSDSA2SH032G1GN&lt;/td&gt;
		&lt;td&gt;250MB/S &lt;/td&gt;
		&lt;td&gt;170MB/S &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SATA&lt;/span&gt; II    &lt;/td&gt;
		&lt;td&gt;2385&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Intel X25-E 50nm(64G)&lt;/td&gt;
		&lt;td&gt;SSDSA2SH064G101&lt;/td&gt;
		&lt;td&gt;250MB/S &lt;/td&gt;
		&lt;td&gt;170MB/S &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SATA&lt;/span&gt; II    &lt;/td&gt;
		&lt;td&gt;4550&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;希捷Pulsar XT.2(100G)&lt;/td&gt;
		&lt;td&gt;ST100FX0002    &lt;/td&gt;
		&lt;td&gt;360MB/S &lt;/td&gt;
		&lt;td&gt;300MB/S &lt;/td&gt;
		&lt;td&gt;&lt;acronym title=&quot;6-Gb/s&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;&lt;/acronym&gt;&lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;4K随机读写性能，顺序读写速度对于大数据量来说非常重要，但作为系统盘(即非单纯的数据存储)，最关键的还是4k随机读写这一参数&lt;/p&gt;
&lt;p&gt;供应商:&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;名称         &lt;/td&gt;
		&lt;td&gt;地址                   &lt;/td&gt;
		&lt;td&gt;联系人&lt;/td&gt;
		&lt;td&gt;电话         &lt;/td&gt;
		&lt;td&gt;手机       &lt;/td&gt;
		&lt;td&gt;网店                               &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;风驰计算机   &lt;/td&gt;
		&lt;td&gt;华强北国利大厦1711-1716&lt;/td&gt;
		&lt;td&gt;杨颖  &lt;/td&gt;
		&lt;td&gt;0755 83743198&lt;/td&gt;
		&lt;td&gt;13823752475&lt;/td&gt;
		&lt;td&gt;&lt;a href=&quot;http://m.pconline.com.cn/shop495935&quot;&gt;网址&lt;/a&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;服务器专卖   &lt;/td&gt;
		&lt;td&gt;现代之窗b座8楼8i       &lt;/td&gt;
		&lt;td&gt;谢先生&lt;/td&gt;
		&lt;td&gt;             &lt;/td&gt;
		&lt;td&gt;13715330262&lt;/td&gt;
		&lt;td&gt;&lt;a href=&quot;http://shop34747127.taobao.com&quot;&gt;网址&lt;/a&gt;     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;LBC服务器专卖&lt;/td&gt;
		&lt;td&gt;赛格电子市场5楼        &lt;/td&gt;
		&lt;td&gt;黄先生&lt;/td&gt;
		&lt;td&gt;             &lt;/td&gt;
		&lt;td&gt;13510979215&lt;/td&gt;
		&lt;td&gt;&lt;a href=&quot;http://diyservers.taobao.com&quot;&gt;网址&lt;/a&gt;       &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;机箱&lt;/h2&gt;
&lt;h3&gt;大小&lt;/h3&gt;
&lt;p&gt;宽(48.26cm＝19英寸)，高(1u=4.445cm的倍数)&lt;br /&gt;
长度主要分为两组&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;标准组 长度约为625－725毫米，支持双CPU服务器主板(含12×13英寸超大尺寸)&lt;/li&gt;
	&lt;li&gt;短款组 长度约为360－525毫米，仅支持单CPU服务器主板&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;主板结构&lt;/h3&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt; 12&amp;#8243;&amp;#215;9.5&amp;#8243; (30.5cmx24.2cm)&lt;/li&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;MEB&lt;/span&gt; 16.2&amp;#8243;&amp;#215;13&amp;#8243; (411&amp;#215;330mm)&lt;/li&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;SSI&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;EEB&lt;/span&gt; 12&amp;#8243;&amp;#215;13&amp;#8243; (305&amp;#215;330mm)&lt;/li&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;EATX&lt;/span&gt; 12&amp;#8243;&amp;#215;13&amp;#8243; (305&amp;#215;330mm) 大小于EEB相同，但是两者不可替换使用(因为螺丝口都不一样)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;散热&lt;/h3&gt;
&lt;p&gt;重中之重，安装6个以上的风扇&lt;br /&gt;
主要散热点为CPU、主板芯片组、内存、硬盘&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.fywx.cc/Product_List.php?root_id=5&amp;amp;cat_id=28&quot;&gt;超微机箱&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号                        &lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;CPU&lt;/span&gt;  &lt;/td&gt;
		&lt;td&gt;适用主板           &lt;/td&gt;
		&lt;td&gt;硬盘位      &lt;/td&gt;
		&lt;td&gt;IO slots    &lt;/td&gt;
		&lt;td&gt;电源功率&lt;/td&gt;
		&lt;td&gt;报价&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC815TQ-560UV/SC815TQ-560UB &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;13.68&amp;#8243;&amp;#215;13&amp;#8243;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;    &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;2x FF, 1x LP&lt;/td&gt;
		&lt;td&gt;560W    &lt;/td&gt;
		&lt;td&gt;3200&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC815TQ-560V/SC815TQ-560B   &lt;/td&gt;
		&lt;td&gt;DP   &lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;13&amp;#8243;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;       &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FF, 1x LP&lt;/td&gt;
		&lt;td&gt;560W    &lt;/td&gt;
		&lt;td&gt;3200&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC815TQ-560CV/SC815TQ-560CB &lt;/td&gt;
		&lt;td&gt;DP   &lt;/td&gt;
		&lt;td&gt;(12&amp;quot;,13.68&amp;quot;)x10&amp;quot;ATX&lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FF       &lt;/td&gt;
		&lt;td&gt;560W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813TQ-520/SC813TQ-520B    &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;13&amp;#8243;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;       &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FF, 1x LP&lt;/td&gt;
		&lt;td&gt;520W    &lt;/td&gt;
		&lt;td&gt;3178&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813TQ-520C/SC813TQ-520CB  &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;13&amp;#8243;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;       &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FF       &lt;/td&gt;
		&lt;td&gt;520W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813TQ-500/SC813TQ-500B    &lt;/td&gt;
		&lt;td&gt;DP   &lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;13&amp;#8243;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;       &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH, 1x LP&lt;/td&gt;
		&lt;td&gt;500W    &lt;/td&gt;
		&lt;td&gt;3743&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813MFTQ-520CB             &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;520W    &lt;/td&gt;
		&lt;td&gt;2635&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813MTQ-520C/SC813MTQ-520CB&lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;520W    &lt;/td&gt;
		&lt;td&gt;2688&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813MT-420C/SC813MS-420CB  &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;420W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813MT-410C/SC813MT-410CB  &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;410W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC813MT-300C/SC813MT-300CB  &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;4&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;300W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC811TQ-520/SC811TQ-520B    &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;2&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;520W    &lt;/td&gt;
		&lt;td&gt;2368&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;SC811TQ-350B                &lt;/td&gt;
		&lt;td&gt;DP/UP&lt;/td&gt;
		&lt;td&gt;12&amp;#8243;&amp;#215;10&amp;#8243;&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;         &lt;/td&gt;
		&lt;td&gt;2&amp;#215;3.5英寸SAS&lt;/td&gt;
		&lt;td&gt;1x FH       &lt;/td&gt;
		&lt;td&gt;350W    &lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;型号带Twin，是专为双子星产品而设计的，1u空间可以装入2块主板；&lt;br /&gt;
型号带Q，支持SAS/SATA；S，支持SCSI；R，冗余双电源，U指支持单路主板；V或者B指颜色&lt;br /&gt;
IO slots:FF=全高，全长的扩展卡;FH=全高，半长的扩展卡;LP=矮板扩展卡&lt;/p&gt;
&lt;h2&gt;其他&lt;/h2&gt;
&lt;p&gt;操作过程一定要带防静电手套&lt;br /&gt;
在查询时应该多使用&amp;quot;实测&amp;quot;、&amp;quot;评测&amp;quot;、&amp;quot;企业级&amp;quot;、&amp;quot;如何选购&amp;quot;，以最大可能地了解各种配件在实际中的使用情况&lt;/p&gt;
&lt;h2&gt;后记&lt;/h2&gt;
&lt;p&gt;由于AMD的CPU在服务器市场的占用率非常少,各种型号都经常缺货,就算有货价格也特别高,对应的主板款式也非常少,因此决定放弃采用AMD架构&lt;/p&gt;
&lt;h3&gt;intel&lt;/h3&gt;
&lt;p&gt;intel的E5645,集成6核,主频2.4GHZ,具备超线程技术,单核可同时处理两个任务,性价比最高&lt;/p&gt;
&lt;h3&gt;主板&lt;/h3&gt;
&lt;p&gt;E5645属于intel至强 &lt;a href=&quot;http://www.intel.com/zh_CN/products/server/processor/xeon5000/index.htm&quot;&gt;5000&lt;/a&gt; 系列,支持此系列的 &lt;a href=&quot;&quot;&gt;芯片组&lt;/a&gt;%u670D%u52A1%u5668&amp;amp;s2=all&amp;amp;s3=all 主要有 intel5500,intel5520,主要差别在于 &lt;a href=&quot;http://ark.intel.com/compare/36784,36783&quot;&gt;最大内存容量&lt;/a&gt;&lt;br /&gt;
主要选择基于5500芯片组的双路主板&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;超微&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt;型号    &lt;/td&gt;
		&lt;td&gt;最大内存容量&lt;/td&gt;
		&lt;td&gt;插槽&lt;/td&gt;
		&lt;td&gt;数量&lt;/td&gt;
		&lt;td&gt;&lt;span class=&quot;caps&quot;&gt;SAS&lt;/span&gt;   &lt;/td&gt;
		&lt;td&gt;结构 &lt;/td&gt;
		&lt;td&gt;价格&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;X8DTH-6F&lt;/td&gt;
		&lt;td&gt;192GB       &lt;/td&gt;
		&lt;td&gt;1366&lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;X8DT6-F &lt;/td&gt;
		&lt;td&gt;192GB       &lt;/td&gt;
		&lt;td&gt;1366&lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;3300&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;X8DTL-6F&lt;/td&gt;
		&lt;td&gt;96GB        &lt;/td&gt;
		&lt;td&gt;1366&lt;/td&gt;
		&lt;td&gt;2   &lt;/td&gt;
		&lt;td&gt;SAS2.0&lt;/td&gt;
		&lt;td&gt;E-&lt;span class=&quot;caps&quot;&gt;ATX&lt;/span&gt;&lt;/td&gt;
		&lt;td&gt;    &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;6-SAS2.0(6G),F-带IPMI功能&lt;/p&gt;
&lt;p&gt;最好带IPMI芯片,用于远程监控cpu,风扇等状态&lt;br /&gt;
参考 &lt;a href=&quot;http://blog.5ilinux.com/archives/2006/07/ipmidell2850.html&quot;&gt;使用IPMI远程控制管理&lt;/a&gt; &lt;a href=&quot;http://www.ibm.com/developerworks/cn/linux/l-ipmi/index.html&quot;&gt;使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://news.mydrivers.com/1/167/167758.htm&quot;&gt;AMD服务器新平台第二波：Opteron 4100登场&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.amd.com/cn/products/server/processors/Pages/server-processors.aspx&quot;&gt;AMD服务器平台&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://detail.zol.com.cn/servercpu_index/subcate383_55_list_s2775_1.html&quot;&gt;&lt;span class=&quot;caps&quot;&gt;AMD&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;CPU&lt;/span&gt; 报价&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.liusuping.com/it-tech/server-rdimm-udimm.html&quot;&gt;UDIMM与RDIMM区别&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://hi.baidu.com/tyc6982/blog/item/b75d55ce519deb37b700c870.html&quot;&gt;如何选购固态硬盘&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://storage.it168.com/a2011/0104/1145/000001145668_all.shtml&quot;&gt;测试探究SSD固态硬盘性能下降的谜题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ittong.net/News_37191.html&quot;&gt;DIY服务器机箱组装经验谈&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/582199608/saberma/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/saberma/~8395768/582199608/6499449/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><pubDate>Fri, 21 Oct 2011 15:00:00 +0800</pubDate><guid isPermaLink="false">http://saberma.me/other/2011/10/21/how-to-diy-a-server</guid><fs:srclink>http://saberma.me/other/2011/10/21/how-to-diy-a-server.html</fs:srclink><fs:srcfeed>http://saberma.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/saberma/~8395768/582199608/6499449</fs:itemid></item><item><title>如何选择idc机房</title><link>http://item.feedsky.com/~feedsky/saberma/~8395768/582199609/6499449/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">http://saberma.me/other/2011/08/15/how-to-choose-a-idc</id><content xmlns="http://www.w3.org/2005/Atom" type="html">&lt;h2&gt;双线 or 单线&lt;/h2&gt;
&lt;p&gt;双线是解决南北互通的方案之一，所以为了让国内所有的用户都能快速地访问，还是要选择双线机房&lt;br /&gt;
顾名思义，双线机房要占用电信、网通两条线路，费用自然会贵不少&lt;/p&gt;
&lt;h3&gt;BGP双线(全路由双线)&lt;/h3&gt;
&lt;p&gt;单网卡单IP&lt;/p&gt;
&lt;h2&gt;数据中心&lt;/h2&gt;
&lt;p&gt;公司问题:几级代理、试用期、是否提供24小时服务、提供远程重启服务&lt;br /&gt;
服务器主要问题:是否为BGP双线、价格、域名注册及绑定数量&lt;/p&gt;
&lt;h3&gt;纵横网络&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ein.cn&quot;&gt;http://www.ein.cn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;维用机房1u双线价格&lt;/strong&gt;&lt;br /&gt;
网站上写的是9888&lt;br /&gt;
联系客服优惠价首年7500，之后7300&lt;br /&gt;
前5个域名备案免费，之后每个收费50元&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;客服&lt;/strong&gt;&lt;br /&gt;
QQ:316922&lt;/p&gt;
&lt;h3&gt;动力互联&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://www.cctvidc.com&quot;&gt;http://www.cctvidc.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一台机子超过60个域名就得办理ICP证，证件办理费用1000元左右，得上广州通信管理局办理&lt;br /&gt;
(杨林)免费备案是30个,超过每个收100元,(丁俊堂),备案不收费&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;维用机房1u双线价格&lt;/strong&gt;&lt;br /&gt;
每年7500，以后的价格一般都这个价格，有上涨会提前一个月通知&lt;/p&gt;
&lt;p&gt;试用期三天&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;客服&lt;/strong&gt;&lt;br /&gt;
联系人：丁俊堂 手机：13510664747 直线电话：0755-88860182 QQ 100549508&lt;/p&gt;</content><content:encoded>&lt;h2&gt;双线 or 单线&lt;/h2&gt;
&lt;p&gt;双线是解决南北互通的方案之一，所以为了让国内所有的用户都能快速地访问，还是要选择双线机房&lt;br /&gt;
顾名思义，双线机房要占用电信、网通两条线路，费用自然会贵不少&lt;/p&gt;
&lt;h3&gt;BGP双线(全路由双线)&lt;/h3&gt;
&lt;p&gt;单网卡单IP&lt;/p&gt;
&lt;h2&gt;数据中心&lt;/h2&gt;
&lt;p&gt;公司问题:几级代理、试用期、是否提供24小时服务、提供远程重启服务&lt;br /&gt;
服务器主要问题:是否为BGP双线、价格、域名注册及绑定数量&lt;/p&gt;
&lt;h3&gt;纵横网络&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ein.cn&quot;&gt;http://www.ein.cn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;维用机房1u双线价格&lt;/strong&gt;&lt;br /&gt;
网站上写的是9888&lt;br /&gt;
联系客服优惠价首年7500，之后7300&lt;br /&gt;
前5个域名备案免费，之后每个收费50元&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;客服&lt;/strong&gt;&lt;br /&gt;
QQ:316922&lt;/p&gt;
&lt;h3&gt;动力互联&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://www.cctvidc.com&quot;&gt;http://www.cctvidc.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一台机子超过60个域名就得办理ICP证，证件办理费用1000元左右，得上广州通信管理局办理&lt;br /&gt;
(杨林)免费备案是30个,超过每个收100元,(丁俊堂),备案不收费&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;维用机房1u双线价格&lt;/strong&gt;&lt;br /&gt;
每年7500，以后的价格一般都这个价格，有上涨会提前一个月通知&lt;/p&gt;
&lt;p&gt;试用期三天&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;客服&lt;/strong&gt;&lt;br /&gt;
联系人：丁俊堂 手机：13510664747 直线电话：0755-88860182 QQ 100549508&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/582199609/saberma/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/saberma/~8395768/582199609/6499449/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><pubDate>Mon, 15 Aug 2011 15:00:00 +0800</pubDate><guid isPermaLink="false">http://saberma.me/other/2011/08/15/how-to-choose-a-idc</guid><fs:srclink>http://saberma.me/other/2011/08/15/how-to-choose-a-idc.html</fs:srclink><fs:srcfeed>http://saberma.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/saberma/~8395768/582199609/6499449</fs:itemid></item><item><title>如何为https网站加入ssl证书</title><link>http://item.feedsky.com/~feedsky/saberma/~8395768/582199610/6499449/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">http://saberma.me/other/2011/08/11/how-to-choose-ssl-certificates</id><content xmlns="http://www.w3.org/2005/Atom" type="html">&lt;p&gt;要提高网站与客户端浏览器之间的安全性，可以基于https协议对传输的数据进行加密&lt;br /&gt;
https协议采用公钥私钥加密算法进行加密，服务器用私钥对网页进行加密后，连同公钥一起发给浏览器&lt;br /&gt;
由于，公钥是服务器发送的，浏览器认为它不可信任，就会提示用户选择是否进一步操作&lt;br /&gt;
这对用户来说非常不友好，觉得这个网站不安全&lt;/p&gt;
&lt;p&gt;为了解决这个问题，我们需要将公钥制作成数字证书，放到专门的认证机构(ca)&lt;/p&gt;
&lt;p&gt;认证机构有很多家，比如&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.geotrust.com&quot;&gt;http://www.geotrust.com&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.verisign.com&quot;&gt;http://www.verisign.com&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.rapidssl.com&quot;&gt;http://www.rapidssl.com&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这些都是收费的，免费的只有一家 &lt;a href=&quot;http://www.startssl.com&quot;&gt;http://www.startssl.com&lt;/a&gt; ，但是firefox3.5不支持，所以不考虑&lt;/p&gt;
&lt;p&gt;不了解的同学可以看下 &lt;a href=&quot;http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html&quot;&gt;数字签名是什么&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;认证类型&lt;/h2&gt;
&lt;p&gt;各个认证机构提供的类型也有很多不一样，按认证范围可以分为&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;域名型，针对域名进行认证(快速认证)&lt;/li&gt;
	&lt;li&gt;企业型，同时认证公司名称等信息(完整认证)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;据说rapidssl不支持企业认证&lt;/p&gt;
&lt;p&gt;按认证的域名可以分为&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;单域名 www.example.com&lt;/li&gt;
	&lt;li&gt;多域名 www.example1.com, www.example2.com&lt;/li&gt;
	&lt;li&gt;泛二级域名 *.exmaple.com&lt;/li&gt;
	&lt;li&gt;多个二级域名 a.example.com, b.example.com&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此外还有赔付保障(证书被破解找机构赔)、移动设备支持情况、木马扫瞄等功能类型的差异，没什么用&lt;/p&gt;
&lt;p&gt;在这里我们主要关注泛二级域名，报价(元/每年)&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;rapidssl 1550&lt;/li&gt;
	&lt;li&gt;GeoTrust 6850&lt;/li&gt;
	&lt;li&gt;VeriSign 38000&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上报价由&amp;quot;www.trustasia.com&amp;quot;:www.trustasia.com 提供&lt;br /&gt;
GeoTrust,VeriSign只能是企业级认证的产品才包含泛二级域名类型，所以价格贵很多&lt;/p&gt;
&lt;p&gt;rapidssl符合要求，价格较低，还有优惠&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.namecheap.com/ssl-certificates/comodo.aspx&quot;&gt;positive ssl 89$&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.clickssl.com/rapidssl/rapidsslwildcard.aspx&quot;&gt;clickssl 139$&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.servertastic.com/rapidssl/&quot;&gt;servertastic 139$&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.cheapssls.com/geotrust-ssl-certificates/rapidssl-wildcard.html&quot;&gt;cheapssls 148$&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;多域名认证&lt;/h2&gt;
&lt;p&gt;由于早期https协议并不支持servername，所以每个域名只能使用关联一个独立ip&lt;br /&gt;
后期加入的Server Name Indication(&lt;span class=&quot;caps&quot;&gt;SNI&lt;/span&gt;)功能才支持，但是并不是所有的浏览器都支持，兼容性查看 &lt;a href=&quot;http://en.wikipedia.org/wiki/Server_Name_Indication&quot;&gt;这里&lt;/a&gt;&lt;br /&gt;
godaddy提供的UCC证书支持多域名，&amp;quot;UCC认证&amp;quot;:http://www.godaddy.com/ssl/ssl-certificates.aspx?ci=9039&lt;/p&gt;
&lt;p&gt;关于https是否会导致请求太慢的问题，可以查看 &lt;a href=&quot;http://slj.me/2011/02/top-7-myths-about-https/&quot;&gt;https误解三&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;nginx关于ssl的配置可查看 &lt;a href=&quot;http://nginx.org/en/docs/http/configuring_https_servers.html&quot;&gt;官方文档&lt;/a&gt;&lt;br /&gt;
&lt;code&gt;nginx -V&lt;/code&gt; 命令可以查看当前安装的nginx是否已经安装ssl模块、是否支持SNI&lt;br /&gt;
具体安装过程可参考 &lt;a href=&quot;http://zou.lu/nginx-https-ssl-module/&quot;&gt;这里&lt;/a&gt; 或者 &lt;a href=&quot;http://blog.yorkxin.org/2009/01/17/rails-ssl/&quot;&gt;这里&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;生成证书&lt;/h3&gt;
&lt;pre&gt;
openssl genrsa -des3 -out domain.key 2048
req -new -key shopqi.key -out domain.csr
cat domain.csr # 复制到购买ssl证书的网站&lt;/pre&gt;
&lt;pre&gt;
# 收到认证证书后打包证书(注意顺序)
cat STAR_domain_com.crt PositiveSSLCA.crt UTNAddTrustServerCA.crt AddTrustExternalCARoot.crt &amp;gt;&amp;gt; domain.crt&lt;/pre&gt;
&lt;h3&gt;去掉nginx重启需要输入密码&lt;/h3&gt;
&lt;p&gt;cp domain.key domain.key.com&lt;br /&gt;
openssl rsa -in domain.key.com -out domain.key&lt;br /&gt;
chmod 400 domain.key&lt;/p&gt;</content><content:encoded>&lt;p&gt;要提高网站与客户端浏览器之间的安全性，可以基于https协议对传输的数据进行加密&lt;br /&gt;
https协议采用公钥私钥加密算法进行加密，服务器用私钥对网页进行加密后，连同公钥一起发给浏览器&lt;br /&gt;
由于，公钥是服务器发送的，浏览器认为它不可信任，就会提示用户选择是否进一步操作&lt;br /&gt;
这对用户来说非常不友好，觉得这个网站不安全&lt;/p&gt;
&lt;p&gt;为了解决这个问题，我们需要将公钥制作成数字证书，放到专门的认证机构(ca)&lt;/p&gt;
&lt;p&gt;认证机构有很多家，比如&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.geotrust.com&quot;&gt;http://www.geotrust.com&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.verisign.com&quot;&gt;http://www.verisign.com&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.rapidssl.com&quot;&gt;http://www.rapidssl.com&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这些都是收费的，免费的只有一家 &lt;a href=&quot;http://www.startssl.com&quot;&gt;http://www.startssl.com&lt;/a&gt; ，但是firefox3.5不支持，所以不考虑&lt;/p&gt;
&lt;p&gt;不了解的同学可以看下 &lt;a href=&quot;http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html&quot;&gt;数字签名是什么&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;认证类型&lt;/h2&gt;
&lt;p&gt;各个认证机构提供的类型也有很多不一样，按认证范围可以分为&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;域名型，针对域名进行认证(快速认证)&lt;/li&gt;
	&lt;li&gt;企业型，同时认证公司名称等信息(完整认证)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;据说rapidssl不支持企业认证&lt;/p&gt;
&lt;p&gt;按认证的域名可以分为&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;单域名 www.example.com&lt;/li&gt;
	&lt;li&gt;多域名 www.example1.com, www.example2.com&lt;/li&gt;
	&lt;li&gt;泛二级域名 *.exmaple.com&lt;/li&gt;
	&lt;li&gt;多个二级域名 a.example.com, b.example.com&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此外还有赔付保障(证书被破解找机构赔)、移动设备支持情况、木马扫瞄等功能类型的差异，没什么用&lt;/p&gt;
&lt;p&gt;在这里我们主要关注泛二级域名，报价(元/每年)&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;rapidssl 1550&lt;/li&gt;
	&lt;li&gt;GeoTrust 6850&lt;/li&gt;
	&lt;li&gt;VeriSign 38000&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上报价由&amp;quot;www.trustasia.com&amp;quot;:www.trustasia.com 提供&lt;br /&gt;
GeoTrust,VeriSign只能是企业级认证的产品才包含泛二级域名类型，所以价格贵很多&lt;/p&gt;
&lt;p&gt;rapidssl符合要求，价格较低，还有优惠&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.namecheap.com/ssl-certificates/comodo.aspx&quot;&gt;positive ssl 89$&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.clickssl.com/rapidssl/rapidsslwildcard.aspx&quot;&gt;clickssl 139$&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.servertastic.com/rapidssl/&quot;&gt;servertastic 139$&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.cheapssls.com/geotrust-ssl-certificates/rapidssl-wildcard.html&quot;&gt;cheapssls 148$&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;多域名认证&lt;/h2&gt;
&lt;p&gt;由于早期https协议并不支持servername，所以每个域名只能使用关联一个独立ip&lt;br /&gt;
后期加入的Server Name Indication(&lt;span class=&quot;caps&quot;&gt;SNI&lt;/span&gt;)功能才支持，但是并不是所有的浏览器都支持，兼容性查看 &lt;a href=&quot;http://en.wikipedia.org/wiki/Server_Name_Indication&quot;&gt;这里&lt;/a&gt;&lt;br /&gt;
godaddy提供的UCC证书支持多域名，&amp;quot;UCC认证&amp;quot;:http://www.godaddy.com/ssl/ssl-certificates.aspx?ci=9039&lt;/p&gt;
&lt;p&gt;关于https是否会导致请求太慢的问题，可以查看 &lt;a href=&quot;http://slj.me/2011/02/top-7-myths-about-https/&quot;&gt;https误解三&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;nginx关于ssl的配置可查看 &lt;a href=&quot;http://nginx.org/en/docs/http/configuring_https_servers.html&quot;&gt;官方文档&lt;/a&gt;&lt;br /&gt;
&lt;code&gt;nginx -V&lt;/code&gt; 命令可以查看当前安装的nginx是否已经安装ssl模块、是否支持SNI&lt;br /&gt;
具体安装过程可参考 &lt;a href=&quot;http://zou.lu/nginx-https-ssl-module/&quot;&gt;这里&lt;/a&gt; 或者 &lt;a href=&quot;http://blog.yorkxin.org/2009/01/17/rails-ssl/&quot;&gt;这里&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;生成证书&lt;/h3&gt;
&lt;pre&gt;
openssl genrsa -des3 -out domain.key 2048
req -new -key shopqi.key -out domain.csr
cat domain.csr # 复制到购买ssl证书的网站&lt;/pre&gt;
&lt;pre&gt;
# 收到认证证书后打包证书(注意顺序)
cat STAR_domain_com.crt PositiveSSLCA.crt UTNAddTrustServerCA.crt AddTrustExternalCARoot.crt &amp;gt;&amp;gt; domain.crt&lt;/pre&gt;
&lt;h3&gt;去掉nginx重启需要输入密码&lt;/h3&gt;
&lt;p&gt;cp domain.key domain.key.com&lt;br /&gt;
openssl rsa -in domain.key.com -out domain.key&lt;br /&gt;
chmod 400 domain.key&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/582199610/saberma/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/saberma/~8395768/582199610/6499449/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><pubDate>Thu, 11 Aug 2011 15:00:00 +0800</pubDate><guid isPermaLink="false">http://saberma.me/other/2011/08/11/how-to-choose-ssl-certificates</guid><fs:srclink>http://saberma.me/other/2011/08/11/how-to-choose-ssl-certificates.html</fs:srclink><fs:srcfeed>http://saberma.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/saberma/~8395768/582199610/6499449</fs:itemid></item><item><title>虚拟化开发环境</title><link>http://item.feedsky.com/~feedsky/saberma/~8395768/582199611/6499449/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">http://saberma.me/linux/2011/03/03/vagrant-virtual-develop-enviroment</id><content xmlns="http://www.w3.org/2005/Atom" type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/saberma/shopqi&quot;&gt;ShopQi&lt;/a&gt; 中应用到的技术越来越多，开发环境的搭建变得越来越繁琐，这对开源项目的团队协作是相当不利的&lt;br /&gt;
试想，每个程序员的偏好都不同，所使用的操作系统，编辑器都是五花八门的，在开发过程中由于开发环境不一致出现问题的不在少数，调试难度也大&lt;/p&gt;
&lt;p&gt;所以，很多公司要求所有的开发机器不能随意安装软件，要保持开发环境高度一致&lt;br /&gt;
这种强制限制虽然让人感到不自由，但在公司做软件，也算情有可原&lt;/p&gt;
&lt;p&gt;而做开源项目就不同了，我们要尽可能提供便利，减少安装过程对原有环境的影响&lt;br /&gt;
要实现这一目标是非常困难的，还好，现在有了Vagrant&lt;/p&gt;
&lt;h2&gt;Vagrant&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/develop/vagrant.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vargant是构建虚拟化开发环境的工具，它是用ruby开发的，并以gem方面发布，它会帮我们&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;创建一个Ubuntu10.04版本的32位VirtualBox虚拟机，并应用chef安装项目所需的ruby、数据库、应用服务器程序等&lt;/li&gt;
	&lt;li&gt;将宿主机项目所在的目录与虚拟机共享，我们在宿主机用喜欢的编辑器修改程序，虚拟机中的开发环境可以立即读取到&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这样就可以保证项目组成员的开发环境是一致的,不一定是rails项目才适用,java php或其他的都是可以使用vagrant&lt;/p&gt;
&lt;p&gt;有时候,我们需要跟进开发多个项目,有的用java,有的用ruby,有的使用mysql,有的使用mongodb&lt;br /&gt;
把这些都装起来也没问题,但是有点浪费性能了,同一时间我们只会开发一个项目&lt;br /&gt;
用vagrant我们可以很好的解决这类问题,每个项目一个虚拟机,需要时才启动&lt;/p&gt;
&lt;h3&gt;下载&lt;/h3&gt;
&lt;p&gt;虚拟机的操作系统镜像文件是经过定制的，在vargant中引入的镜像文件称为&amp;quot;Box&amp;quot;&lt;br /&gt;
我们先下载这个镜像文件，地址如下&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://files.vagrantup.com/lucid32.box&quot;&gt;http://files.vagrantup.com/lucid32.box&lt;/a&gt;&lt;br /&gt;
假设下载后放至~/lucid32.box&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;同时需要下载VirtualBox程序，并安装&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://www.virtualbox.org/wiki/Downloads&quot;&gt;http://www.virtualbox.org/wiki/Downloads&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;p&gt;安装前请确保宿主机已经安装了ruby和rubygem&lt;/p&gt;
&lt;pre&gt;
gem install bundler vagrant --no-ri --no-rdoc&lt;/pre&gt;
&lt;h3&gt;创建虚拟机&lt;/h3&gt;
&lt;p&gt;先引入刚才下载的镜像文件，作为vagant管理下的一个box，以后每次要生成一个用于开发的虚拟机，都会从这个box中复制出来&lt;/p&gt;
&lt;pre&gt;
vagrant box add lucid32 ~/lucid32.box
#进入项目目录
cd ~/Documents/shopqi
#初始化，生成配置文件Vagrantfile
vagrant init lucid32
#生成项目虚拟机
vagrant up&lt;/pre&gt;
&lt;p&gt;等一会儿，一个ubuntu的虚拟机就建好了&lt;/p&gt;
&lt;h3&gt;在虚拟机上安装开发环境&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/vagrant/pstree.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;vagrant可以根据chef指定的cookbook recipe进行安装，关于chef的介绍可以参考 &lt;a href=&quot;/linux/2011/01/27/chef-for-automate-deploy.html&quot;&gt;应用chef构建服务器集群自动化部署与管理&lt;/a&gt;&lt;br /&gt;
这里采用的是不依赖chef服务器的chef-solo方式，recipe采用 &lt;a href=&quot;https://github.com/saberma/shopqi&quot;&gt;ShopQi&lt;/a&gt; 服务器部署的cookbook&lt;br /&gt;
指定recipe，需要修改Vagrantfile，增加以下内容&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;config.vm.provision :chef_solo do |chef|&lt;br /&gt;
　chef.recipe_url = &amp;#8220;https://dl.dropbox.com/u/19519145/shopqi/chef-solo.tar.gz&amp;#8221;&lt;br /&gt;
　chef.add_recipe &amp;#8220;develop&amp;#8221;&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;chef-solo.tar.gz文件是包含cookbooks集合的压缩包&lt;/p&gt;
&lt;pre&gt;
#进入cookbooks所在目录后运行命令
tar zcvf chef-solo.tar.gz ./cookbooks&lt;/pre&gt;
&lt;p&gt;develop cookbook会引入开发机所需要的依赖recipe， &lt;a href=&quot;https://github.com/saberma/chef-repo/blob/master/cookbooks/develop/recipes/default.rb&quot;&gt;查看内容&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;启动虚拟机&lt;/h3&gt;
&lt;pre&gt;
vagrant up
#如果已经启动，只想更新或者调试recipe，运行vagrant provision&lt;/pre&gt;
&lt;p&gt;如果你和我一样,喜欢rvm来管理ruby版本,并安装了除system自带的ruby,则需要修改/etc/profile,否则gems会被安装在自带ruby之下&lt;br /&gt;
参考 &lt;a href=&quot;http://rvm.beginrescueend.com/integration/vagrant/&quot;&gt;http://rvm.beginrescueend.com/integration/vagrant/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;ssh登录虚拟机&lt;/h3&gt;
&lt;p&gt;之后，我们可以登录虚拟机，像以前一样执行rake等命令&lt;/p&gt;
&lt;pre&gt;
vagrant ssh
#查看项目目录，会发现与宿主机的当前目录内容一致
ls /vagrant&lt;/pre&gt;
&lt;p&gt;刚才引入的cookbook包含了nginx recipe，所以我们可以看看虚拟机上nginx是否能正常访问了&lt;/p&gt;
&lt;pre&gt;
wget -qO- 127.0.0.1:3000&lt;/pre&gt;
&lt;p&gt;結果返回:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Welcome to nginx!&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body bgcolor=&quot;white&quot; text=&quot;black&quot;&amp;gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;Welcome to nginx!&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;p&gt;说明能正常访问，为了能在宿主机上用浏览器访问它，我们需要进行端口映射&lt;br /&gt;
修改VagrantFile，加入以下内容:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vagrant::Config.run do |config|&lt;br /&gt;
　# Forward guest port 3000 to host port 8088 and name the mapping &amp;#8220;web&amp;#8221;&lt;br /&gt;
　config.vm.forward_port(&amp;#8220;web&amp;#8221;, 3000, 8088)&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;用浏览器打开 &lt;a href=&quot;http://127.0.0.1:8088&quot;&gt;http://127.0.0.1:8088&lt;/a&gt; 就可以访问了&lt;/p&gt;
&lt;h3&gt;打包发布&lt;/h3&gt;
&lt;p&gt;现在开发环境已经安装好了，整个过程非常高效。更进一步，我们可以把已经做好的环境打包成镜像文件，分发给其他人，他们就可以瞬间建好开发环境了。&lt;/p&gt;
&lt;p&gt;准备pkg文件,此文件只用于定义映射端口,会被合并至Vagrantfile文件中,内容一般为&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vagrant::Config.run do |config|&lt;br /&gt;
  #Forward nginx&lt;br /&gt;
  config.vm.forward_port(&amp;#8220;web&amp;#8221;, 3000, 8088)&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;
#执行打包
vagrant package --vagrantfile Vagrantfile.pkg&lt;/pre&gt;
&lt;p&gt;执行后当前目录会生成package.box文件&lt;/p&gt;
&lt;h3&gt;关闭虚拟机&lt;/h3&gt;
&lt;pre&gt;
vagrant halt&lt;/pre&gt;
&lt;h2&gt;测试&lt;/h2&gt;
&lt;h3&gt;单元测试&lt;/h3&gt;
&lt;p&gt;还是跟以前一样&lt;/p&gt;
&lt;h3&gt;验收测试&lt;/h3&gt;
&lt;p&gt;由于cucumber使用的@javascript，需要打开浏览器测试ajax。而虚拟机并未安装桌面，此测试进行不了。&lt;br /&gt;
开源社区中有不少技术可以进行headless后台测试，但都不成熟.&lt;/p&gt;
&lt;p&gt;所以,我们只能在宿主机上进行这样的测试了,这样的话,宿主机又要安装项目的相关插件,这可不少.&lt;br /&gt;
有什么办法能让插件跟着项目跑,而不把插件安装到系统上呢?&lt;/p&gt;
&lt;p&gt;答案是可以的,我们在虚拟机上使用bundle install安装插件的时候,指定参数&amp;#8212;path vendor/bundle，将插件安装在项目的vendor/bundle目录，这样在宿主机就不用再安装这些插件了。&lt;br /&gt;
还有,我们的测试数据库还在虚拟机上,还得修改 &lt;code&gt;Vagrantfile&lt;/code&gt; ,把mongodb,redis-server,nodejs等服务的端口映射至宿主机&lt;br /&gt;
直接在宿主机上运行以下命令就可以测试了&lt;/p&gt;
&lt;pre&gt;
bundle exec cucumber features&lt;/pre&gt;
&lt;p&gt;注意:将gems打包后,会导致在虚拟机运行rails各种命令时,速度巨慢,原因是virtaulbox共享目录的bug:随着目录内文件数的增长,对共享目录的访问会很慢&lt;br /&gt;
解决方案是应用nfs共享目录,具体查看这里 &lt;a href=&quot;http://vagrantup.com/docs/nfs.html&quot;&gt;http://vagrantup.com/docs/nfs.html&lt;/a&gt; 和 &lt;a href=&quot;http://vagrantup.com/docs/host_only_networking.html&quot;&gt;http://vagrantup.com/docs/host_only_networking.html&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;
#宿主机需要安装nfs服务
sudo apt-get install nfs-kernel-server&lt;/pre&gt;
&lt;h3&gt;进入rails控制器&lt;/h3&gt;
&lt;p&gt;经过上面的处理,插件已经安装好了,但是由于rails并未安装进系统,使用以下命令是进不了控制台的&lt;/p&gt;
&lt;pre&gt;
rails c&lt;/pre&gt;
&lt;p&gt;得在项目目录下,运行&lt;/p&gt;
&lt;pre&gt;
script/rails c&lt;/pre&gt;
&lt;h2&gt;报错&lt;/h2&gt;
&lt;h3&gt;找不到client.pem&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;[default] I cannot read /etc/chef/client.pem, which you told me to use to sign requests!: stderr&lt;br /&gt;
[default]  (: stderr&lt;br /&gt;
[default] Chef::Exceptions::PrivateKeyMissing: stderr&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这也太奇怪了，用的是chef-solo方式，而非chef-server，怎么也需要client.pem?&lt;br /&gt;
原来是部分cookbook使用了search方法，此方法用于从chef-server中查找相应的信息&lt;/p&gt;
&lt;p&gt;解决方法是在cookbook中加入判断条件，开发环境部署时不调用search，生产环境才调用&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;node[:instance_role]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&amp;#8216;unknown&amp;#8217;: unknown terminal type.&lt;/h3&gt;
&lt;p&gt;很不幸，这是vagrant的一个bug，详情参考 &lt;a href=&quot;https://github.com/mitchellh/vagrant/commit/77a1b9a6efe4f5cdc99343e844835fc790a64c28&quot;&gt;commit#77a1b9a6efe4f5cdc993&lt;/a&gt;&lt;br /&gt;
解决方法，更新vagrant至0.7.3，不过，这个版本还没有发布，只能先手动修改本地gem的代码了&lt;/p&gt;
&lt;h3&gt;&lt;span class=&quot;caps&quot;&gt;FATAL&lt;/span&gt;: No cookbook found in [&amp;#8220;/tmp/vagrant-chef/cookbooks-0&amp;#8221;, &amp;#8220;/tmp/vagrant-chef/cookbooks&amp;#8221;], make sure cookbook_path is set correctly.&lt;/h3&gt;
&lt;p&gt;这是vagrant的一个bug,详情请看&lt;br /&gt;
&lt;a href=&quot;https://github.com/mitchellh/vagrant/issues#issue/308&quot;&gt;https://github.com/mitchellh/vagrant/issues#issue/308&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/mitchellh/vagrant/issues/closed#issue/297&quot;&gt;https://github.com/mitchellh/vagrant/issues/closed#issue/297&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;不影响使用,作者正在修复&amp;#8230;&lt;/p&gt;
&lt;h3&gt;运行chef-solo过程的其他错误?&lt;/h3&gt;
&lt;pre&gt;
#登录虚拟机
vagrant ssh
#在虚拟机运行chef-solo,显示更显示的debug信息
cd /tmp/vagrant-chef
sudo chef-solo -c solo.rb -j dna.json -l debug&lt;/pre&gt;
&lt;p&gt;如果希望vagrant命令运行时都显示详细信息,可以配置Vagrantfile&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;config.vm.provision :chef_solo do |chef|&lt;br /&gt;
　chef.log_level = :debug&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://vagrantup.com/&quot;&gt;Vagrant官网&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://vagrantup.com/docs/provisioners/chef_solo.html&quot;&gt;chef_solo配置&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://tickets.opscode.com/browse/CHEF-1115&quot;&gt;client.pem error&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/fnichol/wiki-notes/wiki/Creating-An-Ubuntu-10.10-x32-Vagrant-Box&quot;&gt;Creating An Ubuntu 10.10 x32 Vagrant Box&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://wiki.csinitiative.com/display/tri/Setting+up+a+Vagrant+VM+for+TriSano&quot;&gt;Setting up a Vagrant VM for TriSano&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://wiki.opscode.com/display/chef/Vagrant&quot;&gt;opscode vagrant&lt;/a&gt;&lt;/p&gt;</content><content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/saberma/shopqi&quot;&gt;ShopQi&lt;/a&gt; 中应用到的技术越来越多，开发环境的搭建变得越来越繁琐，这对开源项目的团队协作是相当不利的&lt;br /&gt;
试想，每个程序员的偏好都不同，所使用的操作系统，编辑器都是五花八门的，在开发过程中由于开发环境不一致出现问题的不在少数，调试难度也大&lt;/p&gt;
&lt;p&gt;所以，很多公司要求所有的开发机器不能随意安装软件，要保持开发环境高度一致&lt;br /&gt;
这种强制限制虽然让人感到不自由，但在公司做软件，也算情有可原&lt;/p&gt;
&lt;p&gt;而做开源项目就不同了，我们要尽可能提供便利，减少安装过程对原有环境的影响&lt;br /&gt;
要实现这一目标是非常困难的，还好，现在有了Vagrant&lt;/p&gt;
&lt;h2&gt;Vagrant&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/develop/vagrant.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vargant是构建虚拟化开发环境的工具，它是用ruby开发的，并以gem方面发布，它会帮我们&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;创建一个Ubuntu10.04版本的32位VirtualBox虚拟机，并应用chef安装项目所需的ruby、数据库、应用服务器程序等&lt;/li&gt;
	&lt;li&gt;将宿主机项目所在的目录与虚拟机共享，我们在宿主机用喜欢的编辑器修改程序，虚拟机中的开发环境可以立即读取到&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这样就可以保证项目组成员的开发环境是一致的,不一定是rails项目才适用,java php或其他的都是可以使用vagrant&lt;/p&gt;
&lt;p&gt;有时候,我们需要跟进开发多个项目,有的用java,有的用ruby,有的使用mysql,有的使用mongodb&lt;br /&gt;
把这些都装起来也没问题,但是有点浪费性能了,同一时间我们只会开发一个项目&lt;br /&gt;
用vagrant我们可以很好的解决这类问题,每个项目一个虚拟机,需要时才启动&lt;/p&gt;
&lt;h3&gt;下载&lt;/h3&gt;
&lt;p&gt;虚拟机的操作系统镜像文件是经过定制的，在vargant中引入的镜像文件称为&amp;quot;Box&amp;quot;&lt;br /&gt;
我们先下载这个镜像文件，地址如下&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://files.vagrantup.com/lucid32.box&quot;&gt;http://files.vagrantup.com/lucid32.box&lt;/a&gt;&lt;br /&gt;
假设下载后放至~/lucid32.box&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;同时需要下载VirtualBox程序，并安装&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://www.virtualbox.org/wiki/Downloads&quot;&gt;http://www.virtualbox.org/wiki/Downloads&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;p&gt;安装前请确保宿主机已经安装了ruby和rubygem&lt;/p&gt;
&lt;pre&gt;
gem install bundler vagrant --no-ri --no-rdoc&lt;/pre&gt;
&lt;h3&gt;创建虚拟机&lt;/h3&gt;
&lt;p&gt;先引入刚才下载的镜像文件，作为vagant管理下的一个box，以后每次要生成一个用于开发的虚拟机，都会从这个box中复制出来&lt;/p&gt;
&lt;pre&gt;
vagrant box add lucid32 ~/lucid32.box
#进入项目目录
cd ~/Documents/shopqi
#初始化，生成配置文件Vagrantfile
vagrant init lucid32
#生成项目虚拟机
vagrant up&lt;/pre&gt;
&lt;p&gt;等一会儿，一个ubuntu的虚拟机就建好了&lt;/p&gt;
&lt;h3&gt;在虚拟机上安装开发环境&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/vagrant/pstree.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;vagrant可以根据chef指定的cookbook recipe进行安装，关于chef的介绍可以参考 &lt;a href=&quot;/linux/2011/01/27/chef-for-automate-deploy.html&quot;&gt;应用chef构建服务器集群自动化部署与管理&lt;/a&gt;&lt;br /&gt;
这里采用的是不依赖chef服务器的chef-solo方式，recipe采用 &lt;a href=&quot;https://github.com/saberma/shopqi&quot;&gt;ShopQi&lt;/a&gt; 服务器部署的cookbook&lt;br /&gt;
指定recipe，需要修改Vagrantfile，增加以下内容&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;config.vm.provision :chef_solo do |chef|&lt;br /&gt;
　chef.recipe_url = &amp;#8220;https://dl.dropbox.com/u/19519145/shopqi/chef-solo.tar.gz&amp;#8221;&lt;br /&gt;
　chef.add_recipe &amp;#8220;develop&amp;#8221;&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;chef-solo.tar.gz文件是包含cookbooks集合的压缩包&lt;/p&gt;
&lt;pre&gt;
#进入cookbooks所在目录后运行命令
tar zcvf chef-solo.tar.gz ./cookbooks&lt;/pre&gt;
&lt;p&gt;develop cookbook会引入开发机所需要的依赖recipe， &lt;a href=&quot;https://github.com/saberma/chef-repo/blob/master/cookbooks/develop/recipes/default.rb&quot;&gt;查看内容&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;启动虚拟机&lt;/h3&gt;
&lt;pre&gt;
vagrant up
#如果已经启动，只想更新或者调试recipe，运行vagrant provision&lt;/pre&gt;
&lt;p&gt;如果你和我一样,喜欢rvm来管理ruby版本,并安装了除system自带的ruby,则需要修改/etc/profile,否则gems会被安装在自带ruby之下&lt;br /&gt;
参考 &lt;a href=&quot;http://rvm.beginrescueend.com/integration/vagrant/&quot;&gt;http://rvm.beginrescueend.com/integration/vagrant/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;ssh登录虚拟机&lt;/h3&gt;
&lt;p&gt;之后，我们可以登录虚拟机，像以前一样执行rake等命令&lt;/p&gt;
&lt;pre&gt;
vagrant ssh
#查看项目目录，会发现与宿主机的当前目录内容一致
ls /vagrant&lt;/pre&gt;
&lt;p&gt;刚才引入的cookbook包含了nginx recipe，所以我们可以看看虚拟机上nginx是否能正常访问了&lt;/p&gt;
&lt;pre&gt;
wget -qO- 127.0.0.1:3000&lt;/pre&gt;
&lt;p&gt;結果返回:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Welcome to nginx!&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body bgcolor=&quot;white&quot; text=&quot;black&quot;&amp;gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;Welcome to nginx!&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;p&gt;说明能正常访问，为了能在宿主机上用浏览器访问它，我们需要进行端口映射&lt;br /&gt;
修改VagrantFile，加入以下内容:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vagrant::Config.run do |config|&lt;br /&gt;
　# Forward guest port 3000 to host port 8088 and name the mapping &amp;#8220;web&amp;#8221;&lt;br /&gt;
　config.vm.forward_port(&amp;#8220;web&amp;#8221;, 3000, 8088)&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;用浏览器打开 &lt;a href=&quot;http://127.0.0.1:8088&quot;&gt;http://127.0.0.1:8088&lt;/a&gt; 就可以访问了&lt;/p&gt;
&lt;h3&gt;打包发布&lt;/h3&gt;
&lt;p&gt;现在开发环境已经安装好了，整个过程非常高效。更进一步，我们可以把已经做好的环境打包成镜像文件，分发给其他人，他们就可以瞬间建好开发环境了。&lt;/p&gt;
&lt;p&gt;准备pkg文件,此文件只用于定义映射端口,会被合并至Vagrantfile文件中,内容一般为&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vagrant::Config.run do |config|&lt;br /&gt;
  #Forward nginx&lt;br /&gt;
  config.vm.forward_port(&amp;#8220;web&amp;#8221;, 3000, 8088)&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;
#执行打包
vagrant package --vagrantfile Vagrantfile.pkg&lt;/pre&gt;
&lt;p&gt;执行后当前目录会生成package.box文件&lt;/p&gt;
&lt;h3&gt;关闭虚拟机&lt;/h3&gt;
&lt;pre&gt;
vagrant halt&lt;/pre&gt;
&lt;h2&gt;测试&lt;/h2&gt;
&lt;h3&gt;单元测试&lt;/h3&gt;
&lt;p&gt;还是跟以前一样&lt;/p&gt;
&lt;h3&gt;验收测试&lt;/h3&gt;
&lt;p&gt;由于cucumber使用的@javascript，需要打开浏览器测试ajax。而虚拟机并未安装桌面，此测试进行不了。&lt;br /&gt;
开源社区中有不少技术可以进行headless后台测试，但都不成熟.&lt;/p&gt;
&lt;p&gt;所以,我们只能在宿主机上进行这样的测试了,这样的话,宿主机又要安装项目的相关插件,这可不少.&lt;br /&gt;
有什么办法能让插件跟着项目跑,而不把插件安装到系统上呢?&lt;/p&gt;
&lt;p&gt;答案是可以的,我们在虚拟机上使用bundle install安装插件的时候,指定参数&amp;#8212;path vendor/bundle，将插件安装在项目的vendor/bundle目录，这样在宿主机就不用再安装这些插件了。&lt;br /&gt;
还有,我们的测试数据库还在虚拟机上,还得修改 &lt;code&gt;Vagrantfile&lt;/code&gt; ,把mongodb,redis-server,nodejs等服务的端口映射至宿主机&lt;br /&gt;
直接在宿主机上运行以下命令就可以测试了&lt;/p&gt;
&lt;pre&gt;
bundle exec cucumber features&lt;/pre&gt;
&lt;p&gt;注意:将gems打包后,会导致在虚拟机运行rails各种命令时,速度巨慢,原因是virtaulbox共享目录的bug:随着目录内文件数的增长,对共享目录的访问会很慢&lt;br /&gt;
解决方案是应用nfs共享目录,具体查看这里 &lt;a href=&quot;http://vagrantup.com/docs/nfs.html&quot;&gt;http://vagrantup.com/docs/nfs.html&lt;/a&gt; 和 &lt;a href=&quot;http://vagrantup.com/docs/host_only_networking.html&quot;&gt;http://vagrantup.com/docs/host_only_networking.html&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;
#宿主机需要安装nfs服务
sudo apt-get install nfs-kernel-server&lt;/pre&gt;
&lt;h3&gt;进入rails控制器&lt;/h3&gt;
&lt;p&gt;经过上面的处理,插件已经安装好了,但是由于rails并未安装进系统,使用以下命令是进不了控制台的&lt;/p&gt;
&lt;pre&gt;
rails c&lt;/pre&gt;
&lt;p&gt;得在项目目录下,运行&lt;/p&gt;
&lt;pre&gt;
script/rails c&lt;/pre&gt;
&lt;h2&gt;报错&lt;/h2&gt;
&lt;h3&gt;找不到client.pem&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;[default] I cannot read /etc/chef/client.pem, which you told me to use to sign requests!: stderr&lt;br /&gt;
[default]  (: stderr&lt;br /&gt;
[default] Chef::Exceptions::PrivateKeyMissing: stderr&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这也太奇怪了，用的是chef-solo方式，而非chef-server，怎么也需要client.pem?&lt;br /&gt;
原来是部分cookbook使用了search方法，此方法用于从chef-server中查找相应的信息&lt;/p&gt;
&lt;p&gt;解决方法是在cookbook中加入判断条件，开发环境部署时不调用search，生产环境才调用&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;node[:instance_role]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&amp;#8216;unknown&amp;#8217;: unknown terminal type.&lt;/h3&gt;
&lt;p&gt;很不幸，这是vagrant的一个bug，详情参考 &lt;a href=&quot;https://github.com/mitchellh/vagrant/commit/77a1b9a6efe4f5cdc99343e844835fc790a64c28&quot;&gt;commit#77a1b9a6efe4f5cdc993&lt;/a&gt;&lt;br /&gt;
解决方法，更新vagrant至0.7.3，不过，这个版本还没有发布，只能先手动修改本地gem的代码了&lt;/p&gt;
&lt;h3&gt;&lt;span class=&quot;caps&quot;&gt;FATAL&lt;/span&gt;: No cookbook found in [&amp;#8220;/tmp/vagrant-chef/cookbooks-0&amp;#8221;, &amp;#8220;/tmp/vagrant-chef/cookbooks&amp;#8221;], make sure cookbook_path is set correctly.&lt;/h3&gt;
&lt;p&gt;这是vagrant的一个bug,详情请看&lt;br /&gt;
&lt;a href=&quot;https://github.com/mitchellh/vagrant/issues#issue/308&quot;&gt;https://github.com/mitchellh/vagrant/issues#issue/308&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/mitchellh/vagrant/issues/closed#issue/297&quot;&gt;https://github.com/mitchellh/vagrant/issues/closed#issue/297&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;不影响使用,作者正在修复&amp;#8230;&lt;/p&gt;
&lt;h3&gt;运行chef-solo过程的其他错误?&lt;/h3&gt;
&lt;pre&gt;
#登录虚拟机
vagrant ssh
#在虚拟机运行chef-solo,显示更显示的debug信息
cd /tmp/vagrant-chef
sudo chef-solo -c solo.rb -j dna.json -l debug&lt;/pre&gt;
&lt;p&gt;如果希望vagrant命令运行时都显示详细信息,可以配置Vagrantfile&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;config.vm.provision :chef_solo do |chef|&lt;br /&gt;
　chef.log_level = :debug&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://vagrantup.com/&quot;&gt;Vagrant官网&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://vagrantup.com/docs/provisioners/chef_solo.html&quot;&gt;chef_solo配置&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://tickets.opscode.com/browse/CHEF-1115&quot;&gt;client.pem error&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/fnichol/wiki-notes/wiki/Creating-An-Ubuntu-10.10-x32-Vagrant-Box&quot;&gt;Creating An Ubuntu 10.10 x32 Vagrant Box&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://wiki.csinitiative.com/display/tri/Setting+up+a+Vagrant+VM+for+TriSano&quot;&gt;Setting up a Vagrant VM for TriSano&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://wiki.opscode.com/display/chef/Vagrant&quot;&gt;opscode vagrant&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/582199611/saberma/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/saberma/~8395768/582199611/6499449/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><pubDate>Thu, 03 Mar 2011 16:00:00 +0800</pubDate><guid isPermaLink="false">http://saberma.me/linux/2011/03/03/vagrant-virtual-develop-enviroment</guid><fs:srclink>http://saberma.me/linux/2011/03/03/vagrant-virtual-develop-enviroment.html</fs:srclink><fs:srcfeed>http://saberma.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/saberma/~8395768/582199611/6499449</fs:itemid></item><item><title>我的Ubuntu</title><link>http://item.feedsky.com/~feedsky/saberma/~8395768/582199612/6499449/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">http://saberma.me/linux/2011/02/24/my-ubuntu</id><content xmlns="http://www.w3.org/2005/Atom" type="html">&lt;p&gt;我安装的Ubuntu版本是10.04，代号Lucid，32位，以下为安装后的配置过程&lt;/p&gt;
&lt;h2&gt;安装升级&lt;/h2&gt;
&lt;h3&gt;基本安装&lt;/h3&gt;
&lt;pre&gt;
#换源，试来试去，还是台湾的源最快
sudo wget https://gist.github.com/raw/352828/ca1d292be9a10fe01b7e0b72d65a74b781683311/sources.list -O /etc/apt/sources.list
sudo apt-get update
sudo apt-get upgrade
#ibus输入法，比Fcitx好用
sudo add-apt-repository ppa:shawn-p-huang/ppa 
sudo apt-get update
sudo apt-get install ibus-gtk ibus-pinyin ibus-pinyin-db-open-phrase ibus-table-wubi
im-switch -s ibus
#chrome浏览器
sudo apt-get install chromium-browser&lt;/pre&gt;
&lt;h3&gt;开发安装&lt;/h3&gt;
&lt;p&gt;虽然我已经把项目移至虚拟化开发环境中，但有些小项目还是需要在宿主机开发的，所以本地的基础开发环境还是要建立，而像mongodb、redis、nginx这些就不要再安装了，通通移至虚拟机&lt;/p&gt;
&lt;pre&gt;
#git
sudo apt-get install git-core openssl
#rvm
bash &amp;lt; &amp;lt;( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
rvm install 1.9.2
rvm 1.9.2 --default
#or sometimes we will get:no such file to load -- openssl (LoadError)
cd ~/.rvm/src/ruby-1.9.2-*/ext/openssl
ruby extconf.rb
make &amp;amp;&amp;amp; make install
#irb should support readline. rmagick need.
sudo apt-get install ncurses-dev libreadline6 libreadline-dev graphicsmagick libmagick9-dev
cd ~/.rvm/src/ruby-1.9.2-*/ext/readline
ruby extconf.rb
make &amp;amp;&amp;amp; make install
#vim编辑神器
sudo apt-get install vim vim-ruby&lt;/pre&gt;
&lt;h2&gt;基本配置&lt;/h2&gt;
&lt;h3&gt;关闭特效&lt;/h3&gt;
&lt;p&gt;用于开发的机子当然是性能优先了&lt;/p&gt;
&lt;p&gt;右击桌面-[Change Desktop BackGround]-[Visual Effects]&lt;br /&gt;
选中[None]&lt;/p&gt;
&lt;h3&gt;自动隐藏任务栏&lt;/h3&gt;
&lt;p&gt;自动隐藏顶端及底端的任务栏，使浏览器及编辑器的窗口可显示的空间最大化&lt;/p&gt;
&lt;p&gt;右击任务栏-[Properties]-[General]&lt;br /&gt;
选中[Autohide]&lt;/p&gt;
&lt;h3&gt;自动记忆&lt;/h3&gt;
&lt;p&gt;关机时已经打开了哪些程序（浏览器、包括terminal中的各个tab），重新开机后会自动打开。&lt;br /&gt;
[System]-[Perferences]-[Startup Applications]-[Options]&lt;br /&gt;
勾选[Automatically remember running applications when logging out]&lt;/p&gt;
&lt;p&gt;顺便把[Startup Programs]中不需要开机启动的程序关闭掉，如Bluetooth Manager&lt;/p&gt;
&lt;h2&gt;Shell&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/ubuntu/zsh.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;安装终极Shell zsh，拥有更强的补全功能(常用工具的参数补全)&lt;/p&gt;
&lt;pre&gt;
sudo apt-get install zsh
#引入增强插件,支持git,rails等补全，可选多种外观皮肤
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
#zsh作为默认shell，重启后生效
chsh -s /bin/zsh&lt;/pre&gt;
&lt;p&gt;修改zsh配置，定义需要引入的插件，修改 &lt;code&gt;~/.zshrc&lt;/code&gt; 的plugins值为:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;plugins=(command-not-found git rails ruby vagrant)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/robbyrussell/oh-my-zsh/wiki/themes&quot;&gt;zsh外观皮肤大全&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins&quot;&gt;zsh插件大全&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;具体有哪些补全功能呢，可以查看列表&lt;/p&gt;
&lt;pre&gt;
#-h不列出文件名
grep -h -r -e '^alias' ~/.oh-my-zsh&lt;/pre&gt;
&lt;h2&gt;浏览器&lt;/h2&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://wiki.ubuntu.org.cn/Qref/Source&quot;&gt;Ubuntu中文wiki&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/ibus/wiki/Ubuntu&quot;&gt;Ibus install&lt;/a&gt;&lt;/p&gt;</content><content:encoded>&lt;p&gt;我安装的Ubuntu版本是10.04，代号Lucid，32位，以下为安装后的配置过程&lt;/p&gt;
&lt;h2&gt;安装升级&lt;/h2&gt;
&lt;h3&gt;基本安装&lt;/h3&gt;
&lt;pre&gt;
#换源，试来试去，还是台湾的源最快
sudo wget https://gist.github.com/raw/352828/ca1d292be9a10fe01b7e0b72d65a74b781683311/sources.list -O /etc/apt/sources.list
sudo apt-get update
sudo apt-get upgrade
#ibus输入法，比Fcitx好用
sudo add-apt-repository ppa:shawn-p-huang/ppa 
sudo apt-get update
sudo apt-get install ibus-gtk ibus-pinyin ibus-pinyin-db-open-phrase ibus-table-wubi
im-switch -s ibus
#chrome浏览器
sudo apt-get install chromium-browser&lt;/pre&gt;
&lt;h3&gt;开发安装&lt;/h3&gt;
&lt;p&gt;虽然我已经把项目移至虚拟化开发环境中，但有些小项目还是需要在宿主机开发的，所以本地的基础开发环境还是要建立，而像mongodb、redis、nginx这些就不要再安装了，通通移至虚拟机&lt;/p&gt;
&lt;pre&gt;
#git
sudo apt-get install git-core openssl
#rvm
bash &amp;lt; &amp;lt;( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
rvm install 1.9.2
rvm 1.9.2 --default
#or sometimes we will get:no such file to load -- openssl (LoadError)
cd ~/.rvm/src/ruby-1.9.2-*/ext/openssl
ruby extconf.rb
make &amp;amp;&amp;amp; make install
#irb should support readline. rmagick need.
sudo apt-get install ncurses-dev libreadline6 libreadline-dev graphicsmagick libmagick9-dev
cd ~/.rvm/src/ruby-1.9.2-*/ext/readline
ruby extconf.rb
make &amp;amp;&amp;amp; make install
#vim编辑神器
sudo apt-get install vim vim-ruby&lt;/pre&gt;
&lt;h2&gt;基本配置&lt;/h2&gt;
&lt;h3&gt;关闭特效&lt;/h3&gt;
&lt;p&gt;用于开发的机子当然是性能优先了&lt;/p&gt;
&lt;p&gt;右击桌面-[Change Desktop BackGround]-[Visual Effects]&lt;br /&gt;
选中[None]&lt;/p&gt;
&lt;h3&gt;自动隐藏任务栏&lt;/h3&gt;
&lt;p&gt;自动隐藏顶端及底端的任务栏，使浏览器及编辑器的窗口可显示的空间最大化&lt;/p&gt;
&lt;p&gt;右击任务栏-[Properties]-[General]&lt;br /&gt;
选中[Autohide]&lt;/p&gt;
&lt;h3&gt;自动记忆&lt;/h3&gt;
&lt;p&gt;关机时已经打开了哪些程序（浏览器、包括terminal中的各个tab），重新开机后会自动打开。&lt;br /&gt;
[System]-[Perferences]-[Startup Applications]-[Options]&lt;br /&gt;
勾选[Automatically remember running applications when logging out]&lt;/p&gt;
&lt;p&gt;顺便把[Startup Programs]中不需要开机启动的程序关闭掉，如Bluetooth Manager&lt;/p&gt;
&lt;h2&gt;Shell&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/ubuntu/zsh.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;安装终极Shell zsh，拥有更强的补全功能(常用工具的参数补全)&lt;/p&gt;
&lt;pre&gt;
sudo apt-get install zsh
#引入增强插件,支持git,rails等补全，可选多种外观皮肤
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
#zsh作为默认shell，重启后生效
chsh -s /bin/zsh&lt;/pre&gt;
&lt;p&gt;修改zsh配置，定义需要引入的插件，修改 &lt;code&gt;~/.zshrc&lt;/code&gt; 的plugins值为:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;plugins=(command-not-found git rails ruby vagrant)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/robbyrussell/oh-my-zsh/wiki/themes&quot;&gt;zsh外观皮肤大全&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins&quot;&gt;zsh插件大全&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;具体有哪些补全功能呢，可以查看列表&lt;/p&gt;
&lt;pre&gt;
#-h不列出文件名
grep -h -r -e '^alias' ~/.oh-my-zsh&lt;/pre&gt;
&lt;h2&gt;浏览器&lt;/h2&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://wiki.ubuntu.org.cn/Qref/Source&quot;&gt;Ubuntu中文wiki&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/ibus/wiki/Ubuntu&quot;&gt;Ibus install&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/582199612/saberma/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/saberma/~8395768/582199612/6499449/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><pubDate>Thu, 24 Feb 2011 16:00:00 +0800</pubDate><guid isPermaLink="false">http://saberma.me/linux/2011/02/24/my-ubuntu</guid><fs:srclink>http://saberma.me/linux/2011/02/24/my-ubuntu.html</fs:srclink><fs:srcfeed>http://saberma.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/saberma/~8395768/582199612/6499449</fs:itemid></item><item><title>应用chef安装openvpn</title><link>http://item.feedsky.com/~feedsky/saberma/~8395768/582199613/6499449/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">http://saberma.me/linux/2011/02/13/use-chef-to-install-openvpn-in-burst-vps</id><content xmlns="http://www.w3.org/2005/Atom" type="html">&lt;h2&gt;burst vps&lt;/h2&gt;
&lt;p&gt;之前买了burst的vps，现在准备为它安装openvpn&lt;br /&gt;
使用openvpn需要先登录后台管理 &lt;a href=&quot;https://184.82.225.10:2408&quot;&gt;https://184.82.225.10:2408/index.php&lt;/a&gt;&lt;br /&gt;
在Networking &amp;amp; Utilities 启用 Enable Tun/Tap&lt;/p&gt;
&lt;h2&gt;安装openvpn&lt;/h2&gt;
&lt;p&gt;假设vps ip为188.188.188.188&lt;br /&gt;
ssh密码为123456&lt;/p&gt;
&lt;p&gt;把这台vps当成vpn服务器，实现无障碍访问互联网&lt;/p&gt;
&lt;pre&gt;
export EDITOR=vim
knife role create vpn&lt;/pre&gt;
&lt;p&gt;knife会打开vim，将内容修改为:&lt;/p&gt;
&lt;pre&gt;
{
  &quot;name&quot;: &quot;vpn&quot;,
  &quot;description&quot;: &quot;openvpn server&quot;,
  &quot;json_class&quot;: &quot;Chef::Role&quot;,
  &quot;default_attributes&quot;: {
    &quot;chef&quot;: {
      &quot;server_url&quot;: &quot;https://api.opscode.com/organizations/#{YOUR COMPANY!}&quot;,
      &quot;cache_path&quot;: &quot;/var/chef/cache&quot;,
      &quot;backup_path&quot;: &quot;/var/chef/backup&quot;,
      &quot;validation_client_name&quot;: &quot;#{YOUR COMPANY!}-validator&quot;,
      &quot;run_path&quot;: &quot;/var/chef&quot;
    }
  },
  &quot;override_attributes&quot;: {
  },
  &quot;chef_type&quot;: &quot;role&quot;,
  &quot;run_list&quot;: [
    &quot;recipe[openvpn::default]&quot;
  ]
}&lt;/pre&gt;
&lt;p&gt;修改完后退出vim，会提示已经&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Created (or updated) role[vpn]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下载相应的cookbook&lt;/p&gt;
&lt;pre&gt;
#此命令最常用
knife cookbook site vendor openvpn&lt;/pre&gt;
&lt;p&gt;远程生成服务端的keys，以下命令在本地执行&lt;br /&gt;
在bash，dot点号命令与source命令一样，把文件加载至shell内存空间&lt;/p&gt;
&lt;p&gt;修改/cookbooks/openvpn/templates/default/server.up.sh.erb，加入以下内容&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;/sbin/sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
/sbin/iptables -t nat -A &lt;span class=&quot;caps&quot;&gt;POSTROUTING&lt;/span&gt; -s &amp;lt;%= @openvpn[:subnet] &lt;span&gt;&amp;gt;/&amp;lt;&lt;/span&gt;= @openvpn[:netmask] &lt;span&gt;&amp;gt; -j &lt;span class=&quot;caps&quot;&gt;SNAT&lt;/span&gt;  &amp;#8212;to-source &amp;lt;&lt;/span&gt;= @openvpn[:local] %&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;修改cookbooks/openvpn/recipes/default.rb，加入变量&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;template &amp;#8220;/etc/openvpn/server.up.sh&amp;#8221; do&lt;br /&gt;
　source &amp;#8220;server.up.sh.erb&amp;#8221;&lt;br /&gt;
　variables :openvpn =&amp;gt; node[:openvpn]&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;
cd files/default/easy-rsa
. vars
rake server&lt;/pre&gt;
&lt;p&gt;为node加入role&lt;/p&gt;
&lt;pre&gt;
knife node list
#以上查看node id，假如为201166，现在查看node的run_list
#加入刚才新增的role
knife node run_list add 201166 &quot;role[vpn]&quot;
knife cookbook upload -a&lt;/pre&gt;
&lt;p&gt;远程登录vps，开始按run_list运行指定recipe&lt;/p&gt;
&lt;pre&gt;
ssh root@188.188.188.188
chef-client&lt;/pre&gt;
&lt;p&gt;在本地配置vpn client&lt;/p&gt;
&lt;pre&gt;
sudo apt-get install openvpn
cd files/default/easy-rsa
. vars
#注意不要运行多次，多次运行的时候请更换name，否则生成的.crt文件会为空
rake client name=&quot;client&quot; gateway=&quot;188.188.188.188&quot;
sudo mkdir /etc/openvpn
cd /etc/openvpn
sudo cp /tmp/client.zip .
sudo unzip client.zip&lt;/pre&gt;
&lt;p&gt;修改DNS，否则就算边上vpn也不能访问twitter等，修改 &lt;code&gt;/etc/resolv.conf&lt;/code&gt;为:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;nameserver 8.8.8.8&lt;br /&gt;
nameserver 8.8.4.4&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;测试&lt;/p&gt;
&lt;pre&gt;
#在服务端运行
openvpn --config /etc/openvpn/server.conf --script-security 2
#在客户端运行
sudo openvpn --config /etc/openvpn/client.conf&lt;/pre&gt;
&lt;p&gt;此时，再通过浏览器访问的google.com不会再跳转至google.com.hk了&lt;/p&gt;
&lt;h2&gt;ssh通道?&lt;/h2&gt;
&lt;p&gt;除了vpn，我们还可以使用ssh通道访问受限网站&lt;/p&gt;
&lt;pre&gt;
#autossh支持断线重连
sudo apt-get install autossh
autossh -M 2000 -N -v root@188.188.188.188 -D 127.0.0.1:7070&lt;/pre&gt;
&lt;p&gt;结合&amp;quot;chrome proxy switch&amp;quot;:https://chrome.google.com/extensions/detail/caehdcpeofiiigpdhbabniblemipncjj?hl=zh-cn 可以让浏览器自动切换代理&lt;/p&gt;
&lt;h2&gt;调试&lt;/h2&gt;
&lt;h3&gt;日志&lt;/h3&gt;
&lt;pre&gt;
tail -f /var/log/openvpn.log&lt;/pre&gt;
&lt;h2&gt;参考资源&lt;br /&gt;
&lt;a href=&quot;http://www.lenghost.cn/vps/burstnet-vps-openvpn-install/&quot;&gt;BurstNET的VPS安装OpenVPN教程总结&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://openvpn.net/index.php/open-source/documentation/howto.html&quot;&gt;Openvpn Document&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://wiki.wowubuntu.com/blog/ubuntu_ssh_tunneling&quot;&gt;ssh tunneling&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://imyue.net/?p=1167&quot;&gt;Chrome自动使用代理&lt;/a&gt;&lt;/h2&gt;</content><content:encoded>&lt;h2&gt;burst vps&lt;/h2&gt;
&lt;p&gt;之前买了burst的vps，现在准备为它安装openvpn&lt;br /&gt;
使用openvpn需要先登录后台管理 &lt;a href=&quot;https://184.82.225.10:2408&quot;&gt;https://184.82.225.10:2408/index.php&lt;/a&gt;&lt;br /&gt;
在Networking &amp;amp; Utilities 启用 Enable Tun/Tap&lt;/p&gt;
&lt;h2&gt;安装openvpn&lt;/h2&gt;
&lt;p&gt;假设vps ip为188.188.188.188&lt;br /&gt;
ssh密码为123456&lt;/p&gt;
&lt;p&gt;把这台vps当成vpn服务器，实现无障碍访问互联网&lt;/p&gt;
&lt;pre&gt;
export EDITOR=vim
knife role create vpn&lt;/pre&gt;
&lt;p&gt;knife会打开vim，将内容修改为:&lt;/p&gt;
&lt;pre&gt;
{
  &quot;name&quot;: &quot;vpn&quot;,
  &quot;description&quot;: &quot;openvpn server&quot;,
  &quot;json_class&quot;: &quot;Chef::Role&quot;,
  &quot;default_attributes&quot;: {
    &quot;chef&quot;: {
      &quot;server_url&quot;: &quot;https://api.opscode.com/organizations/#{YOUR COMPANY!}&quot;,
      &quot;cache_path&quot;: &quot;/var/chef/cache&quot;,
      &quot;backup_path&quot;: &quot;/var/chef/backup&quot;,
      &quot;validation_client_name&quot;: &quot;#{YOUR COMPANY!}-validator&quot;,
      &quot;run_path&quot;: &quot;/var/chef&quot;
    }
  },
  &quot;override_attributes&quot;: {
  },
  &quot;chef_type&quot;: &quot;role&quot;,
  &quot;run_list&quot;: [
    &quot;recipe[openvpn::default]&quot;
  ]
}&lt;/pre&gt;
&lt;p&gt;修改完后退出vim，会提示已经&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Created (or updated) role[vpn]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下载相应的cookbook&lt;/p&gt;
&lt;pre&gt;
#此命令最常用
knife cookbook site vendor openvpn&lt;/pre&gt;
&lt;p&gt;远程生成服务端的keys，以下命令在本地执行&lt;br /&gt;
在bash，dot点号命令与source命令一样，把文件加载至shell内存空间&lt;/p&gt;
&lt;p&gt;修改/cookbooks/openvpn/templates/default/server.up.sh.erb，加入以下内容&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;/sbin/sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
/sbin/iptables -t nat -A &lt;span class=&quot;caps&quot;&gt;POSTROUTING&lt;/span&gt; -s &amp;lt;%= @openvpn[:subnet] &lt;span&gt;&amp;gt;/&amp;lt;&lt;/span&gt;= @openvpn[:netmask] &lt;span&gt;&amp;gt; -j &lt;span class=&quot;caps&quot;&gt;SNAT&lt;/span&gt;  &amp;#8212;to-source &amp;lt;&lt;/span&gt;= @openvpn[:local] %&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;修改cookbooks/openvpn/recipes/default.rb，加入变量&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;template &amp;#8220;/etc/openvpn/server.up.sh&amp;#8221; do&lt;br /&gt;
　source &amp;#8220;server.up.sh.erb&amp;#8221;&lt;br /&gt;
　variables :openvpn =&amp;gt; node[:openvpn]&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;
cd files/default/easy-rsa
. vars
rake server&lt;/pre&gt;
&lt;p&gt;为node加入role&lt;/p&gt;
&lt;pre&gt;
knife node list
#以上查看node id，假如为201166，现在查看node的run_list
#加入刚才新增的role
knife node run_list add 201166 &quot;role[vpn]&quot;
knife cookbook upload -a&lt;/pre&gt;
&lt;p&gt;远程登录vps，开始按run_list运行指定recipe&lt;/p&gt;
&lt;pre&gt;
ssh root@188.188.188.188
chef-client&lt;/pre&gt;
&lt;p&gt;在本地配置vpn client&lt;/p&gt;
&lt;pre&gt;
sudo apt-get install openvpn
cd files/default/easy-rsa
. vars
#注意不要运行多次，多次运行的时候请更换name，否则生成的.crt文件会为空
rake client name=&quot;client&quot; gateway=&quot;188.188.188.188&quot;
sudo mkdir /etc/openvpn
cd /etc/openvpn
sudo cp /tmp/client.zip .
sudo unzip client.zip&lt;/pre&gt;
&lt;p&gt;修改DNS，否则就算边上vpn也不能访问twitter等，修改 &lt;code&gt;/etc/resolv.conf&lt;/code&gt;为:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;nameserver 8.8.8.8&lt;br /&gt;
nameserver 8.8.4.4&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;测试&lt;/p&gt;
&lt;pre&gt;
#在服务端运行
openvpn --config /etc/openvpn/server.conf --script-security 2
#在客户端运行
sudo openvpn --config /etc/openvpn/client.conf&lt;/pre&gt;
&lt;p&gt;此时，再通过浏览器访问的google.com不会再跳转至google.com.hk了&lt;/p&gt;
&lt;h2&gt;ssh通道?&lt;/h2&gt;
&lt;p&gt;除了vpn，我们还可以使用ssh通道访问受限网站&lt;/p&gt;
&lt;pre&gt;
#autossh支持断线重连
sudo apt-get install autossh
autossh -M 2000 -N -v root@188.188.188.188 -D 127.0.0.1:7070&lt;/pre&gt;
&lt;p&gt;结合&amp;quot;chrome proxy switch&amp;quot;:https://chrome.google.com/extensions/detail/caehdcpeofiiigpdhbabniblemipncjj?hl=zh-cn 可以让浏览器自动切换代理&lt;/p&gt;
&lt;h2&gt;调试&lt;/h2&gt;
&lt;h3&gt;日志&lt;/h3&gt;
&lt;pre&gt;
tail -f /var/log/openvpn.log&lt;/pre&gt;
&lt;h2&gt;参考资源&lt;br /&gt;
&lt;a href=&quot;http://www.lenghost.cn/vps/burstnet-vps-openvpn-install/&quot;&gt;BurstNET的VPS安装OpenVPN教程总结&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://openvpn.net/index.php/open-source/documentation/howto.html&quot;&gt;Openvpn Document&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://wiki.wowubuntu.com/blog/ubuntu_ssh_tunneling&quot;&gt;ssh tunneling&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://imyue.net/?p=1167&quot;&gt;Chrome自动使用代理&lt;/a&gt;&lt;/h2&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/582199613/saberma/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/saberma/~8395768/582199613/6499449/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><pubDate>Sun, 13 Feb 2011 16:00:00 +0800</pubDate><guid isPermaLink="false">http://saberma.me/linux/2011/02/13/use-chef-to-install-openvpn-in-burst-vps</guid><fs:srclink>http://saberma.me/linux/2011/02/13/use-chef-to-install-openvpn-in-burst-vps.html</fs:srclink><fs:srcfeed>http://saberma.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/saberma/~8395768/582199613/6499449</fs:itemid></item><item><title>应用chef构建服务器集群自动化部署与管理</title><link>http://item.feedsky.com/~feedsky/saberma/~8395768/582199614/6499449/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">http://saberma.me/linux/2011/01/27/chef-for-automate-deploy</id><content xmlns="http://www.w3.org/2005/Atom" type="html">&lt;p&gt;为了将rails程序部署到服务器上，需要做的工作有&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;安装服务器各组件，如libcurl等&lt;/li&gt;
	&lt;li&gt;配置服务器，如用户管理、iptable等&lt;/li&gt;
	&lt;li&gt;安装数据库&lt;/li&gt;
	&lt;li&gt;安装缓存服务&lt;/li&gt;
	&lt;li&gt;安装配置前端应用服务器&lt;/li&gt;
	&lt;li&gt;安装rvm&lt;/li&gt;
	&lt;li&gt;安装项目所需gems&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上工作属于新服务器到位后的一次性工作，而项目更新升级的工作属于不定期重复性工作，大致如下：&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;下载最新源代码&lt;/li&gt;
	&lt;li&gt;运行数据库脚本&lt;/li&gt;
	&lt;li&gt;重新启动应用服务器&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此外，日常工作还包括服务器的监控、维护等&lt;/p&gt;
&lt;p&gt;当项目规模不大，服务器只有一两台时，可以手动或者应用 &lt;a href=&quot;https://github.com/capistrano/capistrano&quot;&gt;Capistrano&lt;/a&gt; 及 &lt;a href=&quot;https://github.com/mbailey/deprec&quot;&gt;deprec&lt;/a&gt; 自动处理&lt;/p&gt;
&lt;h3&gt;capistrano的缺点&lt;/h3&gt;
&lt;p&gt;在应用capify安装某些组件的过程中，如果出现问题，只能进入源代码检查相应的recipe，因为capistrano的recipe相对来说是隐性的&lt;br /&gt;
比如，安装之前，我们不知道mysql的安装会是通过package直接安装还是通过下载source本地编译后安装，也无法获知其版本&lt;br /&gt;
而当recipe不符合你的要求时，需要对其进行改造的成本比较大&lt;/p&gt;
&lt;p&gt;随着项目规模的不断扩大，比如，有了专门的数据库服务器，甚至是数据库服务器集群，这时候capistrano就会显示力不从心了&lt;br /&gt;
我们需要有专业的服务器管理配置工具来统一管理所有的服务器，这类工具不少，这里只介绍chef&lt;/p&gt;
&lt;h2&gt;Chef&lt;/h2&gt;
&lt;h3&gt;Chef是一个什么样的工具&lt;/h3&gt;
&lt;p&gt;想像一下我们现在需要搭建一台mysql database slave服务器，安装过程我们手动操作了&lt;br /&gt;
没过多久，我们需要第二台，这时候我们会想，如果之后安装第一台的时候把操作过程执行的命令写成脚本&lt;br /&gt;
现在安装第二台，运行一下脚本就行了，节约时间而且不容易出错&lt;/p&gt;
&lt;p&gt;chef就相当于这样的一个脚本管理工具，但功能要强大得多，可定制性强&lt;br /&gt;
chef将脚本命令代码化，定制时只需要修改代码，安装的过程就是执行代码的过程&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;架构图&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/chef/chef.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Chef的三种管理模式&lt;/h3&gt;
&lt;p&gt;1. Chef-Solo&lt;/p&gt;
&lt;p&gt;由一台普通电脑控制所有的服务器，不需要专设一台chef-server&lt;/p&gt;
&lt;p&gt;2. Client-Server&lt;/p&gt;
&lt;p&gt;所有的服务器作为chef-client，统一由chef-server进行管理，管理包括安装、配置等工作&lt;br /&gt;
chef-server可以自建，但安装的东西较多，由于使用solr作为全文搜索引擎，还需要安装java&lt;/p&gt;
&lt;p&gt;3. Opscode Platform&lt;/p&gt;
&lt;p&gt;类似于Client-Server，只是Server端不需要自建，而是采用 &lt;a href=&quot;http://www.opscode.com&quot;&gt;http://www.opscode.com&lt;/a&gt; 提供的chef-server服务，本文描述以此方式为主，免费帐号可以管理5个服务器&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/chef/opscode.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Library程序库&lt;/h3&gt;
&lt;p&gt;程序库是定义的module方法，可以在chef中任何地方被调用，在方法体内可以执行与数据库等资源的交互动作&lt;br /&gt;
详见 &lt;a href=&quot;http://wiki.opscode.com/display/chef/Libraries&quot;&gt;Libraries&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;操作对象&lt;/h3&gt;
&lt;p&gt;chef可以通过recipe指定新建目录、生成配置文件、安装gems等操作，可控性非常强&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;新建目录&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;新建目录/data，owner为node[:user]指定的内容，权限代码为0755&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;directory &amp;#8220;/data&amp;#8221; do&lt;br /&gt;
　owner node[:user]&lt;br /&gt;
　mode 0755&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;生成配置文件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;以someservice.conf.erb为模板，生成/data/someservice.conf配置文件，生成时会传递参数applications给模板&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;template &amp;#8220;/data/someservice.conf&amp;#8221; do&lt;br /&gt;
　owner node[:user]&lt;br /&gt;
　mode 0644&lt;br /&gt;
　source &amp;#8220;someservice.conf.erb&amp;#8221; &lt;br /&gt;
　variables({&lt;br /&gt;
　　:applications =&amp;gt; node[:apps]&lt;br /&gt;
　})&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;把一台新的vps纳入chef管理&lt;/h2&gt;
&lt;p&gt;假设vps ip为188.188.188.188&lt;br /&gt;
ssh密码为123456&lt;/p&gt;
&lt;h3&gt;注册&lt;/h3&gt;
&lt;p&gt;到 &lt;a href=&quot;https://cookbooks.opscode.com/users/new&quot;&gt;https://cookbooks.opscode.com/users/new&lt;/a&gt; 注册帐号&lt;br /&gt;
通过邮件认证后，进入控制台 &lt;a href=&quot;https://manage.opscode.com&quot;&gt;https://manage.opscode.com&lt;/a&gt; 创建organization&lt;br /&gt;
按提示下载两个链接文件至~/Downloads: Download validation key | Generate knife config&lt;br /&gt;
点击右上角的用户名，下载链接文件至~/Download: Get a new private key&lt;/p&gt;
&lt;p&gt;下载后的knife.txt要改名为knife.rb&lt;br /&gt;
&lt;strong&gt;以上三个文件请妥善保管，下载之后opscode平台不再保存这些文件&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;本地安装&lt;/h3&gt;
&lt;pre&gt;
gem install chef net-ssh-multi --no-ri --no-rdoc
cd ~/Documents
git clone git://github.com/opscode/chef-repo.git
cd chef-repo
mkdir -p .chef&lt;/pre&gt;
&lt;pre&gt;
# USERNAME和ORGANIZATION改为实际的文件名称
cd ~/Downloads
cp USERNAME.pem ~/Documents/chef-repo/.chef
cp ORGANIZATION-validator.pem ~/Documents/chef-repo/.chef
cp knife.rb ~/Documents/chef-repo/.chef&lt;/pre&gt;
&lt;pre&gt;
#测试连接opscode platform
knife client list
#成功连接则显示validator的数组，如
#[ &quot;shopqi-validator&quot; ]&lt;/pre&gt;
&lt;h3&gt;为vps安装ruby及chef客户端环境&lt;/h3&gt;
&lt;pre&gt;
knife bootstrap 188.188.188.188 -u root -P 123456
#ssh登录服务器不再需要输入密码
ssh root@188.188.188.188 'sh -c &quot;mkdir ~/.ssh&quot;'
scp ~/.ssh/id_rsa.pub root@188.188.188.188:/root/.ssh/authorized_keys&lt;/pre&gt;
&lt;h3&gt;远程测试是否安装正常&lt;/h3&gt;
&lt;pre&gt;
ssh root@188.188.188.188
chef-client
#如果出现错误，可使用调试模式
chef-client -l debug&lt;/pre&gt;
&lt;h2&gt;让vps运行第一个cookbook&lt;/h2&gt;
&lt;p&gt;安装完服务器操作系统后，第一件事情就是更新软件&lt;br /&gt;
一般情况下，我们会在服务器上运行命令&lt;/p&gt;
&lt;pre&gt;
sudo apt-get update&lt;/pre&gt;
&lt;p&gt;现在我们要通过chef来指定vps运行此命令&lt;/p&gt;
&lt;h3&gt;本地安装apt cookbook&lt;/h3&gt;
&lt;pre&gt;
#此命令最常用，会从opscode官网 &quot;http://cookbooks.opscode.com/&quot;:http://cookbooks.opscode.com/ 下载cookbook
knife cookbook site vendor apt&lt;/pre&gt;
&lt;p&gt;为node加入recipe&lt;/p&gt;
&lt;pre&gt;
knife node list
#以上查看node id，假如为201166，现在查看node的run_list
knife node show 201166 -r
#加入apt recipe到vps的run list中
knife node run_list add 201166 &quot;recipe[apt]&quot;
knife node show 201166 -r
knife cookbook upload -a&lt;/pre&gt;
&lt;h3&gt;远程登录vps，开始按run_list运行指定recipe&lt;/h3&gt;
&lt;pre&gt;
ssh root@188.188.188.188
chef-client
#每次本地更新后都要在远程运行chef-client比较麻烦，可以使用以下命令，设置为后台程序运行
chef-client -i 3600 -s 600&lt;/pre&gt;
&lt;h2&gt;安装ruby-on-rails3&lt;/h2&gt;
&lt;h3&gt;下载cookbook&lt;/h3&gt;
&lt;pre&gt;
#参数-d要求下载依赖的cookbook
knife cookbook site vendor rvm -d
#此cookbook调用了chef内置的deploy resource，实现类似于capistrano的部署功能
#但此cookbook还依赖了java cookbook等，忽略它们即可
knife cookbook site vendor application -d&lt;/pre&gt;
&lt;h3&gt;新增apps data bag&lt;/h3&gt;
&lt;p&gt;data bag相当于全局变量，application cookcook需要根据apps指定role,recipe等参数&lt;/p&gt;
&lt;pre&gt;
export EDITOR=vim
#参考 &quot;https://github.com/opscode/cookbooks/tree/master/application&quot;:https://github.com/opscode/cookbooks/tree/master/application 将json粘贴进来
#退出vim时，data bag会被自动上传至chef server，本地不保存
knife data bag create apps 55true
#保存至本地
mkdir data_bags/apps
knife data bag show apps 55true &amp;gt; data_bags/apps/55true.json
knife data bag from file apps 55true.json&lt;/pre&gt;
&lt;h3&gt;新增role rails&lt;/h3&gt;
&lt;pre&gt;
export EDITOR=vim
knife role create rails&lt;/pre&gt;
&lt;h3&gt;Tip&lt;/h3&gt;
&lt;p&gt;服务器集群中可能会区分出production, staging环境，也可能同一应用部署在多台服务器中，但只需由其中的一台服务器运行数据库迁徙脚本&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;新增production, staging等role，设置app_environment attribute，分配至相应的node，这样可以重复使用deploy cookbook&lt;/li&gt;
	&lt;li&gt;新增app_name_run_migrations role，设置run_migrations attribute&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;常用cookbook&lt;/h2&gt;
&lt;p&gt;以下列出在 &lt;a href=&quot;https://github.com/opscode/cookbooks&quot;&gt;https://github.com/opscode/cookbooks&lt;/a&gt; 中常用的cookbook&lt;/p&gt;
&lt;h3&gt;apt&lt;/h3&gt;
&lt;p&gt;此recipt会运行apt-get update，用于更新操作系统&lt;/p&gt;
&lt;h3&gt;runit&lt;/h3&gt;
&lt;p&gt;用于保证unicorn等服务时刻处于运行状态&lt;br /&gt;
runsvdir服务会不停地监测/etc/sv目录下的服务目录，每个目录对应一个runsv服务&lt;br /&gt;
如果某个runsv服务出现故障停止了,runsvdir会自动重新启动它&lt;/p&gt;
&lt;pre&gt;
#sv服务不启动时查看日志
ps -ef | grep runsvdir
#查看服务的状态
sv stat unicorn_server
#查看服务的日志
tail -f /etc/sv/unicorn_server/log/main/current&lt;/pre&gt;
&lt;h3&gt;bluepill&lt;/h3&gt;
&lt;p&gt;runit保证了服务的运行，bluepill保证进程的cpu、memory占用率处于正常水平&lt;/p&gt;
&lt;h3&gt;users&lt;/h3&gt;
&lt;p&gt;新增用户，用户定义在users data bag中&lt;/p&gt;
&lt;h3&gt;mongodb&lt;/h3&gt;
&lt;p&gt;安装1.6.5版本的mongo server&lt;br /&gt;
&lt;a href=&quot;https://github.com/papercavalier/mongodb-cookbook&quot;&gt;https://github.com/papercavalier/mongodb-cookbook&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;unicorn&lt;/h3&gt;
&lt;p&gt;经过对比，还是选择37signal的unicorn cookbook，因为支持多app部署，而unicornapp不支持(opscode官方已经删除此cookbook)。为了对unicorn子线程进行监控，两者都使用了bluepill取代God进行监控。&lt;br /&gt;
注意：在production环境下，rails3默认不会处理public目录下静态文件的请求，所以不能像dev环境下直接通过指定端口访问某个unicorn服务&lt;/p&gt;
&lt;h3&gt;application&lt;/h3&gt;
&lt;p&gt;&lt;del&gt;这个包含太多的依赖cookbook了，经过以上的实践，还是觉得不用它了，因为里面对rails项目有用的就是deploy部分，自己重写一个也很容易&lt;/del&gt;&lt;/p&gt;
&lt;h2&gt;注意事项&lt;/h2&gt;
&lt;p&gt;在service或者definition中传递参数时，如果将父params需要级联传递下去，得手动为params赋值至其他变量，因为在service或者definition块中，params参数已经被当前块覆盖了&lt;br /&gt;
详情参考：&amp;quot;http://tickets.opscode.com/browse/&lt;span class=&quot;caps&quot;&gt;CHEF&lt;/span&gt;-422&amp;quot;&lt;/p&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/adamhjk/infrastructure-automation-with-chef&quot; title=&quot;Read This First&quot;&gt;Infrastructure Automation with Chef&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.themomorohoax.com/2010/07/31/ruby-chef-tutorial&quot;&gt;Getting started with Chef tutorial&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.agileweboperations.com/getting-started-with-the-opscode-chef-platform-configuration-management-in-the-cloud&quot;&gt;Getting Started With The Opscode Chef Platform – Configuration Management In The Cloud&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.agileweboperations.com/how-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook&quot;&gt;How to Deploy Ruby on Rails With The Opscode Chef Application Cookbook&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://brainspl.at/articles/2009/01/31/cooking-with-chef-101&quot;&gt;Cooking with Chef 101&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.slideshare.net/adamhjk/why-startups-need-automated-infrastructures&quot;&gt;Why Startups Need Automated Infrastructures&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://wiki.opscode.com/display/chef/Deploy+Resource&quot;&gt;Deploy Resource&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/opscode/cookbooks/tree/master/application&quot;&gt;application cookbook&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://smarden.org/runit/&quot;&gt;runit&lt;/a&gt;&lt;/p&gt;</content><content:encoded>&lt;p&gt;为了将rails程序部署到服务器上，需要做的工作有&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;安装服务器各组件，如libcurl等&lt;/li&gt;
	&lt;li&gt;配置服务器，如用户管理、iptable等&lt;/li&gt;
	&lt;li&gt;安装数据库&lt;/li&gt;
	&lt;li&gt;安装缓存服务&lt;/li&gt;
	&lt;li&gt;安装配置前端应用服务器&lt;/li&gt;
	&lt;li&gt;安装rvm&lt;/li&gt;
	&lt;li&gt;安装项目所需gems&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上工作属于新服务器到位后的一次性工作，而项目更新升级的工作属于不定期重复性工作，大致如下：&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;下载最新源代码&lt;/li&gt;
	&lt;li&gt;运行数据库脚本&lt;/li&gt;
	&lt;li&gt;重新启动应用服务器&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此外，日常工作还包括服务器的监控、维护等&lt;/p&gt;
&lt;p&gt;当项目规模不大，服务器只有一两台时，可以手动或者应用 &lt;a href=&quot;https://github.com/capistrano/capistrano&quot;&gt;Capistrano&lt;/a&gt; 及 &lt;a href=&quot;https://github.com/mbailey/deprec&quot;&gt;deprec&lt;/a&gt; 自动处理&lt;/p&gt;
&lt;h3&gt;capistrano的缺点&lt;/h3&gt;
&lt;p&gt;在应用capify安装某些组件的过程中，如果出现问题，只能进入源代码检查相应的recipe，因为capistrano的recipe相对来说是隐性的&lt;br /&gt;
比如，安装之前，我们不知道mysql的安装会是通过package直接安装还是通过下载source本地编译后安装，也无法获知其版本&lt;br /&gt;
而当recipe不符合你的要求时，需要对其进行改造的成本比较大&lt;/p&gt;
&lt;p&gt;随着项目规模的不断扩大，比如，有了专门的数据库服务器，甚至是数据库服务器集群，这时候capistrano就会显示力不从心了&lt;br /&gt;
我们需要有专业的服务器管理配置工具来统一管理所有的服务器，这类工具不少，这里只介绍chef&lt;/p&gt;
&lt;h2&gt;Chef&lt;/h2&gt;
&lt;h3&gt;Chef是一个什么样的工具&lt;/h3&gt;
&lt;p&gt;想像一下我们现在需要搭建一台mysql database slave服务器，安装过程我们手动操作了&lt;br /&gt;
没过多久，我们需要第二台，这时候我们会想，如果之后安装第一台的时候把操作过程执行的命令写成脚本&lt;br /&gt;
现在安装第二台，运行一下脚本就行了，节约时间而且不容易出错&lt;/p&gt;
&lt;p&gt;chef就相当于这样的一个脚本管理工具，但功能要强大得多，可定制性强&lt;br /&gt;
chef将脚本命令代码化，定制时只需要修改代码，安装的过程就是执行代码的过程&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;架构图&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/chef/chef.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Chef的三种管理模式&lt;/h3&gt;
&lt;p&gt;1. Chef-Solo&lt;/p&gt;
&lt;p&gt;由一台普通电脑控制所有的服务器，不需要专设一台chef-server&lt;/p&gt;
&lt;p&gt;2. Client-Server&lt;/p&gt;
&lt;p&gt;所有的服务器作为chef-client，统一由chef-server进行管理，管理包括安装、配置等工作&lt;br /&gt;
chef-server可以自建，但安装的东西较多，由于使用solr作为全文搜索引擎，还需要安装java&lt;/p&gt;
&lt;p&gt;3. Opscode Platform&lt;/p&gt;
&lt;p&gt;类似于Client-Server，只是Server端不需要自建，而是采用 &lt;a href=&quot;http://www.opscode.com&quot;&gt;http://www.opscode.com&lt;/a&gt; 提供的chef-server服务，本文描述以此方式为主，免费帐号可以管理5个服务器&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/chef/opscode.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Library程序库&lt;/h3&gt;
&lt;p&gt;程序库是定义的module方法，可以在chef中任何地方被调用，在方法体内可以执行与数据库等资源的交互动作&lt;br /&gt;
详见 &lt;a href=&quot;http://wiki.opscode.com/display/chef/Libraries&quot;&gt;Libraries&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;操作对象&lt;/h3&gt;
&lt;p&gt;chef可以通过recipe指定新建目录、生成配置文件、安装gems等操作，可控性非常强&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;新建目录&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;新建目录/data，owner为node[:user]指定的内容，权限代码为0755&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;directory &amp;#8220;/data&amp;#8221; do&lt;br /&gt;
　owner node[:user]&lt;br /&gt;
　mode 0755&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;生成配置文件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;以someservice.conf.erb为模板，生成/data/someservice.conf配置文件，生成时会传递参数applications给模板&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;template &amp;#8220;/data/someservice.conf&amp;#8221; do&lt;br /&gt;
　owner node[:user]&lt;br /&gt;
　mode 0644&lt;br /&gt;
　source &amp;#8220;someservice.conf.erb&amp;#8221; &lt;br /&gt;
　variables({&lt;br /&gt;
　　:applications =&amp;gt; node[:apps]&lt;br /&gt;
　})&lt;br /&gt;
end&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;把一台新的vps纳入chef管理&lt;/h2&gt;
&lt;p&gt;假设vps ip为188.188.188.188&lt;br /&gt;
ssh密码为123456&lt;/p&gt;
&lt;h3&gt;注册&lt;/h3&gt;
&lt;p&gt;到 &lt;a href=&quot;https://cookbooks.opscode.com/users/new&quot;&gt;https://cookbooks.opscode.com/users/new&lt;/a&gt; 注册帐号&lt;br /&gt;
通过邮件认证后，进入控制台 &lt;a href=&quot;https://manage.opscode.com&quot;&gt;https://manage.opscode.com&lt;/a&gt; 创建organization&lt;br /&gt;
按提示下载两个链接文件至~/Downloads: Download validation key | Generate knife config&lt;br /&gt;
点击右上角的用户名，下载链接文件至~/Download: Get a new private key&lt;/p&gt;
&lt;p&gt;下载后的knife.txt要改名为knife.rb&lt;br /&gt;
&lt;strong&gt;以上三个文件请妥善保管，下载之后opscode平台不再保存这些文件&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;本地安装&lt;/h3&gt;
&lt;pre&gt;
gem install chef net-ssh-multi --no-ri --no-rdoc
cd ~/Documents
git clone git://github.com/opscode/chef-repo.git
cd chef-repo
mkdir -p .chef&lt;/pre&gt;
&lt;pre&gt;
# USERNAME和ORGANIZATION改为实际的文件名称
cd ~/Downloads
cp USERNAME.pem ~/Documents/chef-repo/.chef
cp ORGANIZATION-validator.pem ~/Documents/chef-repo/.chef
cp knife.rb ~/Documents/chef-repo/.chef&lt;/pre&gt;
&lt;pre&gt;
#测试连接opscode platform
knife client list
#成功连接则显示validator的数组，如
#[ &quot;shopqi-validator&quot; ]&lt;/pre&gt;
&lt;h3&gt;为vps安装ruby及chef客户端环境&lt;/h3&gt;
&lt;pre&gt;
knife bootstrap 188.188.188.188 -u root -P 123456
#ssh登录服务器不再需要输入密码
ssh root@188.188.188.188 'sh -c &quot;mkdir ~/.ssh&quot;'
scp ~/.ssh/id_rsa.pub root@188.188.188.188:/root/.ssh/authorized_keys&lt;/pre&gt;
&lt;h3&gt;远程测试是否安装正常&lt;/h3&gt;
&lt;pre&gt;
ssh root@188.188.188.188
chef-client
#如果出现错误，可使用调试模式
chef-client -l debug&lt;/pre&gt;
&lt;h2&gt;让vps运行第一个cookbook&lt;/h2&gt;
&lt;p&gt;安装完服务器操作系统后，第一件事情就是更新软件&lt;br /&gt;
一般情况下，我们会在服务器上运行命令&lt;/p&gt;
&lt;pre&gt;
sudo apt-get update&lt;/pre&gt;
&lt;p&gt;现在我们要通过chef来指定vps运行此命令&lt;/p&gt;
&lt;h3&gt;本地安装apt cookbook&lt;/h3&gt;
&lt;pre&gt;
#此命令最常用，会从opscode官网 &quot;http://cookbooks.opscode.com/&quot;:http://cookbooks.opscode.com/ 下载cookbook
knife cookbook site vendor apt&lt;/pre&gt;
&lt;p&gt;为node加入recipe&lt;/p&gt;
&lt;pre&gt;
knife node list
#以上查看node id，假如为201166，现在查看node的run_list
knife node show 201166 -r
#加入apt recipe到vps的run list中
knife node run_list add 201166 &quot;recipe[apt]&quot;
knife node show 201166 -r
knife cookbook upload -a&lt;/pre&gt;
&lt;h3&gt;远程登录vps，开始按run_list运行指定recipe&lt;/h3&gt;
&lt;pre&gt;
ssh root@188.188.188.188
chef-client
#每次本地更新后都要在远程运行chef-client比较麻烦，可以使用以下命令，设置为后台程序运行
chef-client -i 3600 -s 600&lt;/pre&gt;
&lt;h2&gt;安装ruby-on-rails3&lt;/h2&gt;
&lt;h3&gt;下载cookbook&lt;/h3&gt;
&lt;pre&gt;
#参数-d要求下载依赖的cookbook
knife cookbook site vendor rvm -d
#此cookbook调用了chef内置的deploy resource，实现类似于capistrano的部署功能
#但此cookbook还依赖了java cookbook等，忽略它们即可
knife cookbook site vendor application -d&lt;/pre&gt;
&lt;h3&gt;新增apps data bag&lt;/h3&gt;
&lt;p&gt;data bag相当于全局变量，application cookcook需要根据apps指定role,recipe等参数&lt;/p&gt;
&lt;pre&gt;
export EDITOR=vim
#参考 &quot;https://github.com/opscode/cookbooks/tree/master/application&quot;:https://github.com/opscode/cookbooks/tree/master/application 将json粘贴进来
#退出vim时，data bag会被自动上传至chef server，本地不保存
knife data bag create apps 55true
#保存至本地
mkdir data_bags/apps
knife data bag show apps 55true &amp;gt; data_bags/apps/55true.json
knife data bag from file apps 55true.json&lt;/pre&gt;
&lt;h3&gt;新增role rails&lt;/h3&gt;
&lt;pre&gt;
export EDITOR=vim
knife role create rails&lt;/pre&gt;
&lt;h3&gt;Tip&lt;/h3&gt;
&lt;p&gt;服务器集群中可能会区分出production, staging环境，也可能同一应用部署在多台服务器中，但只需由其中的一台服务器运行数据库迁徙脚本&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;新增production, staging等role，设置app_environment attribute，分配至相应的node，这样可以重复使用deploy cookbook&lt;/li&gt;
	&lt;li&gt;新增app_name_run_migrations role，设置run_migrations attribute&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;常用cookbook&lt;/h2&gt;
&lt;p&gt;以下列出在 &lt;a href=&quot;https://github.com/opscode/cookbooks&quot;&gt;https://github.com/opscode/cookbooks&lt;/a&gt; 中常用的cookbook&lt;/p&gt;
&lt;h3&gt;apt&lt;/h3&gt;
&lt;p&gt;此recipt会运行apt-get update，用于更新操作系统&lt;/p&gt;
&lt;h3&gt;runit&lt;/h3&gt;
&lt;p&gt;用于保证unicorn等服务时刻处于运行状态&lt;br /&gt;
runsvdir服务会不停地监测/etc/sv目录下的服务目录，每个目录对应一个runsv服务&lt;br /&gt;
如果某个runsv服务出现故障停止了,runsvdir会自动重新启动它&lt;/p&gt;
&lt;pre&gt;
#sv服务不启动时查看日志
ps -ef | grep runsvdir
#查看服务的状态
sv stat unicorn_server
#查看服务的日志
tail -f /etc/sv/unicorn_server/log/main/current&lt;/pre&gt;
&lt;h3&gt;bluepill&lt;/h3&gt;
&lt;p&gt;runit保证了服务的运行，bluepill保证进程的cpu、memory占用率处于正常水平&lt;/p&gt;
&lt;h3&gt;users&lt;/h3&gt;
&lt;p&gt;新增用户，用户定义在users data bag中&lt;/p&gt;
&lt;h3&gt;mongodb&lt;/h3&gt;
&lt;p&gt;安装1.6.5版本的mongo server&lt;br /&gt;
&lt;a href=&quot;https://github.com/papercavalier/mongodb-cookbook&quot;&gt;https://github.com/papercavalier/mongodb-cookbook&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;unicorn&lt;/h3&gt;
&lt;p&gt;经过对比，还是选择37signal的unicorn cookbook，因为支持多app部署，而unicornapp不支持(opscode官方已经删除此cookbook)。为了对unicorn子线程进行监控，两者都使用了bluepill取代God进行监控。&lt;br /&gt;
注意：在production环境下，rails3默认不会处理public目录下静态文件的请求，所以不能像dev环境下直接通过指定端口访问某个unicorn服务&lt;/p&gt;
&lt;h3&gt;application&lt;/h3&gt;
&lt;p&gt;&lt;del&gt;这个包含太多的依赖cookbook了，经过以上的实践，还是觉得不用它了，因为里面对rails项目有用的就是deploy部分，自己重写一个也很容易&lt;/del&gt;&lt;/p&gt;
&lt;h2&gt;注意事项&lt;/h2&gt;
&lt;p&gt;在service或者definition中传递参数时，如果将父params需要级联传递下去，得手动为params赋值至其他变量，因为在service或者definition块中，params参数已经被当前块覆盖了&lt;br /&gt;
详情参考：&amp;quot;http://tickets.opscode.com/browse/&lt;span class=&quot;caps&quot;&gt;CHEF&lt;/span&gt;-422&amp;quot;&lt;/p&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/adamhjk/infrastructure-automation-with-chef&quot; title=&quot;Read This First&quot;&gt;Infrastructure Automation with Chef&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.themomorohoax.com/2010/07/31/ruby-chef-tutorial&quot;&gt;Getting started with Chef tutorial&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.agileweboperations.com/getting-started-with-the-opscode-chef-platform-configuration-management-in-the-cloud&quot;&gt;Getting Started With The Opscode Chef Platform – Configuration Management In The Cloud&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.agileweboperations.com/how-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook&quot;&gt;How to Deploy Ruby on Rails With The Opscode Chef Application Cookbook&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://brainspl.at/articles/2009/01/31/cooking-with-chef-101&quot;&gt;Cooking with Chef 101&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.slideshare.net/adamhjk/why-startups-need-automated-infrastructures&quot;&gt;Why Startups Need Automated Infrastructures&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://wiki.opscode.com/display/chef/Deploy+Resource&quot;&gt;Deploy Resource&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/opscode/cookbooks/tree/master/application&quot;&gt;application cookbook&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://smarden.org/runit/&quot;&gt;runit&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/582199614/saberma/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/saberma/~8395768/582199614/6499449/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><pubDate>Thu, 27 Jan 2011 16:00:00 +0800</pubDate><guid isPermaLink="false">http://saberma.me/linux/2011/01/27/chef-for-automate-deploy</guid><fs:srclink>http://saberma.me/linux/2011/01/27/chef-for-automate-deploy.html</fs:srclink><fs:srcfeed>http://saberma.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/saberma/~8395768/582199614/6499449</fs:itemid></item><item><title>应用node.js,redis,resque构建实时项目</title><link>http://item.feedsky.com/~feedsky/saberma/~8395768/582199615/6499449/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">http://saberma.me/rails/2011/01/10/node-js-juggeraut-redis-resque</id><content xmlns="http://www.w3.org/2005/Atom" type="html">&lt;p&gt;我对javascript语言还是很喜欢，所以对node.js这么有创意的东西，很早就开始关注了。&lt;br /&gt;
据说在实时领域的表现非常好，资源占用也不多，很想实践一番，以后正式项目有对实时性的需求，就可以放心地使用node.js了。&lt;/p&gt;
&lt;p&gt;所以我决定将 &lt;a href=&quot;https://github.com/saberma/55true&quot;&gt;55true&lt;/a&gt; 重新开发，加入即时问答的机制，普通功能开发上使用rails3，而实时性上应用node.js。&lt;br /&gt;
虽然node.js相关的框架已经非常多，也有类似于rails的MVC框架，但是毕竟发展时间还不长，所以使用rails结合node.js的方式进行开发是个不错的发展方式，各取所长。&lt;/p&gt;
&lt;h2&gt;Node.js&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/redis/nodejs.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;node.js是一种可以用js来编写的服务端程序&lt;/p&gt;
&lt;p&gt;这次使用 &lt;a href=&quot;https://github.com/maccman/juggernaut&quot;&gt;https://github.com/maccman/juggernaut&lt;/a&gt; 框架，结合redis，实现rails与node.js服务的交互。&lt;br /&gt;
node.js的发展非常的快，有类似于rails bundler的插件管理工具npm，但为降低node.js相关框架的管理复杂度，我直接将juggernaut及其依赖的js文件都放在 &lt;a href=&quot;https://github.com/saberma/55true&quot;&gt;55true&lt;/a&gt; 的根目录。&lt;/p&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;pre&gt;
cd ~/Downloads
wget http://nodejs.org/dist/node-v0.2.6.tar.gz
tar -xzvf node-v0.2.6.tar.gz
cd node-v0.2.4
./configure
make
make install&lt;/pre&gt;
&lt;h3&gt;Juggernaut&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/maccman/juggernaut&quot;&gt;Juggernaut&lt;/a&gt; 是包含服务端及客户端的实时解决方案，最初服务端是用ruby eventmachine实现的。&lt;br /&gt;
node.js出来后，整个框架就用node.js重写了&lt;/p&gt;
&lt;h3&gt;启动Juggeranut&lt;/h3&gt;
&lt;pre&gt;
#node server.js
sudo node server.js&lt;/pre&gt;
&lt;p&gt;使用root帐号启动，否则firefox客户端访问会报错&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Flash is optional, but it&amp;#8217;s the default fallback for Firefox (until the beta is released). Start the server using root if you want Flash support. It needs to open a restricted por&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Redis&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/redis/redis.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;redis是类似于memcached的高性能键值缓存工具，但它支持更多的值类型、功能更加丰富，且可以将存储内容定时持久化到磁盘中，是NoSQL家庭中出色的一员&lt;/p&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;pre&gt;
wget https://github.com/antirez/redis/tarball/2.2.0-rc2
tar -xzvf antirez-redis-2.2.0-rc2-0-g0540df2.tar.gz
cd antirez-redis-b703b5d
make
sudo make install&lt;/pre&gt;
&lt;h3&gt;客户端&lt;/h3&gt;
&lt;pre&gt;
redis-cli&lt;/pre&gt;
&lt;h3&gt;调试&lt;/h3&gt;
&lt;p&gt;运行客户端后，输入命令&lt;/p&gt;
&lt;pre&gt;
monitor&lt;/pre&gt;
&lt;h3&gt;注意expire&lt;/h3&gt;
&lt;p&gt;redis的expire命令有限制，执行此命令后，对key进行的任何操作都将先对key进行清空操作，详见 &lt;a href=&quot;http://redis.io/topics/expire&quot;&gt;http://redis.io/topics/expire&lt;/a&gt;&lt;br /&gt;
2.1.3以上版本不存在这个限制，但未正式发布稳定版，2.1正式发布时会更改为2.2版本&lt;/p&gt;
&lt;p&gt;具体表现如下:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;redis&amp;gt; set a 100&lt;br /&gt;
OK&lt;br /&gt;
redis&amp;gt; expire a 600&lt;br /&gt;
(integer) 1&lt;br /&gt;
redis&amp;gt; incr a&lt;br /&gt;
(integer) 1&lt;br /&gt;
redis&amp;gt; get a&lt;br /&gt;
&amp;#8220;1&amp;#8221; #正常来说，应返回101，因为还key还没有过期&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果对这个限制敏感，可以尝试 &lt;a href=&quot;http://redis.io/download&quot;&gt;2.2.0rc2版本&lt;/a&gt;&lt;br /&gt;
&lt;code&gt;make&lt;/code&gt; 之后最好再执行下 &lt;code&gt;make test&lt;/code&gt; 测试是否正常，我试过，确实不再存在上面说的奇怪表现&lt;/p&gt;
&lt;h3&gt;redis-rb&lt;/h3&gt;
&lt;p&gt;redis支持多语言实现的客户端访问，redis-rb是redis的客户端之一，基于ruby语言实现。&lt;br /&gt;
redis-rb中的方法名称与redis的一致&lt;/p&gt;
&lt;h2&gt;Resque&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/redis/resque.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;resque是基于redis的后台任务组件，能把任何类或模块作为任务在后台执行，且自带前台管理功能，方便查看执行情况。&lt;/p&gt;
&lt;h3&gt;使用&lt;/h3&gt;
&lt;p&gt;1. 编写任务&lt;/p&gt;
&lt;pre&gt;
class WorkerClass
  @queue = &quot;demo&quot;
  def self.perform(args)
    sleep 3 
    puts &quot;Doing something complex with  #{args}&quot;
  end
end&lt;/pre&gt;
&lt;p&gt;2. 进入任务队列&lt;/p&gt;
&lt;pre&gt;
require &quot;resque&quot;
Resque.enqueue(WorkerClass, args)&lt;/pre&gt;
&lt;p&gt;3. 运行任务&lt;/p&gt;
&lt;h3&gt;与rails3整合&lt;/h3&gt;
&lt;p&gt;0. 配置redis&lt;br /&gt;
新增 &lt;code&gt;config/redis.yml&lt;/code&gt; 文件，加入以下内容&lt;/p&gt;
&lt;pre&gt;
defaults: &amp;amp;defaults
  host: localhost
  port: 6379

development:
  &amp;lt;&amp;lt;: *defaults

test:
  &amp;lt;&amp;lt;: *defaults

staging:
  &amp;lt;&amp;lt;: *defaults

production:
  &amp;lt;&amp;lt;: *defaults
&lt;/pre&gt;
&lt;p&gt;1. 加载resque&lt;/p&gt;
&lt;pre&gt;
echo &quot;require 'resque'&quot; &amp;gt; config/initializers/load_resque.rb
config = YAML::load(File.open(&quot;#{Rails.root}/config/redis.yml&quot;))[Rails.env]
Resque.redis = Redis.new(:host =&amp;gt; config['host'], :port =&amp;gt; config['port'])&lt;/pre&gt;
&lt;p&gt;2. 由于worker类都放在app/jobs，因此需要指定rails加载此目录&lt;br /&gt;
修改 &lt;code&gt;config/application.rb&lt;/code&gt;，加入以下内容&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;config.autoload_paths += %W(#{config.root}/app/jobs)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;3. 加入rake任务&lt;br /&gt;
修改 @RakeFile@，加入以下内容&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;require &amp;#8216;resque/tasks&amp;#8217;&lt;br /&gt;
task &amp;#8220;resque:setup&amp;#8221; =&amp;gt; :environment&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;第二句指明运行 &lt;code&gt;resque:setup&lt;/code&gt; 前先初始化rails环境&lt;/p&gt;
&lt;h3&gt;运行resque后台任务&lt;/h3&gt;
&lt;pre&gt;
QUEUE=* rake resque:work&lt;/pre&gt;
&lt;h3&gt;查看任务执行情况&lt;/h3&gt;
&lt;pre&gt;
#运行resque前台管理服务器
resque-web -p 8282&lt;/pre&gt;
&lt;p&gt;打开浏览器，访问 &lt;a href=&quot;http://0.0.0.0:8282&quot;&gt;http://0.0.0.0:8282&lt;/a&gt;&lt;br /&gt;
前台可以查看失败的worker及其日志，可以手动执行retry操作&lt;/p&gt;
&lt;h3&gt;定时任务&lt;/h3&gt;
&lt;p&gt;如需定时执行任务，可以使用 &lt;a href=&quot;https://github.com/bvandenbos/resque-scheduler&quot;&gt;resque-scheduler&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;测试&lt;/h3&gt;
&lt;p&gt;在测试的时候我们不需要测试过程与resque是异步的,否则resque执行的时候数据可能已经被清空了,使用resque_spec插件可以让resque worker立即执行&lt;/p&gt;
&lt;p&gt;详情查看 &lt;a href=&quot;https://github.com/leshill/resque_spec&quot;&gt;https://github.com/leshill/resque_spec&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://redis.io/commands&quot;&gt;Resque commands&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://github.com/defunkt/resque&quot;&gt;Resque github repository&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blog.redistogo.com/2010/07/26/resque-with-redis-to-go/&quot;&gt;Resque with redis to go&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://rubylearning.com/blog/2010/11/08/do-you-know-resque/&quot;&gt;Do you know resque&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blog.llamarada.net/?p=2202&quot;&gt;resque-scheduler, resque, rails integration, redis&lt;/a&gt;&lt;/p&gt;</content><content:encoded>&lt;p&gt;我对javascript语言还是很喜欢，所以对node.js这么有创意的东西，很早就开始关注了。&lt;br /&gt;
据说在实时领域的表现非常好，资源占用也不多，很想实践一番，以后正式项目有对实时性的需求，就可以放心地使用node.js了。&lt;/p&gt;
&lt;p&gt;所以我决定将 &lt;a href=&quot;https://github.com/saberma/55true&quot;&gt;55true&lt;/a&gt; 重新开发，加入即时问答的机制，普通功能开发上使用rails3，而实时性上应用node.js。&lt;br /&gt;
虽然node.js相关的框架已经非常多，也有类似于rails的MVC框架，但是毕竟发展时间还不长，所以使用rails结合node.js的方式进行开发是个不错的发展方式，各取所长。&lt;/p&gt;
&lt;h2&gt;Node.js&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/redis/nodejs.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;node.js是一种可以用js来编写的服务端程序&lt;/p&gt;
&lt;p&gt;这次使用 &lt;a href=&quot;https://github.com/maccman/juggernaut&quot;&gt;https://github.com/maccman/juggernaut&lt;/a&gt; 框架，结合redis，实现rails与node.js服务的交互。&lt;br /&gt;
node.js的发展非常的快，有类似于rails bundler的插件管理工具npm，但为降低node.js相关框架的管理复杂度，我直接将juggernaut及其依赖的js文件都放在 &lt;a href=&quot;https://github.com/saberma/55true&quot;&gt;55true&lt;/a&gt; 的根目录。&lt;/p&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;pre&gt;
cd ~/Downloads
wget http://nodejs.org/dist/node-v0.2.6.tar.gz
tar -xzvf node-v0.2.6.tar.gz
cd node-v0.2.4
./configure
make
make install&lt;/pre&gt;
&lt;h3&gt;Juggernaut&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/maccman/juggernaut&quot;&gt;Juggernaut&lt;/a&gt; 是包含服务端及客户端的实时解决方案，最初服务端是用ruby eventmachine实现的。&lt;br /&gt;
node.js出来后，整个框架就用node.js重写了&lt;/p&gt;
&lt;h3&gt;启动Juggeranut&lt;/h3&gt;
&lt;pre&gt;
#node server.js
sudo node server.js&lt;/pre&gt;
&lt;p&gt;使用root帐号启动，否则firefox客户端访问会报错&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Flash is optional, but it&amp;#8217;s the default fallback for Firefox (until the beta is released). Start the server using root if you want Flash support. It needs to open a restricted por&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Redis&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/redis/redis.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;redis是类似于memcached的高性能键值缓存工具，但它支持更多的值类型、功能更加丰富，且可以将存储内容定时持久化到磁盘中，是NoSQL家庭中出色的一员&lt;/p&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;pre&gt;
wget https://github.com/antirez/redis/tarball/2.2.0-rc2
tar -xzvf antirez-redis-2.2.0-rc2-0-g0540df2.tar.gz
cd antirez-redis-b703b5d
make
sudo make install&lt;/pre&gt;
&lt;h3&gt;客户端&lt;/h3&gt;
&lt;pre&gt;
redis-cli&lt;/pre&gt;
&lt;h3&gt;调试&lt;/h3&gt;
&lt;p&gt;运行客户端后，输入命令&lt;/p&gt;
&lt;pre&gt;
monitor&lt;/pre&gt;
&lt;h3&gt;注意expire&lt;/h3&gt;
&lt;p&gt;redis的expire命令有限制，执行此命令后，对key进行的任何操作都将先对key进行清空操作，详见 &lt;a href=&quot;http://redis.io/topics/expire&quot;&gt;http://redis.io/topics/expire&lt;/a&gt;&lt;br /&gt;
2.1.3以上版本不存在这个限制，但未正式发布稳定版，2.1正式发布时会更改为2.2版本&lt;/p&gt;
&lt;p&gt;具体表现如下:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;redis&amp;gt; set a 100&lt;br /&gt;
OK&lt;br /&gt;
redis&amp;gt; expire a 600&lt;br /&gt;
(integer) 1&lt;br /&gt;
redis&amp;gt; incr a&lt;br /&gt;
(integer) 1&lt;br /&gt;
redis&amp;gt; get a&lt;br /&gt;
&amp;#8220;1&amp;#8221; #正常来说，应返回101，因为还key还没有过期&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果对这个限制敏感，可以尝试 &lt;a href=&quot;http://redis.io/download&quot;&gt;2.2.0rc2版本&lt;/a&gt;&lt;br /&gt;
&lt;code&gt;make&lt;/code&gt; 之后最好再执行下 &lt;code&gt;make test&lt;/code&gt; 测试是否正常，我试过，确实不再存在上面说的奇怪表现&lt;/p&gt;
&lt;h3&gt;redis-rb&lt;/h3&gt;
&lt;p&gt;redis支持多语言实现的客户端访问，redis-rb是redis的客户端之一，基于ruby语言实现。&lt;br /&gt;
redis-rb中的方法名称与redis的一致&lt;/p&gt;
&lt;h2&gt;Resque&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/redis/resque.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;resque是基于redis的后台任务组件，能把任何类或模块作为任务在后台执行，且自带前台管理功能，方便查看执行情况。&lt;/p&gt;
&lt;h3&gt;使用&lt;/h3&gt;
&lt;p&gt;1. 编写任务&lt;/p&gt;
&lt;pre&gt;
class WorkerClass
  @queue = &quot;demo&quot;
  def self.perform(args)
    sleep 3 
    puts &quot;Doing something complex with  #{args}&quot;
  end
end&lt;/pre&gt;
&lt;p&gt;2. 进入任务队列&lt;/p&gt;
&lt;pre&gt;
require &quot;resque&quot;
Resque.enqueue(WorkerClass, args)&lt;/pre&gt;
&lt;p&gt;3. 运行任务&lt;/p&gt;
&lt;h3&gt;与rails3整合&lt;/h3&gt;
&lt;p&gt;0. 配置redis&lt;br /&gt;
新增 &lt;code&gt;config/redis.yml&lt;/code&gt; 文件，加入以下内容&lt;/p&gt;
&lt;pre&gt;
defaults: &amp;amp;defaults
  host: localhost
  port: 6379

development:
  &amp;lt;&amp;lt;: *defaults

test:
  &amp;lt;&amp;lt;: *defaults

staging:
  &amp;lt;&amp;lt;: *defaults

production:
  &amp;lt;&amp;lt;: *defaults
&lt;/pre&gt;
&lt;p&gt;1. 加载resque&lt;/p&gt;
&lt;pre&gt;
echo &quot;require 'resque'&quot; &amp;gt; config/initializers/load_resque.rb
config = YAML::load(File.open(&quot;#{Rails.root}/config/redis.yml&quot;))[Rails.env]
Resque.redis = Redis.new(:host =&amp;gt; config['host'], :port =&amp;gt; config['port'])&lt;/pre&gt;
&lt;p&gt;2. 由于worker类都放在app/jobs，因此需要指定rails加载此目录&lt;br /&gt;
修改 &lt;code&gt;config/application.rb&lt;/code&gt;，加入以下内容&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;config.autoload_paths += %W(#{config.root}/app/jobs)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;3. 加入rake任务&lt;br /&gt;
修改 @RakeFile@，加入以下内容&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;require &amp;#8216;resque/tasks&amp;#8217;&lt;br /&gt;
task &amp;#8220;resque:setup&amp;#8221; =&amp;gt; :environment&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;第二句指明运行 &lt;code&gt;resque:setup&lt;/code&gt; 前先初始化rails环境&lt;/p&gt;
&lt;h3&gt;运行resque后台任务&lt;/h3&gt;
&lt;pre&gt;
QUEUE=* rake resque:work&lt;/pre&gt;
&lt;h3&gt;查看任务执行情况&lt;/h3&gt;
&lt;pre&gt;
#运行resque前台管理服务器
resque-web -p 8282&lt;/pre&gt;
&lt;p&gt;打开浏览器，访问 &lt;a href=&quot;http://0.0.0.0:8282&quot;&gt;http://0.0.0.0:8282&lt;/a&gt;&lt;br /&gt;
前台可以查看失败的worker及其日志，可以手动执行retry操作&lt;/p&gt;
&lt;h3&gt;定时任务&lt;/h3&gt;
&lt;p&gt;如需定时执行任务，可以使用 &lt;a href=&quot;https://github.com/bvandenbos/resque-scheduler&quot;&gt;resque-scheduler&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;测试&lt;/h3&gt;
&lt;p&gt;在测试的时候我们不需要测试过程与resque是异步的,否则resque执行的时候数据可能已经被清空了,使用resque_spec插件可以让resque worker立即执行&lt;/p&gt;
&lt;p&gt;详情查看 &lt;a href=&quot;https://github.com/leshill/resque_spec&quot;&gt;https://github.com/leshill/resque_spec&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://redis.io/commands&quot;&gt;Resque commands&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://github.com/defunkt/resque&quot;&gt;Resque github repository&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blog.redistogo.com/2010/07/26/resque-with-redis-to-go/&quot;&gt;Resque with redis to go&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://rubylearning.com/blog/2010/11/08/do-you-know-resque/&quot;&gt;Do you know resque&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blog.llamarada.net/?p=2202&quot;&gt;resque-scheduler, resque, rails integration, redis&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/582199615/saberma/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/saberma/~8395768/582199615/6499449/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><pubDate>Mon, 10 Jan 2011 16:00:00 +0800</pubDate><guid isPermaLink="false">http://saberma.me/rails/2011/01/10/node-js-juggeraut-redis-resque</guid><fs:srclink>http://saberma.me/rails/2011/01/10/node-js-juggeraut-redis-resque.html</fs:srclink><fs:srcfeed>http://saberma.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/saberma/~8395768/582199615/6499449</fs:itemid></item><item><title>部署rails项目到heroku，并使用mongohq文档数据库</title><link>http://item.feedsky.com/~feedsky/saberma/~8395768/582199616/6499449/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">http://saberma.me/rails/2010/12/23/deploy-rails-app-to-heroku-and-use-mongohq</id><content xmlns="http://www.w3.org/2005/Atom" type="html">&lt;h2&gt;简介&lt;/h2&gt;
&lt;h3&gt;Heroku&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/heroku/heroku.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;heroku作为rails项目的托管商，具有功能完备、操作简单等优点，而且提供免费服务&lt;br /&gt;
免费项目只提供一个应用服务进程(即只同时在线1个)，提供5m免费关系型数据库&lt;/p&gt;
&lt;h3&gt;MongoHQ&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/heroku/mongohq.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;mongohq提供mongodb文档数据库的在线存储服务&lt;br /&gt;
免费帐号每个数据库有16m的存储空间，heroku已经支持mongohq，将之纳入addons中&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;因此，想要把迷你型或实验性的项目放到网上，又想免费，heroku是最好的选择了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这几天想要查找域名，需要批量查找5-8位拼音组合的.com域名(四位的已绝迹)&lt;br /&gt;
所以写了个程序批量查找有效域名，放到heroku上。&lt;/p&gt;
&lt;h2&gt;安装heroku&lt;/h2&gt;
&lt;pre&gt;
gem install heroku --no-ri -no-rdoc&lt;/pre&gt;
&lt;h3&gt;安装其他&lt;/h3&gt;
&lt;p&gt;rails3及mongodb等环境的安装，可参考 &lt;a href=&quot;http://github.com/saberma/shopqi&quot;&gt;http://github.com/saberma/shopqi&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;新增项目&lt;/h2&gt;
&lt;h3&gt;新增rails项目&lt;/h3&gt;
&lt;pre&gt;
rails new test_heroku
cd test_heroku
#修改GemFile，加入必要的Gem
#...
#生成mongoid配置文件
rails g mongoid:config
git init
git add .
git commit -m &quot;new app&quot;&lt;/pre&gt;
&lt;h3&gt;新建heroku app&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;先到 &lt;a href=&quot;heroku.com&quot;&gt;heroku.com&lt;/a&gt; 注册帐号&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;
heroku create test_heroku
#按提示输入注册时的帐号和密码&lt;/pre&gt;
&lt;h3&gt;加入MongoHQ Addon&lt;/h3&gt;
&lt;pre&gt;
heroku addons:add mongohq:free
#查看新增的数据库信息(MONGOHQ_URL部分)
heroku config --long&lt;/pre&gt;
&lt;p&gt;修改 &lt;code&gt;config/mongoid.yml&lt;/code&gt;, production只留以下内容&lt;/p&gt;
&lt;pre&gt;
production:
  uri: &amp;lt;%= ENV['MONGOHQ_URL'] %&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;mongoid已经支持uri参数了，不需要像mongohq官方文档描述的那样，增加config/initialize/mongo.rb文件&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;部署至heroku&lt;/h3&gt;
&lt;pre&gt;
git push heroku master&lt;/pre&gt;
&lt;h3&gt;测试&lt;/h3&gt;
&lt;p&gt;浏览器访问 &lt;a href=&quot;http://test_heroku.heroku.com&quot;&gt;http://test_heroku.heroku.com&lt;/a&gt; ，看是否显示rails的信息&lt;/p&gt;
&lt;h2&gt;在MongoHQ中查看数据&lt;/h2&gt;
&lt;ol&gt;
	&lt;li&gt;登录 &lt;a href=&quot;https://mongohq.com/databases&quot;&gt;MongoHQ&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;点击右边栏按钮&amp;quot;Add a Remote Connection&amp;quot;&lt;/li&gt;
	&lt;li&gt;输入Name和URI，确定&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;URI为heroku中通过 &lt;code&gt;heroku config --long&lt;/code&gt; 查看到的MONGOHQ_URL内容&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;heroku常用命令&lt;/h2&gt;
&lt;pre&gt;
# 运行rake
heroku rake db:seed
# 运行控制台
# 查看运行进行
heroku ps
# 查看日志
heroku logs
# 查看参数
heroku config --long
# 重命名(子域名)
heroku rename newname
heroku console&lt;/pre&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://docs.heroku.com/&quot;&gt;Heroku Docs&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://docs.mongohq.com/ruby-heroku-addon&quot;&gt;MongoHQ Heroku Addon&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://github.com/nbrochu/bulkdom&quot;&gt;Batch Search Domains&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://vimim.googlecode.com/files/fcitx.phrase.pinyin.txt&quot;&gt;Fcitx Phrase Pinyin&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://open-phrase.googlecode.com/files/phrase_pinyin_freq_sc_20090402.txt.bz2&quot;&gt;Pinyin Frequence&lt;/a&gt;&lt;/p&gt;</content><content:encoded>&lt;h2&gt;简介&lt;/h2&gt;
&lt;h3&gt;Heroku&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/heroku/heroku.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;heroku作为rails项目的托管商，具有功能完备、操作简单等优点，而且提供免费服务&lt;br /&gt;
免费项目只提供一个应用服务进程(即只同时在线1个)，提供5m免费关系型数据库&lt;/p&gt;
&lt;h3&gt;MongoHQ&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/article/heroku/mongohq.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;mongohq提供mongodb文档数据库的在线存储服务&lt;br /&gt;
免费帐号每个数据库有16m的存储空间，heroku已经支持mongohq，将之纳入addons中&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;因此，想要把迷你型或实验性的项目放到网上，又想免费，heroku是最好的选择了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这几天想要查找域名，需要批量查找5-8位拼音组合的.com域名(四位的已绝迹)&lt;br /&gt;
所以写了个程序批量查找有效域名，放到heroku上。&lt;/p&gt;
&lt;h2&gt;安装heroku&lt;/h2&gt;
&lt;pre&gt;
gem install heroku --no-ri -no-rdoc&lt;/pre&gt;
&lt;h3&gt;安装其他&lt;/h3&gt;
&lt;p&gt;rails3及mongodb等环境的安装，可参考 &lt;a href=&quot;http://github.com/saberma/shopqi&quot;&gt;http://github.com/saberma/shopqi&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;新增项目&lt;/h2&gt;
&lt;h3&gt;新增rails项目&lt;/h3&gt;
&lt;pre&gt;
rails new test_heroku
cd test_heroku
#修改GemFile，加入必要的Gem
#...
#生成mongoid配置文件
rails g mongoid:config
git init
git add .
git commit -m &quot;new app&quot;&lt;/pre&gt;
&lt;h3&gt;新建heroku app&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;先到 &lt;a href=&quot;heroku.com&quot;&gt;heroku.com&lt;/a&gt; 注册帐号&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;
heroku create test_heroku
#按提示输入注册时的帐号和密码&lt;/pre&gt;
&lt;h3&gt;加入MongoHQ Addon&lt;/h3&gt;
&lt;pre&gt;
heroku addons:add mongohq:free
#查看新增的数据库信息(MONGOHQ_URL部分)
heroku config --long&lt;/pre&gt;
&lt;p&gt;修改 &lt;code&gt;config/mongoid.yml&lt;/code&gt;, production只留以下内容&lt;/p&gt;
&lt;pre&gt;
production:
  uri: &amp;lt;%= ENV['MONGOHQ_URL'] %&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;mongoid已经支持uri参数了，不需要像mongohq官方文档描述的那样，增加config/initialize/mongo.rb文件&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;部署至heroku&lt;/h3&gt;
&lt;pre&gt;
git push heroku master&lt;/pre&gt;
&lt;h3&gt;测试&lt;/h3&gt;
&lt;p&gt;浏览器访问 &lt;a href=&quot;http://test_heroku.heroku.com&quot;&gt;http://test_heroku.heroku.com&lt;/a&gt; ，看是否显示rails的信息&lt;/p&gt;
&lt;h2&gt;在MongoHQ中查看数据&lt;/h2&gt;
&lt;ol&gt;
	&lt;li&gt;登录 &lt;a href=&quot;https://mongohq.com/databases&quot;&gt;MongoHQ&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;点击右边栏按钮&amp;quot;Add a Remote Connection&amp;quot;&lt;/li&gt;
	&lt;li&gt;输入Name和URI，确定&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;URI为heroku中通过 &lt;code&gt;heroku config --long&lt;/code&gt; 查看到的MONGOHQ_URL内容&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;heroku常用命令&lt;/h2&gt;
&lt;pre&gt;
# 运行rake
heroku rake db:seed
# 运行控制台
# 查看运行进行
heroku ps
# 查看日志
heroku logs
# 查看参数
heroku config --long
# 重命名(子域名)
heroku rename newname
heroku console&lt;/pre&gt;
&lt;h2&gt;参考资源&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://docs.heroku.com/&quot;&gt;Heroku Docs&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://docs.mongohq.com/ruby-heroku-addon&quot;&gt;MongoHQ Heroku Addon&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://github.com/nbrochu/bulkdom&quot;&gt;Batch Search Domains&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://vimim.googlecode.com/files/fcitx.phrase.pinyin.txt&quot;&gt;Fcitx Phrase Pinyin&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://open-phrase.googlecode.com/files/phrase_pinyin_freq_sc_20090402.txt.bz2&quot;&gt;Pinyin Frequence&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/582199616/saberma/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/saberma/~8395768/582199616/6499449/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><pubDate>Thu, 23 Dec 2010 16:00:00 +0800</pubDate><guid isPermaLink="false">http://saberma.me/rails/2010/12/23/deploy-rails-app-to-heroku-and-use-mongohq</guid><fs:srclink>http://saberma.me/rails/2010/12/23/deploy-rails-app-to-heroku-and-use-mongohq.html</fs:srclink><fs:srcfeed>http://saberma.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/saberma/~8395768/582199616/6499449</fs:itemid></item></channel></rss>
