在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/logs3. 配置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 -f4. 配置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