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

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é desplegar una aplicación Go en VPS es simple y eficiente

Go (Golang) es famoso por su rendimiento y simplicidad. Una de las principales ventajas del lenguaje es la compilación en un único binario estático que no requiere la instalación de runtimes adicionales en el servidor. Esto hace que el despliegue de una aplicación Go en VPS sea increíblemente rápido y confiable. En este artículo, analizaremos el ciclo completo de despliegue: desde la preparación del servidor hasta la configuración de reverse proxy y HTTPS. Obtendrás una lista de verificación lista para usar que puedes aplicar a cualquier proyecto Go.



1. Preparación del VPS e instalación del software necesario

Antes de cargar el código, debes preparar el servidor. Se asume que tienes un VPS con Ubuntu 22.04 o 24.04. Conéctate a través de SSH y realiza la actualización del sistema.

sudo apt update && sudo apt upgrade -y

Instalación de Go en el servidor

Aunque Go se compila en un binario, es posible que necesites el compilador en el servidor para la compilación. Instalemos la última versión:

wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gzsudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gzexport PATH=$PATH:/usr/local/go/binecho 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile

Verifica la instalación: go version.



Instalación de Git y Nginx

Git será necesario para clonar el repositorio, y Nginx para el reverse proxy y contenido estático.

sudo apt install git nginx -y


2. Compilación y ejecución de la aplicación Go

Veamos el proceso con un ejemplo de un servidor HTTP simple. Crea el archivo main.go:

package main

import (\t"fmt"\t"net/http")

func handler(w http.ResponseWriter, r *http.Request) {\tfmt.Fprintf(w, "Hello from Go on VPS!")}

func main() {\thttp.HandleFunc("/", handler)\tfmt.Println("Server started on :8080")\thttp.ListenAndServe(":8080", nil)}

Compila el binario para Linux (incluso si trabajas en Windows/Mac):

GOOS=linux GOARCH=amd64 go build -o myapp main.go

Ahora sube el binario al servidor. Usa SCP o Rsync:

scp myapp user@your-server-ip:~/

En el servidor, haz que el archivo sea ejecutable y ejecútalo:

chmod +x ~/myapp./myapp &

Verifica su funcionamiento: curl http://localhost:8080. Si ves "Hello from Go on VPS!" — todo funciona.



3. Configuración de systemd para inicio automático

La ejecución manual no es una buena práctica. Usamos systemd para que la aplicación se inicie al arrancar el sistema y se reinicie en caso de fallos.

Crea el archivo de servicio:

sudo nano /etc/systemd/system/myapp.service

Inserta la configuración:

[Unit]Description=Go Application ServiceAfter=network.target

[Service]Type=simpleUser=www-dataWorkingDirectory=/home/userExecStart=/home/user/myappRestart=alwaysRestartSec=5

[Install]WantedBy=multi-user.target

Reemplaza /home/user con tu ruta. Activa e inicia el servicio:

sudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappsudo systemctl status myapp

Ahora tu aplicación Go funcionará como un demonio.



4. Configuración de Nginx como reverse proxy y HTTPS

Para que la aplicación sea accesible por dominio y a través del puerto 443, configuraremos Nginx.

Configuración de reverse proxy

Elimina la configuración predeterminada y crea la tuya:

sudo rm /etc/nginx/sites-enabled/defaultsudo nano /etc/nginx/sites-available/myapp

Añade:

server {    listen 80;    server_name yourdomain.com www.yourdomain.com;

location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_h

Blogs

Book Recommendations