Despliegue de una aplicación Kotlin en VPS: guía paso a paso
Desarrollar en Kotlin es solo la mitad del trabajo. Para que su aplicación esté disponible para los usuarios, debe implementarla en un servidor. En esta guía, veremos en detalle el proceso de despliegue de una aplicación Kotlin (JVM) en un VPS (Virtual Private Server). Aprenderá cómo preparar el servidor, compilar la aplicación, configurar el inicio automático y garantizar una conexión HTTPS segura. El artículo está dirigido a desarrolladores familiarizados con los conceptos básicos de Kotlin y Linux.
1. Preparación del servidor y el entorno
Antes de cargar el código, es necesario preparar el VPS. Usaremos Ubuntu 22.04 LTS. Conéctese al servidor por SSH:
ssh root@su-ip-del-servidorActualice los paquetes e instale los componentes necesarios:
sudo apt update && sudo apt upgrade -ysudo apt install openjdk-17-jdk git nginx certbot python3-certbot-nginx -yVerifique la versión de Java:
java -versionAhora crearemos un usuario para la aplicación (ejecutar procesos como root no es seguro):
sudo useradd -m -s /bin/bash kotlinappsudo usermod -aG sudo kotlinappsu - kotlinappAsegúrese de que el usuario pueda ejecutar Java.
2. Compilación y carga de la aplicación Kotlin
Consideremos dos frameworks populares: Ktor y Spring Boot. Ambos se compilan en un archivo JAR ejecutable. Ejemplo para Ktor:
// build.gradle.kts (fragmento)plugins { kotlin("jvm") version "1.9.22" application id("io.ktor.plugin") version "2.3.7"}
application { mainClass.set("com.example.ApplicationKt")}
ktor { fatJar { archiveFileName.set("myapp.jar") }}Compile el fat JAR localmente:
./gradlew buildFatJarCargue el JAR al servidor mediante SCP (ejecute en su máquina local):
scp build/libs/myapp.jar kotlinapp@su-ip:/home/kotlinapp/app/En el servidor, cree la estructura:
mkdir -p /home/kotlinapp/app/logs3. Configuración de systemd para inicio automático
Para que la aplicación se inicie automáticamente al arrancar el servidor y se reinicie en caso de fallos, crearemos un servicio systemd. Cree el archivo /etc/systemd/system/kotlinapp.service:
sudo nano /etc/systemd/system/kotlinapp.serviceInserte la siguiente configuración:
[Unit]Description=Servicio de Aplicación KotlinAfter=network.target
[Service]User=kotlinappGroup=kotlinappWorkingDirectory=/home/kotlinapp/appExecStart=/usr/bin/java -jar myapp.jarRestart=alwaysRestartSec=10StandardOutput=append:/home/kotlinapp/app/logs/out.logStandardError=append:/home/kotlinapp/app/logs/err.logEnvironment="PORT=8080"
[Install]WantedBy=multi-user.targetHabilite e inicie el servicio:
sudo systemctl daemon-reloadsudo systemctl enable kotlinappsudo systemctl start kotlinappVerifique el estado:
sudo systemctl status kotlinappLos logs se pueden ver con el comando:
journalctl -u kotlinapp -f4. Configuración de Nginx y HTTPS (SSL)
El servidor proxy Nginx redirigirá las solicitudes del puerto 80/443 al puerto 8080 de su aplicación Kotlin. Cree la configuración:
sudo nano /etc/nginx/sites-available/kotlinappEjemplo de configuración:
server { listen 80; server_name sud dominio.com www.sud dominio.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_header X-Forwarded-Proto $scheme; }}Active el sitio y obtenga un certificado SSL:
sudo ln -s /etc/ngin