阿里云Linux云服务器部署Java Web项目完整指南(附详细代码)

简介: 本文详细介绍在阿里云Linux云服务器上部署Java Web项目的完整流程,从服务器选购、安全组配置、JDK与Tomcat环境搭建,到项目打包部署、数据库配置、Nginx反向代理设置,提供每一步的详细命令和代码示例。无论您是初学者还是有一定经验的开发者,都能通过本文学会如何将Java Web应用顺利部署到阿里云ECS上,并实现生产环境的最佳实践配置。

前言

随着云计算技术的普及,越来越多的Java Web项目选择部署在云服务器上。阿里云作为国内领先的云服务提供商,其弹性计算服务ECS(Elastic Compute Service)因其稳定性、高性能和灵活的配置选项,成为众多开发者的首选。本文将手把手教您如何在阿里云Linux云服务器上部署Java Web项目,涵盖从零开始的全部流程。

无论您是刚接触云服务器的学生,还是希望将本地项目迁移到云端的开发者,本指南都将为您提供清晰、实用的操作步骤。我们不会简单复制网络上的零散教程,而是结合实践经验,为您呈现一套完整、可复用的部署方案。

第一章:阿里云ECS服务器选购与基础配置

部署Java Web项目的第一步是拥有一台阿里云ECS实例。如果您还没有ECS实例,需要先购买并完成基础配置。

1.1 实例规格选择

对于大多数中小型Java Web项目,推荐以下配置:

  • 实例规格:计算型c6或通用型g6,2核4GB内存起步(如果预算有限,也可以选择共享型s6)
  • 镜像:CentOS 7.6/7.9(本文以CentOS 7为例,这是目前最稳定的选择之一)
  • 存储:高效云盘40GB起步(系统盘)
  • 网络:专有网络VPC,分配公网IP地址
  • 安全组:创建时暂时使用默认安全组,后续我们会详细配置

购买完成后,请记下您的公网IP地址,后续将通过该IP连接服务器。

1.2 安全组配置——重中之重

阿里云的安全组相当于虚拟防火墙,默认只开放22(SSH)和3389(Windows远程桌面)端口。要部署Java Web项目,我们必须手动开放必要端口。

首先需要登录阿里云控制台,点击:阿里云控制台

进入ECS控制台后,找到您的实例,点击“更多”->“网络和安全组”->“安全组配置”。在“入方向”添加以下规则:

授权策略

协议类型

端口范围

授权对象

描述

允许

SSH(22)

22/22

0.0.0.0/0

SSH远程连接

允许

TCP

8080/8080

0.0.0.0/0

Tomcat默认端口

允许

TCP

80/80

0.0.0.0/0

HTTP服务(可选)

允许

TCP

443/443

0.0.0.0/0

HTTPS服务(可选)

允许

TCP

3306/3306

0.0.0.0/0

MySQL数据库(如需要)

注意:3306端口建议仅对特定IP开放,而不是0.0.0.0/0,以提高安全性。生产环境中,数据库通常不应直接暴露在公网。

1.3 连接Linux服务器

推荐使用SSH工具连接服务器。Windows用户可以使用PuTTY、Xshell或Windows Terminal;Mac/Linux用户直接使用终端即可。

连接命令:

ssh root@你的公网IP地址

首次连接需要输入密码(购买时设置的密码,或之后重置的密码)。如果忘记密码,可在ECS控制台“实例详情”->“重置实例密码”中重置。

第二章:JDK安装与配置

Java Web项目运行离不开Java开发工具包(JDK)。我们将安装JDK 1.8(即Java 8),这是目前最稳定且广泛使用的版本。

2.1 检查并卸载旧版本

首先检查系统是否已安装Java:

java -version

如果显示版本信息,但版本不符合要求,可以先卸载。查找已安装的Java包:

rpm -qa | grep java
rpm -qa | grep jdk

如有输出,可使用以下命令批量卸载(请谨慎操作):

rpm -qa | grep java | xargs rpm -e --nodeps

2.2 安装OpenJDK 1.8

推荐使用yum安装OpenJDK,简单且便于后续管理:

# 更新yum源
sudo yum update -y
# 搜索可用的JDK 1.8包
sudo yum list java-1.8.0*
# 安装OpenJDK 1.8(包含JRE和开发工具包)
sudo yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

安装完成后,验证:

java -version

期望输出类似:

openjdk version "1.8.0_342"
OpenJDK Runtime Environment (build 1.8.0_342-b07)
OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode)

2.3 配置环境变量

虽然yum安装通常会自动配置环境变量,但为确保万无一失,我们手动配置一下。

首先找到JDK的安装路径:

readlink -f $(which java)

输出可能类似:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/jre/bin/java

那么JAVA_HOME就是:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64

编辑/etc/profile文件:

sudo vim /etc/profile

在文件末尾添加(请根据实际路径调整):

# set java environment
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

保存退出(vim中按Esc,输入:wq回车)。然后使配置生效:

source /etc/profile

验证环境变量:

echo $JAVA_HOME

应输出JDK路径。

第三章:Tomcat安装与配置

Tomcat是Apache软件基金会开发的Servlet容器,是部署Java Web应用最流行的选择之一。我们将安装Tomcat 9(也兼容Java 8)。

3.1 下载并安装Tomcat

创建一个专用目录并下载Tomcat:

# 创建目录
sudo mkdir -p /usr/local/tomcat
cd /tmp
# 下载Tomcat 9(请访问官网获取最新链接,以下为示例)
sudo wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.91/bin/apache-tomcat-9.0.91.tar.gz --no-check-certificate
# 解压到/usr/local/tomcat
sudo tar -zxvf apache-tomcat-9.0.91.tar.gz -C /usr/local/tomcat --strip-components=1

注意:Tomcat版本会不断更新,请前往Tomcat官网获取最新下载链接。

3.2 创建专用用户运行Tomcat

出于安全考虑,不建议以root用户运行Tomcat。我们创建一个专用用户:

sudo groupadd tomcat
sudo useradd -M -s /bin/nologin -g tomcat -d /usr/local/tomcat tomcat

设置目录权限:

sudo chown -R tomcat:tomcat /usr/local/tomcat
sudo chmod +x /usr/local/tomcat/bin/*.sh

3.3 配置为系统服务(systemd)

将Tomcat配置为系统服务,便于管理并实现开机自启。

创建服务文件:

sudo vim /etc/systemd/system/tomcat.service

添加以下内容(注意JAVA_HOME路径需与之前设置一致):

[Unit]
Description=Apache Tomcat 9 Web Application Server
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64"
Environment="CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/usr/local/tomcat"
Environment="CATALINA_BASE=/usr/local/tomcat"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target

重新加载systemd并启动Tomcat:

sudo systemctl daemon-reload
sudo systemctl start tomcat
sudo systemctl enable tomcat  # 设置开机自启

检查状态:

sudo systemctl status tomcat

如果看到“active (running)”字样,说明启动成功。

3.4 验证Tomcat安装

在浏览器中访问:http://你的公网IP:8080

如果看到Tomcat的默认欢迎页面,恭喜您,Tomcat已成功运行!

3.5 配置Tomcat管理员账户(可选)

如需使用Tomcat的管理界面(如部署应用、查看服务器状态),需要配置用户。

编辑/usr/local/tomcat/conf/tomcat-users.xml:

sudo vim /usr/local/tomcat/conf/tomcat-users.xml

在<tomcat-users>标签内添加:

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="你的强密码" roles="manager-gui,admin-gui"/>

注意:生产环境中请务必使用强密码,并考虑仅允许内网访问管理界面。

第四章:部署Java Web项目

现在环境已就绪,可以部署您的Java Web项目了。根据项目类型,主要有两种方式:部署WAR包(传统Web应用)或直接运行可执行JAR包(Spring Boot等)。

4.1 方式一:部署WAR包到Tomcat

如果您的项目是传统WAR包形式(如基于Servlet、JSP、SSM等框架),按以下步骤部署。

步骤1:打包项目为WAR

在本地开发环境中,使用Maven或Gradle打包:

# Maven项目
mvn clean package -DskipTests
# Gradle项目
./gradlew build

打包后在target(或build/libs)目录下会生成.war文件。

步骤2:上传WAR包到服务器

使用工具上传,如scp命令、WinSCP、Xftp等。

示例(在本地终端执行):

scp your-project.war root@你的公网IP:/tmp/

步骤3:部署到Tomcat

将WAR包移动到Tomcat的webapps目录:

sudo mv /tmp/your-project.war /usr/local/tomcat/webapps/

Tomcat会自动检测并解压WAR包。稍等片刻,访问:http://你的公网IP:8080/your-project(项目名即WAR包文件名,不含.war后缀)。

4.2 方式二:运行可执行JAR包(Spring Boot)

Spring Boot项目通常打包为可执行JAR,内嵌了Tomcat,无需外部Tomcat。

步骤1:打包项目

mvn clean package -DskipTests

步骤2:上传JAR包到服务器

scp your-project.jar root@你的公网IP:/opt/app/

(建议创建专用目录,如/opt/app)

步骤3:运行JAR包

简单运行(退出终端即停止):

java -jar your-project.jar

后台运行(推荐):

nohup java -jar your-project.jar > app.log 2>&1 &

查看日志:

tail -f app.log

步骤4:将JAR包配置为系统服务(生产推荐)

创建服务文件:

sudo vim /etc/systemd/system/your-project.service

内容示例:

[Unit]
Description=Your Java Web Application
After=syslog.target network.target
[Service]
User=root
ExecStart=/usr/bin/java -jar /opt/app/your-project.jar
SuccessExitStatus=143
Restart=always
[Install]
WantedBy=multi-user.target

启动并启用:

sudo systemctl daemon-reload
sudo systemctl start your-project
sudo systemctl enable your-project

4.3 端口调整与防火墙

如果您的应用使用8080以外的端口(如Spring Boot默认8080,但可修改),需确保安全组已开放该端口。

同时,如果服务器内部防火墙(firewalld)正在运行,也需开放端口:

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

第五章:数据库配置(MySQL为例)

大多数Java Web项目需要数据库支持。我们将在服务器上安装MySQL 8.0。

5.1 安装MySQL

# 安装MySQL(CentOS 7默认yum源可能无MySQL,需先添加MySQL官方源)
# 此处简化处理,直接使用yum安装mariadb(MySQL的开源分支)作为替代,或按官方文档安装MySQL
sudo yum install -y mariadb mariadb-server
# 启动并设置开机自启
sudo systemctl start mariadb
sudo systemctl enable mariadb
# 运行安全配置脚本
sudo mysql_secure_installation

(如需安装原版MySQL,请参考阿里云官方文档或MySQL官方文档添加对应yum源)

5.2 创建数据库和用户

登录MySQL:

mysql -u root -p

执行SQL:

-- 创建数据库
CREATE DATABASE webapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建专用用户(不要使用root直接连接应用)
CREATE USER 'webapp_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
-- 授权
GRANT ALL ON webapp_db.* TO 'webapp_user'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;

5.3 项目数据库配置

在您的Java Web项目配置文件中(如application.properties或application.yml),修改数据库连接信息:

# application.properties示例
spring.datasource.url=jdbc:mysql://localhost:3306/webapp_db?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
spring.datasource.username=webapp_user
spring.datasource.password=StrongPassword123!
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

重新打包并部署项目。

第六章:高级配置与优化

6.1 Nginx反向代理(可选)

使用Nginx作为反向代理,可以隐藏Tomcat端口、实现负载均衡、静态资源分离等。

安装Nginx:

sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx

配置反向代理,编辑/etc/nginx/conf.d/your-project.conf:

server {
    listen 80;
    server_name your-domain.com;  # 如果没有域名,可填公网IP
    location / {
        proxy_pass http://127.0.0.1:8080;  # 转发到Tomcat
        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;
    }
}

重启Nginx:

sudo systemctl restart nginx

现在访问http://你的公网IP(80端口)即可看到Tomcat应用。

6.2 域名绑定与HTTPS

如果您有域名,可在阿里云控制台进行域名备案(如在中国大陆服务器上运行网站必须备案)。

备案完成后,在域名解析中添加A记录,指向服务器公网IP。

为启用HTTPS,可使用Let's Encrypt免费证书。安装certbot:

sudo yum install -y epel-release
sudo yum install -y certbot python2-certbot-nginx
# 获取证书(按提示操作)
sudo certbot --nginx -d your-domain.com

证书会自动续期。

6.3 JVM内存优化

根据服务器内存调整Tomcat的JVM参数。编辑/usr/local/tomcat/bin/setenv.sh(如不存在则创建):

sudo vim /usr/local/tomcat/bin/setenv.sh

添加:

JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -server -Xms512m -Xmx512m -Dfile.encoding=UTF-8"

保存后重启Tomcat。

第七章:常见问题与解决方案

7.1 端口访问不了

按顺序检查:

  1. 阿里云安全组是否开放对应端口
  2. 服务器内部防火墙(firewalld/iptables)是否开放端口
  3. Tomcat或其他服务是否真的在监听该端口(使用netstat -tunlp | grep 8080查看)

7.2 项目启动报错

查看日志:

  • Tomcat日志:/usr/local/tomcat/logs/catalina.out
  • Spring Boot日志:您指定的app.log或journalctl -u your-project -f

常见原因:数据库连接失败、缺少依赖、配置文件路径错误等。

7.3 中文乱码

确保多处编码一致:

  • 项目文件编码为UTF-8
  • Tomcat server.xml中Connector添加URIEncoding="UTF-8"
  • JVM参数添加-Dfile.encoding=UTF-8

第八章:总结

至此,您已学会在阿里云Linux云服务器上部署Java Web项目的完整流程。从服务器选购、安全组配置、JDK与Tomcat安装,到项目部署、数据库配置、反向代理设置,每一步都至关重要。

实际生产环境中,还需考虑更多因素:监控告警、日志收集、自动备份、安全加固、性能调优等。但有了本文的基础,您已经迈出了最关键的一步。

云计算赋予了开发者前所未有的部署灵活性,希望本指南能帮助您顺利将创意变为可访问的服务。如果您在部署过程中遇到问题,不妨回顾各章节的检查清单,或查阅相关组件的官方文档。

常见问答(FAQ)

问:我可以选择其他Linux发行版吗?比如Ubuntu?

答:当然可以。本文以CentOS 7为例,但核心步骤(安装JDK、Tomcat、部署项目)在Ubuntu、Debian等发行版上类似,只是包管理命令(apt代替yum)和部分文件路径可能不同。

问:Tomcat和Jetty、Undertow等Servlet容器有什么区别?该选哪个?

答:Tomcat是最流行、社区支持最完善的Servlet容器;Jetty更轻量,适合嵌入式场景;Undertow是WildFly的默认Web服务器,性能优异。对于传统WAR包部署,Tomcat是稳妥选择;对于Spring Boot项目,默认内嵌Tomcat,也可轻松切换为Jetty或Undertow。

问:我的项目需要多个端口,安全组怎么配置?

答:在安全组入方向规则中,可以逐条添加端口,也可以使用端口范围。例如,要开放8080-8090端口范围,端口范围填“8080/8090”即可。但为安全起见,建议只开放必要端口。

问:如何将本地数据库数据迁移到云服务器上的MySQL?

答:可以使用mysqldump导出本地数据库SQL文件,然后上传到服务器,再通过mysql命令导入。也可以使用图形化工具(如Navicat、DBeaver)的传输功能,或直接通过网络连接远程导入(需确保网络安全)。

问:生产环境有什么特别需要注意的?

答:生产环境务必注意:1)不使用root运行服务;2)配置防火墙,只开放必要端口;3)数据库不应直接暴露公网,可通过内网或SSH隧道访问;4)设置日志轮转,防止磁盘写满;5)配置监控和告警;6)定期备份数据和配置;7)使用HTTPS加密传输。

问:我想用Docker部署,该怎么做?

答:Docker是另一种优秀的部署方式。您可以编写Dockerfile构建项目镜像,然后使用docker run或直接用docker-compose编排服务(包括应用、数据库、Nginx等)。阿里云也提供了容器镜像服务,便于管理镜像。使用Docker可以极大简化环境一致性问题,但学习曲线稍陡。

相关文章
|
18天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
6750 30
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
3天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
603 138
|
3天前
|
人工智能 弹性计算 运维
阿里云发布堡垒机智能运维Agent,运维交互进入自然语言新时代
支持自然语言运维,提升效率与安全双保障。
1144 0
|
10天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1159 1
|
13天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1269 3
|
10天前
|
人工智能 弹性计算 安全
阿里云618活动时间、活动入口、优惠活动详细解读
2026年阿里云618创新加速季已全面开启,作为年度力度最大的云产品促销活动,本次大促覆盖轻量应用服务器、ECS云服务器、GPU云服务器、数据库、AI算力、安全服务、CDN等全品类产品,推出5亿元算力补贴、新用户限时秒杀、普惠满减、企业专享、免费试用、云大使返佣等多重福利,个人开发者、中小企业、AI团队均可享受专属低价。本文将系统梳理2026年阿里云618活动的完整时间节点、官方参与入口、各类优惠细则、使用规则、热门产品推荐及实操代码,帮助用户精准参与、高效省钱,以最低成本完成上云部署。
949 5
|
9天前
|
人工智能 自然语言处理 安全
Vibe Coding 实战:别盲目跟风,先分清 vibe coding 适合什么场景
本文系统总结vibe coding实战经验:明确其适用场景(原型、小工具、标准化模块),剖析5步落地流程(场景判定→结构化提示词→目录初始化→分模块生成→自动化校验),指出四大常见误区,并推荐适配工具Trae。强调“场景匹配+规则前置”是提效关键,避免盲目套用。
789 1