Configuración de un servidor Rails e implementación con Capistrano en Fedora desde cero

Este artículo y video tutorial le enseñarán cómo configurar un servidor Fedora básico para implementaciones de Rails y PostgreSQL. Primero, configuraremos Apache y PostgreSQL. Luego, usaremos phpPgAdmin para crear el usuario y las bases de datos de nuestra aplicación. Después de eso, configuraremos la plataforma Ruby utilizando Passenger para ejecutar nuestra aplicación. Una vez que todos los componentes estén instalados, prepararemos nuestra aplicación para la implementación utilizando Capistrano.

Le mostraré cómo usar Capistrano para automatizar tareas remotas y aprovechar otras funciones.


Encendido con el show


Entendiendo el proceso de implementación

Siempre hay mucha confusión en cuanto a la implementación de aplicaciones de Rails. Este tutorial espera resolver algo de eso. La mayoría de las personas conocen LAMP: Linux, Apache, MySQL y PHP. Configuraremos LAPR: Linux, Apache, PostgreSQL y Ruby. Configurar un servidor LAPR es muy similar a configurar un servidor LAMP. La única arruga es hacer que Rails hable con Apache. Afortunadamente, hay Passenger aka mod \ _rails. El pasajero es como mod \ _php. Hace que ejecutar aplicaciones Rails sea tan fácil como circular. Para ejecutar una aplicación Rails a través de Apache, cree un host virtual que apunte la raíz del documento al directorio público de aplicaciones y estará montando en rails.

Capistrano es otra parte con la que las personas pueden no estar familiarizadas. Capistrano es una gema de Ruby diseñada para ejecutar tareas en una o más máquinas remotas. Necesitará acceso SSH para utilizar Capistrano. Capistrano, conocido cariñosamente como Cap, automatiza el proceso de implementación. Podemos usar el límite para tomar nuestro código de un repositorio y enviarlo al servidor, detener / iniciar / reiniciar el servidor, escribir las tareas personalizadas requeridas por nuestra aplicación (piense en instalar las gemas requeridas) o deshabilitar / habilitar una página de mantenimiento. No se requiere el uso de la tapa, pero seguro que es mejor usar FTP para copiar todos los archivos. El poder real de Cap proviene de la capacidad de escribir tareas personalizadas en Ruby para manipular el servidor. He escrito muchas aplicaciones que permiten subir archivos de usuarios. Luego, en el lado del servidor, se debe crear algún directorio con los permisos adecuados para que las cargas se realicen correctamente. Es bastante fácil escribir una tarea de límite para crear el directorio y establecer los permisos. Luego, si alguna vez cambia de servidor, simplemente puede ejecutar la tarea de límite para volver a configurar el servidor. Hay muchas cosas que puedes hacer con Capistrano. Incluso podría automatizar todo este tutorial para configurar cualquier número de máquinas a la vez.!


Caja de arena tutorial

Para completar este tutorial, necesitará SSH + sudo access. Si no tiene un servidor de reserva, puede crear uno en VirtualBox. Puede crear fácilmente una nueva máquina virtual y conectarla a su sistema host. Hice esto para el tutorial. Cuando inicie su máquina virtual, asegúrese de usar un adaptador con puente para que su VM obtenga una IP en la misma subred. Comencé con una instalación nueva sin ninguna personalización. Si tiene acceso a un VPS como SliceHost, puede usar estas instrucciones también.

Asegúrese de ver el vídeo antes de analizar el código a continuación.


Creando el Deployer

 $ sudo adduser -m deployer $ sudo passwd deployer $ sudo visudo deployer ALL = (ALL) NOPASSWD: ALL $ su deployer $ mkdir ~ / .ssh $ touch ~ / .ssh / authorized_keys2 $ chmod -R 0700 ~ / .ssh # copy su clave pública y péguela en el archivo authorized_keys2 service $ service sshd start

Configuración de Postgres

 $ sudo yum groupinstall "PostgreSQL Database" $ sudo service postgresql initdb $ sudo service postgresql start $ su - postgres $ psql -d template1 $ modifique el usuario postgres con la contraseña 'yourpostgresuserpassword'; $ \ q # Reemplace ident en /var/usr/lib/pgsql/data/pg_hba.conf con md5 $ passwd postgres # establezca seguridad adicional en /etc/phpPgAdmin/config.inc.php en false # agregue 'Permitir desde SU_PIPO » vhost en /etc/httpd/conf.d/phpPgAdmin.conf # habilita http en el firewall $ sudo yum install httpd $ sudo service httpd start $ sudo service postgresql restart

Configurando Ruby, RubyGems, y Passenger

 $ sudo yum groupinstall Ruby $ sudo yum install rubygems $ sudo gem install gemcutter $ sudo yum install postgresql-devel $ sudo gem install pg $ sudo gema instalar passenger $ yum install gcc-c ++ httpd-devel apr-devel $ sudo passenger-install- apache2-module # crea este archivo /etc/http/conf.d/passenger.conf con estos contenidos: LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger. por lo que PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.9 PassengerRuby / usr / bin / ruby ​​$ sudo setenforce 0 $ sudo service httpd restart

Creando la Carpeta Deployer

 $ sudo mkdir / var / www / html / apps $ sudo chown deployer: apache / var / www / html / apps $ sudo yum install git # en este punto, cree sus bases de datos en phpPgAdmin

Configurando apache

 # echo "Include vhost.d / *. vhost" >> /etc/httpd/conf/httpd.conf $ sudo mkdir /etc/httpd/vhost.d $ sudo touch /etc/httpd/vhost.d/nettuts-demo .vhost # actualiza los archivos que contienen:  Nombre del servidor www.nettuts-demo.com DocumentRoot / var / www / html / apps / nettuts-demo / current / public  Opciones FollowSymLinks Permitir desde todas las opciones -MultiViews  RewriteEngine On RewriteCond% DOCUMENT_ROOT /system/maintenance.html -f RewriteCond% SCRIPT_FILENAME! Maintenance.html RewriteRule $ /system/maintenance.ml [R = 302, L] 

Archivo de tapa completa

 set: aplicación, "nettuts-demo" set: repository, "git: //github.com/Adman65/Nettuts-Capistrano-Deployments.git" set: user,: deployer set: deploy_to, "/ var / www / html / apps / # application "set: use_sudo, false set: scm,: git role: web," 192.168.1.112 "# Su servidor HTTP, Apache / etc rol: aplicación," 192.168.1.112 "# Esto puede ser el mismo como su rol de servidor 'Web': db, "192.168.1.112",: primary => true # Aquí es donde las migraciones de Rails ejecutarán el rol: db, "192.168.1.112" default_run_options [: pty] = true namespace: deploy do task : empezar a hacer tarea final: dejar de hacer; end task: restart,: roles =>: app,: except => : no_release => true ejecutar "# try_sudo touch # File.join (current_path, 'tmp', 'restart.txt') "end desc" Instala las gemas necesarias "tarea: gemas,: roles =>: aplicación ejecuta" cd # current_path && sudo rake gems: instala RAILS_ENV = production "final después de" deploy: setup "," deploy: gems "antes "desplegar", "desplegar: web: deshabilitar" después de "desplegar", "desplegar: web: habilitar" final