AWS Lightsail: Cómo crear una Instancia LAMP

Los servicios en la nube de AWS ya llevan tiempo en el mercado, al igual que otros de Microsoft y Google, y más. En esta ocasión nos centraremos en AWS Lightsail, que con un bajo precio podemos desplegar un VPS con recursos que van desde lo básico a más.

En la web hay muchas información al respecto a AWS Lightsail, y a veces los puntos claves para lo que vamos a comentar aquí están dispersos. Es por eso que desde mi punto de vista y mi experiencia, he recopilado las ideas importantes en este post para que no estés a la deriva si intentas por primera vez desplegar una instancia LAMP (S.O. Linux +Servidor Apache + Motor BD MySQL + Lenguaje PHP) en AWS Lightsail.

Les contaré que tengo un website que tiene muchos años en línea, con muchos contenidos relacionados al desarrollo web. Actualmente trabaja con WordPress y he venido mudándome de hosting en los últimos años, entre los últimos Bluehost y Dreamhost que por cierto dan un buen servicio y soporte. Pero con el fin de aprender y probar los servicios en la nube, me decante por AWS y su servicio AWS Lightsail que nos permite desplegar un VPS y/o aplicaciones web más populares.

Índice:

1. Crea tu cuenta de AWS

Para poder usar el servicio de AWS Lightsail, debes tener una cuenta registrada. El proceso es sencillo y simple. No deberías de tener problema en este aspecto. Una vez registrado y validado tu cuenta, deberás acceder a la Consola de administración de AWS y en la lista de servicio selecciona/clic en AWS Lilghtsail:

Esto te llevará al panel inicial de Lightsail (en la imagen vemos una instancia ya creada)

2. Crear nuestra instancia

Para ello presionamos el botón Crear instancia y nos mostrará una serie de opciones que puede tener la instancia, entre las que figura:

  • La ubicación, se refiere a la ubicación física del servidor. Por defecto es Virginia, en USA.
  • La imagen, o plataforma, sistema operativo que usará la instancia. En nuestro caso Linux/Unix.
  • El plan, esto es si queremos solo el sistema operativo y/o sistema operativo + alguna aplicación preinstalada. En nuestro caso seleccionaremos: LAMP.
  • El plan de pago, que va desde $ 3,5 USD / mes. Este varía según las características de nuestro VPS. Si queremos mas procesador o RAM, el precio aumenta.
    Nota: para efectos de probar, selecciona el plan inferior.
  • Finalmente podemos ponerle un nombre a nuestra instancia y etiquetas (es útil para agrupar las instancias si es que vamos a trabajar con varias).

Una vez escogido las opciones adecuadas para nuestro proyecto, pulsamos el botón grande Crear instancia, y esperamos que termine de configurarse, ya que tomará algunos minutos.

Para este tutorial usaremos el nombre de instancia ribosomatic-lamp:

Una vez terminada de configurarse podremos ver debajo del nombre que indica En ejecución.

3. Crear un IP y asóciala con la instancia

Por defecto al crear la instancia se crea una IP pública temporal, si por algún motivo reinicias o detienes la instancia este IP cambiará. Así que lo siguiente a hacer es crear una IP estática.

Nota: una IP estática no tiene ningún costo, pero siempre tiene que estar asociada a una instancia, caso contrario comenzar a facturar por cada minuto de no usarse.

Para crear la IP estática ir a la pestaña Redes y pulsar en + Crear una IP estática.

Dejamos los valores por defecto y clic en Crear (como se puede ver en la siguiente imagen):

Copiamos el IP creado y lo colocamos en nuestro navegador y veremos el contenido de bienvenida de nuestra instancia, con algunos enlaces a tutoriales para seguir configurandola.

4. Acceso SSH por navegador y obtener credenciales LAMP

Puedes acceder via SSH a través del navegador: la ventaja de este método es el acceso rápido, y la desventaja un ligero lag de milisegundos que se puede volver molestoso si deseamos ingresar comandos rápidamente.

Para hacerlo simplemente en la sección Conectar, clic en el botón Conectarse a través de SSH.

Una vez iniciando, obtenemos la clave que usaremos en todo el stack LAMP con los siguientes comandos:

$cat bitnami_application_password

ó

$cat bitnami_credentials

Cualquiera de ellos nos devolverá la contraseña por defecto. Anótala o guárdala en otro sitio que la usaremos para nuestra configuración con un cliente SSH externo.

Nota: en este caso, el nombre de usuario asignado por defecto es bitnami. Tanto el nombre de usuario como la contraseña la necesitaremos mas adelante.

5. Obtener clave SSH

En el caso de configurar nuestro cliente SSH, aparte del usuario y contraseña obtenidos antes, debemos descargar una clave SSH generada por AWS.

Vayamos a la sección Cuenta > Claves de SSH y Descargar la que esta por defecto.

Esto descargará un archivo con extensión .pem. Guárdalo para tenerlo a mano que lo usaremos luego.

6. Conectarse con cliente SSH

6.1 Convertir clave SSH

Primero convertiremos la clave SSH, a un formato que Putty (.ppk) pueda reconocer (Aquí una guía extra: https://docs.bitnami.com/aws/faq/get-started/connect-ssh/#connect-with-an-ssh-client).

Para ello descargar de https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.htmlputtygen.exe .

En el menu Conversions > Import key, abre el archivo .pem, dejar valores por defecto y una vez cargado clic en el botón Save private key. Guardar clave privada con cualquier nombre: miclave.ppk y tenlo a mano que lo usaremos en el siguiente paso.

6.2 Conectarse con Putty.exe

Con lo anterior abrimos ahora putty.exe (aquí dejo un guía en video de ayuda como extra)

Configuraremos un tunel SSH, en otras palabras usaremos el navegador web en modo local, para acceder no solo a la consola vía SSH sino también a phpmyadmin de nuestra instancia LAMP.

Datos a necesitar:

  • Para ello necesitaremos el IP estático de la instancia, en nuestro caso de ejemplo: 34.193.100.139 (Punto 3).
  • El password obtenido anteriormente: 6DnrV2zz7RHA (Punto 4).
  • La clave SSH, con extensión .ppk que descargamos anteriormente (Punto 5).

Pasos:

En pantalla principal, Session, en hostname, colocamos IP estático de la instancia.

En el lateral de navegacion ir a Connection > SSH > Auth, en Browse, buscar la clave privada .ppk (Punto 6.1)

Ir ahora a: Connection > SSH > Tunnels, en Source port: 8888, y en Destination: localhost:80, y pulsar Add

Ahora a Connection > data, en auto-login username: bitnami

Ahora volvemos a Session, y nos conectamos. 

Veremos que nos conectamos a través de consola a nuestra instancia, y también podemos acceder a phpmyadmin para gestionar nuestra base datos

Entonces en el navegador, escribirmos: 

http://127.0.0.1:8888/phpmyadmin y nos mostrara lo siguiente:

Para acceder usamos usuario root, y la contraseña que nos asignaron al crear la instancia (Punto 4).

6.3 Conectarse con Bitvise SSH

Este cliente nos permite acceder por medio de consola SSH a nuestro servidor, pero también proporciona un navegador SFTP para arrastrar y soltar archivos (siempre y cuando tengamos los permisos). Puedes descargarlo desde https://www.bitvise.com/ssh-client-download. Una vez instalado hacemos lo siguiente, clic en Cliente key manager.

Ahora importamos la clave SSH, con extensión .pem descargada anteriormente (Punto 5) y cerramos esta ventanita.

Dejar con los siguiente valores:

  • Host: nuestro IP estático de la instancia
  • Username: bitnami
  • Initial method: publickey
  • Client key: Global 1

Clic en Log in, una vez conectado podemos abrir la consola o el explorador SFTP.

Aquí una guía extra: https://www.youtube.com/watch?v=ec5OQKBKuM8&t=218s

7. Configurar nuestra aplicación LAMP

7.1 Crear base de datos, usuario y asignarle permisos

Para ello accedemos a través de SSH, sea por web o por nuestro cliente preferido (los cuales explicamos anteriormente).

Entramos a mysql con el comando, y colocamos el password que nos asigno la instancia (Punto 4).

$sudo mysql -u root -p

Ahora creamos nuestra base datos. En este ejemplo: ribosoma_db

create database ribosoma_db;

Crear un usuario para tu base de datos:

create user 'ribosoma_user'@'localhost' identified by 'Covid2021$';

Asignar usuario y permisos a la base datos creada.

grant all privileges on ribosoma_db.* to ribosoma_user@localhost;

7.2 Subir archivo de la aplicación

En este caso en particular voy a subir mi blog comprimido .zip.

Puedes usar Bitvise para subir los archivos de nuestro sitio web por SFTP. En nuestra instancia el directorio donde estarán nuestro archivo de aplicación es htdocs.

Luego por medio de comandos en la consola, descomprimir. Donde file.zip es tu paquete comprimido.

$sudo unzip file.zip -d /opt/bitnami/apache/htdocs

Un detalle interesante, si tu aplicación web es un blog hecho con WordPress en tu archivo config.php, al definir la base de datos debemos especificar localhost junto con el puerto de acceso: localhost:3306

define('DB_NAME', 'tu_basedatos');
 
/** Tu nombre de usuario de MySQL */
define('DB_USER', 'tu_usuario');
 
/** Tu contraseña de MySQL */
define('DB_PASSWORD', 'tu_pass');
 
/** Host de MySQL (es muy probable que no necesites cambiarlo) */
define('DB_HOST', 'localhost:3306'); //importante

8. Apuntar dominio a instancia Ligthsail

Ir a la pagina principal de lightsail, e ir a la pestana Redes, pulsar Crear zona DNS.

Colocar el nombre de nuestro dominio, sin http ni www.

Luego clic en botón Crear zona DNS.

Una vez creado la Zona DNS, accedemos a esta, clic en el nombre ó en las opciones clic en Administrar:

Y añadimos registro DNS tipo A. Si vamos a trabajar con subdominio www.midominio.com, entonces llenamos donde dice Subdominio con www, caso contrario lo dejamos vacío. Y donde indica Se resuelve en, seleccionamos la IP pública creada a donde apuntará nuestro dominio.

Recuerda que si tienes una IP pública creada y no la asocias a ninguna instancia, se te cobrará un cargo extra. Caso contrario son gratuitas, como parte del plan adquirido en Lightsail.

En mi caso quedó así:

Finalmente, en nuestro registrador de dominio (GoDaddy, NameCheap, Dynadot, etc), colocar los siguientes Servidores de nombres (recuadro rojo).

Este último proceso demora un máximo de 24 horas. Pero podemos revisar si los servidores de nombres ya apunta a los de Lightsail aquí: https://dnschecker.org/

9. Configurar el certificado SSL

Nota: El dominio ya debe apuntar a los DNS de tu instancia de Lightsail.

Podemos instalar un certificado SSL gratuito a nuestro dominio, de la siguiente forma. Iniciar sesión por consola y escribir el siguiente comando:

$sudo /opt/bitnami/bncert-tool 

Iniciará el proceso para configurar el SSL al dominio y subdominio que especifiquemos, en mi caso puse los 2:

www.ribosomatic.com www.ribosomatic.com

El proceso de instalación de SSL, realizará otras preguntas, contestar Y/n de acuerdo a nuestra necesidad:

Enable HTTP to HTTPS redirection [Y/n]: n

Enable no-www to www redirection [Y/n]: n

Enable www to no-www redirection [Y/n]: n

Y esperar mientras se instala el certificado. Luego de esto podemos comprobar si nuestro dominio acepta el protocolo https:// y si nos aparece el famoso candado verde.

De no funcionar reiniciar el servidor Apache, por consola:

$sudo /opt/bitnami/ctlscript.sh restart apache

Conclusión

Comparada con la curva de aprendizaje al usar otro de los servicios de AWS, Lightsail es una buena alternativa para iniciarse y adentrarse al mundo de los servicios en la nube.

La ventajas son obvias por ahora, obtienes un VPS propio a un precio muy asequible. La características del servicio mas económico ($ 3.5 USD mensual) es mas que suficiente para un blog inicial ó una aplicación pequeña – mediana.

La desventaja es que como haz visto en este tutorial, hemos echado mano de la consola y comandos en muchas oportunidades. Quienes están acostumbrados a un gestor tipo cPanel por ejemplo, donde con un par que clics configuras todo, puede constarles algo. Y si no nos gusta usar comandos, o nos parece abrumador puede que AWS Lightsail por ahora no sea lo mas recomendable. Pero con esfuerzo podemos obtener un buen producto para nuestras aplicaciones.

Espero les sirva esta guía. Comparte si te fue útil o puede serlo a otros! 😊

Leave a Reply

Your email address will not be published. Required fields are marked *

Proudly powered by WordPress | Theme: Wanderz Blog by Crimson Themes.