前言
随着云计算技术的普及,越来越多的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 端口访问不了
按顺序检查:
- 阿里云安全组是否开放对应端口
- 服务器内部防火墙(firewalld/iptables)是否开放端口
- 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可以极大简化环境一致性问题,但学习曲线稍陡。