部署独立的JAR包
对于使用Spring Boot等框架构建的现代Java应用,通常会打包成一个可执行的JAR文件,这种应用内嵌了Web服务器(如Tomcat或Jetty),极大地简化了部署流程。把jar包放到云服务器并运行起来,通常包含以下核心步骤。
准备工作
- 云服务器:一台已购买并获取公网IP的云服务器实例(如阿里云ECS、腾讯云CVM等)。
- Java环境:在服务器上安装与开发时版本兼容的JDK,可以通过
java -version
命令检查是否已安装。 - JAR包:本地已打包好的应用程序JAR文件。
上传JAR包到服务器
使用安全复制协议(SCP)或文件传输工具(如FileZilla、Xshell的Xftp)将本地的JAR包上传到服务器的指定目录,使用SCP命令:
scp /path/to/your/app.jar user@your_server_ip:/home/user/
这条命令会将本地的app.jar
文件上传到服务器的/home/user/
目录下。
运行JAR包
通过SSH登录到云服务器后,进入JAR包所在目录,使用java -jar
命令启动应用。
java -jar app.jar
为了确保应用在关闭SSH连接后依然能持续运行,推荐使用nohup
命令并结合&
符号将其置于后台执行:
nohup java -jar app.jar > app.log 2>&1 &
这会将应用的所有输出重定向到app.log
文件中,并使其在后台持久运行。
配置为系统服务(推荐)
为了实现应用的自动化管理(如开机自启、崩溃重启等),最佳实践是将其配置为一个系统服务,在基于Systemd的Linux系统(如Ubuntu 16.04+, CentOS 7+)中,可以创建一个服务文件。
创建服务配置文件:
sudo nano /etc/systemd/system/myapp.service
在文件中填入以下内容,并根据实际情况修改路径和用户:
[Unit] Description=My Java App Service After=network.target [Service] User=your_user ExecStart=/usr/bin/java -jar /path/to/your/app.jar SuccessExitStatus=143 [Install] WantedBy=multi-user.target
保存后,执行以下命令来启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable myapp.service sudo systemctl start myapp.service
你可以使用systemctl status myapp.service
查看应用状态,systemctl stop myapp.service
停止应用,它将在服务器重启后自动启动。
开放防火墙端口
确保云服务器的安全组规则和系统防火墙(如ufw
或firewalld
)已开放应用所监听的端口(Spring Boot默认的8080端口)。
# 以Ubuntu的ufw为例 sudo ufw allow 8080
部署Web应用
这里的Web应用主要指传统的、需要部署到外部Servlet容器(如Tomcat)的WAR包,或由静态文件(HTML, CSS, JS)组成的网站。把web放到云服务器的流程与JAR包有所不同。
部署静态网站
对于纯静态网站,通常需要一个Web服务器来托管文件,Nginx是当前最流行的高性能选择。
- 安装Nginx:
sudo apt update && sudo apt install nginx
(以Ubuntu为例)。 - 上传文件:将本地网站的所有文件通过SCP或FTP上传到Nginx的默认根目录
/var/www/html/
。 - 配置访问:Nginx安装后会自动配置好,直接通过浏览器访问服务器公网IP即可看到网站,你可以通过修改
/etc/nginx/sites-available/default
文件来定制更复杂的配置。
部署动态Web应用(WAR包)
对于需要编译和运行的Java Web应用(WAR包),需要一个Servlet容器,Apache Tomcat是经典之选。
- 安装Tomcat:从官网下载Tomcat,解压到服务器目录,并配置好环境变量。
- 部署WAR包:将打包好的
app.war
文件复制到Tomcat的webapps
目录下。 - 自动部署:Tomcat会自动检测到
webapps
目录下的新WAR包,并将其解压部署,部署成功后,通常可以通过http://your_server_ip:8080/app/
来访问应用(端口和路径取决于Tomcat配置)。
部署方式对比
为了更清晰地理解不同部署方式的差异,下表进行了总结对比。
部署对象 | 常用工具/技术 | 核心优势 | 适用场景 |
---|---|---|---|
独立JAR包 | JDK, Systemd, SCP | 部署简单、内嵌容器、易于容器化(Docker) | 微服务、RESTful API、Spring Boot应用 |
静态Web文件 | Nginx, Apache, SCP | 性能极高、配置简单、资源消耗低 | 企业官网、博客、前端项目(Vue/React构建产物) |
动态Web应用(WAR) | Tomcat, JBoss, SCP | 技术成熟、生态完善、支持传统Java EE规范 | 传统的企业级Java Web应用、SSH/SSM框架项目 |
无论是把jar包放到云服务器,还是把web放到云服务器,其本质都是将开发成果发布到互联网上,选择哪种部署方式,主要取决于应用的架构和技术栈,对于新项目,尤其是基于Spring Boot的微服务,打包成独立JAR进行部署是更现代、更高效的选择,而对于维护旧项目或特定需求,使用Tomcat等容器部署WAR包依然是可靠且成熟的方案,理解这些基本流程和最佳实践,是每一位后端工程师和运维人员的必备技能,它标志着你的应用真正拥有了服务全球用户的能力。