在腾讯云轻量应用服务器(Lighthouse)上部署 Java Web 应用,核心逻辑与在其他 Linux 云服务器上是一致的,但由于轻量服务器的特性(通常预装镜像、网络配置简化、带宽独享或共享限制),我们需要特别关注环境依赖和端口开放策略。
以下是基于生产实践的标准部署流程,分为准备阶段、环境安装、应用部署、安全组配置和验证测试五个步骤。
1. 前期准备与实例选择
- 操作系统选择:建议直接购买预装了 LNMP 或 LAMP 环境的镜像,或者选择标准的 CentOS 7/8、Ubuntu 20.04/22.04 纯净版。如果选纯净版,后续需手动安装依赖;如果选应用镜像,需确认是否已包含 JDK。
- JDK 版本匹配:确保你的 Java Web 应用编译时使用的 JDK 版本与服务器安装的版本兼容。目前主流推荐 JDK 11 或 JDK 17(LTS 版本)。注意:Tomcat 9+ 通常要求 JDK 8+,Tomcat 10+ 要求 JDK 8+。
- 文件传输工具:准备一个 SFTP 客户端(如 FileZilla、WinSCP)或命令行工具(scp/cp),用于将本地的
.jar包或 WAR 包上传至服务器。
2. 登录服务器并检查环境
通过 SSH 登录到你的轻量服务器:
ssh root@<your_server_ip>
检查是否已安装 JDK:
java -version
- 如果未安装:
- CentOS/RHEL:
yum install java-11-openjdk-devel -y - Ubuntu/Debian:
apt update apt install openjdk-11-jdk -y
- CentOS/RHEL:
- 如果已安装但版本不符:建议卸载后重新安装指定版本,或使用
update-alternatives管理多版本,但为避免冲突,新手建议直接安装所需版本。
检查环境变量(可选但推荐):
确保 JAVA_HOME 已正确设置。可以在 /etc/profile 或 ~/.bashrc 中添加:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 路径根据实际安装情况调整
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile
3. 上传应用文件
假设你的应用是一个 Spring Boot 打包成的 app.jar。
使用 scp 命令从本地上传:
# 在本地终端执行
scp ./app.jar root@<your_server_ip>:/home/app/
然后在服务器上创建目录并移动文件(保持规范):
mkdir -p /home/app
mv app.jar /home/app/
cd /home/app
4. 启动 Java Web 应用
基础启动方式:
nohup java -jar app.jar > app.log 2>&1 &
nohup: 保证断开 SSH 连接后进程继续运行。> app.log 2>&1: 将标准输出和错误输出重定向到日志文件,方便排查问题。&: 后台运行。
进阶启动方式(推荐生产环境):
对于生产环境,建议使用 systemd 管理服务,以便实现开机自启、崩溃重启和日志轮转。
创建服务文件:
vi /etc/systemd/system/myapp.service
内容示例:
[Unit]
Description=My Java Web Application
After=syslog.target network.target
[Service]
User=root
WorkingDirectory=/home/app
ExecStart=/usr/bin/java -jar /home/app/app.jar --server.port=8080
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
重载 systemd 并启动:
systemctl daemon-reload
systemctl start myapp
systemctl enable myapp # 设置开机自启
systemctl status myapp # 查看状态
journalctl -u myapp -f # 实时查看日志
5. 配置腾讯云轻量服务器防火墙(关键步骤)
这是最容易出错的地方。腾讯云轻量服务器的防火墙是独立于系统内部防火墙(如 iptables/firewalld)之外的。
- 登录 腾讯云控制台。
- 进入 轻量应用服务器 页面,点击你的实例 ID。
- 找到 “防火墙” 选项卡。
- 添加一条规则:
- 方向:入方向
- 协议:TCP
- 端口:你应用监听的端口(例如
8080,如果是 Nginx 反向X_X则为80或443) - 授权对象:
0.0.0.0/0(允许所有 IP,或指定特定 IP 段以提高安全性) - 策略:允许
同时,检查系统内部防火墙(如果使用了 firewalld 或 ufw):
- CentOS (firewalld):
firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload - Ubuntu (ufw):
ufw allow 8080/tcp ufw reload
注意:轻量服务器默认可能没有开启内部防火墙,但如果你的镜像预装了安全软件,务必检查。
6. 域名解析与反向X_X(可选但推荐)
直接使用 IP + 端口访问体验不佳且不安全。建议配置域名并通过 Nginx 做反向X_X。
- 解析域名:在腾讯云 DNSPod 或其他 DNS 服务商处,将你的域名 A 记录指向轻量服务器的公网 IP。
- 安装 Nginx(如果镜像未预装):
yum install nginx -y # CentOS # 或 apt install nginx -y # Ubuntu -
配置 Nginx:
server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1: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; proxy_set_header X-Forwarded-Proto $scheme; } } - 重启 Nginx:
systemctl restart nginx systemctl enable nginx
此时,用户只需访问 http://yourdomain.com 即可,无需输入端口号。
7. 常见问题排查
- 应用启动失败:
- 检查
app.log或journalctl -u myapp中的错误信息。 - 常见原因:内存不足(轻量服务器配置较低,可通过
-Xmx参数限制 JVM 堆大小,如java -Xmx512m -jar app.jar)、端口被占用、数据库连接失败。
- 检查
- 无法访问网站:
- 首先确认腾讯云控制台的 防火墙 是否放行了对应端口。
- 其次确认应用是否成功绑定到
0.0.0.0而非127.0.0.1(Spring Boot 默认通常是0.0.0.0,但某些配置可能改过)。 - 最后检查系统内部防火墙。
- 中文乱码:
- 确保服务器区域设置支持中文:
locale-gen zh_CN.UTF-8并在 Java 启动参数中添加-Dfile.encoding=UTF-8。
- 确保服务器区域设置支持中文:
总结
在腾讯云轻量服务器上部署 Java Web 应用的关键点在于:
- JDK 环境匹配。
- 腾讯云控制台防火墙规则的正确配置(这是最容易被忽略的一步)。
- 使用 systemd 管理服务以保证稳定性。
- Nginx 反向X_X提升安全性和用户体验。
按照以上步骤操作,即可稳定运行你的 Java Web 应用。
CLOUD云枢