Desarrollo web

Utilizando SQL Server en Ubuntu

Las siguientes instrucciones detallan cómo instalar Microsoft SQL Server 2022 (16.x) en una instancia EC2 de AWS corriendo Ubuntu 20.04. Así mismo, muestra una aplicación de Node que utiliza Express para acceder a una base de datos de SQL Server.

La información fue tomada principalmente de las siguientes fuentes:

Crear una instancia EC2 con Ubuntu 20.04

  1. Desde Learner Lab ir a la consola de AWS y seleccionar EC2.

  2. Lanzar una instancia EC2 con las siguientes características:

    • Imagen de sistema operativo: Ubuntu Server 20.04 LTS
    • Tipo de instancia: t3.small
    • Par de claves (inicio de sesión): Continuar sin un par de claves
    • Firewall (grupos de seguridad): Seleccionar un grupo de seguridad existente
    • Grupos de seguridad: launch-wizard-1
    • Configurar almacenamiento: 15 GiB
  3. Verificar que el puerto 8080 de la instancia EC2 esté abierto a través de la edición de las reglas del grupo de seguridad launch-wizard-1.

  4. Asignar una nueva dirección IP elástica del grupo de direcciones IPv4 de Amazon y asociarla a nuestra instancia EC2. Hay que tomar nota de esta dirección IP.

  5. Conectarse a la instancia EC2 y ejecutar los siguientes comandos en la terminal para instalar los paquetes que serán requeridos para el siguiente paso:

    sudo apt update
    sudo apt upgrade -y
    sudo apt install nodejs npm python2 pip libevent-dev -y

    Hay que dejar esta terminal abierta para el siguiente paso.

  6. En otra ventana o pestaña del navegador, en la consola de AWS ir a Cloud9 para crear un nuevo ambiente seleccionando la opción que permite asociarlo a nuestra instancia de cómputo existente. Visualizar la llave SSH y en la terminal copiarla al archivo ~/.ssh/authorized_keys usando un editor como pico o vim. El nombre de usuario debe ser ubuntu y el host debe ser la dirección IP del paso 4.

  7. Abrir el ambiente de Cloud9 recién creado y seguir las indicaciones para terminar la instalación.

Instalar SQL Server

Los siguientes comandos se deben teclear en la terminal del ambiente de Cloud9 recién creado.

  1. Importar las claves GPG del repositorio.

    wget -qO- https://packages.microsoft.com/keys/microsoft.asc \
    | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
  2. Registrar el repositorio de SQL Server para Ubuntu:

    sudo add-apt-repository "$(wget -qO- \
    https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"
    
  3. Actualizar los índices de los paquetes del sistema:

    sudo apt-get update
  4. Instalar SQL Server:

    sudo apt-get install -y mssql-server
  5. Configurar SQL Server. El programa solicitará la edición de SQL Server que se desea utilizar. Aquí se debe seleccionar la opcion 2 (developer). Así mismo, se debe aceptar la licencia y se debe proporcionar una contraseña para el sa (administrador del sistema):

    sudo /opt/mssql/bin/mssql-conf setup
  6. Verificar que el servicio está activo:

    systemctl status mssql-server --no-pager

Instalar herramientas de línea de comando

  1. Registrar el repositorio de productos de Microsoft para Ubuntu:

    curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list \
    | sudo tee /etc/apt/sources.list.d/msprod.list
  2. Actualizar los índices de los paquetes del sistema:

    sudo apt-get update
  3. Instalar las herramientas de línea de comando de SQL Server junto con el paquete de desarrollo de ODBC para Unix. Es necesario aceptar la licencia.

    NOTA: se requiere usar la tecla TAB para seleccionar el botón de “Yes” y presionar Enter para aceptar la licencia.

    sudo apt-get install mssql-tools unixodbc-dev -y
  4. Modificar la variable de entorno PATH para añadir la ruta de las herramientas recién instaladas:

    echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc

    Después de este paso es necesario cerrar la terminal y abrir una nueva para que tome efecto el nuevo valor de la variable de entorno.

Ejecutar sqlcmd

La utilería sqlcmd es una aplicación de línea de comando que permite la ejecución interactiva de instrucciones para consultar las bases de datos de SQL Server. Para correr el comando se requiere proporcionar los siguientes argumentos:

Por ejemplo:

sqlcmd -S localhost -U sa -P 'TuContraseña'

NOTA: Sustituir TuContraseña por la contraseña seleccionada al momento en que se configuró SQL Server.

Si la conexión fue exitosa se obtiene el prompt de sqlcmd:

1>

A partir de ese momento ya se pueden consultar las bases de datos.

El siguiente comando permite crear la base de datos que estaremos utilizando en el código ejemplo más adelante:

CREATE DATABASE web_database;
GO

Para terminar la sesión de sqlcmd teclear quit o exit seguido de Enter.

Utilizar Node con SQL Server

  1. Actualizar Node a su versión estable más reciente:

    sudo npm install n --global
    sudo n stable

    Después de este paso se debe cerrar la terminal y abrir una nueva para que esté disponible la versión estable más reciente de Node. Para verficar que así sea:

    node -v

    La salida debe ser igual o superior a:

        v18.16.0

  2. Instalar el paquete para abrir archivos de Cloud9 desde la terminal:

    sudo npm install c9 --global
  3. Modificar el archivo .bashrc para definir como variables de entorno el usuario y constraseña de SQL Server.

    c9 .bashrc

    El comando anterior abre el archivo .bashrc en el editor de Cloud9. Ir al final de dicho archivo y agregar las siguientes dos líneas:

    export MSSQL_USER="sa"
    export MSSQL_PASSWORD="TuContraseña"
    

    NOTA: Sustituir TuContraseña por la contraseña seleccionada al momento en que se configuró SQL Server.

    Después de este paso es necesario cerrar la terminal y abrir una nueva para que tome efecto los valores de las variables de entorno. Para verificar que así sea, teclar en la terminal:

    echo $MSSQL_USER
    echo $MSSQL_PASSWORD

    Dichos comandos deben desplegar los valores asociados a las respectivas variables de entorno.

  4. Instalar nodemon para correr nuestra aplicación escrita en Express:

    sudo npm install nodemon --global
  5. Descargar y descomprimir el tarball que contiene los archivos de nuestra aplicación (servidor web con los servicios web de tipo RESTful de quotations) :

    wget \
    https://arielortiz.info/s202311/tc2005b/rest_quotations_mssql.tgz
    tar xzf rest_quotations_mssql.tgz
  6. Cambiar el directorio actual de trabajo a rest_quotations_mssql:

    cd rest_quotations_mssql
  7. Instalar los módulos express y mssql de Node requeridos por la aplicación:

    npm install express mssql
  8. Crear la tabla de quotations ejecutando el script de SQL correspondiente:

    sqlcmd -S localhost -i quotations_mssql.sql \
    -U sa -P 'TuContraseña'

    NOTA: Sustituir TuContraseña por la contraseña seleccionada al momento en que se configuró SQL Server.

  9. Editar en el archivo app.js el valor de la constante ipAddr colocando la dirección IP pública que se obtuvo cuando la instancia de EC2 fue creada. Posteriormente, correr la aplicación usando nodemon:

    nodemon app.js

    NOTA: El código contenido en app.js muestra cómo conectarse desde Node a SQL Server y como hacer consultas (queries) a nuestra base de datos. Conviene revisar detalladamente este archivo:

  10. Los endpoints de los servicios web disponibles son los mismos que se vieron anteriormente en clase con el ejemplo de rest_quotations que usaba MySQL como sistema manejador de base de datos. Se recomienda usar Postman para probar su funcionamiento.

    NOTA: No olvidar que el URL completo para acceder a cualquier recurso tienen la siguiente forma:

    http://public-ip-address:8080/recurso

    Lista de endpoints

    GET /quotations
    Solicita la colección completa de quotations.
    GET /quotations/{ID}
    Solicita un recurso de la colección quotations con el ID indicado.
    POST /quotations
    Crea un nuevo recurso en la colección quotations. Los datos del recurso siendo creado deben ser proporcionados en el cuerpo de la petición a través de un objeto JSON que contenga los nombres (llaves) "author" y "excerpt" asociados a los valores deseados.
    DELETE /quotations
    Borra la colección completa de quotations.
    DELETE /quotations/{ID}
    Borra el recurso de la colección quotations con el ID indicado.
    PUT /quotations/{ID}
    Actualiza el recurso de la colección quotations con el ID indicado. Los datos del recurso siendo actualizado deben ser proporcionados en el cuerpo de la petición a través de un objeto JSON que contenga los nombres (llaves) "author" y "excerpt" asociados a los valores deseados.

    Los siguientes recursos (contenidos en rest_quotations_mssql/public) son documentos HTML que utilizan JavaScript del lado del cliente para acceder a varios de los servicios web descritos arriba:

    • /index.html : Lista todos los recursos de la colección quotations.

    • /post.html : Solicita al usuario los datos para crear un nuevo recurso de la colección quotations.

    • /cowsay.html : Muestra un recurso al azar de la colección quotations.