如何在cPanel或CyberPanel上运行Kotlin Spring Boot应用?
在cPanel部署Kotlin Spring Boot应用及PostgreSQL方案
一、cPanel部署步骤及难度
先明确:主流cPanel主机基本都支持PostgreSQL,不用纠结这个,先把数据库搞定:
- 登录cPanel,找到
PostgreSQL Databases或PostgreSQL Database Wizard,按引导创建数据库、数据库用户,给用户分配目标数据库的全部权限,记下数据库名、用户名、密码、本地连接地址(一般是localhost,端口默认5432)。
部署Spring Boot应用的两种方式
方式1:打包成WAR包用Tomcat部署
如果你的应用适合WAR包部署(比如需要和其他Web应用共享Tomcat):
- 修改项目的
build.gradle.kts,添加war插件,同时让主类继承SpringBootServletInitializer:plugins { id("org.springframework.boot") version "3.2.0" id("io.spring.dependency-management") version "1.1.4" kotlin("jvm") version "1.9.20" kotlin("plugin.spring") version "1.9.20" war // 启用WAR包插件 } // 主类调整 class YourAppApplication : SpringBootServletInitializer() { override fun configure(builder: SpringApplicationBuilder): SpringApplicationBuilder { return builder.sources(YourAppApplication::class.java) } companion object { @JvmStatic fun main(args: Array<String>) { runApplication<YourAppApplication>(*args) } } } - 执行
./gradlew war生成WAR包,通过cPanel的File Manager上传到Tomcat的webapps目录(一般在/usr/local/tomcat/webapps/,如果找不到可以通过cPanel的Tomcat Manager入口上传)。 - Tomcat会自动解压部署,访问路径一般是
你的域名/包名(比如yourdomain.com/yourapp)。
方式2:打包成可执行JAR包用Passenger部署
Passenger是cPanel现在常用的应用托管模块,支持直接运行JAR包,更方便:
- 执行
./gradlew bootJar生成可执行JAR包。 - 在cPanel的
File Manager里,进入你的域名根目录(比如public_html),创建一个子目录(比如api),把JAR包上传进去。 - 在该目录下创建一个启动脚本
start.sh,内容如下(替换成你的JAR包名和端口,端口选8080-9000之间的非特权端口):#!/bin/bash java -jar your-app.jar --server.port=8081 - 给脚本加执行权限:
chmod +x start.sh(如果cPanel的File Manager支持权限修改,直接勾选执行权限即可)。 - 找到cPanel的
Passenger模块,设置刚才创建的api目录为应用根目录,指定启动命令为./start.sh。 - 最后用cPanel的
Proxy Manager,把你的域名路径(比如yourdomain.com/api)反向代理到http://localhost:8081,这样就能通过域名访问了。
难度评估
cPanel部署难度中等,只要主机预装了PostgreSQL和Passenger,跟着步骤走就能搞定。如果主机没开Passenger,联系主机商开启就行;要是连SSH权限都没有,可能只能用WAR包+Tomcat的方式。整体比无面板部署省心,不用记太多Linux命令。
二、无面板Linux服务器部署方案
如果cPanel的限制让你难受(比如不能自定义JDK版本、端口受限),直接上无面板Linux更灵活:
步骤概览
- 环境配置:
- 安装对应版本的OpenJDK(比如Kotlin 1.9推荐OpenJDK 17):
sudo apt install openjdk-17-jdk(Ubuntu)或sudo dnf install java-17-openjdk(CentOS)。 - 安装PostgreSQL:
sudo apt install postgresql postgresql-contrib,然后创建数据库、用户,配置权限(用psql命令操作,和cPanel逻辑一致)。 - 安装Nginx做反向代理:
sudo apt install nginx。
- 安装对应版本的OpenJDK(比如Kotlin 1.9推荐OpenJDK 17):
- 部署应用:
- 用scp或SFTP把JAR包传到服务器的某个目录(比如
/opt/yourapp/)。 - 创建systemd服务文件
/etc/systemd/system/yourapp.service,让应用后台运行并开机自启:[Unit] Description=Kotlin Spring Boot API Service After=postgresql.target network.target [Service] User=ubuntu WorkingDirectory=/opt/yourapp/ ExecStart=/usr/bin/java -jar your-app.jar --spring.profiles.active=prod Restart=always RestartSec=5 [Install] WantedBy=multi-user.target - 启动服务并设置开机自启:
sudo systemctl daemon-reload sudo systemctl start yourapp sudo systemctl enable yourapp
- 用scp或SFTP把JAR包传到服务器的某个目录(比如
- 配置Nginx反向代理:
- 创建Nginx配置文件
/etc/nginx/sites-available/yourapp.conf:server { listen 80; server_name yourdomain.com; 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; } } - 启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/yourapp.conf /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx
- 创建Nginx配置文件
- 配置SSL(可选):用Certbot申请免费SSL证书,让应用通过HTTPS访问。
难度评估
无面板部署难度稍高,需要掌握基础Linux命令、systemd服务配置、Nginx反向代理的知识,但胜在完全可控,想怎么配置就怎么配置,适合需要自定义优化的场景。
三、方案选择建议
- 如果你用的是带cPanel的主机,且主机支持PostgreSQL和Passenger,优先选cPanel,可视化操作多,不用折腾太多命令,节省时间。
- 如果cPanel限制太多(比如不能开特定端口、Passenger未启用),或者你需要灵活调整环境(比如自定义PostgreSQL参数、升级JDK),直接用无面板Linux服务器更合适。
- CyberPanel确实官方不支持PostgreSQL,直接排除即可。
内容的提问来源于stack exchange,提问作者propeace
相关产品推荐
相关产品推荐

