在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

end

Nginx+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

相关推荐