部署 Java 服务器(如 Spring Boot、Tomcat、Jetty 等)的配置,包括 服务器硬件资源、JVM 配置、应用服务器配置 和 安全设置 等。下面是一个较为完整的部署指南:
🖥️ 一、服务器硬件资源配置建议
1. CPU
- 至少 2 核以上。
- 如果是高并发系统(例如每秒处理上千请求),推荐 4 核或更多。
2. 内存(RAM)
- 最低:4GB(适用于轻量级服务或测试环境)
- 推荐:
- 普通业务系统:8GB ~ 16GB
- 大型系统或微服务集群:32GB 或更高
JVM 会占用一部分内存,剩余用于系统缓存和操作系统运行。
3. 存储(磁盘)
- SSD 更佳,I/O 性能更好。
- 基础部署:50GB 起步(日志 + 数据库 + 应用本身)
- 如果使用 Docker、数据库等,需预留空间。
4. 网络带宽
- 根据访问量选择:
- 小型项目:1~5Mbps
- 中大型项目:10~100Mbps,甚至 CDN + 负载均衡架构
⚙️ 二、Java 运行环境配置
1. JDK 安装
- 推荐版本:
- OpenJDK 11(长期支持 LTS)
- OpenJDK 17(新一代 LTS,Spring Boot 2.5+ 推荐)
- OpenJDK 21(最新 LTS)
不推荐使用 Oracle JDK,OpenJDK 是主流选择。
2. JVM 启动参数示例(-Xmx, -Xms, GC 设置等)
java -Xms2g -Xmx4g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-Duser.timezone=GMT+8
-jar your-app.jar
| 参数 | 含义 |
|---|---|
-Xms |
初始堆大小 |
-Xmx |
最大堆大小 |
-XX:+UseG1GC |
使用 G1 垃圾回收器(适合大堆内存) |
-XX:MaxGCPauseMillis=200 |
控制最大 GC 停顿时间 |
-Duser.timezone=GMT+8 |
设置时区为北京时间 |
📦 三、应用服务器配置(以 Tomcat 为例)
如果你使用的是 Tomcat 或其他 Servlet 容器:
1. server.xml 配置优化
- 修改连接池、线程数、最大请求数等参数。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="25"
enableLookups="false"
acceptCount="100"
disableUploadTimeout="true"
URIEncoding="UTF-8"/>
2. 设置 JVM 参数(setenv.sh)
在 $CATALINA_HOME/bin/setenv.sh 中添加:
export JAVA_OPTS="-Xms2g -Xmx4g -XX:+UseG1GC -Duser.timezone=GMT+8"
🔐 四、安全与防火墙配置
1. 防火墙开放端口
- 开放 HTTP 端口(80 / 8080)
- HTTPS 端口(443)
- SSH 端口(22)
- 数据库端口(如 MySQL 3306)仅限内网访问
2. SSL/TLS 加密
- 使用 Let’s Encrypt 免费证书
- 配置 Nginx 或 Apache 反向X_X做 HTTPS
3. 用户权限控制
- 不要用 root 用户运行 Java 应用
- 创建专用用户,限制权限
🌐 五、反向X_X与负载均衡(可选)
1. Nginx 配置示例
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost: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;
}
}
2. 多实例部署 + 负载均衡
- 使用 Nginx、HAProxy 或 Kubernetes Ingress 实现负载均衡
📊 六、监控与日志管理
1. 日志输出路径
- 输出到文件(logback/slf4j)
- 使用 ELK(Elasticsearch, Logstash, Kibana)集中收集日志
2. 监控工具
- Prometheus + Grafana(实时监控 JVM、线程、GC 等)
- SkyWalking / Zipkin(分布式链路追踪)
- Spring Boot Actuator(提供健康检查、指标接口)
📦 七、容器化部署(Docker + Kubernetes)
1. Docker 示例
FROM openjdk:17-jdk-slim
COPY your-app.jar app.jar
ENTRYPOINT ["java", "-Xms2g", "-Xmx4g", "-jar", "app.jar"]
2. Kubernetes 部署建议
- 使用 Deployment + Service
- 设置 Liveness & Readiness Probe
- 配置 HPA(自动扩缩容)
✅ 八、生产环境部署最佳实践总结
| 项目 | 建议 |
|---|---|
| JDK 版本 | OpenJDK 11 / 17 / 21 |
| 堆内存 | -Xms = -Xmx,一般设为物理内存的 50%~70% |
| 垃圾回收 | G1GC(适用于堆大于 4GB 的场景) |
| 应用日志 | 按天滚动,压缩归档,定期清理 |
| 监控报警 | Prometheus + Grafana + AlertManager |
| 安全加固 | 防火墙、HTTPS、最小权限原则 |
| 高可用 | 多节点部署 + 负载均衡 |
| 自动化 | CI/CD(Jenkins/GitLab CI/ArgoCD) |
如果你提供具体的应用类型(如 Spring Boot 单体应用、微服务、大数据服务等),我可以给出更针对性的配置建议。需要的话也可以提供一个完整的部署脚本模板。
ECLOUD博客