Cài đặt toàn diện máy chủ Alibaba Cloud Linux 3.2104 LTS

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ới yum) 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

  1. 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.
  2. Thiết lập mật khẩu cho Redis → Xem bước 4.
  3. Nhóm bảo mật AliCloud: Chỉ mở các cổng 22, 80, 443.
  4. Cập nhật hệ thống định kỳ:
sudo dnf update -y

Thẻ: AlibabaCloudLinux OpenJDK Maven

Đăng vào ngày 17 tháng 6 lúc 04:44