Alibaba Cloud Linux 3.2104 LTS 服务器部署全流程
Alibaba Cloud Linux 3.2104 LTS 服务器部署全流程
一键安装 Nginx + Redis + OpenJDK 17 + Maven,并提供自动化打包发版脚本
📌 系统信息确认
cat /etc/os-release
预期输出包含:
NAME="Alibaba Cloud Linux"
VERSION="3.2104 LTS (Soaring Falcon)"
ID="alinux"
...
✅ Alibaba Cloud Linux 3 基于 RHEL/CentOS 8,使用
dnf(或兼容yum)作为包管理器。
🔧 第一步:系统初始化
# 更新系统
sudo dnf update -y
# 安装常用工具
sudo dnf install -y curl wget git vim bash-completion
📦 第二步:安装 OpenJDK 17
# 安装 OpenJDK 17(Alibaba Cloud Linux 3 官方源已包含)
sudo dnf install -y java-17-openjdk-devel
# 验证
java -version
javac -version
设置 JAVA_HOME(全局)
# 查找 JDK 路径
ls /usr/lib/jvm/
# 通常路径为:/usr/lib/jvm/java-17-openjdk-17.x.x.x-x.al8.x86_64
# 使用 alternatives 获取标准路径
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk/bin/java 1700
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-17-openjdk/bin/javac 1700
# 设置环境变量
echo 'export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))' | sudo tee -a /etc/profile.d/java.sh
echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile.d/java.sh
# 生效
source /etc/profile.d/java.sh
echo $JAVA_HOME
📦 第三步:安装 Maven
# 下载最新版 Maven(截至 2025 年,推荐 3.9+)
MAVEN_VERSION=3.9.11
cd /tmp
wget https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz
# 解压到 /opt
sudo tar -xzf apache-maven-${MAVEN_VERSION}-bin.tar.gz -C /opt
sudo ln -s /opt/apache-maven-${MAVEN_VERSION} /opt/maven
# 设置环境变量
cat <<EOF | sudo tee /etc/profile.d/maven.sh
export MAVEN_HOME=/opt/maven
export PATH=\$MAVEN_HOME/bin:\$PATH
EOF
# 生效
source /etc/profile.d/maven.sh
mvn -v
📦 第四步:安装 Redis
# Alibaba Cloud Linux 3 支持直接安装 Redis
sudo dnf install -y redis
# 启动并设置开机自启
sudo systemctl enable redis --now
sudo systemctl status redis
(可选)配置 Redis 密码(安全加固)
# 编辑配置文件
sudo sed -i 's/^# requirepass .*/requirepass YourRedisPassword123!/' /etc/redis.conf
# 重启生效
sudo systemctl restart redis
⚠️ 记下密码,后续 Java 应用需配置。
📦 第五步:安装 Nginx
# 安装 Nginx
sudo dnf install -y nginx
# 启动并设置开机自启
sudo systemctl enable nginx --now
sudo systemctl status nginx
配置防火墙(如果启用)
# Alibaba Cloud Linux 默认使用 firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
💡 阿里云还需在 安全组 中放行 80/443 端口。
🛠 第六步:创建项目目录结构
# 创建工作目录
sudo mkdir -p /opt/apps/myapp
sudo chown -R $(whoami):$(whoami) /opt/apps/myapp
cd /opt/apps/myapp
mkdir -p {src,logs,backup}
🚀 第七步:编写一键打包发版脚本
文件:/opt/apps/myapp/deploy.sh
#!/bin/bash
set -e
# ================== 配置区 ==================
APP_NAME="myapp"
GIT_REPO="https://github.com/yourname/your-repo.git" # 替换为你的 Git 仓库
BRANCH="main"
JAR_NAME="app.jar" # 构建后生成的 jar 名
SERVICE_NAME="myapp"
PORT=8080
# 目录
BASE_DIR="/opt/apps/myapp"
SRC_DIR="$BASE_DIR/src"
LOG_DIR="$BASE_DIR/logs"
BACKUP_DIR="$BASE_DIR/backup"
# 日志文件
LOG_FILE="$LOG_DIR/deploy_$(date +%Y%m%d_%H%M%S).log"
# ================== 函数定义 ==================
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
error_exit() {
log "❌ 错误: $1"
exit 1
}
# ================== 主流程 ==================
log "🚀 开始部署 $APP_NAME"
# 1. 创建日志目录
mkdir -p "$LOG_DIR" "$BACKUP_DIR"
# 2. 拉取最新代码
log "📥 拉取代码..."
if [ ! -d "$SRC_DIR/.git" ]; then
git clone "$GIT_REPO" "$SRC_DIR"
else
cd "$SRC_DIR"
git fetch
git checkout "$BRANCH"
git pull origin "$BRANCH"
fi
# 3. Maven 打包
log "📦 Maven 打包中..."
cd "$SRC_DIR"
mvn clean package -DskipTests
# 4. 备份旧版本
if [ -f "$BASE_DIR/$JAR_NAME" ]; then
log "💾 备份旧版本..."
cp "$BASE_DIR/$JAR_NAME" "$BACKUP_DIR/${JAR_NAME}.$(date +%Y%m%d_%H%M%S)"
fi
# 5. 复制新 jar
cp "$SRC_DIR/target/${JAR_NAME}" "$BASE_DIR/" || error_exit "找不到 target/${JAR_NAME}"
# 6. 重载 systemd 服务(首次需创建)
if [ ! -f "/etc/systemd/system/$SERVICE_NAME.service" ]; then
log "⚙️ 首次部署:创建 systemd 服务..."
cat > "/tmp/${SERVICE_NAME}.service" <<EOF
[Unit]
Description=$APP_NAME Service
After=network.target redis.service
[Service]
Type=simple
User=$(whoami)
WorkingDirectory=$BASE_DIR
ExecStart=/usr/bin/java -jar $BASE_DIR/$JAR_NAME
Restart=always
RestartSec=10
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk
Environment=SPRING_PROFILES_ACTIVE=prod
[Install]
WantedBy=multi-user.target
EOF
sudo mv "/tmp/${SERVICE_NAME}.service" "/etc/systemd/system/"
sudo systemctl daemon-reload
fi
# 7. 重启服务
log "🔄 重启服务..."
sudo systemctl restart "$SERVICE_NAME"
sudo systemctl enable "$SERVICE_NAME"
# 8. 检查状态
sleep 3
if sudo systemctl is-active --quiet "$SERVICE_NAME"; then
log "✅ 部署成功!服务正在运行。"
log "应用查看日志: journalctl -u $SERVICE_NAME -f"
else
error_exit "服务启动失败,请检查日志。"
fi
log "📄 本次部署日志: $LOG_FILE"
赋予执行权限
chmod +x /opt/apps/myapp/deploy.sh
▶️ 第八步:首次部署与测试
# 首次运行(会自动创建 systemd 服务)
cd /opt/apps/myapp
./deploy.sh
查看服务状态
systemctl status myapp
journalctl -u myapp -f
🌐 第九步:配置 Nginx 反向代理(可选)
编辑 Nginx 配置:
sudo vim /etc/nginx/conf.d/myapp.conf
内容:
server {
listen 80;
server_name your-domain.com; # 或服务器公网IP
location / {
proxy_pass http://127.0.0.1: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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
重载 Nginx:
sudo nginx -t && sudo systemctl reload nginx
🔒 安全建议
-
不要使用 root 运行 Java 服务 → 脚本中已使用当前用户
-
Redis 设置密码 → 见第四步
-
阿里云安全组:仅开放 22、80、443 端口
-
定期更新系统
sudo dnf update -y
📎 附录:常用命令速查
| 功能 | 命令 |
|---|---|
| 查看 Java 版本 | java -version |
| 查看 Maven 版本 | mvn -v |
| 启动 Redis | sudo systemctl start redis |
| 启动 Nginx | sudo systemctl start nginx |
| 查看应用日志 | journalctl -u myapp -f |
| 手动打包 | cd /opt/apps/myapp/src && mvn clean package -DskipTests |
✅ 补充:安装 Git
在执行部署脚本前,请先安装 Git:
# 安装 Git(Alibaba Cloud Linux 3 使用 dnf)
sudo dnf install -y git
# 验证安装
git --version
预期输出类似:
git version 2.39.3
💡 建议将 Git 安装加入系统初始化步骤,以下是更新后的完整初始化命令:
🔧 更新后的【系统初始化】步骤(含 Git)
# 1. 更新系统
sudo dnf update -y
# 2. 安装基础工具(含 Git)
sudo dnf install -y curl wget git vim bash-completion tar
# 3. 验证关键命令
which java git mvn nginx redis-server || echo "部分工具尚未安装(正常)"
📌 为什么需要 Git?
-
部署脚本通过
git clone/git pull从远程仓库(如 GitHub、GitLab、阿里云 Code)获取源码 -
如果不安装 Git,脚本会在
git clone步骤报错:
./deploy.sh: line XX: git: command not found
✅ 最终确认清单(部署前)
运行以下命令,确保所有依赖已安装:
java -version # 应显示 OpenJDK 17
mvn -v # 应显示 Maven 3.9+
git --version # 应显示 Git 2.x+
nginx -v # 应显示 nginx version
redis-cli PING # 应返回 PONG(若 Redis 已启动)
全部通过后,再运行 ./deploy.sh 即可拉取代码并部署。
✅ 一、查询 Redis 服务运行状态
方法 1:使用 systemctl(推荐)
sudo systemctl status redis
✅ 正常运行时会显示:
● redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; preset: disabled)
Active: active (running) since Mon 2025-12-15 20:00:00 CST; 1h ago
Main PID: 1234 (redis-server)
Tasks: 4 (limit: 4915)
Memory: 2.1M
CGroup: /system.slice/redis.service
└─1234 /usr/bin/redis-server 127.0.0.1:6379
- Active: active (running) → 表示服务正在运行
- 如果是
inactive (dead)→ 服务未启动
🔧 启动命令(如果未运行):
sudo systemctl start redis sudo systemctl enable redis # 设置开机自启
✅ 二、检查 6379 端口是否监听
方法 1:使用 ss(现代推荐工具)
sudo ss -tulnp | grep ':6379'
✅ 正常输出示例:
tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:* users:(("redis-server",pid=1234,fd=6))
127.0.0.1:6379→ 仅本地可访问(默认安全配置)0.0.0.0:6379→ 所有 IP 可访问(需确认是否故意开放)
方法 2:使用 netstat(若已安装)
# 先安装 net-tools(Alibaba Cloud Linux 3 默认可能未装)
sudo dnf install -y net-tools
# 查询端口
sudo netstat -tulnp | grep ':6379'
输出含义同上。
方法 3:使用 lsof(可选)
sudo dnf install -y lsof
sudo lsof -i :6379
✅ 三、测试 Redis 是否可连接
本地连接测试:
redis-cli PING
-
返回
PONG→ 服务正常响应 -
若设置了密码,需先认证:
redis-cli 127.0.0.1:6379> AUTH your_password OK 127.0.0.1:6379> PING PONG
🛡 四、安全提示:Redis 监听地址说明
-
默认配置
/etc/redis.conf中:bind 127.0.0.1 protected-mode yes→ 只允许本机访问,这是安全的。
-
如果你的 Java 应用和 Redis 在同一台服务器,无需修改。
-
如果 Java 应用在其他服务器,才需要:
- 修改
bind为内网 IP 或0.0.0.0(不推荐公网暴露) - 设置强密码(
requirepass) - 配置阿里云安全组,仅允许可信 IP 访问 6379 端口
- 修改
⚠️ 切勿将 Redis 直接暴露到公网! 曾导致大量数据泄露事件。
🔍 总结:快速诊断命令
# 1. 服务是否运行?
sudo systemctl is-active redis
# 2. 6379 是否监听?
sudo ss -ltn | grep ':6379'
# 3. 能否本地连接?
redis-cli PING
三条命令全部通过 → Redis 正常可用

浙公网安备 33010602011771号