mod_rails!
July 3rd, 2008
Лирическое вступление
Вот давеча надо было сделать виртуальных хост для одного клиента. Он попросил ему сделать хостинг под RoR проект.
Сначала я думал сделать как всегда - mongrel_cluster + nginx, но не тут-то было! Клиент попросил что бы он полностью имел доступ к управлению своего рельсового приложения. И вот тут-то у меня начались проблемы.
Дело в том что у меня на сервере нету реальных пользователей для хостинга. Все пользователи в базе, они имеют только FTP и все. Шелл если и даю , то только jail.
И тут мне пришла мысль! Есть же mod_rails! Я правда его не тестировал на продакшене, но почитать информацию в интернете решил что этот модуль уже готов к полноценной стабильной работе.
Итак, что же нам требуеться?
- установить gem модуль passenger
- настроить apache
- сделать виртуальных хост для рельсового приложения
Итак! Приступим!
Установка mod_rails и настройка apache
root@host ~ # gem install passenger Building native extensions. This could take a while... Successfully installed passenger-2.0.1 1 gem installed Installing ri documentation for passenger-2.0.1... Installing RDoc documentation for passenger-2.0.1... root@host ~ # passenger-install-apache2-module Welcome to the Phusion Passenger Apache 2 module installer, v2.0.1. This installer will guide you through the entire installation process. It shouldn't take more than 3 minutes in total. Here's what you can expect from the installation process: 1. The Apache 2 module will be installed for you. 2. You'll learn how to configure Apache. 3. You'll learn how to deploy a Ruby on Rails application. Don't worry if anything goes wrong. This installer will advise you on how to solve any problems. Press Enter to continue, or Ctrl-C to abort.
Последняя команда установит модуль к apache, причем у вас должны быть установлены Apache Portable Runtime (APR) development headers. После этого будет собран модуль и инсталятор выдаст вам информации он том как подключить модуль.
Вот мои настройки модуля:
LoadModule passenger_module /opt/ree/lib/ruby/gems/1.8/gems/passenger-2.0.1/ext/apache2/mod_passenger.so PassengerRoot /opt/ree/lib/ruby/gems/1.8/gems/passenger-2.0.1 PassengerRuby /opt/ree/bin/ruby PassengerLogLevel 3 PassengerUserSwitching on PassengerDefaultUser wwwrun PassengerMaxPoolSize 20
Для тестинга я включил полное логгирование.
Виртуальный хост
<VirtualHost xxx.xxx.xxx.xxx:80> ServerName example.com ServerAlias www.example.com ServerAdmin admin@example.com DocumentRoot "/srv/www/virtuals/example.com/public/" ErrorLog "/srv/www/logs/example.com-error.log" CustomLog "/srv/www/logs/example.com-access.log" combined <Directory "/srv/www/virtuals/example.com/public/"> AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
Все! Наш mod_rails настолько умный что если наш каталог public не являеться public рельсового проекта - то он и не будет его обрабатывать как rails app. После этого можно просматривать статистику :)
root@host:~ # /opt/ree/bin/passenger-memory-stats ------------- Apache processes -------------- PID PPID Threads VMSize Private Name --------------------------------------------- 7214 9001 1 302.3 MB 1.6 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7216 9001 1 302.4 MB 2.6 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7233 9001 1 302.5 MB 2.8 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7367 9001 1 302.4 MB 2.5 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7370 9001 1 302.3 MB 1.9 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7375 9001 1 302.2 MB 1.4 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7380 9001 1 302.5 MB 2.6 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7382 9001 1 302.4 MB 2.6 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7386 9001 1 302.2 MB 1.5 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7387 9001 1 302.1 MB 1.3 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7390 9001 1 301.6 MB 0.4 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7394 9001 1 302.2 MB 1.5 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 7879 9001 1 301.6 MB 0.4 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS 9001 1 1 301.3 MB 0.4 MB /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL -DAWSTATS -DSTATUS ### Processes: 14 ### Total private dirty RSS: 23.54 MB --------- Passenger processes ---------- PID Threads VMSize Private Name ---------------------------------------- 8105 1 75.7 MB 6.6 MB Passenger FrameworkSpawner: 2.1.0 8134 1 82.9 MB 8.7 MB Passenger ApplicationSpawner: /srv/www/virtuals/example.com/ 8136 1 103.7 MB 25.3 MB Rails: /srv/www/virtuals/example.com 32446 39 58.4 MB 4.9 MB /opt/ree/lib/ruby/gems/1.8/gems/passenger-2.0.1/ext/apache2/ApplicationPoolServerExecutable 3 /opt/ree/lib/ruby/gems/1.8/gems/passenger-2.0.1/bin/passenger-spawn-server /opt/ree/bin/ruby /tmp/passenger_status.9001.fifo 32449 1 24.5 MB 7.7 MB Passenger spawn server ### Processes: 5 ### Total private dirty RSS: 53.08 MB
Рестартинг приложения происходит после создания в папке tmp проекта файла restart.txt. Он автоматом потом удаляеться после рестарта приложения!
Выводы :)
Просто, удобно, безопасно. Как для шаред хостинга - то что доктор прописал!
7 Responses to “mod_rails!”
Sorry, comments are closed for this article.
July 3rd, 2008 at 12:07 PM интересно, в креш он как часто падать будет :)
July 3rd, 2008 at 12:14 PM А хз... Посмотрим... Но как говорят авторы, если падает спавнер, то апач это не затрагивает
July 6th, 2008 at 09:22 PM А у вас фид на блоге вопросики вместо русских букв выдает
July 7th, 2008 at 11:04 AM Как производительность?
July 7th, 2008 at 11:04 AM Странно... Вы первый кто сказал что есть проблемы. У вас какой клиент для чтения фидов?
July 7th, 2008 at 11:07 AM Пока разницы не заметил :) Памяти жрет столько-же, по скорости не уступает nginx + mongrel.
July 31st, 2008 at 12:23 AM Да уж Пока это у нас не очень сильно развито, так что придётся немного подождать.