Despliegue de una aplicación Kotlin en VPS: paso a paso de principio a fin
Has escrito una aplicación genial en Kotlin (Ktor, Spring Boot o simplemente un servicio de consola), y ahora necesitas ejecutarla en un servidor real. En este artículo, analizaremos el ciclo completo de despliegue de una aplicación Kotlin en VPS: desde la compra del servidor y la configuración de SSH hasta la ejecución mediante systemd y la conexión de un dominio con HTTPS. Todos los ejemplos son funcionales, probados en Ubuntu 22.04.
1. Preparación del VPS y conexión
Lo primero es alquilar un VPS (por ejemplo, en Timeweb, Selectel o DigitalOcean). Requisitos mínimos: 1 vCPU, 1 GB RAM, 20 GB SSD. Sistema operativo: Ubuntu 22.04 LTS.
Después de obtener la dirección IP y la contraseña de root, nos conectamos por SSH:
ssh root@tu_ip_del_servidorActualizamos el sistema inmediatamente y creamos un usuario no privilegiado (trabajar como root es una mala práctica):
apt update && apt upgrade -yadduser kotlinuserusermod -aG sudo kotlinusersu - kotlinuserConfigura las claves SSH para un acceso cómodo y seguro:
ssh-keygen -t ed25519 -C "tu_email@example.com"ssh-copy-id kotlinuser@tu_ip_del_servidorAhora desactiva el acceso por contraseña en /etc/ssh/sshd_config (línea PasswordAuthentication no) y reinicia SSH: sudo systemctl restart sshd.
2. Instalación de Java (JRE/JDK) y compilación de la aplicación
Las aplicaciones Kotlin se ejecutan en la JVM. Instala OpenJDK 17 o 21 (recomendado para proyectos modernos):
sudo apt install openjdk-17-jdk -yjava -versionAhora, en tu computadora local (donde desarrollas), compila la aplicación en un archivo JAR. Para Gradle (Ktor o Spring Boot):
./gradlew clean buildEl archivo JAR listo estará en build/libs/. Por ejemplo, myapp-1.0.0.jar. Cárgalo al servidor:
scp build/libs/myapp-1.0.0.jar kotlinuser@tu_ip_del_servidor:~/app/Crea la estructura de carpetas en el servidor:
mkdir -p ~/app/logs ~/app/configColoca los archivos de configuración (application.conf, application.yml) en ~/app/config/. Verifica que la aplicación se inicie manualmente:
cd ~/appjava -jar myapp-1.0.0.jar --spring.config.location=file:./config/Si todo funciona, pasamos al inicio automático.
3. Configuración de systemd para inicio automático
Para que la aplicación se inicie automáticamente después de reiniciar el servidor y no se caiga ante errores, crearemos un servicio systemd.
Crea el archivo /etc/systemd/system/kotlin-app.service:
sudo nano /etc/systemd/system/kotlin-app.serviceInserta el siguiente contenido (reemplaza las rutas con las tuyas):
[Unit]Description=Servicio de Aplicación KotlinAfter=network.target
[Service]Type=simpleUser=kotlinuserWorkingDirectory=/home/kotlinuser/appExecStart=/usr/bin/java -jar /home/kotlinuser/app/myapp-1.0.0.jar --spring.config.location=file:/home/kotlinuser/app/config/Restart=on-failureRestartSec=10StandardOutput=append:/home/kotlinuser/app/logs/app.logStandardError=append:/home/kotlinuser/app/logs/error.log
[Install]WantedBy=multi-user.targetExplicación de los parámetros clave:
- User — desde qué usuario ejecutar (no root);
- ExecStart — comando completo de inicio con la configuración indicada;
- Restart=on-failure — reinicio automático en caso de fallo;
- StandardOutput/Error — registro en archivos.
Activamos el servicio:
sudo systemctl daemon-reloadsudo systemctl enable kotlin-app.servicesudo systemctl start kotlin-app.serviceVerificamos el estado:
sudo systemctl status kotlin-app.service