在VPS上部署Kotlin应用程序:分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在VPS上部署Kotlin应用程序:逐步指南

Kotlin开发只是成功的一半。要让用户能够访问你的应用程序,需要将其部署到服务器上。在本指南中,我们将逐步讲解如何在VPS(虚拟专用服务器)上部署Kotlin(JVM)应用程序。你将学习如何准备服务器、构建应用程序、配置自动启动以及确保安全的HTTPS连接。本文面向熟悉Kotlin和Linux基础的开发者。



1. 服务器与环境准备

在上传代码之前,你需要先准备好VPS。我们将使用Ubuntu 22.04 LTS。通过SSH连接到服务器:

ssh root@your-server-ip

更新软件包并安装必要组件:

sudo apt update && sudo apt upgrade -ysudo apt install openjdk-17-jdk git nginx certbot python3-certbot-nginx -y

检查Java版本:

java -version

现在,为应用程序创建一个用户(以root身份运行进程不安全):

sudo useradd -m -s /bin/bash kotlinappsudo usermod -aG sudo kotlinappsu - kotlinapp

确保该用户可以运行Java。



2. 构建并上传Kotlin应用程序

我们来考虑两个流行框架:Ktor和Spring Boot。两者都可以构建为可执行的JAR文件。Ktor示例:

// build.gradle.kts (片段)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") }}

在本地构建胖JAR:

./gradlew buildFatJar

通过SCP将JAR上传到服务器(在本地机器上运行):

scp build/libs/myapp.jar kotlinapp@your-ip:/home/kotlinapp/app/

在服务器上创建目录结构:

mkdir -p /home/kotlinapp/app/logs


3. 配置systemd实现自动启动

为了确保应用程序在服务器启动时自动运行,并在失败时重启,我们将创建一个systemd服务。创建文件/etc/systemd/system/kotlinapp.service:

sudo nano /etc/systemd/system/kotlinapp.service

插入以下配置:

[Unit]Description=Kotlin Application ServiceAfter=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.target

启用并启动服务:

sudo systemctl daemon-reloadsudo systemctl enable kotlinappsudo systemctl start kotlinapp

检查状态:

sudo systemctl status kotlinapp

你可以使用以下命令查看日志:

journalctl -u kotlinapp -f


4. 配置Nginx和HTTPS(SSL)

Nginx代理服务器会将来自80/443端口的请求转发到Kotlin应用程序的8080端口。创建配置文件:

sudo nano /etc/nginx/sites-available/kotlinapp

配置示例:

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_header X-Forwarded-Proto $scheme; }}

激活站点并获取SSL证书:

sudo ln -s /etc/nginx

博客

书籍推荐