Volver al blog

Despliegue de una aplicación web de Go usando Nginx en Ubuntu 22.04

Despliegue de una aplicación web de Go usando Nginx en Ubuntu 22.04

Go es un lenguaje de programación de propósito general de código abierto. Fue inspirado por la productividad de Python al tiempo que ofrece la capacidad de C. Fue desarrollado originalmente por Google para abordar los problemas que enfrentaban con su base de código (complejidad del código y largo tiempo de compilación). Al igual que cualquier otro lenguaje de programación moderno, Go es adecuado para todo tipo de propósitos. Por ejemplo, podría utilizarse para desarrollo web, scripting en línea de comandos, aplicaciones de servidor de red, desarrollo front-end, etc.

En esta guía, te guiaremos a través de los pasos para implementar una aplicación web simple en Go en Ubuntu 22.04 LTS. También implementaremos un proxy inverso Nginx para manejar la carga de tráfico.

Requisitos previos

Para realizar los pasos demostrados en esta guía, necesitarás tener preconfigurados los siguientes componentes:

Si se va a acceder al servicio mediante un nombre de dominio, debes tener un FQDN apuntando al servidor. En ese caso, se recomienda proteger Nginx con SSL. Puedes obtener más información sobre cómo proteger Nginx con Let’s Encrypt en Ubuntu en nuestro tutorial.

Paso 1 – Creación de una aplicación web en Go

Crearemos una aplicación web simple en Go que imprimirá “Hello World” en la pantalla al acceder al dominio. Además, la aplicación saludará al usuario al acceder a <dominio>/greet/<nombre_usuario>.

Comienza creando un nuevo proyecto bajo $GOPATH. Crea el directorio del proyecto:

Go Web Application Make Dir

Cambia el directorio actual:

Go Web Application Change Dir

Luego, inicia un proyecto:

Go Web Application Init Project

A continuación, crea main.go que servirá como la raíz de nuestra aplicación Go. Alojará el código fuente de nuestra aplicación web:

Abre el proyecto en VS Code:

Pega el siguiente código en el archivo main.go:

Go Web Application Main Go

Analicemos brevemente el programa Go que acabamos de crear:

  • El término package main sirve como punto de entrada a nuestra aplicación. También indica al compilador de Go que compile el archivo como un ejecutable en lugar de una biblioteca compartida.
  • La import instrucción importa todos los módulos adicionales necesarios para que el programa funcione. Aquí, hemos importado los paquetes fmt (para imprimir textos) y net/http (para aplicaciones de servidor web).
  • Usando la función http.HandleFunc, establecimos dos rutas:
    • La primera ruta / sirve como la ruta principal dentro de func main.
    • La segunda ruta /greet/ acepta un parámetro URL (una cadena, en este caso). Luego, la cadena se muestra acompañada por el mensaje de saludo.
      • URL Path se utiliza para almacenar el valor después de /greet/. Luego, el valor se pasa como el name del parámetro URL.
    • La función http.ListenAndServe inicia el servidor web. Aquí, está escuchando en el puerto 9990.

Ahora que nuestro programa está listo, compile el archivo en un ejecutable:

El compilador de Go creará un ejecutable con el mismo nombre que el archivo. Eche un vistazo a la salida:

Go Web Application ls -lh

Paso 2 – Configuración de un archivo de unidad de systemd para la ejecución en segundo plano

Hasta ahora, si el usuario actual cierra la sesión en el sistema, la aplicación web de Go dejará de ejecutarse. Ese es un mal diseño para un servidor web. Para resolver este problema, crearemos un archivo de unidad de systemd para mantenerla ejecutándose en segundo plano, incluso cuando el usuario cierre la sesión en el servidor. Esto acerca la configuración un paso más a una implementación de nivel de producción.

Cree un archivo systemd dedicado goweb.service bajo /lib/systemd/system:

Añada el siguiente fragmento en el archivo de unidad:

go web service

Aquí,

  • La variable ExecStart indica el punto de entrada para el servicio a través del ejecutable principal ubicado en nuestro directorio de proyecto ( $GOPATH/go-web). Tenga en cuenta que en lugar de mencionar $GOPATH, escribimos la ruta completa al archivo ejecutable. Esto se debe a que la $GOPATH variable solo es visible para el usuario.
  • La variable Restart le dice a systemd qué hacer en caso de que el programa deje de ejecutarse. El valor always le dice a systemd que reinicie el programa cada vez que deje de ejecutarse.
  • La variable RestartSec le dice a systemd que espere una cantidad específica de tiempo antes de intentar reiniciar el programa. Aquí, el valor está establecido en 5s (5 segundos).
  • La instrucción WantedBy=multi-user.target especifica en qué estado systemd habilitará el servicio.

Guarde el archivo y cierre el editor. Inicie el servicio:

go web start

Verifique si el servicio está activo y ejecutándose:

go web status

Como sugiere la salida, la aplicación está activa y ejecutándose. Ahora estamos listos para usar Nginx como proxy inverso.

Paso 3 – Configuración de Nginx como proxy inverso

Ahora, crearemos un bloque de servidor para que Nginx actúe como un proxy inverso. La aplicación web se expondrá a Internet a través del proxy inverso (para un rendimiento y seguridad adicionales).

Cambie el directorio activo actual a sites-available:

cd

Ahora, cree un archivo con el nombre de dominio en el que desea exponer su aplicación. Para la demostración, utilizaremos example.com:

 

Introduzca el siguiente código en el archivo de bloque:

example.com

Aquí, estamos usando proxy_pass para servir la aplicación web de Go en la dirección IP del servidor (localhost) en el puerto 9990.

Para habilitar el bloque de Nginx, cree un enlace simbólico (también conocido como enlace blando) del archivo a la carpeta sites-enabled:

create sym

Recargue la configuración de Nginx para que los cambios surtan efecto:

reload nginx

Paso 4 – Verificación

Si todo salió como se esperaba, entonces la aplicación web ya debería estar accesible en localhost:9990 y el dominio que configuramos. Abra la URL en un navegador web:

Hello World

Como se esperaba, la aplicación está imprimiendo “Hello World” en la pantalla. Este es el trabajo de la ruta principal. A continuación, pruebe la segunda ruta visitando la siguiente URL:

Hello Cloud

La aplicación está devolviendo con éxito el mensaje de saludo simple con el nombre del parámetro recibido de la URL.

¡Voilà! ¡Hemos desplegado con éxito una aplicación web de Go en nuestro servidor local!

Consideraciones finales

En esta guía, demostramos cómo desplegar una aplicación web simple en Go con la ayuda de las bibliotecas estándar de Go. También desplegamos un proxy inverso usando Nginx. Aunque la demostración se realizó en un servidor local, para un servidor público, se recomienda encarecidamente implementar un certificado SSL para una exposición segura a internet. Para más programación en Go, puede consultar nuestro tutorial sobre Compilación e instalación de programas de Go.

¡Feliz computación!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev es diseñador creativo en CloudSigma, centrado en una identidad empresarial coherente mediante el uso de canales de marketing tradicionales e innovadores. Es experto en fusionar la visión artística con el marketing estratégico para crear narrativas de marca impactantes.

Comentarios

Aún no hay comentarios. Sea el primero.