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 y VPS son la pareja ideal para tu proyecto

\n\n

Go (Golang) es un lenguaje compilado, creado para el rendimiento y la simplicidad. Su principal ventaja en el despliegue es la compilación estática. No necesitas instalar un intérprete o una máquina virtual en el servidor. Simplemente cargas un único archivo binario y lo ejecutas. Esto hace que el despliegue de una aplicación Go en VPS sea increíblemente rápido y confiable.

\n\n

En esta guía, recorreremos el camino completo: desde escribir un servidor HTTP simple en Go hasta ejecutarlo en un servidor VPS real con Ubuntu 22.04. Configuraremos systemd para el inicio automático, Nginx como proxy inverso y Let's Encrypt para HTTPS. Todos los ejemplos de código están listos para usar.

\n\n

1. Preparación del VPS y escritura de la aplicación Go

\n\n

1.1. Configuración inicial del servidor

\n\n

Después de comprar un VPS (por ejemplo, en DigitalOcean, Timeweb o Hetzner), conéctate por SSH:

\n\n
ssh root@tu_IP_del_servidor
\n\n

Realiza la configuración básica de seguridad:

\n\n
apt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer\n# Deshabilitar el inicio de sesión de root en /etc/ssh/sshd_config\n# PermitRootLogin no\nsystemctl restart sshd
\n\n

Asegúrate de que los puertos 80 y 443 estén abiertos en el firewall (UFW):

\n\n
ufw allow 22\nufw allow 80\nufw allow 443\nufw enable
\n\n

1.2. Aplicación Go simple para el despliegue

\n\n

Crea en tu máquina local el archivo main.go:

\n\n
package main\n\nimport (\n\t"fmt"\n\t"log"\n\t"net/http"\n\t"os"\n)\n\nfunc main() {\n\tport := os.Getenv("PORT")\n\tif port == "" {\n\t\tport = "8080"\n\t}\n\n\thttp.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {\n\t\tfmt.Fprintf(w, "¡Hola desde Go! El servidor funciona en el puerto %s", port)\n\t})\n\n\thttp.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\tw.Write([]byte("OK"))\n\t})\n\n\tlog.Printf("Iniciando servidor en :%s", port)\n\tlog.Fatal(http.ListenAndServe(":"+port, nil))\n}
\n\n

Verifica localmente:

\n\n
go run main.go
\n\n

Abre el navegador en http://localhost:8080. Si ves el saludo, todo funciona.

\n\n

2. Compilación y carga del binario al servidor

\n\n

2.1. Compilación cruzada para Linux

\n\n

En tu máquina local (incluso si tienes Windows o macOS), ejecuta:

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

La bandera -o myapp establece el nombre del archivo de salida. Las variables de entorno GOOS y GOARCH indican la arquitectura de destino (Linux de 64 bits).

\n\n

Después de la compilación, tendrás un archivo binario myapp de aproximadamente 10-15 MB.

\n\n

2.2. Carga al VPS

\n\n

Usa scp para copiar el archivo:

\n\n
scp myapp deployer@tu_IP_del_servidor:/home/deployer/myapp
\n\n

O, si usas rsync:

\n\n
rsync -avz myapp deployer@tu_IP_del_servidor:/home/deployer/myapp
\n\n

En el servidor, mueve el binario a un directorio del sistema y hazlo ejecutable:

\n\n
sudo mv /home/deployer/myapp /usr/local/bin/myapp\nsudo chmod +x /usr/local/bin/myapp
\n\n

3. Configuración de systemd y arranque automático

\n\n

3.1. Creación del archivo de servicio

\n\n

Systemd gestionará nuestra aplicación: la iniciará al arrancar el sistema, la reiniciará si falla y recopilará los registros.

\n\n

Crea el archivo /etc/systemd/system/myapp.service:

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

Inserta la siguiente configuración:

\n\n
[Unit]\nDescription=Servidor de Aplicación Go\nAfter=network.target\n\n[Service]\nType=simple\nUser=deployer\nGroup=deployer\nWorkingDirectory=/usr/local/bin\nExecStart=/usr/local/bin/myapp\nRestart=always\nRestartSec=5\nEnvironment=PORT=8080\nEnvironment=GIN_MO                

Blogs

Book Recommendations