Tutorial EC2, configurando nuestra primera web en 10 pasos


Lo primero de todo es crear un usuario en Amazon AWS. Nos daremos de alta en la Capa de Uso gratuito de Amazon, que nos permitirá usar cada mes durante un año: una instancia micro (lo más pequeño que hay), 1 EBS de 10GB, 5GB de S3, 30GB de transferencia de datos con CloudFront, 25h de SimpleDB y 1000 notificaciones. Para probar si nos gusta o no, es suficiente.

Seguidamente montaremos nuestra primera instancia. Para que no nos repercuta en coste alguno es importante que:

1) No usemos instancias ni Windows ni SUSE.

2) Creemos solo una instancia y del tamaño más pequeño: Micro. Cuidado ahí ya que al elegir algunas AMI’s no te permite ese tamaño.

En este video vemos una gran explicación paso a paso.

Mis felicitaciones al autor. Realmente merece la pena pasar los 15 minutos que dura atentos al video.

Resumiendo sus pasos y añadiendo unos cuantos extra de cosecha propia:

1º- Simplemente clickamos en crear una nueva instancia.

2º- Seleccionamos la ISO a partir de la cual montarla. El video nos enseña como usar el «Community AMIs» y la importancia de que la ISO sea del tipo «EBS». Luego en la práctica las ISOs de la web que el propone no van. Igualmente estoy de acuerdo en que Ubuntu es más fácil que las ISOs de Amazon, pero eso va a gustos.

3º- Creamos nuestras «KEY Pair» para poder acceder a la maquina virtual por SSH y la guardamos bajo llave (o en DropBox, donde nunca se pierde nada)

4º- Creamos un grupo en donde habilitar que reglas aplicar al firewall. Ahi dejamos abierto al menos HTTP y SSH (ya abriremos más si lo necesitamos).

5º- Lanzamos la instancia.

6º- Miramos los atributos de nuestra nueva AMI -clickando encima se muestran abajo sus datos- y copiamos la DNS Pública.

7º- Pasamos a conectarnos al servidor por SSH.

Aquí todo es muy bonito si trabajas con Linux pero si trabajas con windows hay que hacer más cosas:

Lo primero es bajarse (si no lo tenemos ya) PuTTY y PuTTYgen.

Luego deberemos transformar la Key de Amazon en una que PuTTY entienda. Para eso usaremos PuTTYgeen.

Por ultimo nos conectaremos a la DNS Publica que hemos copiad con PuTTY pero indicando en la configuracion de SSH>>AUTH la clave que hemos generado.

Tenemos aquí un tutorial de como hacer este proceso.

Por cierto, en muchas AMIs nos deberemos logar como root (en el video no sale) y cuando asignemos una IP será mejor entrar mediante la IP y no mediante la DNS Pública.

8º- Una vez dentro de nuestra maquina actualizamos paquetes e instalamos lo que necesitemos para montar nuestro servidor LAMP:

sudo aptitude update
sudo aptitude upgrade
sudo tasksel

Yo, yo aparte, me manejo mejor con «Midnight Commander» para editar archivos de texto con lo que también lo instale… Aquí cada uno como vea.

sudo aptitude install mc
# o bien
# sudo apt-get install mc

Y para terminar y por si no todo es tan directo como en el video acordarse de iniciar apache y mysql (por si no vienen iniciados)

service mysql start
# o bien...
# sudo /etc/init.d/apache2 start

Terminamos cargando nuestra PublicDNS en el navegador y cargamos la página por defecto de nuestro server (seguramente será «/var/www/index.html»). Ya tenemos la primera prueba de que el servidor existe.

9º- Ahora tenemos que crear una IP para este server, de forma que podamos apuntarle los dominios.

Entramos desde el panel en el área de «Elasitc IP» (que deberemos tener marcado a 0 porque aun no hemos creado ninguna). Y ahi le damos a «Allocate New Adress» para pedir una IP y seguidamente a «Associate» para asociarla a nuestra instancia. Ya está, ya tenemos IP propia.

Las IPs Elasticas no tienen coste siempre y cuando las estemos usando asociadas a una instancia (asi que cuidado con desasociarla).

Hay que recordar pasar a conectarnos a la IP en vez de a la DNS Pública. No hace falta quitar la conexión actual, pero para las siguientes hay que tenerlo en cuenta.

10º- Y ahora, para poder subir nuestra web, ya solo nos falta crear un FTP y abrir su puerto en la configuracion de nuestro grupo.

Lo primero es instalar algún FTP:

sudo aptitude install vsftpd
# o bien
# sudo apt-get install vsftpd

Y a partir de ahi configuramos algunas opciones. Tenemos que encontrar en nuestra instalación el archivo vsftpd.conf que puede (dependiendo de versiones) estar en «/etc/vsftpd.conf» o en «/etc/vsftpd/vsftpd.conf».

Lo editamos con nuestro editor de texto habitual. Como decía yo uso «Midnight Commander» con lo que en mi caso simplemente lo inicio desde la carpeta correcta y edito…

cd /etc/
sudo mc vsftpd.conf

Cambiamos los siguientes valores:

anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=YES

Una vez hecho esto ya podemos lanzar el servicio (o reiniciarlo).

service vsftpd start
# o bien...
# service vsftpd restart
# o ...
# /etc/init.d/vsftpd restart

Puedes leer todos estos pasos que hemos dado en el siguiente tutorial.

Para poder conectarnos al FTP tenemos que habilitar los usuarios. Para ello creamos el grupo «ftpweb» y crearemos el usuario «usuario» y password «password» que vea diractametne la carpeta /var/www que es donde están nuestras webs.

groupadd ftpweb
useradd -g ftpweb -d /var/www -c "usuario" usuario
passwd usuario

Ahora que ya tenemos el FTP con usuarios podemos probar antes de nada que funciona. Para eso nada mejor que conectarnos mediante nuestra propia instancia (asi vemos que funciona independientemente de los puertos abiertos).

Lanzamos…

ftp localhost 21

Usamos «usuario» y «password» para identificarnos (que es lo que hemos especificado al crear el usuario). Si el login es correcto tenemos FTP funcionando en nuestra instancia.

Solo nos queda abrir los puertos en el FireWall de Amazon para poder conectarnos al FTP. Esto lo hacemos entrando, desde el panel de EC2, en «Security Groups» y seleccionando el grupo que le creamos a nuestra AMI (donde dimos de alta HTTP y SSH).

Ahi tenemos que abrir por un lado el puerto 21 que es desde el que se lanza y recibe el FTP y unos cuantos puertos a partir del 1024 para donde se inicia la conexión de datos. Le vamos a dar 24 puertos por lo que abriremos también los puertos del 1024 al 1048.

Primero creamos 2 reglas nuevas como «Custom» en el panel. Si hemos seguido exactamente este tutorial nos quedará algo como esto:

Connection Method Protocol From Port To Port Source (IP or group)
SSH tcp 22 22 0.0.0.0/0
tcp 21 21 0.0.0.0/0
tcp 80 80 0.0.0.0/0
HTTP tcp 1024 1048 0.0.0.0/0

Recordad que si os conectais siempre desde la misma IP es mejor especificarla al abrirle los puertos.

Por último, solo nos falta decirle al servicio de FTP que solo use esos puertos (1024-1048) para las conexiones ya que por defecto usa muchos más.

Volvemos a editar el archivo de configuración «vsftpd.conf» y le añadimos al final la siguientes lineas de configuracion:

pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=LA_IP_QUE_HAS_ASIGNADO_A_LA_INSTANCIA

Reseteamos el servicio:

service vsftpd restart
# o bien...
# /etc/init.d/vsftpd restart

Puedes leer el porque de esta configuracion de puertos aquí

¡A subir la web!

Y ya estamos listos.

Cogemos nuestro cliente de FTP habitual, le informamos de nuestra IP nuestro usuario y nuestro password y lanzamos la conexión. Debería llevarnos a la carpeta «/var/www» donde podemos subir nuestros archivos de la web.

Seguramente también queramos configurar varios vhost distintos pero esto ya entra dentro de la dinamica normal de un servidor ubuntu con lo que no tiene sentido seguir explicandolo en este post.

Espero que a alguien le sea util este tutorial y antes de comentar recordad que no soy experto en sistemas con lo que seguramente para dudas puntuales no podré ayudaros.


20 respuestas a “Tutorial EC2, configurando nuestra primera web en 10 pasos”

  1. Iñaki, te admiro muchisimo. Gracias totales por tomarse la molestia de hacer cada dia mas un mundo mejor para los que queremos aprender en este mundo de la informatica. Hoy aprendi muchisimo con este tutorial eh!
    Este blog lo leo todos los dias y aprendo muchisimas cosas, muchisimas cosas.. Definitivamente te admiro mucho y continuad asi, de esta misma manera compartiendo conocimiento de manera humilde y desinteresada.

    Saludos

  2. Vale Douglas… conseguiste sacarme los colores! Me alegro mucho de que este blog sea de utilidad, es la mejor forma de invertir el tiempo 🙂

    Gracias!!!

  3. Buena!!! solo que cuando quiero subir mi cms a la carpeta var/www/ me sale error!!!

    «550 SITE CHMOD command failed.»

    Que hago?? este es el único inconveniente ayuda!!!!

  4. lo del ftp es un error descomunal,los passwords viajan sin cifrar!, hoy en dia se usa sftp siempre, no hay que instalar nada en el servidor, va por ssh.
    Como cliente cuteftp winscp etc.

  5. Nunca pense que fuera tan difícil.
    Estoy en Amazon EC2 desde hace dos días.
    Y ya llevo unas cuantas instalaciones de Ubuntu.
    Ahora ya tengo creada una copia de mi AMI.

    Os lo recomiendo a todos, ya que así podemos trastear todo lo que queramos y luego volver a poner a funcionar esa AMI y listo.

    Ahora mismo estoy intantando configurar varios dominos para mi servidor y luego instalar varios WordPress.

  6. Ya vuelvo a estar atascado.
    ¡Me voy a la playa!
    Que Amazon me desespera.

    Ahora no consigo conectar por FTP.
    Sigo los pasos creo usuario y contraseña.
    Y todo el rato me da.
    Connecting to 107.21.96.221:21…
    Error: Connection timed out
    Error: Could not connect to server
    Status: Waiting to retry…

  7. Buen día!

    Antes dar las gracias por el post, he conseguido crear, instalar y conectarme sin problemas.

    Ahora tengo una duda…

    He creado paso a paso el tutorial, pero al loguearme con el usuario creado, este no puede ni crear carpetas, ni subir archivos.

    Al parecer pueden ser los permisos de usuarios.

    Un saludo y gracias por la ayuda.

  8. Si, sera justo eso.

    Si te deja, puedes entrar como root y verás que ahi no tienes problemas.

    Sino siempre puedes ir usando «sudo» delante de las funciones, pero vamos que incluso para crear carpetas no te deje es un verdadero fastidio. Yo miraria los grupos de usuarios a ver a cual pertenceces y a cual deberías pertenecer. Siento no poderte ayudar más no soy administrador de sistemas, llego a lo que llego 😉

  9. Me olvidaba contarte que el problema es cuando entro al ftp.

    No me deja crear carpetas ni subir cosas.

    Otro tema, para agregar un dominio a nuestro servicio de EC2, sabes algo de eso?

    Al parecer se debería usar «Amazon Route 53», lo que no estoy seguro aún es que si este servicio viene dentro de la capa gratis.

    Un saludo.

  10. Sobre lo primero. Lo dicho mirate los grupos de usuarios y mete al del FTP donde toca. No puedo decirte mucho más, pero es un tema de linux no de EC2 asi que tienes mil foros a tu disposición con preguntas similares. Será o un tema de usuarios o un tema de permisos de las carpetas.

    Sobre lo segundo, cuando creas tu maquina le debes asignar una IP. Desde esa IP ya está funcionando o no podrías ni acceder por FTP.

    Lo que tienes que hacer es apuntar tu dominio a esa IP. Eso debería ser sencillo uses el registrador que uses.

    Luego debes configurar los vhost (si no recuerdo mal en ubuntu server era en /etc/apache2/sites-available y …/sites-enabled )que carpeta es la que debe interpretarse cuando lleguen visitas con ese dominio. Eso como antes es un tema de ubuntu/linux y no de EC2.

  11. Excelente aporte Iñaki! Ya tengo mi servidor EC2 corriendo y funciona perfecto. A modo de comentario, tuve algunos problemas con ftp, por lo cual me resultó mucho más cómodo usar sftp.

    Saludos!

  12. hola tengo una pregunta, estoy intentando subir mi sitio por ftp con filezilla, me pide user y pass, user es ubuntu obviamente pero el pass esta encriptado en el punto pem como le hago para saber el pass y pueda loquearme?

  13. Iñaki, muy bueno el tuto, pero me falta un paso: si yo tengo un dominio delegado a los servidores de amazon EJ: jasper-aras.com.ar , que pasos debo hacer para asociar la instancia del server creado que funciona bien con la dns publica dada por la instancia, y que pase a funcionar el dns delegado ? o sea en lugar de poner: ec2-54-234-21-184.compute-1.amazonaws.com necesito que funcione el jasper-aras.com.ar, gracias de antemano

    • Para eso tienes el tema de las IPs. Tienes que crear y asociar una Elasitc IP a tu instancia. Una vez funcione podrás configurar tu dominio para que resuelva sobre esa IP y ya solo quedará configurar el Virtual Host de Ubuntu para indicar en que carpeta encontrar los archivos de la web.

      Esta es la opción que usará la mayoría si bien hay formas más complicadas/a medida para ir resolviendo DNS pero eso ya entra dentro de la configuración avanzada de servidores donde no soy el más indicado para explicar como hacer las cosas.

  14. hola! muy buen tutorial, seguí a la letra y subí el sitio.
    El index.html funciona bien, pero cuando quiero acceder a una seccion /seccion me da error «The requested URL /seccion was not found on this server.» Ya eh hecho AllowOverride All (segun algunos sitios de la net) y nada, alguna idea? gracias!!!

  15. Hola,
    muchísimas gracias por el tutorial, me ha servido muchísimo.

    El vsftpd daba error, en localhost y online. El error es este:
    500 OOPS: priv_sock_get_cmd

    Se soluciona añadiendo esta línea a /etc/vsftpd.conf
    seccomp_sandbox=NO
    y luego service vsftpd restart

    Un saludo y gracias!

Responder a ikhuerta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *