Comunidad de diseño web y desarrollo en internet online

Mi primera aplicación en AWS Amazon Web Services

Citar            
MensajeEscrito el 16 Feb 2014 12:17 am
Este es mi primer tutorial, soy nuevo en esto de los blogs y tutoriales pero llevo un buen tiempo desarrollando. Me especializo en PHP con el framework Symfony2 y desde que inicie a aprender cosas como esta, me he tomado el trabajo de "documentar" (Hacer un paso a paso) todo lo que hago, y lo tengo como un repositorio en GitHub (https://github.com/DMalagonH), pero nunca lo he compartido con nadie. He decidido unirme a Cristalab un publicar todos mis conocimientos esperando crecer y ayudar a los demás.

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ó:

Amazon Elastic Compute Cloud (Amazon EC2) es un servicio web que proporciona capacidad informática con tamaño modificable en la nube. Está diseñado para facilitar a los desarrolladores recursos informáticos escalables basados en web.


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.

Por DMalagonH

1 de clabLevel



Genero:Masculino  

Desarrollo web

chrome
Citar            
MensajeEscrito el 20 Feb 2014 01:11 am
hola DMalagonH, bienvenido a cristalab. Estoy a cargo de la edicion de tutoriales. El tema es super, solo le faltan algunas capturas de pantallas a algunos procesos que mencionas en lista de items. Sera que podriamos agregarle algunas pantallas, acompañadas de los items que ya pusiste?

Como consejos que podes tomar en cuenta, trata de crear parrafos redactados de los procesos. Si bien son procesos tecnicos esta bueno unirlos en una oracion, total despues mostras las pantallas o el codigo. Fijate arriba en el post como edite algunos items y los converti en parrafo. Recuerda que escribis para que te entiendan.

Usa los H2, H3, H4, etc para titulos y subtitulos en vez de SIZE. y cuando postees codigo, en el editor tenes un listado de etiquetas para usar de acuerdo al lenguaje. Aprovecha las etiquetas para que el tutorial sea bien legible.

Cualquier cosa me consultas!!!

Por Mariux

BOFH

7756 de clabLevel

28 tutoriales
15 articulos

Genero:Femenino   Héroes Editores

Diseñadora & ilustradora

chrome
Citar            
MensajeEscrito el 25 Feb 2014 07:05 pm
Muchas gracias Maurix, voy a realizar los cambios que me dice. Gracias!

Por DMalagonH

1 de clabLevel



Genero:Masculino  

Desarrollo web

chrome
Citar            
MensajeEscrito el 25 Feb 2014 07:47 pm

DMalagonH escribió:

Muchas gracias Maurix, voy a realizar los cambios que me dice. Gracias!

gracias! cualquier cosa me consultas!

Por Mariux

BOFH

7756 de clabLevel

28 tutoriales
15 articulos

Genero:Femenino   Héroes Editores

Diseñadora & ilustradora

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.