Despliegue de aplicación Yii en Cloud VPS de Digital Ocean

En el mundo de desarrollo web, hay muchas formas para desplegar una nueva aplicación para la fase de producción (ya cuando la aplicación está lista para ser utilizada). Sin embargo, la naturaleza del software es que es cambiante y sufre de actualizaciones constantes.

En esta entrada hablamos específicamente del despliegue y actualización de una nueva aplicación web desarrollada en Yii alojada en un repositorio SVN para ser desplegada en un CloudVPS de Digital Ocean.

Como referencia, se utilizan los siguientes enlaces de la compañía de alojamiento:

Así pues, comenzamos con la configuración inicial del servidor, para posteriormente instalar LAMP, y terminar con el despliegue de la aplicación web en una droplet de Digital Ocean.

Paso 1. Configuración de acceso al servidor con CentOS 6.5

Para iniciar este paso se necesita contar con alguna distribución Linux instalada en el ordenador, ya sea en máquina virtual o en su propia partición. En caso de que esto no sea posible, existen diversas herramientas bajo el sistema operativo Windows, como PuTTY.

1.1. Acceso como root

El primer paso es acceder a la nueva imagen de nuestro servidor recién creado (cuyos datos fueron enviados al correo electrónico). En Ktaris trabajamos desde Linux, con un distro CentOS 6.5, por lo que no es problema el ejecutar el siguiente comando:

ssh [email protected]ón-ip

donde usuario y dirección-ip deben ser sustituidos por los valores en el correo electrónico. El usuario corresponde a root, mientras que la IP es específica para la droplet. La terminal mostrará un texto como el siguiente:

The authenticity of host '69.55.55.20 (69.55.55.20)' can't be established.
ECDSA key fingerprint is 79:95:46:1a:ab:37:11:8e:86:54:36:38:bb:3c:fa:c0.
Are you sure you want to continue connecting (yes/no)? 

Simplemente hay que responder yes y proseguir. Por seguridad, pedirá un cambio de contraseña inmediatamente tras el acceso. En caso de no ser así, puedes realizar el cambio manual mediante el siguiente comando:

passwd

1.2. Creación de nuevo usuario

Ahora ya estamos dentro del servidor pero, en general, es malo ser root. Lo más recomendable es crear un nuevo usuario, lo cual podemos hacer con el siguiente comando:

/usr/sbin/adduser ktaris

donde ktaris es el nombre de usuario creado. Tomando en cuenta la seguridad nuevamente, creamos una contraseña de acceso para el nuevo usuario:

passwd ktaris

Ahora necesitamos dar acceso de superusuario al nuevo usuario (con el que haremos todas las actividades). La diferencia con respecto a utilizar root y una cuenta de usuario con acceso completo es que 1) toda acción potencialmente destructiva deberá ser autorizada mediante la contraseña y 2) existe un registro de todas las actividades realizadas como usuario con privilegios de superusuario. Para dar acceso de superusuario se ejecuta lo siguiente:

/usr/sbin/visudo

Ahora tenemos que encontrar las siguientes líneas en el archivo que se abre,

# User privilege specification
root    ALL=(ALL)       ALL

y agregar, presionando “a” para comenzar a escribir:

ktaris  ALL=(ALL)       ALL

Al terminar de editar, presionar Escape, :, w, q y Enter.

1.3. Configuración de SSH

Para editar el archivo de configuración de SSH instalamos la herramienta nano:

yum -y install nano

Y para configurar SSH se edita el siguiente archivo:

nano /etc/ssh/sshd_config

Cambiar los siguientes datos:

Port 25000
Protocol 2
PermitRootLogin no
UseDNS no

Y al final del documento es necesario agregar:

AllowUsers ktaris

Recargar SSH para reflejar los nuevos cambios:

/etc/init.d/sshd reload

Y probar el nuevo acceso:

ssh [email protected] 104.131.143.212 -p 25000

Si el acceso funcionó correctamente, cerrar la sesión actual que se tiene con la cuenta de superusuario y entrar con los nuevos datos. Y a instalar se ha dicho.

Paso 2. Instalación de LAMP

LAMP es un acrónimo que hace referencia a Linux, Apache, MySQL, PHP, las cuales son un conjunto de tecnologías involucradas en el desarrollo de aplicaciones web. Pero, antes de todo eso, hay que asegurarnos que nuestro nuevo servidor esté actualizado.

2.1. Actualización del servidor

La actualización del servidor, la cual es necesaria para mantener la seguridad del sistema y la erradicación de bugs, se realiza con una simple instrucción:

sudo yum update

Tras una posible larga lista de paquetes a ser instalados, se reinicia el sistema (para asegurar que los paquetes sean actualizados correctamente) mediante:

sudo reboot

2.2. Instalación de Apache

Tras el reinicio después de la actualización, procedemos a instalar Apache con el siguiente comando:

sudo yum install httpd

Y se ejecuta mediante:

sudo service httpd start

Para verificar que funciona correctamente se visita la IP que llegó a tu correo, misma que mostrará una imagen como la siguiente:

Figura 1. Página de muestra del servidor Apache.

Figura 1. Página de muestra del servidor Apache.

2.3. Instalación de MySQL

Para la instalación de MySQL, el servidor de base de datos, se ejecutan los siguientes comandos:

sudo yum install mysql-server
sudo service mysqld start
sudo /usr/bin/mysql_secure_installation

El último comando sirve para reforzar la seguridad de la instalación por medio de una contraseña y otras opciones de configuración (para la cual los valores predeterminados son suficientes).

2.4. Instalación de PHP

PHP es el lenguaje que le da vida a las aplicaciones (bueno, al menos uno de muchos), y es el lenguaje detrás de Yii Framework. Para instalarlo, ejecutar:

sudo yum install php php-mysql

Además de instalar PHP, se requieren algunos módulos adicionales para diversas tareas, como manipulación de imágenes, objetos para bases de datos, manipulación de XML, entre otros. Para ver los módulos disponibles, ejecutar:

yum search php-

Una posible instalación de módulos es:

sudo yum install php-gd.i686 php-imap.i686 php-intl.i686 php-mbstring.i686 php-pdo.i686 php-odbc.i686 php-xml.i686

Finalmente, añadimos los servicios de Apache y MySQL para que se ejecuten siempre que se reinicie el servidor:

sudo chkconfig httpd on
sudo chkconfig mysqld on

2.5. Visualización de PHP en servidor

Para verificar la correcta instalación de PHP se puede crear un archivo para visualizar la información de la configuración de la instalación. El comando es:

sudo nano /var/www/html/info.php

Y el contenido del nuevo archivo es:

<?php
phpinfo();
?>

Para ver los cambios reflejados es necesario reiniciar el servidor Apache, lo que se hace con:

sudo service httpd restart

Ahora que ya contamos con un nuevo usuario para iniciar sesión, procedemos a instalar los componentes necesarios del servidor para la aplicación desarrollada en Yii… a menos que necesites una versión más reciente de PHP…

Paso 3. Actualización a PHP 5.4 o 5.5

Hasta aquí, hemos seguido los tutoriales de Digital Ocean, correspondientes a la configuración inicial de CentOS 6 e instalación de LAMP en CentOS 6.

Sin embargo, hasta el momento de este escrito (a mediados del año 2014), la versión de PHP que se instala de manera predeterminada es la 5.3. Para algunos componentes de Yii Framework, e.g. YiiBooster 4.x.x, es necesaria la versión 5.4 en adelante.

Gracias a Shay Anderson tenemos una guía para actualizar a la versión 5.4 y 5.5.

Si necesitas actualizar a una versión más reciente de PHP, primeramente debemos desinstalar todo lo relacionado a PHP 5.3:

yum list installed | grep php
# Aquí se mostrará la lista de todos los componentes de PHP 5.3,
# mismos que deberán ser desinstalados completamente.
yum remove php.i686 php-cli.i686 php-common.i686 php-gd.i686 php-imap.i686 php-intl.i686 php-mbstring.i686 php-mysql.i686 php-odbc.i686 php-pdo.i686 php-xml.i686

Y obtener el repositorio con los paquetes de PHP más recientes:

sudo rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm

Para ver los paquetes disponibles de las nuevas versiones de PHP, así como sus módulos, ejecutar:

yum list available | grep php

De la lista, seleccionar los necesarios para tu proyecto e instalar:

sudo yum install php54w.i386 php54w-cli.i386 php54w-common.i386 php54w-gd.i386 php54w-imap.i386 php54w-intl.i386 php54w-mbstring.i386 php54w-mysql.i386  php54w-pdo.i386 php54w-xml.i386 

Para saber cuál versión está instalada actualmente (¿se instaló la 5.4? ¿se desinstaló la 5.3? ¿qué estoy utilizando?), ejecutar:

php -v

Y para que esa versión se refleje en el servidor web es necesario aplicar un reinicio nuevamente:

sudo service httpd restart

Ahora la página de configuración de PHP debe mostrar algo como la figura 2.

Figura 2. Configuración de PHP.

Figura 2. Configuración de PHP.

Paso 4. Instalación de SVN

¡Bien! Ahora ya tenemos nuestro servidor LAMP con la versión de PHP adecuada. Ahora simplemente falta desplegar la aplicación y un poco de ajustes aquí y allá.

Nuestra herramienta predilecta para el control de versiones es SVN, con alojamiento en Assembla. Para poder desplegar un repositorio de SVN primeramente debemos instalar las herramientas de subversion en Linux:

sudo yum install subversion

Existen varias opciones para desplegar una aplicación web, aunque en el caso de que solamente sea una aplicación web el directorio predeterminado (/var/www/html) es suficiente. Por lo que los siguientes comandos bastan para tomar control del directorio:

sudo chgrp -R apache /var/www/html
sudo chmod -R g+w /var/www/html
sudo chmod g+s /var/www/html
sudo usermod -aG apache ktaris

Tras ejecutar los comandos anteriores es necesario cerrar la sesión y volver a entrar, de lo contrario no se reflejarán los permisos y marcará error al intentar crear un archivo o directorio en la ubicación.

Finalmente, se manda a llamar el código del repositorio (en este caso, está almacenado en Assembla):

svn co https://subversion.assembla.com/svn/NOMBRE_DEL_PROYECTO/

Si el repositorio es público, comenzará la transacción de archivos. En caso contrario, pedirá las credenciales de autenticación antes de obtener la copia desde el servidor de SVN. De ahí en adelante, lo que resta es la configuración en tu aplicación.

Resumen

Si visitas esta entrada por segunda vez (o simplemente estás en un apuro), aquí están los comandos que se deben ejecutar, con los comentarios pertinentes:

# Acceder al servidor desde la computadora cliente:
ssh [email protected]ón-ip
# Tras el acceso, y ya en el servidor, cambiar contraseña:
passwd
# Crear nuevo usuario:
/usr/sbin/adduser ktaris
# Asignar contraseña al nuevo usuario:
passwd ktaris
# Dar privilegios de superusuario al nuevo:
/usr/sbin/visudo
# En el archivo, añadir:
root    ALL=(ALL)       ALL
ktaris  ALL=(ALL)       ALL
# Realizar cambios para acceso por SSH:
yum -y install nano
nano /etc/ssh/sshd_config
# Cambiar los siguientes valores en el archivo que se abre:
    Port 25000
    Protocol 2
    PermitRootLogin no
    UseDNS no
    # Al final del documento:
    AllowUsers ktaris
# Reflejar cambios:
/etc/init.d/sshd reload
# Probar el nuevo acceso:
ssh [email protected]ón-ip -p 25000
# Actualizar el servidor:
sudo yum update
# Reiniciar tras actualización:
sudo reboot
# Instalar Apache:
sudo yum install httpd
sudo service httpd start
sudo chkconfig httpd on
# Instalar MySQL:
sudo yum install mysql-server
sudo service mysqld start
sudo /usr/bin/mysql_secure_installation
sudo chkconfig mysqld on
# Instalar PHP 5.4:
sudo rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
sudo yum install php54w.i386 php54w-cli.i386 php54w-common.i386 php54w-gd.i386 php54w-imap.i386 php54w-intl.i386 php54w-mbstring.i386 php54w-mysql.i386  php54w-pdo.i386 php54w-xml.i386 
php -v
sudo service httpd restart
# Instalar SVN:
sudo yum install subversion
# Cambiar permisos de directorio /var/www/html:
sudo chgrp -R apache /var/www/html
sudo chmod -R g+w /var/www/html
sudo chmod g+s /var/www/html
sudo usermod -aG apache ktaris
# Clonar repositorio de SVN en servidor para despliegue:
svn co https://subversion.assembla.com/svn/NOMBRE_DEL_PROYECTO/

Tras ejecutar esas instrucciones, habrás desplegado satisfactoriamente una aplicación desarrollada en lenguaje PHP en un servidor con CentOS 6.5 alojado por Digital Ocean. Esperamos haber sido de ayuda para otros desarrolladores allá afuera.



Deja un comentario