购买云服务器后配置 Java 项目运行环境,核心在于操作系统选型、JDK 安装、应用部署及基础安全加固。国内主流云厂商(如阿里云、腾讯云、华为云等)的 CentOS/Ubuntu/Debian 镜像最为常见,以下以 CentOS 7/8 和 Ubuntu 20.04/22.04 为例,提供一套标准化、可落地的操作流程。
一、系统初始化与安全基线
在部署代码前,必须先完成基础环境的安全加固,这是生产环境的红线。
-
更换密钥登录
- 强烈建议放弃密码登录,使用 SSH 密钥对。在云平台控制台生成或上传公钥,并在服务器
/root/.ssh/authorized_keys中配置。 - 修改 SSH 配置文件
/etc/ssh/sshd_config:PermitRootLogin prohibit-password # 禁止 root 直接登录 PasswordAuthentication no # 关闭密码验证 - 重启服务:
systemctl restart sshd。
- 强烈建议放弃密码登录,使用 SSH 密钥对。在云平台控制台生成或上传公钥,并在服务器
-
防火墙与端口开放
- 云控制台层面:在云厂商的安全组(Security Group)规则中,仅开放必要端口(如 80, 443, 你的业务端口),严禁将 22 端口对全网(0.0.0.0/0)开放,应限制为特定 IP 段。
- 系统层面:
- CentOS 7+:
firewall-cmd --permanent --add-port=8080/tcp && firewall-cmd --reload - Ubuntu:
ufw allow 8080/tcp
- CentOS 7+:
二、JDK 环境安装
根据项目需求选择 JDK 版本(目前主流为 JDK 8, 11, 17, 21)。推荐优先使用官方源或可信第三方源,避免使用 yum install java 这种可能安装 OpenJDK 旧版的方式。
方案 A:使用包管理器(适合快速部署)
- CentOS/RHEL:
yum install -y java-17-openjdk-devel java -version - Ubuntu/Debian:
apt update apt install -y openjdk-17-jdk
方案 B:手动安装指定版本(推荐生产环境,更可控)
若需安装特定版本(如 Oracle JDK 或特定版本的 OpenJDK):
- 下载对应架构的二进制包(
.tar.gz)。 - 解压至
/usr/local/java:mkdir -p /usr/local/java tar -zxvf jdk-17.tar.gz -C /usr/local/java --strip-components=1 - 配置环境变量
/etc/profile.d/java.sh:export JAVA_HOME=/usr/local/java export PATH=$JAVA_HOME/bin:$PATH source /etc/profile.d/java.sh - 验证:
java -version和javac -version。
三、构建与部署策略
Java 项目通常打包为 .jar 文件。部署方式分为简单运行和容器化/进程守护。
1. 传统 Jar 包运行(配合 Systemd)
不要直接使用 java -jar app.jar &,这样无法管理进程状态和日志。应编写 Systemd 服务文件。
创建服务文件 /etc/systemd/system/myapp.service:
[Unit]
Description=My Java Application
After=network.target
[Service]
User=root
WorkingDirectory=/opt/myapp
ExecStart=/usr/local/java/bin/java -Xms512m -Xmx1024m -jar myapp.jar
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
注:-Xms 和 -Xmx 需根据服务器内存调整,防止 OOM(内存溢出)。
启动服务:
systemctl daemon-reload
systemctl enable myapp
systemctl start myapp
# 查看日志
journalctl -u myapp -f
2. 容器化部署(Docker/K8s,强烈推荐)
现代云原生架构下,使用 Docker 是最佳实践,能彻底解决“环境不一致”问题。
- 安装 Docker:
# Ubuntu/CentOS 通用脚本 curl -fsSL https://get.docker.com | sh systemctl enable docker - 编写 Dockerfile(放在项目根目录):
FROM eclipse-temurin:17-jre-alpine WORKDIR /app COPY target/myapp.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] - 构建与运行:
docker build -t myapp:v1 . docker run -d -p 8080:8080 --name myapp-container myapp:v1 - 进阶:在 Linux 上可直接使用
docker-compose编排多服务(如 MySQL + Redis + Java App)。
四、中间件与依赖处理
Java 项目通常依赖数据库(MySQL/PostgreSQL)、缓存(Redis)或消息队列(RabbitMQ/Kafka)。
- 本地部署 vs 云托管
- 轻量级/开发测试:可在同一台服务器上通过 Docker 或源码编译安装中间件,节省成本。
- 生产环境:强烈建议使用云厂商的 PaaS 产品(如阿里云 RDS、TencentDB for Redis)。原因包括:自动备份、高可用主从切换、性能监控及网络隔离安全性。
- 内网通信
- 如果 Java 应用和数据库都在同一 VPC(专有网络)下,务必使用内网地址连接,不仅速度更快,且无需暴露公网端口,大幅降低安全风险。
五、运维监控与日志
- 日志管理
- 避免日志无限增长导致磁盘爆满。配置
logback.xml或log4j2进行滚动归档。 - 接入云厂商的 SLS(日志服务)或 ELK Stack,实现日志集中采集和分析。
- 避免日志无限增长导致磁盘爆满。配置
- 监控告警
- 安装
Prometheus Node Exporter采集服务器资源(CPU、内存、磁盘 IO)。 - 使用 Spring Boot Actuator 暴露 JVM 指标。
- 配置云监控(Cloud Monitor)阈值告警(如 CPU > 80% 持续 5 分钟发送短信/邮件)。
- 安装
六、避坑指南(经验之谈)
- 时区问题:Linux 默认时区可能是 UTC,而 Java 程序可能期望 CST。务必执行
timedatectl set-timezone Asia/Shanghai并检查date命令输出。 - 内存分配:云服务器内存有限,切勿将堆内存设得过大(如超过物理内存的 70%),否则会导致 Swap 频繁交换,系统卡死。
- 软链接:在配置 JDK 路径时,尽量使用绝对路径,避免相对路径在 Service 启动时失效。
- SELinux:如果是 CentOS,开启 SELinux 可能会拦截 Java 访问文件或网络,测试阶段建议设为 Permissive 或 Disabled,生产环境需精细配置策略。
按照上述步骤,你可以构建一个安全、稳定且易于维护的 Java 云原生运行环境。对于生产环境,记得定期打补丁(yum update 或 apt upgrade)并更新 JDK 版本以修复已知漏洞。
CLOUD云枢