Por qué autoalojar una API Go en un VPS
A diferencia de Java o Node, una aplicación Go (con el framework Gin) se compila en un único binario estático que no necesita ni intérprete, ni runtime, ni biblioteca compartida. Puede literalmente dejar el binario en un VPS y ejecutarlo. Esta ligereza lo cambia todo para el autoalojamiento: una API Gin funciona con 15 a 30 MB de RAM y arranca en unos milisegundos; el rendimiento que sostiene depende de lo que haga su handler, y se mide sobre su propia carga. En un VPS, aprovecha al máximo esta eficiencia: un servidor de gama de entrada basta para servir una carga que los lenguajes interpretados exigirían en una máquina mucho más grande. También evita la complejidad de las imágenes Docker voluminosas: una imagen scratch de 10 MB es suficiente.
Beneficios concretos
- Binario estático único: ningún runtime que instalar, despliegue mediante una simple copia de archivo
- Huella de memoria mínima (15-30 MB) que permite saturar de peticiones un VPS pequeño
- Imagen Docker
scratchodistrolessde 10-15 MB: builds y pulls casi instantáneos - Arranque en milisegundos: redespliegues y reinicios sin interrupción perceptible
- Concurrencia nativa mediante goroutines: un solo vCPU gestiona miles de conexiones simultáneas
- Superficie de ataque reducida: sin intérprete ni paquetes de sistema que parchear
Requisitos de hardware y software
Aquí es donde Go brilla: una API Gin sin base de datos cabe en un VPS de 1 vCPU y 1 GB de RAM, y se mantiene holgada. Con PostgreSQL en la misma máquina, apunte a 2 GB para estar cómodo. Ni siquiera necesita Go en el servidor si compila en CI o mediante compilación cruzada local (GOOS=linux GOARCH=amd64 go build). Instale Docker si lo contenedoriza, o nada en absoluto si lanza el binario directamente bajo systemd. Apunte un dominio api.mondomaine.com a la IP del VPS mediante un registro A. 5 GB de disco bastan de sobra.
Despliegue paso a paso
Compilar el binario para Linux (compilación cruzada)
Desde su equipo, ejecute
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .. El flagCGO_ENABLED=0garantiza un binario 100 % estático, imprescindible para una imagenscratch. Obtiene un ejecutableapplisto para funcionar en cualquier Linux.Construir una imagen Docker mínima
Redacte un Dockerfile multi-stage: una etapa
golang:1.22-alpinepara compilar, y despuésFROM scratch, que copia únicamente el binario y los certificados CA (COPY --from=builder /etc/ssl/certs ...). La imagen final pesa una decena de MB. Exponga el puerto 8080.Configurar Gin para producción
Ponga Gin en modo release con
gin.SetMode(gin.ReleaseMode)o la variableGIN_MODE=releasepara desactivar los registros detallados de depuración. Lea el puerto y los secretos desde el entorno (os.Getenv), nunca escritos en duro en el código.Lanzar el contenedor
Arranque con
docker run -d --restart unless-stopped -p 127.0.0.1:8080:8080 -e GIN_MODE=release monapp:latest. Al enlazar en127.0.0.1, solo expone Gin al reverse proxy local, no directamente a Internet.Poner Nginx o Caddy como frontal
Configure un reverse proxy hacia
http://127.0.0.1:8080. Caddy resulta especialmente adecuado aquí: con una simple directivareverse_proxy localhost:8080, provisiona automáticamente el certificado HTTPS sin Certbot.Asegurar con TLS
Con Caddy, el HTTPS es automático en cuanto el dominio apunta al VPS. Con Nginx, ejecute
certbot --nginx -d api.mondomaine.com. Compruebe después la cadena TLS concurl -I https://api.mondomaine.com.
Active el profiling pprof de Go detrás de un endpoint protegido: import _ "net/http/pprof" expuesto en un puerto interno accesible únicamente mediante un túnel SSH. Obtiene flame graphs de CPU y de memoria en producción real sin sobrecarga apreciable. Piense también en compilar con -ldflags="-s -w" para reducir un 30 % el tamaño del binario eliminando las tablas de depuración.
Desplegar Go (Gin) en un clic desde el Marketplace ServOrbit
El Marketplace ServOrbit ofrece una plantilla Go (Gin) Stack preconfigurada: Go 1.22+ desde el binario oficial go.dev, Nginx y PostgreSQL 16 se instalan automáticamente en su VPS desde el pedido. Sin sesión SSH para la instalación de base — llega directamente a la etapa de compilar su proyecto y subir el binario. La ficha del marketplace contiene las especificaciones exactas, los casos de uso y una guía de primera conexión.