Despliegue de aplicación Kotlin en VPS: nivel avanzado

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Despliegue de aplicación Kotlin en VPS: guía paso a paso para avanzados



Desarrollar en Kotlin es solo la mitad del trabajo. El verdadero dominio se demuestra cuando tu aplicación comienza a funcionar en un entorno de producción en tu propio servidor VPS. En este artículo, exploraremos técnicas avanzadas de despliegue de aplicaciones Kotlin: desde la compilación de un fat JAR hasta la configuración de operación ininterrumpida con systemd, proxy inverso a través de Nginx y automatización mediante CI/CD. El material está dirigido a desarrolladores que ya conocen los fundamentos de Kotlin y desean alcanzar un nivel profesional.



1. Preparación de la compilación de producción de la aplicación Kotlin



El primer paso es crear una compilación optimizada. Usamos el plugin shadow para Gradle, que empaquetará todas las dependencias en un único archivo JAR ejecutable (fat JAR).



Añada en build.gradle.kts:



plugins {    kotlin("jvm") version "1.9.22"    id("com.github.johnrengelman.shadow") version "8.1.1"    application}

application { mainClass.set("com.example.MainKt")}

tasks.shadowJar { archiveBaseName.set("app") archiveClassifier.set("") archiveVersion.set("") minimize()}


Compile el JAR con el comando:



./gradlew shadowJar


Como resultado, obtendrá el archivo build/libs/app.jar. Para producción, se recomienda deshabilitar los logs de depuración y configurar el nivel de registro mediante variables de entorno.



Ejemplo de configuración de logback.xml para producción:



<configuration>    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">        <file>/var/log/app/app.log</file>        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">            <fileNamePattern>/var/log/app/app.%d{yyyy-MM-dd}.log</fileNamePattern>            <maxHistory>30</maxHistory>        </rollingPolicy>        <encoder>            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>        </encoder>    </appender>

<root level="INFO"> <appender-ref ref="FILE"/> </root></configuration>


2. Creación de un servicio systemd para inicio automático



Para que la aplicación se inicie automáticamente al arrancar el sistema y se reinicie en caso de fallos, usamos systemd. Cree el archivo /etc/systemd/system/kotlin-app.service:



[Unit]Description=Servicio de Aplicación KotlinAfter=network.target

[Service]Type=simpleUser=appuserGroup=appuserWorkingDirectory=/opt/kotlin-appExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/kotlin-app/app.jarRestart=on-failureRestartSec=10StandardOutput=journalStandardError=journalEnvironment="APP_ENV=production"Environment="DB_URL=jdbc:postgresql://localhost:5432/mydb"

[Install]WantedBy=multi-user.target


Después de crear el archivo, ejecute:



sudo systemctl daemon-reloadsudo systemctl enable kotlin-appsudo systemctl start kotlin-app


Verifique el estado:



sudo systemctl status kotlin-app


Los logs se pueden ver mediante journalctl -u kotlin-app -f.



3. Configuración de Nginx como proxy inverso con SSL



Nginx proporcionará balanceo de carga, almacenamiento en caché y HTTPS. Instale Nginx y Certbot:



sudo apt updatesudo apt install nginx certbot python3-certbot-nginx


Cree la configuración /etc/nginx/sites-available/kotlin-app:



server {    listen 80;    server_name tudominio.com;    return 301 https://$server_name$request_uri;}

server { listen 443 ssl http2; server_name tudominio.com;

ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/tudominio.com/privkey.pem;

location / { proxy_pass http://localhost: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 el certificado SSL:



sudo ln -s /etc/nginx/sites-available/kotlin-app /etc/nginx/sites-enabled/sudo certbot --nginx -d tudominio.comsudo systemctl restart nginx


4. Monitoreo de la aplicación



Para monitorear el estado de la aplicación, recomendamos usar Prometheus y Grafana. Agregue la dependencia micrometer-registry-prometheus a su proyecto Kotlin:



implementation("io.micrometer:micrometer-registry-prometheus:1.12.4")


Configure el endpoint de métricas en su aplicación web (por ejemplo, usando Ktor o Spring Boot). Ejemplo para Ktor:



install(MetricsPlugin) {    // configuración}

routing { get("/metrics") { call.respond(MeterRegistry.getDefault().scrape()) }}


En el servidor, instale Prometheus y configure el archivo /etc/prometheus/prometheus.yml:



scrape_configs:  - job_name: 'kotlin-app'    static_configs:      - targets: ['localhost:8080']


Luego instale Grafana y cree un panel para visualizar las métricas de su aplicación.



5. Automatización del despliegue mediante CI/CD



Para automatizar el proceso de despliegue, usaremos GitHub Actions. Cree el archivo .github/workflows/deploy.yml:



name: Deploy Kotlin App

on: push: branches: [ main ]

jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Build with Gradle run: ./gradlew shadowJar - name: Deploy to VPS uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: \"build/libs/app.jar\" target: \"/opt/kotlin-app/\" strip_components: 2 - name: Restart service uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | sudo systemctl restart kotlin-app sudo systemctl status kotlin-app


No olvide agregar los secretos VPS_HOST, VPS_USER y SSH_PRIVATE_KEY en la configuración de su repositorio en GitHub.



Conclusión



Hemos analizado el proceso completo de despliegue de una aplicación Kotlin en un VPS: desde la compilación con Gradle y shadow JAR hasta la configuración de systemd, Nginx con SSL, monitoreo y despliegue automatizado mediante CI/CD. Estos métodos le permitirán ejecutar aplicaciones Kotlin de manera confiable en un entorno de producción y simplificar el proceso de actualización.



¿Tiene preguntas o desea compartir su experiencia en el despliegue de Kotlin? ¡Escriba en los comentarios!

Blogs

Book Recommendations