在腾讯云轻量应用服务器(Lighthouse)上部署 Java 项目,最佳实践需要兼顾安全性、可维护性、性能优化和成本效益。轻量服务器通常资源有限(如 1C2G/2C4G),因此配置需精细。
以下是经过验证的最佳实践流程:
一、前期准备与系统初始化
1. 选择合适镜像
- 推荐:使用官方提供的
Ubuntu 20.04/22.04 LTS或CentOS 7/8镜像。 - 避免:不要使用预装 Tomcat 的镜像(难以自定义版本和配置),建议从零安装以控制环境。
2. 安全加固(关键!)
# 创建非 root 用户
sudo adduser deploy
sudo usermod -aG sudo deploy
# 配置 SSH 密钥登录(禁用密码登录)
sudo vi /etc/ssh/sshd_config
# 设置:PasswordAuthentication no, PermitRootLogin no
sudo systemctl restart sshd
# 配置防火墙(仅开放必要端口)
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 8080/tcp # Tomcat (若用默认端口)
ufw enable
✅ 提示:腾讯云服务器组需在控制台额外放行对应端口(轻量服务器默认只开 22,需手动添加)。
二、JDK 与 Tomcat 安装
1. 安装 JDK(推荐 OpenJDK 17 或 21)
# Ubuntu 示例
sudo apt update && sudo apt install openjdk-17-jdk -y
java -version
# CentOS 示例
sudo yum install java-17-openjdk-devel -y
2. 下载并解压 Tomcat
cd /opt
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.86/bin/apache-tomcat-9.0.86.tar.gz
tar -xzf apache-tomcat-9.0.86.tar.gz
sudo chown -R $USER:$USER apache-tomcat-9.0.86
ln -s /opt/apache-tomcat-9.0.86 /opt/tomcat
3. 配置环境变量
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> ~/.bashrc
echo 'export CATALINA_HOME=/opt/tomcat' >> ~/.bashrc
echo 'export PATH=$PATH:$CATALINA_HOME/bin' >> ~/.bashrc
source ~/.bashrc
三、Tomcat 安全与性能优化
1. 修改默认端口(避免被扫描)
编辑 $CATALINA_HOME/conf/server.xml:
<Connector port="8081" protocol="HTTP/1.1" ... />
⚠️ 同时需在腾讯云控制台放行新端口(如 8081)。
2. 禁用不必要的管理器
编辑 $CATALINA_HOME/webapps/manager/META-INF/context.xml 和 host-manager,注释掉 <Valve> 中的 IP 限制,但生产环境务必保留 IP 白名单或通过反向X_X隐藏。
3. 调整 JVM 参数(针对轻量机内存)
编辑 $CATALINA_HOME/bin/catalina.sh,在 JAVA_OPTS 中添加:
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
💡 根据实际内存调整:若服务器为 2GB,建议
-Xmx不超过 1.5GB。
4. 启用 HTTPS(强烈建议)
使用 Let’s Encrypt 免费证书 + Nginx 反向X_X(见下文),避免直接在 Tomcat 配置 SSL(复杂且易出错)。
四、部署 Java 项目
方案 A:WAR 包部署(传统方式)
- 将
.war文件上传至$CATALINA_HOME/webapps/ - 重启 Tomcat:
sudo systemctl restart tomcat # 若已配置 systemd 服务 # 或直接执行 $CATALINA_HOME/bin/shutdown.sh && $CATALINA_HOME/bin/startup.sh
方案 B:直接运行 JAR(Spring Boot 推荐)
若项目是 Spring Boot 打包的 fat jar,可直接运行:
nohup java -jar -Xmx1g your-app.jar > app.log 2>&1 &
✅ 优势:无需 Tomcat,减少资源占用;更易于监控和日志管理。
五、进程守护与开机自启(Systemd 服务)
创建 /etc/systemd/system/tomcat.service:
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
User=deploy
Group=deploy
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
然后:
sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat
六、反向X_X与域名解析(生产必备)
1. 安装 Nginx
sudo apt install nginx -y # Ubuntu
2. 配置 Nginx 反向X_X
创建 /etc/nginx/sites-available/myapp:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:8081;
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;
}
# 可选:静态资源缓存
location /static/ {
expires 7d;
add_header Cache-Control "public, immutable";
}
}
启用站点:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
3. 申请 HTTPS 证书(Certbot)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com
自动完成 Nginx 配置并开启 HTTPS。
七、监控与备份
-
日志管理:
- Tomcat 日志:
$CATALINA/logs/ - 应用日志:单独配置 logback/log4j2 输出到独立文件
- 使用
journalctl -u tomcat查看 systemd 日志
- Tomcat 日志:
-
定期备份:
tar -czf ~/backup-tomcat-$(date +%F).tar.gz /opt/tomcat/webapps/your-app.war # 结合腾讯云云盘快照或对象存储 COS 做异地备份 -
监控工具:
- 轻量服务器自带“监控”功能(CPU/内存/带宽)
- 可部署 Prometheus + Grafana(资源紧张时慎用)
八、避坑指南
| 问题 | 解决方案 |
|---|---|
| 内存溢出 | 严格限制 -Xmx,开启 Swap(轻量机建议加 1~2GB swap) |
| 端口冲突 | 检查 netstat -tlnp,避免多个服务争抢 8080 |
| 权限错误 | 确保 Tomcat 目录属主为 deploy 用户,勿用 root 运行 |
| 启动慢 | 关闭不必要的 Tomcat 模块(如 Manager, Host Manager) |
| 域名无法访问 | 检查腾讯云安全组 + 本地防火墙 + Nginx 监听状态 |
总结推荐架构
用户 → [Nginx (HTTPS)] → [Tomcat/Spring Boot] → [MySQL/Redis (同机或云数据库)]
↑
腾讯云轻量服务器 (1C2G ~ 2C4G)
📌 最终建议:
- 小型项目:直接用 Spring Boot JAR + Nginx 反向X_X,省去 Tomcat。
- 大型项目:考虑迁移至 ECS + RDS + SLB 组合,轻量机更适合原型/测试/低流量场景。
如需具体某一步的详细命令或脚本模板,欢迎继续提问!
CLOUD技术笔记