Como instalar Apache, MySQL 5.5 y Ruby 2.1 usando Passenger en Ubuntu 13.04

10 de marzo, 2014 @ 09:10 — 1 comentarioDescargar PDF

En esta guía vamos a explicar como montar un servidor para alojar aplicaciones Ruby on Rails, para lo cual utilizamos Apache2, Passenger, MySQL 5.5 y Ruby 2.1.

Dado que usamos un versión de Ruby muy reciente, este entorno es perfecto para alojar aplicaciones Rails 4, así como cualquier otro framework moderno que respete el formato Rack.

Para crear esta guía nos hemos basado en la plantilla cloud Ubuntu 13.04 x64 que ofrecemos en nuestro servicio Cloud VPS.

1 - Preparativos

Antes de empezar, tienes que hacer acceder a tu servidor mediante SSH. La guía asume que estás logueado como root.

En un nuevo servidor, lo primer que debes hacer siempre es actualizar los paquetes, para ello:

apt-get -y update
apt-get -y upgrade

Y dado que casi siempre se instalará un nuevo kernel, reiniciamos el servidor para empezar a usar el nuevo kernel:

shutdown -r now

Además, vamos a instalar las siguiente librerías que serán necesarias más adelante:

apt-get install zlib1g-dev libssl-dev libreadline6-dev libffi-dev libcurl4-openssl-dev libv8-dev sqlite3 libsqlite3-dev

2 - Instalación de MySQL 5.5

Para instalar el servidor MySQL 5.5 ejecuta:

apt-get install mysql-server-5.5

Te llegará a solicitar que definas la contraseña root de MySQL. Pon una contraseña compleja, algo como Trd%3kP1.Ge&1v%a;81.

Una vez completada la instalación, crearemos el archivo /root/.my.cnf para que el usuario root del sistema pueda iniciar sesión en MySQL sin necesidad de introducir contraseña:

nano /root/.my.cnf

Donde pegaremos:

[mysql]
user="root"
pass="PASSWORD"

3 - Instalación de de Apache

Simplemente ejecuta:

apt-get install apache2 apache2-prefork-dev libapr1-dev libaprutil1-dev

4 - Instalación de Ruby 2.1

Empieza a complicarse un poco la cosa, descargaremos las fuentes de la última versión de Ruby 2.1 disponible y lo instalamos de la siguiente manera:

cd /usr/local/src
wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.1.tar.gz
tar zxf ruby-2.1.1.tar.gz
cd ruby-2.1.1
./configure --prefix=/opt/ruby
make && make install

Esto hará que se instale Ruby en /opt/ruby.

Para nuestra comodidad añadiremos la ubicación de los ejecutables de Ruby al PATH de nuestro usuario, para ello editamos el siguiente archivo:

nano ~/.bashrc

Y pegamos lo siguiente al final del archivo:

export PATH=/opt/ruby/bin:$PATH

Para aplicar ya mismo el nuevo PATH, ejecuta:

source ~/.bashrc

5 - Instalación de Passenger

Primero instalamos la gema de la última versión de Passenger:

gem install passenger

Una vez instalado, ejecutamos:

passenger-install-apache2-module

Este comando tarda un rato y al terminar, te indica los parámetros nuevos que debes añadir a la configuración de Apache. En nuestro caso nos ha sugerido lo siguiente:

LoadModule passenger_module /opt/ruby/lib/ruby/gems/2.1.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /opt/ruby/lib/ruby/gems/2.1.0/gems/passenger-4.0.37
  PassengerDefaultRuby /opt/ruby/bin/ruby
</IfModule>

Copiamos esa configuración y lo pegamos en un nuevo archivo:

nano /etc/apache2/mods-available/passenger.conf

Por último, reiniciamos Apache para que cargue el módulo de Passenger:

/etc/init.d/apache2 restart

6 - Instalación de Rails y otras gemas

Instalamos la última versión de Rails y con ello se instalarán otras muchas gemas como Bundler:

gem install rails

6 - Crear un VirtualHost

Suponiendo que nuestro dominio es midominio123.com, crearemos un VirtualHost para dicho dominio. Antes de nada creamos la estructura de directorios necesaria:

mkdir -p /var/www/vhosts/midominio123.com/html

Luego, creamos un nuevo archivo de configuración de Apache:

nano /etc/apache2/sites-enabled/midominio123.com

Donde pegamos la siguiente configuración:

<VirtualHost *:80>
   ServerName www.midominio123.com
   ServerAlias midominio123.com
   ServerAdmin webmaster@midominio123.com
   DocumentRoot /var/www/vhosts/midominio123.com/html
   ErrorLog ${APACHE_LOG_DIR}/midominio123.com-error.log
   LogLevel error
   CustomLog ${APACHE_LOG_DIR}/midominio123.com-access.log combined
   PassengerBaseURI /
   PassengerAppRoot /var/www/vhosts/midominio123.com/miapp
   PassengerAppEnv development
</VirtualHost>

Si te fijas en la configuración del VirtualHost verás que hay 3 parámetros relacionados con Passenger y la aplicación Ruby que crearemos más adelante:

  • Con PassengerBaseURI / estamos indicando que nuestra aplicación estará en la raíz del dominio y no es un subdirectorio.
  • Con PassengerAppRoot definimos el directorio de nuestra aplicación
  • Con PassengerAppEnv development forzamos el entorno de desarrollo o development

Y antes de que se te olvide, reinicia Apache para que cargue la nueva configuración:

/etc/init.d/apache2 restart

7 - Tu primera aplicación Rails

Ya tenemos un VirtualHost definido para nuestra aplicación, por lo que ahora sólo nos queda subir nuestra aplicación a la ubicación correcta y con ello comprobaremos si Ruby y/o Rails funciona correctamente.

Por simplificar supondremos que no tenemos aplicación y que vamos a empezar de cero con una nueva aplicación. Recuerda que el el VirtualHost hemos indicado que nuestra aplicación estaba en /var/www/vhosts/midominio123.com/miapp, por lo que creamos una nueva aplicación Rails en dicha ubicación:

cd /var/www/vhosts/midominio123.com/
rails new miapp
chown -R www-data:www-data miapp

Ahora tenemos nuestra aplicación en /var/www/vhosts/midominio123.com/miapp, por lo que su directorio público está en /var/www/vhosts/midominio123.com/miapp/public. Por otro lado, recuerda que el directorio raíz o DocumentRoot del VirtualHost es /var/www/vhosts/midominio123.com/html.

Si queremos que nuestra aplicación se vea directamente al acceder al dominio tendremos que hacer que su directorio public sea el DocumentRoot del VirtualHost, la forma más sencilla de lograrlo es usando un enlace simbólico:

cd /var/www/vhosts/midominio123.com/
mv html html.bak
ln -s miapp/public/ html

En principio, ya lo tenemos todo listo y podemos abrir nuestro navegador web y acceder a http://midominio123.com . Lo normal sería que te encontrarás con el siguiente error:

Mensaje de error de Passenger

El motivo de ese error es que no tenemos instalada la gema therubyracer. Para corregirlo, editar el archivo Gemfile de la aplicación:

cd /var/www/vhosts/midominio123.com/miapp
nano Gemfile

Y busca las siguientes líneas:

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

Debes descomentar la segunda línea, de forma que quede así:

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby

Una vez hecho eso, debes ejecutar:

bundle install

Si ahora accedemos a nuestro dominio con nuestra navegador web todo debería ir bien y veríamos la página de bienvenida de Rails:

Bienvenida de Ruby on Rails

Etiquetas: