Высокопроизводительная платформа для RoR на основе Linux Gento

Есть свежеустановленный VDS с дистрибутивом gentoo-amd64-current и один мой знакомый разработчик попросил «выжать» из из этого максимум производительности.
Будем ставить RoR+MySQL+Nginx+Mongrel+расширенную поддержку обработки графики.
Сначала надо поставить портежи и установить screen:

cd /usr/
wget ftp://mirror.mcs.anl.gov/pub/gentoo/snapshots/portage-latest.tar.bz2
tar xjf portage-latest.tar.bz2
rm portage-latest.tar.bz2
emerge screen


Все дальнейшие команды лучше запускать в screen. Для того чтоб отсоеденить его надо нажать control+a потом d, а чтоб вернуть — выполнить screen -r
Для максимального облегчения я оформил все команды в виде скрипта. Создайте файл, заполните его содержимым а потом запустите: sh файл. И можете пойти выпить чашечку кофе, так как сборка займет время.
Но прежде надо раскрыть возможность поставить необходимый софт, который замаскирован, иначе ничего не выйдет. Выполните:
nano /etc/portage/package.keywords и введите:

www-servers/mongrel_cluster ~amd64
dev-ruby/ruby-debug ~amd64
dev-ruby/ruby-openid ~amd64
dev-ruby/ruby-yadis ~amd64
dev-ruby/ruby-debug-base ~amd64
dev-ruby/columnize ~amd64
dev-ruby/linecache ~amd6

После ввода жмем control+x потом y потом enter. Ну а теперь скрипт:

#!/bin/sh
USE="-ssl -perl" emerge dev-db/mysql
USE="server" emerge dev-ruby/rubygems
emerge dev-lang/ruby dev-ruby/mysql-ruby dev-ruby/rubygems dev-ruby/ruby-termios
echo "dev-ruby/rmagick lcms gif imagemagick jbig jpeg jpeg2k pdf png svg tiff truetype unicode wmf xml xpm pcre" >> /etc/portage/package.use
ehho "media-gfx/imagemagick lcms gif imagemagick jbig jpeg jpeg2k pdf png svg tiff truetype unicode wmf xml xpm pcre" >> /etc/portage/package.use
USE="-perl" emerge media-gfx/imagemagick dev-ruby/rmagick
USE="mysql" emerge dev-ruby/rails
emerge dev-ruby/rake dev-ruby/capistrano dev-ruby/daemons dev-ruby/gem_plugin www-servers/mongrel www-servers/mongrel_cluster dev-ruby/rmagick dev-ruby/bluecloth dev-ruby/redcloth dev-ruby/ruby-debug dev-ruby/ruby-termios dev-ruby/ruby-openid dev-ruby/ruby-yadis
USE="-perl fastcgi" emerge www-servers/nginx
ln -s /usr/lib64/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d/mongrel_cluster
chmod +x /etc/init.d/mongrel_cluster
mkdir /etc/mongrel_cluster

После окончания установки задаем пароль MySQL и запускаем:

emerge --config =dev-db/mysql-5.0.84-r1
/etc/init.d/mysql start

Пусть у нас все проекты создаются в /var/www. Создадим тестовый проект /var/www/test, и добавим его в Mongrel с правами nginx (вообще-то рекомендуется делать отдельного пользователя под каждый проект, это просто для упрощения):

mongrel_rails cluster::configure -e production -p 3000 -N 3 -c /var/www/test -a 127.0.0.1 --user nginx --group nginx

Мы поместили проект на 3000 порт. Для каждого проекта надо будет указывать новый порт.
Добавим сгенеренный конфиг в автозапуск:

ln -s /var/www/test/config/mongrel_cluster.yml /etc/mongrel_cluster/test.yml

И стартанем Mongrel:

 /etc/init.d/mongrel_cluster start

Теперь Nginx. Настроем его проксировать все запросы к Mongrel, а статику отдавать напрямую. Конфиг сервера будет таким:

server {
listen 80;
server_name test;
access_log /var/log/nginx/test.access_log main;
error_log /var/log/nginx/test.error_log info;
location / {
proxy_pass <a href="http://localhost/">localhost</a>:3000/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location ~* ^.+\.(css|htm|html|js|txt|pdf|jpg|jpeg|gif|png|ico|zip|rar|bz2|gz|tar)$ {
root /var/www/test/public;
}
}


Разумеется, что для каждого проекта надо будет прописывать каждый раз свою секцию server. Теперь запустим nginx.

/etc/init.d/nginx start

Осталось добавить все службы в автозагрузку, чтоб после перезапуска VDS все поднялось само:

rc-update add mysql default
rc-update add nginx default
rc-update add mongrel_cluster default