retep
06-26-2006, 10:36 PM
RimuHosting provide a download and run rails install script at http://bliki.rimuhosting.com/space/knowledgebase/linux/miscapplications/ruby+on+rails we recomend you use that if it suits your needs.
One customer setup a rails hosting stack (using a custom compiled apache 2.2). They provided the steps they took, so I'll post it here in case it is of any help to anyone else:
Before starting make sure you remove any existing Apache installation!
1/ Developer Tools
root@aserver:/usr/local/src# apt-get install build-essential
2/ ZLib Library
root@aserver:/usr/local/src# wget http://www.zlib.net/zlib-1.2.3.tar.gz
root@aserver:/usr/local/src# tar -xvf zlib-1.2.3.tar.gz
root@aserver:/usr/local/srcz/lib-1.2.3# ./configure
root@aserver:/usr/local/srcz/lib-1.2.3# make
root@aserver:/usr/local/srcz/lib-1.2.3# make install
3/ Apache 2.2
root@aserver:/usr/local/src# wget http://apache.rmplc.co.uk/httpd/httpd-2.2.2.tar.gz
root@aserver:/usr/local/src# tar -xvf httpd-2.2.2.tar.gz
root@aserver:/usr/local/src/httpd-2.2.2# ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-deflate --enable-proxy --enable-proxy-balancer --enable-proxy-http
root@aserver:/usr/local/src/httpd-2.2.2# make
root@aserver:/usr/local/src/httpd-2.2.2# make install
4/ Setup Apache 2.2
Edit /usr/local/apache2/conf/httpd.conf and make sure it has the correct document root settings :: /var/www/
Un-comment the following options ...
-> Include conf/extra/httpd-vhosts.conf
-> Include conf/extra/httpd-default.conf
Then edit the v-hosts file and setup a couple of dummy sites just to make sure everything is working as it should
<VirtualHost *:80>
DocumentRoot /var/www/aserver.org/
ServerName aserver.org
ServerAlias www.aserver.org
ErrorLog logs/aserver.org-error_log
CustomLog logs/aserver.org-access_log common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/aserver.com/
ServerName aserver.com
ServerAlias www.aserver.com
ErrorLog logs/aserver.com-error_log
CustomLog logs/aserver.com-access_log common
</VirtualHost>
Create the two directories in /var/www/ and place a index.html file in each, with some domain specific text in, so we can
differentiate between the two when testing.
Launch Apache
/usr/local/apache2/bin/apachectl start
Check the two sites, and if everything checks out, shut it back down
/usr/local/apache2/bin/apachectl stop
5/ Install Mongrel & Friends
root@aserver:/# gem install daemons gem_plugin mongrel mongrel_cluster sendfile --include-dependencies
Make sure when prompted you select the most recent, non mswin32 option.
6/ Create a test Rails app
root@aserver:/var/www# rails test
7/ Setting up the Mongrel cluster
Enter the test directory, and run the following command
root@aserver:/var/www/test# mongrel_rails cluster::configure -e production -p 8000 -c /var/www/test/ -a 127.0.0.1 -N 3
Which tells Mongrel to run a cluster of 3 servers (-N) for the app /var/www/test/ (-c) starting at port 8000 (-p) on
the host 127.0.0.1 (-a). We run them on the localhost so that there is no exposure to the outside world, Apache 2.2 will handle that
8/ Edit /var/www/test/config/mongrel_cluster.yml and comment out (#) the line 'address: 127.0.0.1' so that we can test the servers
are working from our remote workstation before closing them off and firing them up through Apache.
9/ To make sure the cluster comes back up after a reboot, copy the file
/usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-0.2.0/resources/mongrel_cluster -> /etc/init.d/mongrel_cluster
and make it executable with
root@aserver:/etc/init.d/# chmod +x mongrel_cluster
then make the appropriate changes to the start-up procedures to include the cluster
root@aserver:/# /usr/sbin/update-rc.d mongrel_cluster defaults
and finally create the directory /etc/mongrel_cluster/ and sym link the file /var/www/test/config/mongrel_cluster.yml to it.
root@aserver:/# ln -s /var/www/test/config/mongrel_cluster.yml /etc/mongrel_cluster/testapp.yml
10/ Fire up the cluster using
root@aserver:/# /etc/init.d/mongrel_cluster start
And then check the access by heading over to your site using the ports :8000, :8001 & :8002 and you should see the 'Welcome Aboard'
rails welcome page. If so, everything's gone okay so shut them back down
root@aserver:/# /etc/init.d/mongrel_cluster stop
And un-comment the 'address: 127.0.0.1' line in the mongrel_cluster.yml file as we are now going to setup Apache.
11/ Now setup four Apache config files to handle the site and proxy_balancer and store them with the others Apache conf files in
/usr/local/apache2/conf/extra
-> aserver.common
ServerName aserver.org
DocumentRoot /var/www/test/public
<Directory "/var/www/test/public">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ProxyPass / balancer://mongrel_cluster/
ProxyPassReverse / balancer://mongrel_cluster/
RewriteEngine On
# Make sure people go to www.aserver.org, not aserver.org
RewriteCond %{HTTP_HOST} ^aserver.org$ [NC]
RewriteRule ^(.*)$ http://www.aserver.org$1 [R=301,L]
# Rewrite index to check for static
RewriteRule ^/$ /index.html [QSA]
# Rewrite to check for Rails cached page
RewriteRule ^([^.]+)$ $1.html [QSA]
# Redirect all non-static requests to cluster
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]
# Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
-> aserver.conf
<VirtualHost *:80>
Include /usr/local/apache2/conf/extra/aserver.common
ErrorLog logs/aserver_errors_log
CustomLog logs/aserver_log combined
</VirtualHost>
-> aserver.proxy_cluster.conf
<Proxy balancer://mongrel_cluster>
BalancerMember http://127.0.0.1:8000
BalancerMember http://127.0.0.1:8001
BalancerMember http://127.0.0.1:8002
</Proxy>
-> aserver.proxy_frontend.conf
Listen 8080
<VirtualHost *:8080>
<Location />
SetHandler balancer-manager
Deny from all
Allow from all
</Location>
</VirtualHost>
Once those have been created, add them to the bottom of the /usr/local/apache2/conf/httpd.conf file and comment out the existing
VirtualHost file we set up earlier.
Once that is done, start up the cluster again
root@aserver:/# /etc/init.d/mongrel_cluster start
And then Apache
/usr/local/apache2/bin/apachectl start
Fingers crossed everything should be up and running and ready to go !!
You can view the load balancer interface by going to :8080 on the domain you setup. To remove public access to this, change
the following line in aserver.proxy_frontend.conf
from 'Allow from all' to 'Allow from localhost'
Sources & Help
http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/
http://mongrel.rubyforge.org/docs/mongrel_cluster.html
One customer setup a rails hosting stack (using a custom compiled apache 2.2). They provided the steps they took, so I'll post it here in case it is of any help to anyone else:
Before starting make sure you remove any existing Apache installation!
1/ Developer Tools
root@aserver:/usr/local/src# apt-get install build-essential
2/ ZLib Library
root@aserver:/usr/local/src# wget http://www.zlib.net/zlib-1.2.3.tar.gz
root@aserver:/usr/local/src# tar -xvf zlib-1.2.3.tar.gz
root@aserver:/usr/local/srcz/lib-1.2.3# ./configure
root@aserver:/usr/local/srcz/lib-1.2.3# make
root@aserver:/usr/local/srcz/lib-1.2.3# make install
3/ Apache 2.2
root@aserver:/usr/local/src# wget http://apache.rmplc.co.uk/httpd/httpd-2.2.2.tar.gz
root@aserver:/usr/local/src# tar -xvf httpd-2.2.2.tar.gz
root@aserver:/usr/local/src/httpd-2.2.2# ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-deflate --enable-proxy --enable-proxy-balancer --enable-proxy-http
root@aserver:/usr/local/src/httpd-2.2.2# make
root@aserver:/usr/local/src/httpd-2.2.2# make install
4/ Setup Apache 2.2
Edit /usr/local/apache2/conf/httpd.conf and make sure it has the correct document root settings :: /var/www/
Un-comment the following options ...
-> Include conf/extra/httpd-vhosts.conf
-> Include conf/extra/httpd-default.conf
Then edit the v-hosts file and setup a couple of dummy sites just to make sure everything is working as it should
<VirtualHost *:80>
DocumentRoot /var/www/aserver.org/
ServerName aserver.org
ServerAlias www.aserver.org
ErrorLog logs/aserver.org-error_log
CustomLog logs/aserver.org-access_log common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/aserver.com/
ServerName aserver.com
ServerAlias www.aserver.com
ErrorLog logs/aserver.com-error_log
CustomLog logs/aserver.com-access_log common
</VirtualHost>
Create the two directories in /var/www/ and place a index.html file in each, with some domain specific text in, so we can
differentiate between the two when testing.
Launch Apache
/usr/local/apache2/bin/apachectl start
Check the two sites, and if everything checks out, shut it back down
/usr/local/apache2/bin/apachectl stop
5/ Install Mongrel & Friends
root@aserver:/# gem install daemons gem_plugin mongrel mongrel_cluster sendfile --include-dependencies
Make sure when prompted you select the most recent, non mswin32 option.
6/ Create a test Rails app
root@aserver:/var/www# rails test
7/ Setting up the Mongrel cluster
Enter the test directory, and run the following command
root@aserver:/var/www/test# mongrel_rails cluster::configure -e production -p 8000 -c /var/www/test/ -a 127.0.0.1 -N 3
Which tells Mongrel to run a cluster of 3 servers (-N) for the app /var/www/test/ (-c) starting at port 8000 (-p) on
the host 127.0.0.1 (-a). We run them on the localhost so that there is no exposure to the outside world, Apache 2.2 will handle that
8/ Edit /var/www/test/config/mongrel_cluster.yml and comment out (#) the line 'address: 127.0.0.1' so that we can test the servers
are working from our remote workstation before closing them off and firing them up through Apache.
9/ To make sure the cluster comes back up after a reboot, copy the file
/usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-0.2.0/resources/mongrel_cluster -> /etc/init.d/mongrel_cluster
and make it executable with
root@aserver:/etc/init.d/# chmod +x mongrel_cluster
then make the appropriate changes to the start-up procedures to include the cluster
root@aserver:/# /usr/sbin/update-rc.d mongrel_cluster defaults
and finally create the directory /etc/mongrel_cluster/ and sym link the file /var/www/test/config/mongrel_cluster.yml to it.
root@aserver:/# ln -s /var/www/test/config/mongrel_cluster.yml /etc/mongrel_cluster/testapp.yml
10/ Fire up the cluster using
root@aserver:/# /etc/init.d/mongrel_cluster start
And then check the access by heading over to your site using the ports :8000, :8001 & :8002 and you should see the 'Welcome Aboard'
rails welcome page. If so, everything's gone okay so shut them back down
root@aserver:/# /etc/init.d/mongrel_cluster stop
And un-comment the 'address: 127.0.0.1' line in the mongrel_cluster.yml file as we are now going to setup Apache.
11/ Now setup four Apache config files to handle the site and proxy_balancer and store them with the others Apache conf files in
/usr/local/apache2/conf/extra
-> aserver.common
ServerName aserver.org
DocumentRoot /var/www/test/public
<Directory "/var/www/test/public">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ProxyPass / balancer://mongrel_cluster/
ProxyPassReverse / balancer://mongrel_cluster/
RewriteEngine On
# Make sure people go to www.aserver.org, not aserver.org
RewriteCond %{HTTP_HOST} ^aserver.org$ [NC]
RewriteRule ^(.*)$ http://www.aserver.org$1 [R=301,L]
# Rewrite index to check for static
RewriteRule ^/$ /index.html [QSA]
# Rewrite to check for Rails cached page
RewriteRule ^([^.]+)$ $1.html [QSA]
# Redirect all non-static requests to cluster
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]
# Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
-> aserver.conf
<VirtualHost *:80>
Include /usr/local/apache2/conf/extra/aserver.common
ErrorLog logs/aserver_errors_log
CustomLog logs/aserver_log combined
</VirtualHost>
-> aserver.proxy_cluster.conf
<Proxy balancer://mongrel_cluster>
BalancerMember http://127.0.0.1:8000
BalancerMember http://127.0.0.1:8001
BalancerMember http://127.0.0.1:8002
</Proxy>
-> aserver.proxy_frontend.conf
Listen 8080
<VirtualHost *:8080>
<Location />
SetHandler balancer-manager
Deny from all
Allow from all
</Location>
</VirtualHost>
Once those have been created, add them to the bottom of the /usr/local/apache2/conf/httpd.conf file and comment out the existing
VirtualHost file we set up earlier.
Once that is done, start up the cluster again
root@aserver:/# /etc/init.d/mongrel_cluster start
And then Apache
/usr/local/apache2/bin/apachectl start
Fingers crossed everything should be up and running and ready to go !!
You can view the load balancer interface by going to :8080 on the domain you setup. To remove public access to this, change
the following line in aserver.proxy_frontend.conf
from 'Allow from all' to 'Allow from localhost'
Sources & Help
http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/
http://mongrel.rubyforge.org/docs/mongrel_cluster.html