Skip to content
JoralmoPro
TwitterHomepage

Desplegar api Go (Fiber) en Railway automáticamente con GitLab

Go, Fiber, GitLab, Railway, tutorial, programación3 min read

Holaaa 👋 aquí vamos de nuevo con un tutorial, donde veremos como desplegar un proyecto de Go con Fiber en Railway por medio del CI/CD de Gitlab, ya que cuando intenté hacerlo la documentación al respecto es poca, así que aquí vamos a ver como hacerlo paso a paso, pero primero:

¿Qué es GitLab? 🤔 Gitlab es una plataforma de desarrollo colaborativo para alojar repositorios de código, gestionar proyectos y controlar la actividad de los desarrolladores, muy similar a GitHub pero con algunas diferencias, también es gratis y tiene en su plan gratis el servicio de CI/CD que nos permite ejecutar acciones a partir de un push a un repositorio, como por ejemplo desplegar una aplicación en un servidor.

¿Qué es Railway? 🤔 Railway es una plataforma de hosting para desplegar aplicaciones web, es gratuita y tiene un plan de pago, en el plan gratuito podemos desplegar una aplicación automáticamente al configurar un token que usaremos desde gitlab para desplegar la aplicación, también podemos desplegar una aplicación manualmente, pero en este tutorial veremos como desplegarla automáticamente.

Empecemos 🚀

Para este tutorial he preparado este pequeño proyecto en Go con Fiber, una pequeña api con dos enpoints, uno para ver que está funcionando y otro protegido por una api-key (esto para ver como configurar variables de entorno en railway) y que nos devuelve un array de string a modo de ejemplo, puedes clonar el proyecto desde aquí.

api-code
1package main
2
3import (
4 "os"
5
6 "github.com/fiberweb/apikey/v2"
7 "github.com/gofiber/fiber/v2"
8)
9
10func main() {
11
12 app := fiber.New()
13
14 app.Get("/", func(c *fiber.Ctx) error {
15 return c.SendString("¡Api It's working!")
16 })
17
18 app.Use(apikey.New(apikey.Config{Key: os.Getenv("API_KEY")}))
19
20 app.Get("/services", func(c *fiber.Ctx) error {
21 services := []string{"service1", "service2", "service3"}
22 return c.JSON(services)
23 })
24
25 port := os.Getenv("PORT")
26
27 if port == "" {
28 port = "3000"
29 }
30
31 app.Listen(":" + port)
32
33}

Configuración de Railway 🚀

Seguidamente procedemos con railway para la configuración del proyecto y del servicio desde su dashboard, railway permite desplegar aplicaciones incluso sin estar logeados pero para este caso necesitamos estar logeados para generar un token que es el que utilizaremos para enviar el proyecto desde el CI/CD de gitlab, para esto, una vez ingresamos a la página de railway y nos logeamos, vamos a crear un nuevo proyecto: Inicio railway Seguidamente elegimos la opción para crear un proyecto vacío: Crear proyecto Una vez nuestro proyecto se ha creado, procedemos a agregar un nuevo servicio vacío: Agregar servicio Nuevo servicio Servicio vacío Servicio creado Al hacer click sobre el servicio creado lo podremos editar, y vamos a colocarle un nombre mas amigable 😁 Editar servicio Ahora en la esquina superior derecha en los settings del proyecto vamos a generar un token para poder desplegar la aplicación desde el CI/CD de gitlab:

Importante copiarlo apenas sea generado ya que solo se puede ver una vez

Token Y de momento por parte de railway ya tenemos todo listo para desplegar la aplicación, ahora vamos a configurar el CI/CD de gitlab.

Configuración de GitLab 🚀

En las configuraciones de nuestro repositorio, en el apartado de CI/CD vamos a agregar una variable de entorno llamada RAILWAY_TOKEN y RAILWAY_SERVICE_NAME donde pegamos el token que generamos en railway y el nombre de nuestro servicio: Configuración CI/CD Token y service name Variables Y ahora procedemos a crear el archivo .gitlab-ci.yml en nuestro repositorio con el siguiente contenido:

.gitlab-ci.yml
1stages:
2 - deploy
3
4deploy-railway:
5 stage: deploy
6 image: ubuntu
7 only:
8 - pushes
9 - main
10 script:
11 - apt-get update && apt-get install -y curl
12 - curl -fsSL https://railway.app/install.sh | sh
13 - railway up --service=$RAILWAY_SERVICE_NAME -d

Railway por defecto busca la variable de entorno RAILWAY_TOKEN para autenticarse, por lo que no es necesario agregarla en el archivo .gitlab-ci.yml, ahora solo nos queda hacer un push a nuestro repositorio y ver como se despliega la aplicación automáticamente en railway. Ahora una vez añadido el archivo y luego de hacer push, podemos ver en la sección de CI/CD de gitlab como empieza a ejecutarse el pipeline: Pipeline Pipeline Pipeline

Y en railway podemos ver el servicio ya desplegado, pero al ser la primera vez y como es un servicio web nuevo, nos sugerirá que agreguemos una url para poder acceder a la aplicación, de momento elegiremos generar un dominio: Railway Una vez generado nos lo muestra y desde ahí mismo podremos acceder a nuestra aplicación: Railway Damos click para navegar al dominio: Railway Probamos desde postman el endpoint de /services sin el token, podemos ver que retorna un error de autorización: Postman Para configurar el API_KEY volvemos a railway y hacemos click sobre el servicio y vamos a la sección de variables y creamos una nueva: Railway Probamos nuevamente desde postman pero ahora si enviando el header x-api-key con el valor de la variable de entorno API_KEY y vemos que nos responde sin problemas: Postman

Y con esto ya tendríamos nuestra api de Go desplegada en Railway y con un CI/CD automatizado desde GitLab, espero que les haya gustado el tutorial y que les sirva para sus proyectos, cualquier duda o comentario me pueden encontrar en las redes como @JoralmoPro.

Nos vemos en línea.