在Freebsd下搭建Rails生产环境
freebsd以其简洁、高效、安全完全征服了我,相见恨晚。其气质就是有追求的程序一样,什么可以被清清楚楚,明明白白的看到,控制到。再也不用suse, redhat这些发行版,太花了。先从一个nice的内核开始!
===================
编译内核
去掉本机不用的硬件支持,去掉不用文件系统NTFS, IPV6这些东西。
内核选项除了能明确其意义的去掉没关系。但改一些参数,还是到sysctl里调,除非能有一个度量的结果。否则网上说的那些优化参数绝大多数过时了,帮不到你什么忙。若不知,勿调。
如果系统没有kernel的源码,就用sysinstall在CD里装一下,这种方法最简洁!
sysintall这种不用X系统的图形化配置工具,真是让人非常喜爱。并不是什么都要命令行。
在/usr/src下
make buildkernel KERNCONF=*
记得install
make installkernel KERNCONF=*
===========================
安装Port技巧
用portsnap fetch extract update 比svup方便,高效的多
绝大多数软件都可以在port下找到,包括ruby、nginx, mongodb,这比自己去下源码安装方便多了
在编译时,为了不总弹出编译选项选择,最快编译好。
export BATCH="yes"
make -DBATCH install clean
使用axel加速port下载
a.axel(据说能搞定文件夹钳套,不错!推荐使用)
cd/usr/ports/ftp/axel
makeinstallclean
vi/etc/make.conf加入
FETCH_CMD=axel-a
DISABLE_SIZE=yes
vi/usr/local/etc/axelrc修改代码
#num_connections=4
num_connections = 10=================
安装必要的利器
freebsd虽然简约,但高级的利器如bash, vim还是不能少的。用其它的难爱。有了port非常方便,在windows下装个软件也没有这么方便啊!
在port里install bash
chsh 改bash为自己的shell
同样的,在vim里 make install clean
=================
用pkg_add包安装
用port下源代码安装太费时间,直接用pkg_add要快的多,推荐安装那些非关键软件,版本新旧没有太大关系,而关键软件还是用port安装!pkg_add安装好处是快,不好的地方,会直接安装依赖的软件包,而这些软件包有可能会产生冲突。
pkg_add -r vim
vim, bash, svn都用apk_add安装
==============
清理服务
关掉sendmail, freebsd是个干净的系统,不知为何,sendmail被打开了呢。在rc.conf中
sendmail_enable="NONE"
打开sshd
sshd_enable='YES'
这样的Freebsd非常nice,总共才用了28M内存!
==============
防火墙
ipfilter要比官方的ipfw要精小,规则要明了一点,决定使用之。
规则:
pass in quick on em1 proto tcp from any to any port=22 flags S keep state
passinquickonem1prototcpfromanytoanyport=80flagsSkeepstate
passinquickprotoicmpfromanytoanyicmp-type8keepstate
passoutquickprotoicmpfromanytoanyicmp-type8keepstate
#passoutquickprototcpfromanytoanykeepstate
#passoutquickprotoudpfromanytoanykeepstate
blockoutquickall
block in quick all以下几条由于最后二条,就不再使用
block in log quick all with short
blockinlogquickallwithipopts
blockinlogquickallwithfrag
blockinlogquickallwithoptlsrr
block in log quick all with opt ssrr当需要向外部要安装软件什么的,就可以去掉#,打开对外通讯
==============
安全:
有些敏感的文件如psswd, ipf.rules都要设成600,中有root才有权限查阅
accton打开系统计帐功能
用newsyslog配置日志文件压缩与归档
mongod服务默认打开了27017,28017,等于打开了数据库大门!在启动参数里加上--bind_ip 127.0.0.1,不向外开放端口,这样外部就访问不到了!
=================
硬件性能测量
只有测度才能有进步,理论上我们应清楚所有硬件、带宽、操作系统、应用软件的吞吐量,与所用代价。
测试硬件性能有unixbench, 测试带宽有iperf, 服务则用 iperf -sD -p80 (开到80测试用)
测试硬盘,做一个简单的benchmark,不用像windows系统找第三方软件, 用diskinfo -vt /dev/ad0就搞定!
==============
RoR生产环境搭建
基本环境:
用port安装ruby, mongo, nginx
安装gem
注意的是在freebsd, gem不在ruby发行中,需要独立安装,port目录/usr/ports/devel/ruby-gems
安装rails后bundle
有了gem就可以装rails, 装好rails 3×就用了bundle。
如果用了iconv, 需要在单独装
在/usr/ports/convert/ruby-iconv
生产环境不用装文档gem install --no-rdoc --no-ri ×××,是不是有点洁癖!
项目环境
只用在本地装capistrano把项目部署装到服务器(本项目用svn,没有就用pkg_add装一个),项目上去就好办了, bundle install 把组件都装上!
bundle install --without=development (去除没有必要的gem包)
capistrano
在本地安装,远程部署到生产服务环境。
为了把Unicorn集成进去,需要把unicorn启动,停止和重启写到cap任务中。
namespace :deploy do
desc"startunicorn"
task:start,:roles=>:appdo
run"cd#{current_path}&&/usr/local/bin/unicorn_rails-c#{current_path}/config/unicorn.rb-Eproduction-D"
end
desc"stopunicorn"
task:stop,:roles=>:appdo
run"kill-QUIT`cat#{current_path}/tmp/pids/unicorn.pid`"
end
desc"restartunicorn"
task:restart,:roles=>:app,:except=>{:no_release=>true}do
run"kill-USR2`cat#{current_path}/tmp/pids/unicorn.pid`"
end
endNginx+Unicorn
unicorn作为应为服务器可以用unix socket端口侦听
worker_processes 3
working_directory"/yourapp"
#Thisloadstheapplicationinthemasterprocessbeforeforking
#workerprocesses
#Readmoreaboutithere:
#http://unicorn.bogomips.org/Unicorn/Configurator.html
preload_apptrue
timeout30
#Thisiswherewespecifythesocket.
#WewillpointtheupstreamNginxmoduletothissocketlateron
listen"/yourapp/tmp/sockets/unicorn.sock",:backlog=>64
pid"/yourapp/tmp/pids/unicorn.pid"
#Setthepathofthelogfilesinsidethelogfolderofthetestapp
stderr_path"/yourapp/log/unicorn.stderr.log"
stdout_path "/yourapp/log/unicorn.stdout.log"======
常用路径
mongod启动脚本:/usr/local/etc/rc.d/mongod
相关推荐
我们直接指定到一个大空间去存储mysql数据。在CONFIGURE_ARGS=后面增加--with-charset=gb2312 \和--with-xcharset=all \ 两行才能支持中文字符。