Nỗi ám ảnh mang tên apt update khi vận hành hệ thống lớn
Quản lý 1-2 con VPS thì gõ sudo apt update chỉ mất vài giây. Nhưng thử tưởng tượng bạn đang cầm trong tay cụm 50 hay 100 server Ubuntu xem. Mỗi lần đồng loạt gõ lệnh update, đường truyền quốc tế sẽ “khóc thét”, còn bạn thì ngồi chờ phát bực vì tốc độ rùa bò.
Rủi ro lớn nhất không phải là tốc độ, mà là tính nhất quán. Một ngày đẹp trời, mirror chính thức cập nhật phiên bản mới và vô tình làm “sập” ứng dụng của bạn. Nếu không có repository nội bộ, bạn gần như bất lực trong việc ép tất cả các server phải dùng đúng một phiên bản package nhất định đã qua kiểm thử.
Mình từng xử lý hệ thống hơn 20 node chạy Ubuntu Server 22.04. Khi đó, việc dựng Local APT Repository là ưu tiên số một để giữ mọi thứ trong tầm kiểm soát. Và Aptly chính là “trợ thủ” đắc lực nhất mà mình tin dùng.
Aptly có gì hay mà không dùng công cụ khác?
Có thể bạn đã nghe qua reprepro hay dpkg-scanpackages, nhưng Aptly ở một đẳng cấp khác hoàn toàn. Điểm ăn tiền nhất của nó là khả năng tạo Snapshots. Bạn có thể chụp lại trạng thái repository tại một thời điểm, test chán chê trên môi trường Staging, sau đó mới đẩy (publish) cho toàn bộ hệ thống Production. Nếu chẳng may có lỗi? Việc rollback về snapshot cũ chỉ mất vài giây.
Bước 1: Cài đặt Aptly lên Ubuntu Server
Thay vì dùng bản cũ trong kho Ubuntu, mình khuyên bạn nên cài trực tiếp từ repository chính thức của Aptly để có đầy đủ tính năng mới nhất.
# Thêm GPG key của Aptly
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/aptly-archive-keyring.gpg --keyserver keyserver.ubuntu.com --recv-keys ED75B5A4483DA07C
# Thêm source list
echo "deb [signed-by=/usr/share/keyrings/aptly-archive-keyring.gpg] http://repo.aptly.info/ squeeze main" | sudo tee /etc/apt/sources.list.d/aptly.list
# Cài đặt Aptly
sudo apt update
sudo apt install aptly -y
Bước 2: Tạo Local Repository cho các package tự đóng gói
Nếu bạn có các file .deb tự build (như source code app nội bộ hoặc tool tùy chỉnh), đây là nơi bạn sẽ cất giữ chúng.
# Tạo repository tên là 'internal-tools'
aptly repo create -comment="Phần mềm nội bộ công ty" -component="main" -distribution="jammy" internal-tools
Tạo xong rồi thì đẩy các file .deb vào thôi:
# Thêm package vào repo
aptly repo add internal-tools /path/to/your/packages/*.deb
Bước 3: Mirror các repository chính thức (Nếu cần)
Để tiết kiệm băng thông, bạn có thể mirror luôn kho của Ubuntu, Docker hoặc Nginx về server nội bộ. Tuy nhiên, hãy cẩn thận với ổ cứng. Một bản mirror đầy đủ của Ubuntu 22.04 có thể ngốn hơn 150GB – một con số không hề nhỏ.
# Ví dụ mirror kho Nginx cho Ubuntu Jammy
aptly mirror create nginx-mirror https://nginx.org/packages/ubuntu/ jammy main
aptly mirror update nginx-mirror
Bước 4: Snapshot và Publish – Bí kíp giữ hệ thống luôn ổn định
Aptly không cho phép bạn dùng trực tiếp dữ liệu thô trong repo. Bạn phải tạo Snapshot. Đây là cách mình kiểm soát phiên bản để đảm bảo server không tự động cập nhật lung tung.
# Chụp ảnh snapshot từ local repo
aptly snapshot create internal-v1.0 from repo internal-tools
# Public snapshot này để các máy khác có thể thấy
aptly publish snapshot internal-v1.0
Sau khi chạy lệnh này, các file đã sẵn sàng phục vụ sẽ nằm tại thư mục ~/.aptly/public.
Bước 5: Dùng Nginx để phân phối package qua HTTP
Để các server khác kéo được package, chúng ta cần một “người đưa thư”. Nginx là lựa chọn số 1 nhờ sự nhẹ nhàng và ổn định.
sudo apt install nginx -y
Cấu hình file Nginx tại /etc/nginx/sites-available/aptly:
server {
listen 80;
server_name apt.yourdomain.local;
location / {
root /home/ubuntu/.aptly/public;
autoindex on; # Bắt buộc phải bật để APT thấy danh sách file
}
}
Kích hoạt cấu hình và tải lại Nginx:
sudo ln -s /etc/nginx/sites-available/aptly /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Cấu hình phía Client: Hưởng thành quả
Trên máy client, bạn chỉ cần trỏ địa chỉ về server Aptly vừa dựng. Thêm dòng sau vào file /etc/apt/sources.list.d/internal.list:
deb http://apt.yourdomain.local/ jammy main
Bây giờ, thử sudo apt update xem. Tốc độ kéo package sẽ nhanh đến mức bạn phải ngạc nhiên đấy.
Kinh nghiệm thực chiến khi vận hành
Sau một thời gian chạy hệ thống này, mình rút ra hai điều sống còn bạn cần lưu ý:
- Dọn dẹp định kỳ: Thư mục
~/.aptlysẽ phình to cực nhanh nếu bạn tạo snapshot liên tục mà không xóa bản cũ. Hãy chạyaptly db cleanupthường xuyên để giải phóng dung lượng cho những file không còn dùng tới. - Kiểm tra Log Nginx: Nếu máy client báo lỗi 404, khả năng cao là bạn mới thêm package nhưng quên chưa chạy lệnh
aptly publish update. Kiểm tra/var/log/nginx/access.logsẽ giúp bạn bắt bệnh cực nhanh.
Thực tế, bí quyết để không bị rối là luôn đặt tên Snapshot kèm ngày tháng, ví dụ internal-20240426. Cách làm này giúp bạn theo dõi lộ trình thay đổi của hệ thống một cách trực quan nhất.
Làm chủ được Aptly không chỉ giúp bạn giải bài toán băng thông, mà còn là bước đệm quan trọng để xây dựng quy trình CI/CD chuyên nghiệp cho hạ tầng Ubuntu của mình.

