Quy trình cài đặt toàn diện máy chủ Alibaba Cloud Linux 3.2104 LTS
Cài đặt tự động Nginx + Redis + OpenJDK 17 + Maven và cung cấp kịch bản tự động đóng gói phát hành.
Thông tin hệ thống xác nhận
cat /etc/os-release
Kết quả mong muốn bao gồm:
NAME="Alibaba Cloud Linux"
VERSION="3.2104 LTS (Soaring Falcon)"
ID="alinux"
...
Alibaba Cloud Linux 3 dựa trên RHEL/CentOS 8, sử dụng
dnf(hoặc tương thích vớiyum) làm trình quản lý gói.
Bước 1: Khởi tạo hệ thống
# Cập nhật hệ thống
sudo dnf update -y
# Cài đặt các công cụ thông dụng
sudo dnf install -y curl wget git vim bash-completion
Bước 2: Cài đặt OpenJDK 17
# Cài đặt OpenJDK 17 (Nguồn chính thức của Alibaba Cloud Linux 3 đã bao gồm)
sudo dnf install -y java-17-openjdk-devel
# Kiểm tra
java -version
javac -version
Thiết lập JAVA_HOME (toàn cầu)
# Tìm đường dẫn JDK
ls /usr/lib/jvm/
# Đường dẫn thường là: /usr/lib/jvm/java-17-openjdk-17.x.x.x-x.al8.x86_64
# Sử dụng alternatives để lấy đường dẫn chuẩn
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
# Thiết lập biến môi trường
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
# Áp dụng thay đổi
source /etc/profile.d/java.sh
echo $JAVA_HOME
Bước 3: Cài đặt Maven
# Tải xuống phiên bản mới nhất của Maven (tính đến năm 2025, khuyến nghị 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
# Giải nén vào /opt
sudo tar -xzf apache-maven-${MAVEN_VERSION}-bin.tar.gz -C /opt
sudo ln -s /opt/apache-maven-${MAVEN_VERSION} /opt/maven
# Thiết lập biến môi trường
cat <<EOF | sudo tee /etc/profile.d/maven.sh
export MAVEN_HOME=/opt/maven
export PATH=\$MAVEN_HOME/bin:\$PATH
EOF
# Áp dụng thay đổi
source /etc/profile.d/maven.sh
mvn -v
Bước 4: Cài đặt Redis
# Alibaba Cloud Linux 3 hỗ trợ cài đặt trực tiếp Redis
sudo dnf install -y redis
# Khởi động và thiết lập khởi động cùng hệ thống
sudo systemctl enable redis --now
sudo systemctl status redis
(Tùy chọn) Cấu hình mật khẩu Redis (củng cố bảo mật)
# Chỉnh sửa tệp cấu hình
sudo sed -i 's/^# requirepass .*/requirepass MatKhauRedisCuaBan!/' /etc/redis.conf
# Khởi động lại để áp dụng
sudo systemctl restart redis
Lưu ý: Ghi nhớ mật khẩu, ứng dụng Java sau này cần cấu hình.
Bước 5: Cài đặt Nginx
# Cài đặt Nginx
sudo dnf install -y nginx
# Khởi động và thiết lập khởi động cùng hệ thống
sudo systemctl enable nginx --now
sudo systemctl status nginx
Cấu hình tường lửa (nếu được bật)
# Alibaba Cloud Linux mặc định sử dụng firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Trên AliCloud, cần mở cổng 80/443 trong nhóm bảo mật.
Bước 6: Tạo cấu trúc thư mục dự án
# Tạo thư mục làm việc
sudo mkdir -p /opt/apps/myapp
sudo chown -R $(whoami):$(whoami) /opt/apps/myapp
cd /opt/apps/myapp
mkdir -p {src,logs,backup}
Bước 7: Viết kịch bản đóng gói phát hành tự động
Tập tin: /opt/apps/myapp/deploy.sh
#!/bin/bash
set -e
# ==================== Khu vực cấu hình ====================
APP_NAME="myapp"
GIT_REPO="địa_chỉ_git"
BRANCH="main"
JAR_NAME="your-app.jar" # Đảm bảo khớp với <finalName> trong pom.xml
SERVICE_NAME="myapp"
PORT=17337
# Người dùng cố định (phải được tạo trước!)
RUN_USER="www"
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"
# ==================== Định nghĩa hàm ====================
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
error_exit() {
log "❌ Lỗi: $1"
exit 1
}
# ==================== Quy trình chính ====================
log "🚀 Bắt đầu triển khai $APP_NAME"
# 1. Tạo thư mục (đảm bảo quyền truy cập đúng)
sudo mkdir -p "$LOG_DIR" "$BACKUP_DIR"
sudo chown -R "$RUN_USER:$RUN_USER" "$BASE_DIR"
# 2. Tin tưởng máy chủ Gitee (tránh dừng do tương tác)
if ! sudo -u "$RUN_USER" ssh-keygen -F gitee.com >/dev/null; then
log "🔑 Kết nối lần đầu: Tin tưởng máy chủ SSH của Gitee..."
sudo -u "$RUN_USER" mkdir -p "/home/$RUN_USER/.ssh"
sudo -u "$RUN_USER" ssh-keyscan gitee.com >> "/home/$RUN_USER/.ssh/known_hosts"
fi
# 3. Kéo mã nguồn (bằng danh tính RUN_USER)
log "📥 Kéo mã nguồn..."
if [ ! -d "$SRC_DIR/.git" ]; then
sudo -u "$RUN_USER" git clone "$GIT_REPO" "$SRC_DIR"
else
cd "$SRC_DIR"
sudo -u "$RUN_USER" git fetch
sudo -u "$RUN_USER" git checkout "$BRANCH"
sudo -u "$RUN_USER" git pull origin "$BRANCH"
fi
# 4. Xây dựng bằng Maven (bằng danh tính RUN_USER)
log "📦 Xây dựng bằng Maven..."
cd "$SRC_DIR"
sudo -u "$RUN_USER" mvn clean package -DskipTests
# 5. Kiểm tra tệp JAR có tồn tại không
JAR_PATH="$SRC_DIR/target/$JAR_NAME"
if [ ! -f "$JAR_PATH" ]; then
error_exit "Không tìm thấy sản phẩm xây dựng: $JAR_PATH, vui lòng kiểm tra <finalName> trong pom.xml"
fi
# 6. Sao lưu phiên bản cũ
if [ -f "$BASE_DIR/$JAR_NAME" ]; then
log "💾 Sao lưu phiên bản cũ..."
sudo cp "$BASE_DIR/$JAR_NAME" "$BACKUP_DIR/${JAR_NAME}.$(date +%Y%m%d_%H%M%S)"
fi
# 7. Sao chép JAR mới (giữ quyền sở hữu cho RUN_USER)
sudo cp "$JAR_PATH" "$BASE_DIR/"
sudo chown "$RUN_USER:$RUN_USER" "$BASE_DIR/$JAR_NAME"
Gán quyền thực thi
chmod +x /opt/apps/myapp/deploy.sh
Bước 8: Triển khai lần đầu và kiểm tra
# Thực hiện lần đầu (sẽ tự động tạo dịch vụ systemd)
cd /opt/apps/myapp
./deploy.sh
Kiểm tra trạng thái dịch vụ
systemctl status myapp
journalctl -u myapp -f
Bước 9: Cấu hình proxy ngược cho Nginx (tùy chọn)
Chỉnh sửa cấu hình Nginx:
sudo vim /etc/nginx/conf.d/myapp.conf
Nội dung:
server {
listen 80;
server_name dia-chi-mien-cua-ban.com; # Hoặc IP công cộng của máy chủ
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;
}
}
Tải lại Nginx:
sudo nginx -t && sudo systemctl reload nginx
Đề xuất về an ninh
- Không chạy dịch vụ Java bằng root → Kịch bản đã sử dụng người dùng hiện tại.
- Thiết lập mật khẩu cho Redis → Xem bước 4.
- Nhóm bảo mật AliCloud: Chỉ mở các cổng 22, 80, 443.
- Cập nhật hệ thống định kỳ:
sudo dnf update -y