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

1.2.1. 1. 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.1.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 nano locales

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

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

# restart
sudo reboot

1.2.1.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.1.3. Cấu hình Mạng IP Internet#

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.1.3.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 `enp2s0`, `eth0`, v.v.
  1. 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
  1. 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]
  1. Áp dụng cấu hình:

sudo netplan apply

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

  1. Cài đặt ethtool:

sudo apt install ethtool -y
  1. 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
  1. 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
  1. 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
  1. Kích hoạt dịch vụ:

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

1.2.1.4. Cài đặt Docker#

# Gỡ bỏ các phiên bản Docker cũ (nếu có):
sudo apt remove -y docker docker-engine docker.io containerd runc
# Cài các gói cần thiết
sudo apt update
sudo apt install -y ca-certificates curl gnupg

# Add key + repo:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
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 \
$(. /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

# 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

# Cho phép người dùng `admin` chạy lệnh `docker` mà không cần `sudo`:
sudo usermod -aG docker admin
newgrp docker
# Bạn cần đăng xuất và đăng nhập lại để thay đổi có hiệu lực

# Kích hoạt Docker khởi động cùng hệ thống:
sudo systemctl enable docker
sudo systemctl start docker

1.2.1.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.2. 2. 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.2.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
  1. Gán nút Power để tắt/bật màn hình

sudo nano /etc/systemd/logind.conf
Tìm và sửa các dòng sau:
HandlePowerKey=ignore
Khởi động lại dịch vụ:
sudo systemctl restart systemd-logind
 Cài ACPI (bắt nút Power)
sudo apt install acpid
sudo systemctl enable --now acpid
Script FORCE tắt màn hình + đèn phím: 

`sudo nano /usr/local/bin/power-handler.sh`
#!/bin/bash

# tắt màn hình (kernel framebuffer)
echo 1 | tee /sys/class/graphics/fb0/blank > /dev/null

# tắt đèn bàn phím Dell
for kbd in /sys/class/leds/*kbd*; do
  echo 0 | tee $kbd/brightness > /dev/null
done
`sudo chmod +x /usr/local/bin/power-handler.sh`

Gán script cho nút Power: 

`sudo nano /etc/acpi/events/powerbtn`
event=button/power.*
action=/usr/local/bin/power-handler.sh
`sudo systemctl restart acpid`
  1. (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.2.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
  1. 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
  1. 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.2.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
  1. 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.3. 3. 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.3.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.3.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.3.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.4. 4. 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.4.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.4.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"