Skip navigation

Ok en mi dia a dia intento complicarme la vida lo menos posible. Aque viejo adajio de “keep it simple stupid” es algo muy positivo que todos pueden aplicar en sus vidas.

Asi, siguiendo este sabio consejo me propongo instalar un servidor de aplicaciones rails corriendo bajo ubuntu 7.10 server edition.

¿Por que?

Bueno, mi poble servidor ya no da mas… :(. Y la idea de que me compren 1000$ en RAM es un poco descabellada. Así que lo único que me queda por hacer es liberar la carga de trabajo que le voy a poner encima.

Para el próximo proyecto necesito que 40 personas se conecten simultaneamente a mi servidor de bases de datos (MySql por supuesto 😉 ) , utilizando una aplicación Rails para ingresar la información. Es un modulito de digitación, pero hay mucha, mucha, mucha información por digitar.

Bueno, este es mi log de instalación, y mientras instalo cosas ire dejando el recuento del proceso para que yo y ustedes podamos hacerlo cuantas veces querramos sin tener que volver a “preguntarle a Dios…” (google es Dios 😉 ).

Obtener Ubuntu 7.10 Server

La forma mas sencilla es bajar un iso del sitio oficial de ubuntu

http://www.ubuntu.com/getubuntu/download

Instalación del Servidor

Básicamente metemos el cd dejamos que ubuntu instale y cuando nos pregunte que paquetes instalar le decimos que instale:

  • LAMP Server
  • OpenSHH Server
  • Samba File Server

WebMin

WebMin es un aplicación web que nos ayuda a poder configurar “graficamente” los servicios de nuestro servidor. Tiene sus “wizzards” pero realmente hay ser saber lo que se esta haciendo para poder tocar algo. Igualmente es un tremenda ayuda para poder hacer tareas administrativas sin la necesidad de meternos a la linea de comando.

Primero ingresamos al la linea de comando, ya sea de forma local o por medio de shh con un usuario que tenga permisos de hacer sudo.

Descargamos el paquete .deb

wget http://prdownloads.sourceforge.net/webadmin/webmin_1.370_all.deb

Instalamos los siguientes paquetes

sudo apt-get install build-essential

sudo apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl libmd5-perl

Instalamos el paquete webmin

sudo dpkg -i webmin_1.370_all.deb

esto termina el proceso de instalación. Para acceder a nuestra aplicacion usamos un navegador e ingresamos a la direccion:

https://your-server-ip:10000/

esto nos muestra una pantalla de login, donde debemos usar un usuario con permisos de ejecutar sudo ya que ubuntu no nos deja ingresar como usuario root directamente.

Ruby, Rails y Mongrel

Ahora es momento de instalar nuestros paquetes para la aplicación web. Para lo cual vamos a usar Ruby on Rails y como servidor Mongrel.

Descargamos e instalamos los paquetes necesarios:

Instalamos Ruby

sudo apt-get install ruby ruby1.8 ruby1.8-dev rdoc ri irb

Descargamos e instalamos gems

wget http://rubyforge.org/frs/download.php/17190/rubygems-0.9.2.tgz
tar zxvf rubygems-0.9.2.tgz
cd rubygems-0.9.2
sudo ruby setup.rb
cd ..; rm -rf rubygems-0.9.2; rm rubygems-0.9.2.tgz

Instalar Ruby on Rails

sudo gem install rails --include-dependencies

Instalar Mongrel

sudo gem install mongrel

Instalar Debugger y FasterCSV

sudo gem install ruby-debug

sudo gem install fastercsv

Instalación de Mongrel como un cluster de aplicaciones Rails

sudo gem install mongrel_cluster

elegimos un directorio donde dejar nuestra aplicacion en este caso voy a usar el usuario administrador y le voy a crear una carpeta de aplicaciones en su directorio home.

$ mkdir /home/administrador/myapps

$ cd myapps

Creamos una aplicacion de rails.

$ rails myapp

Generamos un cluster de 2 servidores mongrel corriendo en ambiente de produccion sobre los puertos 8000 y 8001.

$ mongrel_rails cluster::configure -e production -p 8000 -N 2 -C /home/administrador/myapps/myapp/config/mongrel_cluster.yml -a 127.0.0.1

Esto nos va a generar un archivo mongrel_cluster.yml en la carpeta /config de nuestra aplicación, en el cual se encuentra la configuración de nuestro cluster.

---
log_file: log/mongrel.log
port: "8000"
environment: production
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 2

Ahora solo nos queda iniciar el servicio del cluster.

$ cd myapp

$ mongrel_rails cluster::start

starting port 8000
starting port 8001

Configuracion del Apache como balanceador de carga

Vamos a configurar el servidor apache para que reciba las solicitudes de la aplicacion y balancee la carga de trabajo entre nuestros servidores mongrel.

Primero instlamos el servidor (si es que no lo hicimos durante la instalación inicial)

$ sudo apt-get install apache2

y habilitamos algunos módulos que nos van servir para correr el proxy

$ sudo a2enmod proxy_balancer

$ sudo a2enmod proxy_ftp

$ sudo a2enmod proxy_http

$ sudo a2enmod proxy_connect

$ sudo a2enmod rewrite

ahora vamos al directorio de servidores virtuales del apache para poder genera uno que represente a nuestra aplicación.

$ cd /etc/apache2/sites-enabled

y creamos un archivo donde guardaremos nuestra configuracion

$ sudo nano myapp

dentro del archivo colocamos nuestra configuración

NameVirtualHost *:80

#we need this as on Ubuntu by default Proxy is not allowed
<Proxy *>
Order allow,deny
Allow from all
</Proxy>

#Proxy balancer section (create one for each ruby app cluster)
<Proxy balancer://myapp_cluster>
BalancerMember http://127.0.0.1:9000
BalancerMember http://127.0.0.1:9001
</Proxy>

#Virtual host section (create one for each ruby app you need to publish)
<VirtualHost *:80>
ServerName myapp
DocumentRoot /home/administrador/myapps/myapp/public/

<Directory /home/administrador/myapps/public/ >
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

#log files
ErrorLog /var/log/apache2/myapp_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/myapp_access.log combined

#Rewrite stuff
RewriteEngine On

# Check for maintenance file and redirect all requests
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ /system/maintenance.html [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://myapp_cluster%{REQUEST_URI} [P,QSA,L]
</VirtualHost>

Ya que esta listo el achivo procedemos a cargarlo al apache.

$ sudo a2ensite myapp

$ sudo /etc/init.d/apache2 force-reload

Y eso es todo!!!!

Si ahora nos dirigimos a nuestro navegados y escribimos http://nombredenuestramaquina, nos debe de aparecer la página de bienvenida a nuestra aplicación.

En realidad hay formas mas formales de hacer esto, en especial con el uso de herramientas como Capistrano. La cual nos permite instalar nuestra aplicaciones en servidores de producción solo con un par de comandos. Espero poder aprender a utilizar esta herramienta al corto plazo ya que me veo constantemente obligado a hacer cambios a mis aplicaciones y la forma como las estoy montando realmente apesta.

* Las fuentes de información del anterior artículo fueron tomadas de

Anuncios

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: