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 -yInstalació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' >> ~/.profileVerifica 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 -y2. 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.goAhora 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.serviceInserta 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.targetReemplaza /home/user con tu ruta. Activa e inicia el servicio:
sudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappsudo systemctl status myappAhora 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/myappAñ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