Following from the Ubuntu Hardy - Thin web server for Ruby article, let's look at creating and configuring Apache to proxy to thin so we can serve our Ruby on Rails application.
Contents |
To get the most out of this article you need to have a couple of things preinstalled:
Firstly, you need Apache installed (see Ubuntu Hardy - installing Apache and PHP5) - if you don't require PHP then please feel free to leave that section out.
Secondly, you will need to have thin installed - as mentioned above, please see the Ubuntu Hardy - Thin web server for Ruby article for more details.
To start with, we will need a basic Ruby on Rails application. Move into your public_html folder (create one if you do not have one already):
cd ~/public_html
Then create a Rails application. We'll use the default sqlite database for this example:
rails railsapp
Apache will need the proxy and rewrite modules enabled.
Depending on your Apache install you may need to issue all the following commands:
sudo a2enmod proxy sudo a2enmod proxy_balancer sudo a2enmod proxy_http sudo a2enmod rewrite
Once done, reload Apache:
sudo /etc/init.d/apache2 force-reload
So what's the plan?
Well, for our simple application we'll set 3 thin instances running from port 5000 and in production mode.
Let's start off by creating the virtual host:
sudo nano /etc/apache2/sites-available/domain.com
The following will suffice for a basic application:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /home/demo/public_html/railsapp/public
RewriteEngine On
<Proxy balancer://thinservers>
BalancerMember http://127.0.0.1:5000
BalancerMember http://127.0.0.1:5001
BalancerMember http://127.0.0.1:5002
</Proxy>
# Redirect all non-static requests to thin
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://thinservers%{REQUEST_URI} [P,QSA,L]
ProxyPass / balancer://thinservers/
ProxyPassReverse / balancer://thinservers/
ProxyPreserveHost on
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
# Custom log file locations
ErrorLog /home/demo/public_html/railsapp/log/error.log
CustomLog /home/demo/public_html/railsapp/log/access.log combined
</VirtualHost>
Does that look familiar?
Well, it is pretty much the same as the virtual host used to proxy to mongrel servers.
If you think about it, we don't need anything different as all we are doing is rerouting non-static requests to thin in the same way we would for mongrels.
Don't forget to enable the vhost:
sudo a2ensite domain.com
And restart Apache:
sudo /etc/init.d/apache2 reload
If you get any port and NameVirtualHost errors then please read the Apache Virtual Host article which will take you through setting up said details.
Next we need to configure thin on our application.
To kill two birds with one stone, we'll go straight into creating an init.d file so the thin servers are started on a Cloud Server reboot.
Remember we want 3 servers running sequentially from port 5000 in production mode:
sudo thin config -C /etc/thin/railsapp.yml -c /home/demo/public_html/railsapp/ --servers 3 -p 5000 -e production
Have a quick check of the file we created:
cat /etc/thin/railsapp.yml
the contents of which look good:
pid: tmp/pids/thin.pid log: log/thin.log timeout: 30 max_conns: 1024 port: 5000 max_persistent_conns: 512 chdir: /home/demo/public_html/railsapp environment: production servers: 3 address: 0.0.0.0 daemonize: true
Now we'ce created our init script, let's start it:
sudo /etc/init.d/thin start
The terminal output confirms the actions:
[start] /etc/thin/railsapp.yml ... Starting server on 0.0.0.0:5000 ... Starting server on 0.0.0.0:5001 ... Starting server on 0.0.0.0:5002 ...
Cool.
All that's left is to navigate to your domain:
http://www.domain.com
Where you will be greeted with the rails welcome page.
As we created an init script for the thin servers you can restart them in the normal way:
sudo /etc/init.d/thin restart
Setting up a virtual host to proxy to the thin web server is fairly simple.
Add to that the ease of installing and configuring thin, the whole process in very quick and very powerful.
PickledOnion
© 2011-2013 Rackspace US, Inc.
Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License

0 Comments
Add new comment