1.2. Hướng dẫn Toàn diện Cài đặt Ubuntu Server Tối giản cho MLOps#

Tài liệu này là phiên bản được tổng hợp và tối ưu hóa, cung cấp hướng dẫn đầy đủ để cài đặt một máy chủ Ubuntu Server nhẹ, ổn định và bảo mật, chuyên dụng cho các tác vụ MLOps, DevOps và chạy ứng dụng container.

1.2.1. Mục lục#

  1. Giai đoạn 1: Chuẩn bị

  2. Giai đoạn 2: Cài đặt Ubuntu Server

  3. Giai đoạn 3: Cấu hình Hệ thống Ban đầu

  4. Giai đoạn 4: Cấu hình Mạng

  5. Giai đoạn 5: Cài đặt Nền tảng MLOps

  6. Giai đoạn 6: Tối ưu và Tăng cường Hệ thống

  7. Giai đoạn 7: Công cụ và Dịch vụ Bổ sung (Tùy chọn)

  8. Giai đoạn 8: Kiểm tra và Sao lưu

1.2.2. Giai đoạn 1: Chuẩn bị#

Mục tiêu: Đảm bảo có đủ công cụ và môi trường phần cứng sẵn sàng cho việc cài đặt.

1.2.2.1. Yêu cầu Phần cứng & Phần mềm#

  • Phần cứng:

    • Laptop hoặc PC (ưu tiên CPU Intel để tương thích tốt).

    • Ổ cứng SSD để có hiệu năng tốt nhất.

    • Kết nối mạng có dây (LAN) để đảm bảo ổn định.

  • Phần mềm:

    • File ISO Ubuntu Server 24.04 LTS (hoặc 22.04 LTS) tải từ trang chủ Ubuntu.

    • USB có dung lượng tối thiểu 4GB.

    • Phần mềm tạo USB boot như BalenaEtcher hoặc Rufus.

1.2.2.2. Cấu hình BIOS/UEFI#

Mục tiêu: Tối ưu hóa BIOS cho việc chạy server và ảo hóa, loại bỏ các rào cản bảo mật không cần thiết.

  1. Khởi động máy và truy cập vào BIOS/UEFI (thường bằng phím F2F10F12, hoặc DEL).

  2. Disable Secure Boot: Bắt buộc để cài đặt và vận hành các module kernel không chính thức.

  3. Enable AHCI Mode cho ổ cứng (thay vì RAID hoặc IDE).

  4. Enable Virtualization Technology (VT-x / AMD-V): Cực kỳ quan trọng cho việc chạy máy ảo và container.

  5. Enable Wake-on-LAN (WOL): Nếu có, thường nằm trong mục “Power Management”.

  6. Thiết lập thứ tự khởi động ưu tiên USB.

1.2.3. Giai đoạn 2: Cài đặt Ubuntu Server#

Mục tiêu: Cài đặt một hệ điều hành Ubuntu Server tối giản nhất có thể, chỉ bao gồm các thành phần cốt lõi.

1.2.3.1. Các bước cài đặt chính#

  1. Khởi động từ USB boot đã tạo.

  2. Language: Chọn English.

  3. Keyboard Layout: Chọn English (US).

  4. Installation Type: Chọn Ubuntu Server (minimized) để có hệ thống gọn nhẹ nhất.

  5. Network: Cấu hình card mạng LAN. Có thể tạm thời dùng DHCP và chỉnh IP tĩnh sau.

  6. Storage:

    • Chọn Use an entire disk để sử dụng toàn bộ ổ cứng.

    • Trên màn hình tiếp theo, đảm bảo bạn đã chọn đúng ổ SSD.

    • Xác nhận lựa chọn trong phần “Summary” để hệ thống tự động phân vùng và sử dụng 100% dung lượng đĩa. Thao tác này sẽ xóa toàn bộ dữ liệu trên ổ cứng.

  7. Profile Setup:

    • Your name: (Tên của bạn)

    • Your server’s name: mlops-server (đây là hostname)

    • Pick a username: admin

    • Choose a password: (Đặt mật khẩu của bạn)

  8. SSH Setup:

    • Đánh dấu chọn Install OpenSSH server.

  9. Featured Server Snaps:

    • KHÔNG chọn bất kỳ gói nào. Bỏ qua bước này để giữ hệ thống sạch sẽ.

  10. Chờ quá trình cài đặt hoàn tất, sau đó khởi động lại máy và rút USB.

1.2.4. Giai đoạn 3: Cấu hình Hệ thống Ban đầu#

Mục tiêu: Cập nhật hệ thống, cài các công cụ quản trị cơ bản và đơn giản hóa quyền quản trị để thao tác nhanh hơn.

1.2.4.1. Cập nhật hệ thống và cài đặt công cụ thiết yếu#

# Cập nhật danh sách gói và nâng cấp toàn bộ hệ thống
sudo apt update && sudo apt upgrade -y

# Cài các công-cụ dòng lệnh cần thiết cho việc quản trị, mạng và lập trình
sudo apt install -y net-tools curl wget vim git htop ufw unzip build-essential

# restart
#sudo reboot

1.2.4.2. Thiết lập quyền Sudo không cần mật khẩu#

Cảnh báo: Chỉ nên thực hiện bước này trên server cá nhân, không áp dụng cho môi trường production nhiều người dùng vì lý do bảo mật.

# Mở file cấu hình sudoers bằng trình soạn thảo an toàn visudo
sudo visudo

Di chuyển xuống cuối file và thêm dòng sau:

admin ALL=(ALL) NOPASSWD:ALL

Lưu lại và thoát (Ctrl+OEnterCtrl+X trong nano). Từ giờ, người dùng admin có thể chạy lệnh sudo mà không cần nhập lại mật khẩu.

1.2.5. Giai đoạn 4: Cấu hình Mạng#

Mục tiêu: Đảm bảo server có địa chỉ IP không đổi trong mạng nội bộ và có thể được khởi động từ xa.

1.2.5.1. Thiết lập IP tĩnh#

  1. Xác định tên card mạng của bạn:

    ip a
    

    Tên thường có dạng enp2s0eth0, v.v.

  2. Sửa file cấu hình Netplan:

    # Tên file có thể khác, hãy dùng `ls /etc/netplan/` để xem
    sudo nano /etc/netplan/00-installer-config.yaml
    
  3. Chỉnh sửa nội dung file theo mẫu dưới đây (thay enp2s0 và các thông số IP cho phù hợp với mạng của bạn):

    network:
      version: 2
      renderer: networkd
      ethernets:
        enp2s0:
          dhcp4: no
          addresses: [192.168.1.5/24]
          routes:
            - to: 0.0.0.0/0
              via: 192.168.1.1
          nameservers:
            addresses: [8.8.8.8,1.1.1.1]
    
  4. Áp dụng cấu hình:

    sudo netplan apply
    

1.2.5.2. Kích hoạt Wake-on-LAN (WOL)#

  1. Cài đặt ethtool:

    sudo apt install ethtool -y
    
  2. Bật WOL cho card mạng (thay enp2s0 bằng tên card mạng của bạn):

    sudo ethtool -s enp2s0 wol g
    
  3. Tạo một dịch vụ systemd để WOL tự động bật lại sau mỗi lần khởi động:

    sudo nano /etc/systemd/system/wol.service
    
  4. Thêm nội dung sau vào file:

    [Unit]
    Description=Enable Wake on LAN
    
    [Service]
    Type=oneshot
    ExecStart=/usr/sbin/ethtool -s enp2s0 wol g
    
    [Install]
    WantedBy=multi-user.target
    
  5. Kích hoạt dịch vụ:

    sudo systemctl enable wol.service
    sudo systemctl start wol.service
    

1.2.6. Giai đoạn 5: Cài đặt Nền tảng MLOps#

Mục tiêu: Cài đặt Docker, nền tảng container hóa cốt lõi cho hầu hết các ứng dụng MLOps.

1.2.6.1. Cài đặt Docker CE và Docker Compose#

  1. Gỡ bỏ các phiên bản Docker cũ (nếu có):

    sudo apt remove -y docker docker-engine docker.io containerd runc
    
  2. Thêm kho lưu trữ chính thức của Docker:

    # Cài các gói cần thiết
    sudo apt update
    sudo apt install -y ca-certificates curl gnupg
    
    # Tạo thư mục keyrings
    sudo install -m 0755 -d /etc/apt/keyrings
    
    # Tải Docker GPG key
    curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    
    # Chmod để mọi người đọc được key
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    
    # Thêm repository Docker chính thức
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] [https://download.docker.com/linux/ubuntu](https://download.docker.com/linux/ubuntu) $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    # Cập nhật package index
    sudo apt update
    
  3. Cài đặt Docker Engine và Docker Compose:

    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  4. Cho phép người dùng admin chạy lệnh docker mà không cần sudo:

    sudo usermod -aG docker admin
    # Bạn cần đăng xuất và đăng nhập lại để thay đổi có hiệu lực
    
  5. Kích hoạt Docker khởi động cùng hệ thống:

    sudo systemctl enable docker
    sudo systemctl start docker
    
  6. Kiểm tra cài đặt:

    docker run hello-world
    

1.2.7. Giai đoạn 6: Tối ưu và Tăng cường Hệ thống#

Mục tiêu: Tinh chỉnh hệ thống để hoạt động ổn định 24/7, tối ưu hiệu năng, tăng cường bảo mật và chuẩn hóa môi trường.

1.2.7.1. Cấu hình Server hoạt động 24/7#

  1. Vô hiệu hóa sleep khi gập nắp laptop:

    sudo nano /etc/systemd/logind.conf
    

    Tìm và sửa các dòng sau:

    HandleLidSwitch=ignore
    HandleLidSwitchDocked=ignore
    IdleAction=ignore
    

    Khởi động lại dịch vụ:

    sudo systemctl restart systemd-logind
    
  2. (Tùy chọn) Tắt cảnh báo thiếu pin nếu bạn đã tháo pin:

    sudo nano /etc/modprobe.d/ignore_battery.conf
    

    Thêm dòng blacklist battery vào file, lưu lại rồi chạy:

    sudo update-initramfs -u
    # Cần khởi động lại máy để có hiệu lực
    

1.2.7.2. Tối ưu hiệu năng và tuổi thọ SSD#

  1. Gỡ bỏ Snapd: Snap thường chậm hơn và không cần thiết cho môi trường server tối giản.

    sudo systemctl disable snapd.service
    sudo systemctl stop snapd.service
    sudo apt purge snapd -y
    sudo rm -rf /var/cache/snapd/
    rm -rf ~/snap
    
  2. Tắt Swap: Với server có RAM đủ (≥ 8GB) và chạy trên SSD, tắt swap giúp tăng tuổi thọ ổ cứng.

    sudo swapoff -a
    sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    
  3. Giảm ghi log vào SSD: Chuyển log hệ thống vào RAM thay vì ghi liên tục ra đĩa.

    sudo sed -i 's/#Storage=auto/Storage=volatile/' /etc/systemd/journald.conf
    # Giới hạn kích thước log trong RAM
    sudo sed -i 's/#RuntimeMaxUse=/RuntimeMaxUse=50M/' /etc/systemd/journald.conf
    sudo systemctl restart systemd-journald
    

1.2.7.3. Bảo mật cơ bản#

  1. Cấu hình tường lửa UFW:

    # Chỉ cho phép các cổng cần thiết (ví dụ: SSH)
    sudo ufw allow 22/tcp
    # sudo ufw allow 80/tcp  (Nếu chạy web server)
    # sudo ufw allow 443/tcp (Nếu chạy web server)
    
    # Kích hoạt tường lửa
    sudo ufw enable
    
  2. Cài đặt Fail2Ban: Tự động khóa các IP cố gắng brute-force SSH.

    sudo apt install fail2ban -y
    sudo systemctl enable fail2ban
    sudo systemctl start fail2ban
    

1.2.7.4. Thiết lập môi trường chuẩn hóa#

# Đặt múi giờ
sudo timedatectl set-timezone Asia/Ho_Chi_Minh

# Đặt locale hệ thống
sudo localectl set-locale LANG=en_US.UTF-8

1.2.7.5. Dọn dẹp hệ thống#

Mục tiêu: Loại bỏ các gói không cần thiết và giải phóng dung lượng đĩa sau khi cài đặt và cập nhật.

# Gỡ bỏ các gói được cài tự động nhưng không còn cần thiết
sudo apt autoremove -y

# Xóa cache các gói đã tải về
sudo apt clean

# Xóa các file log cũ của journald (ví dụ: giữ lại log của 7 ngày gần nhất)
sudo journalctl --vacuum-time=7d

1.2.8. Giai đoạn 7: Công cụ và Dịch vụ Bổ sung (Tùy chọn)#

Mục tiêu: Cài đặt thêm các công cụ hữu ích và dịch vụ có thể cần thiết cho công việc MLOps.

1.2.8.1. Cài đặt Công cụ CLI và Môi trường Python#

Mục tiêu: Trang bị các công cụ dòng lệnh mạnh mẽ và thiết lập một môi trường Python hiện đại với phiên bản cụ thể và trình quản lý gói hiệu suất cao.

  1. Cài đặt các công cụ CLI cơ bản:

    sudo apt install -y tmux jq tree make
    
    • tmux: Quản lý nhiều phiên terminal trong một cửa sổ.

    • jq: Xử lý dữ liệu JSON trên dòng lệnh.

    • tree: Hiển thị cấu trúc thư mục.

    • make: Công cụ tự động hóa build.

  2. Cài đặt và thiết lập Python 3.12:

    Lưu ý: Ubuntu 24.04 đã có sẵn Python 3.12. Nếu bạn đang dùng phiên bản Ubuntu cũ hơn (ví dụ 22.04), hãy thực hiện các lệnh sau để cài đặt phiên bản mới nhất.

    # Thêm kho lưu trữ PPA deadsnakes để có các phiên bản Python mới
    sudo add-apt-repository ppa:deadsnakes/ppa -y
    sudo apt update
    
    # Cài đặt Python 3.12 cùng các gói cần thiết (venv, dev, pip)
    sudo apt install -y python3.12 python3.12-venv python3.12-dev python3-pip
    
    # Cập nhật update-alternatives để quản lý các phiên bản python
    # Đặt Python 3.12 làm phiên bản mặc định với độ ưu tiên cao nhất
    sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1
    
    # Kiểm tra lại phiên bản
    python3 --version
    
  3. Cài đặt uv (Trình quản lý gói Python tốc độ cao): uv là một công cụ thay thế cực nhanh cho pip và pip-tools, được viết bằng Rust. Script cài đặt sẽ tải về bản build sẵn nên không yêu cầu cài đặt Rust.

    # 1️⃣ Cài Rust/Cargo nếu chưa có
    command -v cargo >/dev/null 2>&1 || curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
    
    # 2️⃣ Cài UV / Astral
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    # 3️⃣ Load Cargo cho session hiện tại
    [ -f "$HOME/.cargo/env" ] && source "$HOME/.cargo/env"
    
    # 4️⃣ Thêm cả .local/bin và .cargo/bin vào ~/.bashrc nếu chưa có
    grep -qxF 'export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH"' ~/.bashrc || \
    echo 'export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
    
    # 5️⃣ Áp dụng ngay cho session hiện tại
    export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH"
    
    # 6️⃣ Kiểm tra UV
    uv --version
    

1.2.8.2. Cài đặt Tailscale để truy cập từ xa#

Mục tiêu: Tạo một mạng riêng ảo (VPN) an toàn để truy cập server từ bất kỳ đâu mà không cần mở port ra ngoài Internet.

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

Làm theo hướng dẫn để đăng nhập và kết nối máy chủ vào mạng Tailscale của bạn.

1.2.8.3. Cài đặt PostgreSQL native#

Mục tiêu: Cài đặt PostgreSQL trực tiếp lên hệ thống để có hiệu năng I/O tốt nhất, phù hợp cho các metadata store của MLflow, Airflow.

  1. Cài đặt:

    sudo apt install postgresql postgresql-contrib -y
    
  2. Kích hoạt và khởi động:

    sudo systemctl enable postgresql
    sudo systemctl start postgresql
    
  3. Tạo người dùng và cơ sở dữ liệu:

    # Chuyển sang người dùng postgres
    sudo -u postgres psql
    
    # Trong giao diện psql
    CREATE USER myuser WITH PASSWORD 'mypassword';
    CREATE DATABASE mydatabase OWNER myuser;
    \q
    

1.2.9. Giai đoạn 8: Kiểm tra và Sao lưu#

Mục tiêu: Xác nhận lại tất cả các thiết lập đã hoạt động đúng và sao lưu các cấu hình quan trọng.

1.2.9.1. Kiểm tra lại toàn bộ hệ thống#

htop                                      # Giám sát CPU, RAM
ip a                                      # Kiểm tra địa chỉ IP tĩnh
systemctl status docker                   # Kiểm tra trạng thái Docker
sudo ethtool enp2s0 | grep Wake-on        # Kiểm tra trạng thái WOL
sudo ufw status                           # Kiểm tra trạng thái tường lửa
sudo systemctl list-unit-files --enabled  # Liệt kê các dịch vụ khởi động cùng hệ thống

1.2.9.2. Sao lưu các tệp cấu hình quan trọng#

# Tạo thư mục sao lưu
mkdir -p ~/server-backup

# Sao chép các tệp cấu hình
sudo cp /etc/netplan/00-installer-config.yaml ~/server-backup/
sudo cp /etc/systemd/system/wol.service ~/server-backup/
sudo cp /etc/systemd/logind.conf ~/server-backup/

echo "Sao lưu hoàn tất tại thư mục ~/server-backup"

Chúc mừng! Bạn đã hoàn thành việc cài đặt và cấu hình một máy chủ Ubuntu Server tối ưu cho MLOps.