En fin, este primer tutorial es de cómo montar una aplicación PHP en los servicios web de Amazon. Todo lo que está descrito aquí es lo que he hecho y me ha funcionado, tal vez no sea la mejor forma, como puede que si, la idea es mostrarles lo que sé y me corrijan si me equivoco. Se ve un poco largo pero así mismo esta completo con los servicios básicos que debemos usar en Amazon y es tal cual lo he hecho y me ha funcionado.
Para registrarnos en AWS debemos además de los datos personales ingresar datos de una tarjeta de crédito de la cual nos irán descontando a medida que vamos usando los servicios de AWS. (Este proceso no lo he hecho puesto que la cuenta que administro es de la empresa donde trabajo). Aunque AWS provee una capa gratuita cuando iniciamos pueden haber algunos costos que no superan los 3 dolares mensuales, sin embargo, hay que leer muy bien la abundante documentación (disponible en ingles y español) sobre los costos para después no llevarnos un susto con la cuenta.
Primero que todo en AWS todo se denomina instancias, es decir, si queremos crear un servidor para determinada función lo diríamos como: crear una instancia de un servicio de servidor web o de base de datos, etc.
Amazon Elastic Compute Cloud EC2
Lo primero es crear nuestro servidor web (Instancia EC2, Elastic Cloud) que es un servidor virtual en la nube. Esta lista de pasos contempla la creación de un servidor con Ubuntu 12.04 para una aplicación PHP.
amazon escribió:
Cómo crear una instancia EC2
Ingresa a EC2, selecciona la región donde se creará la instancia (ej. N. virgina). Luego ingresa a launch instance y selecciona el sistema operativo (ej. ubuntu server).
Selecciona el tipo de instancia (ej. micro - porque hace parte de la capa gratuita).
Configurar la instancia
* Asignar tamaño de volumen storage
* Crear y asignar grupo de seguridad para la instancia
* Agregar las siguientes reglas al grupo de seguridad
* SSH con puerto 22 con acceso a la ip del equipo de desarrollo (MY IP)
* HTTP con puerto 80 con acceso a toda ip (Anywhere)
* Lanzar la instancia
* Crear una key pair en el modalbox que aparece
* Descargar y guardar en un lugar seguro el archivo .pem (Esta es la llave de acceso al servidor)
* Finalizar
Conectarse al servidor
* Seleccionar la instancia en la lista de instancias
* Dar nombre a la instancia
* Crear Eslastic IP y asignarla a la instancia
* Verificar en los detalles que la instancia tenga una ip publica y/o elastic ip
* Ir a Connect (Aca se mostrará como conectarse a la instancia de diferentes formas)
* Dar permisos de solo lectura a la key pair
chmod 400 my_key_pair.pem
* En la consola ingresar la siguiente linea:
ssh -i my_key_pair.pem ubuntu@<elastic_ip>
* Se preguntará si desea agregar a la lista de host seguros, damos yes
* En este momento ya se debe estar conectado al servidor
Configuración inicial del servidor
* Instalar lamp server
Código :
sudo apt-get install tasksel sudo aptitude update sudo tasksel
Seleccionar lampp server con la tecla espacio y aceptar. Luego comprueba el funcionamiento ingresando la IP en el navegador.
Vamos a instalar las siguientes extensiones de PHP:
Código :
sudo apt-get install php5-dev sudo apt-get install php-pear sudo apt-get install php5-json sudo apt-get install php5-curl sudo apt-get install php5-intl sudo apt-get install php5-gd sudo apt-get install php-apc
Le agregamos las siguientes líneas a php.ini:
Código :
extension=apc.so apc.apc.stat = 0 apc.include_once_override = 1 apc.shm_size = 64M
Procedemos a habilitar mod_rewrite (En la configuración por defecto de apache está deshabilitado)
Código :
sudo a2enmod rewrite
Y reiniciamos Apache
Código :
sudo service apache2 restart
Instalar GIT
Código :
sudo apt-get install git-core
Creacion de volumen EBS para almacenamiento
(https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html)
Este punto no es tan obligatorio, pero considero que es bueno tener la aplicación en un volumen diferente al volumen donde esta el sistema operativo, además, cuando se de la necesidad de crear otra instancia EC2 diferente, simplemente montamos el volumen donde está el código fuente en la nueva instancia y listo!
* Crear volumen EBS en la misma zona de la instancia EC2
* especificar el nombre del dispositivo /dev/sdf (default)
* Seleccione el volumen creado y seleccione attach volumen y seleccione la instancia EC2
* Conectarce a la instancia con ssh
* ejecutar la siguiente linea para ver los volumenes adjunatos a la instancia
* lsblk
* deben aparecer 2 volumenes root y el volumen que creamos (para el que el MOUNTPOINT aparece como / es root, el otro es el nuestro)
* Verificar el nombre del volumen que creamos (xvdf en caso de ubuntu)
* Con este nombre ya sabemos que el volumen esta montado en /dev/xvdf (la salida de lsblk quita el prefijo /dev por ello debemos tenerla en cuenta)
* Dar formato al volumen
* Verificar el file system con la linea: sudo file -s /dev/xvdf
* Si el resultado es "data" ejecutar la siguiente linea (en otro caso no es necesario y puede borrar la información que exista):
* sudo mkfs -t ext4 /dev/xvdf
* Crear punto de montaje (ubicación de acceso a través del sistema de archivos)
* sudo mkdir /vol (crear carpeta donde se montará el volumen)
* sudo mount /dev/xvdf /vol (Montar volumen en la carpeta)
* Agregar volumen al archivo de arranque del sistema
* Crear copia de seguridad:
sudo cp /etc/fstab /etc/fstab.orig
* Abrir archivo
sudo vim /etc/fstab
* Agregar la siguiente linea al final del archivo
/dev/xvdf /vol ext4 defaults 0 2
* Guardar cambios
* Verificar que no hallan errores (si hay errores deben corregirse o si no el sistema puede no arrancar cuando se apague)
sudo mount -a
Configurar host para la aplicación
En caso de querer almacenar más de una aplicación en el servidor se deben usar virtualHost para esto, pero si es solo una con esto basta:
* Crear copia de seguridad del sitio por defecto de apache
sudo cp /etc/apache2/sites-availables/default /etc/apache2/sites-available/default.orig
* Agregar
ServerName midominio.com (o localhost para acceder con la ip unicamente)
* Editar la dirección de correo en ServerAdmin
* Editar DocumentRoot
DocumentRoot /vol (si el proyecto se encuentra en otra carpeta dentro de /vol se puede indicar la ruta completa)
* Reemplazar:
<Directory /var/www/>
por
<Directory /vol/> (si el proyecto se encuentra en otra carpeta dentro de /vol se puede indicar la ruta completa)
* sudo service apache2 restart
RDS
RDS es el servicio para bases de datos relacionales como MySQL. RDS significa Relational Database Service
Crear instancia RDS
* Launch DB Instance
* Seleccionar MySQL
* No usar Multi-AZ Deployment (seleccinarlo puede generar costos adicionales)
* Seleccionar la version 5.5.31 (5.6.x no soporta current_timestamp)
* Seleccionar tipo de instancia micro
* Seleccionar 5GB en allocated storage
* Ingresar los identificadores para acceder a la base de datos
DB Instance Identifier
Master Username
Master Password
* Ingresar el nombre de la base de datos y dejar los demas datos por defecto
* Seleccionar el mismo grupo de seguridad de la instancia EC2
* Programar backups
* Lanzar instancia
* Agregar el permiso para mysql al grupo de seguridad que se selecciono
* Hacer click sobre el nombre del grupo en los detalles de la instancia EC2
* Seleccionar el grupo e ir a la pestaña inbound
* Seleccionar MYSQL y escoger las ip de acceso (0.0.0.0/0 es acceso desde cualquier ip)
* Para conectarse al servidor de base de datos se usa el endpoint de la instancia y el usuario y contraseña que se registraron en la creación
SES
En la mayoría de aplicaciones web necesitamos enviar correos, para esto esta el servicio SES Simple Email Service.
Configurar SES
* Ir a SMTP Settings y dar click en "Create My SMTP Credentials"
* Crear usuario (IAM) para uso de SES
* Descargar las credenciales (Estas credenciales no se pueden consultar despues, si se pierden debera crearse un nuevo IAM)
* Ir a Email Addresses y agregar un correo real desde donde se realizarán los envíos en la aplicación (ej. [email protected])
* Pueden enviarse correos de prueba entre las direcciones de correo registradas
* Para poder usar SES en producción debe enviarse la peticion de acceso a producción
* Click en Request Production Access
* Seleccionar Service Limit Increase
* Seleccionar SES Production Access
* Seleccionar la region
* Marcar todas las opciones en Pre-Production Checklist
* Ingresar una descripción de solicitud de apertura del servicio en ingles
* Ingresar la información solicitada del administrador de la cuenta Amazon
* Para conectarse al servidor se usa el ServerName, Username y Password del archivo descargado
Espero hacerme entender con estos paso a paso, cuando los hice no pensé en hacerlos públicos, con el tiempo los haré mas gráficos y entendibles, sin embargo estoy abierto a cualquier sugerencia o pregunta.