在VPS上部署Kotlin应用程序:从A到Z的分步指南
您用Kotlin(Ktor、Spring Boot或只是一个控制台服务)编写了一个很棒的应用程序,现在需要将其部署到真实服务器上。在本文中,我们将分析在VPS上部署Kotlin应用程序的完整流程:从购买服务器和配置SSH,到通过systemd启动以及连接带HTTPS的域名。所有示例均为实际可用,并在Ubuntu 22.04上经过验证。
1. 准备VPS并连接
首先,租用一个VPS(例如,来自Timeweb、Selectel或DigitalOcean)。最低要求:1 vCPU、1 GB RAM、20 GB SSD。操作系统为Ubuntu 22.04 LTS。
获取IP地址和root密码后,通过SSH连接:
ssh root@your_server_ip立即更新系统并创建一个非特权用户(以root身份操作是不良实践):
apt update && apt upgrade -yadduser kotlinuserusermod -aG sudo kotlinusersu - kotlinuser配置SSH密钥以便安全便捷地登录:
ssh-keygen -t ed25519 -C "your_email@example.com"ssh-copy-id kotlinuser@your_server_ip现在,在/etc/ssh/sshd_config中禁用密码登录(将PasswordAuthentication行改为no)并重启SSH:sudo systemctl restart sshd。
2. 安装Java(JRE/JDK)并构建应用程序
Kotlin应用程序运行在JVM上。安装OpenJDK 17或21(推荐用于现代项目):
sudo apt install openjdk-17-jdk -yjava -version现在,在您的本地开发计算机上,将应用程序构建为JAR文件。对于Gradle(Ktor或Spring Boot):
./gradlew clean build构建好的JAR文件将位于build/libs/目录中。例如,myapp-1.0.0.jar。将其上传到服务器:
scp build/libs/myapp-1.0.0.jar kotlinuser@your_server_ip:~/app/在服务器上创建文件夹结构:
mkdir -p ~/app/logs ~/app/config将配置文件(application.conf、application.yml)放入~/app/config/目录。手动测试应用程序是否能启动:
cd ~/appjava -jar myapp-1.0.0.jar --spring.config.location=file:./config/如果一切正常,则继续设置自动启动。
3. 配置systemd以实现自动启动
为了确保应用程序在服务器重启后自动启动,并且在出错时不会崩溃,我们将创建一个systemd服务。
创建文件/etc/systemd/system/kotlin-app.service:
sudo nano /etc/systemd/system/kotlin-app.service粘贴以下内容(将路径替换为您自己的):
[Unit]Description=Kotlin Application ServiceAfter=network.target
[Service]Type=simpleUser=kotlinuserWorkingDirectory=/home/kotlinuser/appExecStart=/usr/bin/java -jar /home/kotlinuser/app/myapp-1.0.0.jar --spring.config.location=file:/home/kotlinuser/app/config/Restart=on-failureRestartSec=10StandardOutput=append:/home/kotlinuser/app/logs/app.logStandardError=append:/home/kotlinuser/app/logs/error.log
[Install]WantedBy=multi-user.target关键参数说明:
- User — 以哪个用户身份运行(非root);
- ExecStart — 包含配置文件的完整启动命令;
- Restart=on-failure — 崩溃时自动重启;
- StandardOutput/Error — 将日志记录到文件。
激活服务:
sudo systemctl daemon-reloadsudo systemctl enable kotlin-app.servicesudo systemctl start kotlin-app.service检查状态:
sudo systemctl status kotlin-app.service