Despliegue de una aplicación Go en VPS: guía paso a paso de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué Go es ideal para VPS y qué haremos



Go (Golang) es un lenguaje creado para aplicaciones de servidor escalables y de alto rendimiento. La compilación en un único archivo binario estático lo convierte en un candidato ideal para el despliegue en VPS (Virtual Private Server). No necesita instalar un intérprete ni dependencias en el servidor — simplemente copia el archivo y ejecútalo.



En este artículo recorreremos el camino completo: desde escribir un servidor HTTP simple en Go hasta ejecutarlo en producción en un VPS utilizando systemd para el inicio automático, Nginx como proxy inverso y Let's Encrypt para HTTPS.



Aprenderás a:

  • Compilar una aplicación Go para Linux
  • Cargar el archivo binario en el VPS mediante SSH
  • Configurar systemd para el inicio automático
  • Instalar y configurar Nginx
  • Obtener un certificado SSL gratuito


Paso 1: Preparación de la aplicación Go y compilación



Crear una aplicación web simple



Como ejemplo, escribiremos un servidor HTTP mínimo que responda "Hello, VPS!". Crea el archivo main.go:



package main

import ( "fmt" "net/http")

func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, VPS!") })

fmt.Println("Server started on :8080") http.ListenAndServe(":8080", nil)}


Compilación para Linux



Si desarrollas en Windows o macOS, debes compilar el binario para la arquitectura objetivo del VPS (generalmente linux/amd64). Abre la terminal en la carpeta del proyecto y ejecuta:



set GOOS=linuxset GOARCH=amd64go build -o myapp


Para Linux/macOS usa export:



export GOOS=linuxexport GOARCH=amd64go build -o myapp


Como resultado, aparecerá el archivo binario myapp. Verifica su tamaño — será pequeño (alrededor de 7-10 MB), ya que Go compila todo de forma estática.



Paso 2: Carga en el VPS y configuración de systemd



Conexión al servidor y carga del archivo



Conéctate a tu VPS por SSH:



ssh root@tu-ip-del-servidor


Crea un directorio para la aplicación:



mkdir -p /opt/myappcd /opt/myapp


En la máquina local, carga el binario mediante SCP (ejecuta en una terminal separada):



scp myapp root@tu-ip-del-servidor:/opt/myapp/


Vuelve al servidor y otorga permisos de ejecución:



chmod +x /opt/myapp/myapp


Creación del servicio systemd



Para que la aplicación se inicie automáticamente al arrancar el sistema y se reinicie en caso de fallos, crearemos una unidad de systemd. Crea el archivo:



nano /etc/systemd/system/myapp.service


Inserta el siguiente contenido:



[Unit]Description=My Go ApplicationAfter=network.target

[Service]Type=simpleUser=www-dataGroup=www-dataWorkingDirectory=/opt/myappExecStart=/opt/myapp/myappRestart=on-failureRestartSec=5

[Install]WantedBy=multi-user.target


Explicación de los parámetros:

  • User y Group — usuario bajo el cual se ejecutará la aplicación (se recomienda no usar root).
  • Restart=on-failure — reinicio automático en caso de fallo.
  • RestartSec=5 — pausa antes del reinicio.


Ahora activamos e iniciamos el servicio:



systemctl daemon-reloadsystemctl enable myappsystemctl start myappsystemctl status myapp


Si todo está correcto, verás el estado active (running). Verifica que la aplicación responda localmente:



curl http://localhost:8080


Paso 3: Configuración de Nginx como proxy inverso



Acceso directo a la aplicación a través del puerto 8

Blogs

Book Recommendations