在服务器上运行Java项目需要做好以下准备,按步骤进行:
一、基础环境准备
1. 操作系统配置
- 系统更新:
sudo apt update && sudo apt upgrade(Ubuntu/Debian) - 时区设置:
sudo timedatectl set-timezone Asia/Shanghai - 防火墙配置:开放必要端口(如8080, 443, 22)
- Swap分区:确保有足够交换空间(特别是内存较小的服务器)
2. Java环境安装
# 安装OpenJDK(推荐JDK 11或17)
sudo apt install openjdk-17-jdk
# 验证安装
java -version
javac -version
# 设置JAVA_HOME
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
3. 构建工具(根据项目选择)
- Maven:
sudo apt install maven - Gradle:使用官方脚本安装
- 直接使用JAR:如果已有可执行JAR
二、项目部署准备
1. 项目打包
# Maven项目
mvn clean package -DskipTests
# Gradle项目
./gradlew build -x test
2. 依赖检查
- 确认
pom.xml或build.gradle中的依赖版本 - 检查配置文件(如
application.properties/application.yml) - 数据库驱动和连接池配置
3. 配置文件调整
# 生产环境配置示例
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/db_prod
spring.profiles.active=prod
logging.file.path=/var/log/myapp
三、服务器优化配置
1. JVM参数调优
# 启动脚本示例
java -Xms512m -Xmx2048m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-jar your-app.jar
2. 进程管理
- Systemd服务(推荐):
# /etc/systemd/system/myapp.service [Unit] Description=My Java Application After=network.target
[Service]
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar /opt/myapp/app.jar
SuccessExitStatus=143
Restart=always
[Install]
WantedBy=multi-user.target
- **Supervisor**:适合非systemd系统
- **Docker容器化**:提供环境一致性
### 3. **日志管理**
```bash
# 创建日志目录
sudo mkdir -p /var/log/myapp
sudo chown -R appuser:appuser /var/log/myapp
# 日志轮转配置(logrotate)
四、监控与维护
1. 监控工具
- JVM监控:JConsole, VisualVM, Arthas
- 应用监控:Spring Boot Actuator, Micrometer + Prometheus
- 系统监控:top, htop, nmon
2. 健康检查
# 应用健康端点
curl http://localhost:8080/actuator/health
# 端口检查
netstat -tlnp | grep :8080
3. 备份策略
- 应用日志定期归档
- 数据库备份
- 配置文件版本控制
五、安全加固
1. 权限控制
# 创建专用用户
sudo useradd -r -s /bin/false appuser
sudo chown -R appuser:appuser /opt/myapp
2. 网络安全
- 使用HTTPS(Let’s Encrypt免费证书)
- 限制管理端口访问IP
- 定期更新依赖(检查安全漏洞)
3. 数据安全
- 敏感信息使用环境变量或配置中心
- 数据库连接加密
- 禁用不必要的Actuator端点
六、快速部署检查清单
- [ ] Java环境安装并验证
- [ ] 项目打包(JAR/WAR)
- [ ] 生产配置文件准备
- [ ] 数据库/中间件就绪
- [ ] 服务器端口开放
- [ ] 进程管理配置
- [ ] 日志目录创建
- [ ] 监控配置
- [ ] 备份方案制定
- [ ] 安全加固措施
七、常见问题排查
# 查看应用日志
tail -f /var/log/myapp/application.log
# 检查端口占用
sudo lsof -i :8080
# JVM内存状态
jstat -gc <pid>
# 线程转储(分析死锁)
jstack <pid> > thread_dump.txt
根据项目类型额外准备:
Spring Boot项目
- Actuator端点管理
- Profile切换机制
- 外部化配置
微服务项目
- 服务注册中心(Eureka/Nacos)
- 配置中心
- API网关
传统Web项目(WAR)
- Tomcat/Jetty安装
- 应用服务器配置
- 会话管理
建议先在测试环境完整演练部署流程,再操作生产服务器。使用Docker可以简化环境一致性,但需要学习容器管理。
CLOUD技术笔记