1. 环境准备与基础配置
1.1 服务器选择与连接
对于Java应用部署,我推荐使用Ubuntu 20.04 LTS或22.04 LTS版本。这两个版本都提供长期支持,稳定性有保障。在实际项目中,我遇到过不少因为使用非LTS版本导致的各种依赖问题。
连接服务器时,建议使用SSH密钥对认证而非密码登录。这样更安全,也方便自动化部署。配置方法如下:
bash复制# 本地生成密钥对
ssh-keygen -t rsa -b 4096
# 将公钥上传到服务器
ssh-copy-id username@your_server_ip
注意:如果服务器在云平台,记得在安全组中开放SSH端口(默认22)和应用端口(如8080、80等)
1.2 系统更新与基础工具
部署前先更新系统软件包是个好习惯:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget vim git unzip
我习惯安装htop来监控系统资源:
bash复制sudo apt install -y htop
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Java环境配置详解
2.1 JDK版本选择
虽然OpenJDK 17是当前主流,但在实际项目中需要考虑:
- 如果使用Spring Boot 2.x,建议JDK 11
- Spring Boot 3.x+则需要JDK 17+
安装多个JDK版本并切换的方法:
bash复制# 安装JDK 11和17
sudo apt install -y openjdk-11-jdk openjdk-17-jdk
# 查看已安装版本
update-java-alternatives --list
# 切换版本
sudo update-alternatives --config java
2.2 环境变量配置
虽然Ubuntu会自动配置JAVA_HOME,但显式设置更可靠:
bash复制echo 'export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
验证配置:
bash复制echo $JAVA_HOME
# 应该输出类似:/usr/lib/jvm/java-17-openjdk-amd64
3. 数据库部署实战
3.1 MySQL高级配置
默认安装的MySQL安全性不足,建议运行安全脚本:
bash复制sudo mysql_secure_installation
这个脚本会引导你:
- 设置root密码强度
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 立即应用权限变更
3.2 远程连接配置
如果需要从应用服务器连接数据库:
sql复制CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON app_db.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
然后修改MySQL配置文件:
bash复制sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到bind-address并修改为:
code复制bind-address = 0.0.0.0
重启MySQL生效:
bash复制sudo systemctl restart mysql
4. 应用部署最佳实践
4.1 应用目录结构
推荐的标准目录结构:
code复制/var/www/
└── java-app/
├── app.jar # 应用jar包
├── config/ # 外部化配置
│ └── application-prod.yml
├── logs/ # 应用日志
└── start.sh # 启动脚本
创建目录并设置权限:
bash复制sudo mkdir -p /var/www/java-app/{config,logs}
sudo chown -R $USER:$USER /var/www/java-app
4.2 启动脚本优化
创建start.sh脚本:
bash复制#!/bin/bash
APP_HOME=/var/www/java-app
JAR_NAME=app.jar
LOG_FILE=$APP_HOME/logs/app_$(date +%Y%m%d).log
# 设置JVM参数
JVM_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError"
nohup java $JVM_OPTS -jar $APP
