关于搭建网站服务器的一些建议

经常有朋友来问我一些关于搭建网站服务器的经验,网上其实有不少这样的文章,不过我还是说一些我自己的建议,主要是软件方面的,适用于中小网站。

操作系统的选择

很多人选择操作系统很看重性能,不过要我说,主流发行版在性能、稳定性等等的问题上,差别不会太大。另外还有些爱感时髦的人总问我为什么不用ubuntu。ubuntu优点是不少,界面好看,安装软件方便,很适合做workstation。但是实际上,服务器是不需要界面的,上线后再安装软件的机会也不多。更需要关注的,可能是驱动兼容问题。尤其是服务器相关硬件的兼容性。没什么比装机器的时候发现硬件不兼容更让人郁闷的事情了。
在选择操作系统的问题上,我的建议是尽量使用大路货,RedHat, SUSE之类的都可以,最好是服务器版,版本新一些的,驱动支持相对丰富,能省不少事。

系统的配置

关于系统配置问题,我的建议不多,就一条,能不要的就不要,能关掉的service就关掉。有不少enterprise的service,看着挺吸引人的,但对你未必有用。services列表,最好从头到尾清一遍。尤其装的不是服务器版的时候,把那些workstation才需要的东西都关掉,什么gnome文件搜索服务,赶快关掉,不然死都不知道怎么死的。

软件的安装

安装软件,首先找官方支持的安装包,如果你已经选择了最大路的发行版,这个应该很好找。别上来就自己编译,RedHat、SUSE就是吃这口饭的,有些官方包中还带有针对自己系统的补丁,你很难比他们做的更好。关于在本机上编译就能运行更快的传说更是胡扯。只有三种情况下你需要自己编译:

  1. 找不到官方包。
  2. 有需求明确的补丁或者编译选项未包含在官方包中。
  3. 有需求明确的新版本,官方包还未提供。

除此之外的在安装服务器时的编译行为都只是安慰剂。你还是留着在自己的workstation上玩吧。
如果自己编译,要注意编译选项,别的不说,就说不要乱改–prefix。类Unix系统的目录结构有自己的convention,乱改–prefix很有可能破坏这种convention,需要到处修改缺省配置,会给你添很多麻烦,甚至碰到一些bug。

安全性

这个话题能写一本书。我这只讲一个原则,就是能关掉的端口就关掉。一个网站只需要打开两个端口,一个给http,一个给ssh。上线前用nmap扫一遍,看有没有漏开的端口。
ssh也不要用缺省端口,并且禁止密码登录,只打开PubKeyAuthentication。ssh是个很万能的东西,你可以通过它访问防火墙内的端口,上传文件,运行命令,干什么都够了。

8 条评论

如何为SUSE Linux Enterprise Server 10.0安装RAIDcore驱动

这两天碰到一个问题,就是在一台使用了TYAN S3970主板的服务器上安装SUSE Linux Enterprise Server 10.0,并支持RAID。TYAN好几款AMD方案的主板都选用了Broadcom的芯片组,如果希望支持RAID,都会碰到这个问题。
CIPRICO提供了一些Linux Distribution的驱动,有SuSE 10.0(kernel version 2.6.13-15.7)但没有SuSE Enterprise Server 10.0(kernel version 2.6.16.21-0.8)。经过几个小时的尝试并刻废了数张CDR后,终于安装成功。基本步骤如下:

编译驱动

1. 找一台机器,安装同一版本的SuSE ES 10.0,我需要安装的是i386版本,我用vmware把它装在了我的iMac上。
2. 安装必要的package,包括通用编译工具和kernel-source。
3. 准备好编译环境。你可能需要编辑至少两个版本的驱动,一个是针对2.6.16.21-0.8-default内核,为了安装程序能够发现你的raid;另一个针对2.6.16.21-0.8-smp或者2.6.16.21-0.8-bigsmp内核,是你的服务器最终安装的驱动。因此,在/lib/modules目录下,除了和你目前系统内核对应的目录外,还需要创建另一个。对我来说,我在iMac上安装的是2.6.16.21-0.8-default,我在/lib/modules目录下又创建了一个2.6.16.21-0.8-bigsmp,在这个目录下面建一个到相应目标文件的链接:

cd /lib/modules
sudo mkdir 2.6.16.21-0.8-bigsmp
cd ./2.6.16.21-0.8-bigsmp
sudo ln -s /usr/src/linux-2.6.16.21-0.8-obj/i386/bigsmp build

4. 下载bcraid driveer SDK

curl http://kb.ciprico.com/raidcore/Downloads/V2.1/LIN-DRV-SDK_RC-210-2006044_3.tar
tar xvf LIN-DRV-SDK_RC-210-2006044_3.tar

5. 首先,编译default kernel版本的驱动。因为我目前安装的就是default kernel,所以make的时候不需要加任何选项。否则需要加KVERS=2.6.16.21-0.8-default。

cd ./LIN-DRV-SDK/bcraid
cp Makefile_2.6 Makefile
make
cd ../bccfg
cp Makefile_2.6 Makefile
make

6. 保存好你编译出的bcraid.ko和bccfg.ko
7. 编译bigsmp版本的驱动

cd ../bcraid
make KVERS=2.6.16.21-0.8-bigsmp
cd ../bccfg
make KVERS=2.6.16.21-0.8-bigsmp

8. 好了,你目前有了你需要的两个版本的驱动,别把它们搞混了。

制作安装盘

如果你有兴趣,可以仔细阅读一下SuSE关于DUD(Driver Update Disk)的文档。而你要做的是:
1. 准备好一个update.tar.gz文件。将你编译好的两个版本的驱动按照下面的目录结构放好:
Updatetargz
不要放错了,然后在lib上层目录打包:

tar cvfz update.tar.gz lib

2. 下载一份ciprico提供的SuSE 10.0的iso,虽然你不能用它装,但是你需要其中的脚本。
3. 按照下面目录结构准备好你需要的文件,

Driveriso
其中update.tar.gz是你准备好的。modules目录下的bcraid.ko是2.6.16.21-0.8-default版本的驱动,SuSE installer需要它。其他的文件都可以从上一步下载的iso中得到。
4. 将这些文件以iso 9660格式刻一张光盘。

安装

1. 启动SuSE Linux Enterprise Server 10.0的安装盘。在第一个菜单选择F5 (Dirver Update),选Yes确认。然后选择菜单中的Installation。
2. 系统进入Linuxrc,将刚做好的光盘放入光驱,然后选择正确的资源媒介,OK。
3. 很快系统会告诉你Driver Updated成功,并能找到你的raid array。选择back回到Installer,完成安装。
大功告成!

注意事项

  • 在编译前确认你已经安装了kernel-source这个package。你不需要重新编译内核,但你需要编译kernel modules。
  • update.tar.gz和最后光盘中的目录名一定要和你安装的kernel版本一一对应。如果在Linuxrc中无法找到驱动,多半是目录名和kernel版本不对应造成的。
  • 如果安装的时候可以找到硬盘,重启了一次后却又无法找到,那可能是你在update.tar.gz中提供的驱动于最终安装的内核版本不一致。
  • 如果你不确定最后安装的是那个kernel,最好default, smp, bigsmp都编译一份。

有用的资源

RAIDCore v2.1 Software Downloads
Creating a Driver Update Disk (DUD)
Update Media HowTO

发表评论

国产Linux企业的问题到底出在哪里

最近国产Linux/操作系统又变成热点,“至今国际正式发布的Linux内核文件中,尚没有中国人开发的一行代码。”这句话刺激了不少对国产Linux曾经报过希望的人。
可国产Linux的问题就在于没有为中国人民在Linux内核里加入一行代码么?如果国内Linux企业真的往Linux核心里check in了几千行代码,就可以心安理得了么?
开源/自由软件的特点使得软件的开发和商品化可以由不同的组织来完成,不贡献代码也可以制作发行版。但另一方面,所有商业公司对开源/自由软件的参与支持都是和自己利益挂钩的。Intel公司为Linux开发驱动程序或者参与gcc的开发一定不会去为AMD芯片做优化。RedHat供养Linux开发核心人员是为了加强自己对Linux的控制。Google供养Firefox核心开发人员是为了它的互联网蓝图。一旦这些利益不存在了,这种关系就会解除。AOL当年为什么解散Netscape,HP为什么解雇Keith Packard,Sun为什么在德国的OpenOffice裁员(Update:Sun对OpenOffice部门的裁员主要在爱尔兰,谢谢Hercule的提醒),就是这个道理。当RedHat宣布不再把重点放在Linux桌面系统后,其下的Gtk/Gnome部门的工程师心里一定在打鼓。
那么对于我们的Linux企业,他们需要做些什么?当然,如果能往Linux核心或者重要模块中check in代码甚至成为module owner是再好不过的事情。但作为一个企业,在你还没有能力或者没有足够的reputation来check in代码的时候,最起码你应该能够做好Linux商业化的工作,你们找到了除了靠政府支持以外的商业模式了么?你们能够满足哪种客户的商业需求?针对这些需求,你们需要对你们的Linux发行版做怎样的修改?如果现在又一味地开始追求往Linux核心提交代码,我相信,对于这样一个单纯目标,我们中国人民一定很快就能完成(人家还没毕业的学生都能做到的事情我们有什么不能做到的?),但是这样就国内Linux企业的问题就得到解决了么?

5 条评论

Recent Posts:

Recent Comments:

Archive:

Tags:

Bookmarks:

My music:

About Me:

I am a software engineer in Beijing, China. I write code for work and for fun. I am interested in web technology, life hacking and console games. This blog is dumped from my left brain.
View Robin Lu's profile on LinkedIn

My Flickr:

    drawingAt Modern Sky Music FestivalIMG_0389IMG_0312urumqi panaramaIMG_9664

Friends: