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 myappPara Linux/macOS usa export:
export GOOS=linuxexport GOARCH=amd64go build -o myappComo 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-servidorCrea un directorio para la aplicación:
mkdir -p /opt/myappcd /opt/myappEn 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/myappCreació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.serviceInserta 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.targetExplicación de los parámetros:
UseryGroup— 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 myappSi todo está correcto, verás el estado active (running). Verifica que la aplicación responda localmente:
curl http://localhost:8080Paso 3: Configuración de Nginx como proxy inverso
Acceso directo a la aplicación a través del puerto 8