Implantação de aplicação Kotlin em VPS: guia passo a passo para avançados
Desenvolver em Kotlin é apenas metade do trabalho. A verdadeira maestria se revela quando sua aplicação começa a funcionar em ambiente de produção em seu próprio servidor VPS. Neste artigo, abordaremos técnicas avançadas de implantação de aplicações Kotlin: desde a compilação de um fat JAR até a configuração de operação ininterrupta com systemd, proxy reverso via Nginx e automação via CI/CD. O material é voltado para desenvolvedores que já conhecem os fundamentos do Kotlin e desejam alcançar um nível profissional.
1. Preparação da compilação de produção da aplicação Kotlin
O primeiro passo é criar uma compilação otimizada. Usamos o plugin shadow para Gradle, que empacota todas as dependências em um único arquivo JAR executável (fat JAR).
Adicione ao 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 o JAR com o comando:
./gradlew shadowJarComo resultado, você obterá o arquivo build/libs/app.jar. Para produção, recomenda-se desabilitar logs de depuração e configurar o nível de log por meio de variáveis de ambiente.
Exemplo de configuração logback.xml para produção:
<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. Criação de serviço systemd para inicialização automática
Para que a aplicação inicie automaticamente na inicialização do sistema e seja reiniciada em caso de falhas, usamos o systemd. Crie o arquivo /etc/systemd/system/kotlin-app.service:
[Unit]Description=Kotlin Application ServiceAfter=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.targetApós criar o arquivo, execute:
sudo systemctl daemon-reloadsudo systemctl enable kotlin-appsudo systemctl start kotlin-appVerifique o status:
sudo systemctl status kotlin-appOs logs podem ser visualizados através de journalctl -u kotlin-app -f.
3. Configuração do Nginx como proxy reverso com SSL
O Nginx fornecerá balanceamento de carga, cache e HTTPS. Instale o Nginx e o Certbot:
sudo apt updatesudo apt install nginx certbot python3-certbot-nginxCrie a configuração /etc/nginx/sites-available/kotlin-app:
server { listen 80; server_name yourdomain.com; return 301 https://$server_name$request_uri;}
server { listen 443 ssl http2; server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letse