Cài Ubuntu Server tối giản trên VPS là bước nền cho web server, Docker host, VPN, homelab hoặc các dịch vụ tự quản trị. Một image sạch chưa phải production-ready: sau khi boot xong, bạn còn phải kiểm tra disk, hostname, timezone, cập nhật bảo mật, SSH, firewall, user quản trị và quy trình backup.
Bài viết này tập trung vào Ubuntu Server 24.04 LTS trên VPS amd64. Các lệnh vẫn có thể áp dụng cho bản LTS tương thích, nhưng hãy đọc release note và tài liệu của nhà cung cấp trước khi thao tác. Ubuntu mô tả Server là nền tảng tối giản; tutorial cài đặt chính thức nêu mức khuyến nghị tối thiểu 2 GB RAM và 5 GB disk cho kịch bản cơ bản [1].
Nguyên tắc quan trọng: hãy giữ một phiên console của nhà cung cấp hoặc một đường truy cập dự phòng trong lúc chỉnh SSH và firewall. Một lệnh hardening sai có thể tự khóa bạn khỏi VPS dù hệ thống vẫn đang chạy.
1. Chuẩn bị trước khi tạo hoặc cài lại VPS
Trước khi chọn image Ubuntu, hãy xác định VPS dùng cho mục đích gì, cần bao nhiêu disk, vùng dữ liệu nằm ở đâu và cổng nào sẽ mở ra Internet. Web server đơn giản thường cần SSH, HTTP và HTTPS; database, Redis hoặc dashboard quản trị nên giới hạn ở localhost/private network thay vì mở toàn bộ ra Internet.
| Hạng mục | Cần xác định | Vì sao quan trọng |
|---|---|---|
| Image | Ubuntu Server LTS, kiến trúc amd64/arm64 phù hợp | Tránh cài nhầm image hoặc release sắp hết hỗ trợ |
| Disk | Dung lượng root, volume dữ liệu, snapshot | Log, package cache và database có thể làm đầy disk |
| Mạng | IPv4/IPv6, DNS, gateway và reverse DNS | SSH và TLS cần đường truy cập ổn định |
| Truy cập | Console/VNC, SSH key, user quản trị | Có lối khôi phục khi firewall hoặc SSH sai |
| Backup | Snapshot trước cài lại và lịch backup sau đó | Cài mới hoặc partition có thể làm mất dữ liệu |
Nếu VPS đã có dữ liệu, không dùng tùy chọn cài toàn bộ disk một cách máy móc. Tài liệu Ubuntu cảnh báo thao tác phân vùng có thể mang tính phá hủy; hãy snapshot hoặc backup trước khi xác nhận. Với VPS mới hoàn toàn, image do nhà cung cấp quản lý thường an toàn hơn tự boot ISO, nhưng bạn vẫn cần kiểm tra filesystem và tài khoản sau lần đăng nhập đầu tiên.
2. Chọn image Ubuntu và cấu hình VPS tối giản
Hãy chọn một bản Ubuntu Server LTS còn được hỗ trợ, thay vì image có sẵn quá nhiều control panel hoặc daemon không cần thiết. Image tối giản giúp giảm attack surface, tiết kiệm RAM và làm cho việc debug rõ ràng hơn. Nếu nhà cung cấp có lựa chọn cloud-init, hãy dùng SSH public key và disable password login ngay sau khi xác minh key hoạt động.
# Xác minh kiến trúc và phiên bản sau khi SSH vào máy
uname -m
cat /etc/os-release
hostnamectl
# Kiểm tra kernel, disk và memory
uname -r
lsblk -f
df -hT
free -hKhông nên cài Nginx, MySQL, PHP, Docker và hàng chục tool ngay trong bước đầu chỉ vì “để đó dùng sau”. Hãy ghi lại package nào là baseline, package nào phục vụ ứng dụng. Một danh sách cài đặt tối giản giúp audit, snapshot và rollback dễ hơn. Khi cần triển khai web, bạn có thể tham khảo checklist bàn giao production trên TechNT để bổ sung các bước vận hành.
3. Cài Ubuntu Server bằng installer hoặc image VPS
Trong installer chính thức, quy trình cơ bản gồm chọn ngôn ngữ, keyboard, mạng, disk, username, hostname và SSH. Trên VPS, nhà cung cấp thường đã thực hiện phần boot image; phần tương đương của bạn là chọn Ubuntu image, nhập SSH key, đặt hostname và chờ hệ thống cấp IP. Nếu installer hỏi update, nên cập nhật installer khi đường truyền đáng tin cậy.
Ở màn hình disk, chỉ chọn dùng toàn bộ disk khi đây là VPS mới hoặc bạn đã xác minh snapshot. Ở màn hình user, tạo một user cá nhân có tên rõ ràng thay vì dùng root cho mọi thao tác. Ở màn hình SSH, cài OpenSSH server nếu cần quản trị từ xa và ưu tiên public key. Password của user nên là phương án dự phòng, không phải cơ chế đăng nhập duy nhất.
# Sau lần boot đầu tiên: xác minh user và quyền sudo
whoami
id
sudo -v
sudo -l
# Xác minh SSH server và socket đang lắng nghe
systemctl status ssh --no-pager
ss -tulpn | grep ':22' || true4. Checklist 15 phút đầu sau khi cài
Sau khi đăng nhập, đừng vội đưa domain hoặc database vào máy. Hãy kiểm tra đồng hồ, hostname, disk, DNS resolver, package manager và trạng thái service. Những kiểm tra này tạo baseline để biết lỗi xuất hiện do image hay do bước triển khai tiếp theo.
- Xác nhận đúng hostname, IP, kiến trúc và phiên bản Ubuntu.
- Kiểm tra `df -hT`, inode và mount point; bảo đảm root filesystem còn dư.
- Đồng bộ thời gian bằng systemd-timesyncd hoặc dịch vụ NTP được hệ thống hỗ trợ.
- Chạy cập nhật package và reboot nếu kernel hoặc thư viện nền yêu cầu.
- Tạo user quản trị riêng, kiểm tra sudo rồi mới hạn chế root/SSH password.
- Xác minh OpenSSH, SSH key, console dự phòng và log đăng nhập.
- Chỉ mở cổng cần thiết bằng UFW hoặc firewall của nhà cung cấp.
- Ghi lại cấu hình baseline, snapshot ID và cách rollback.
sudo apt update
sudo apt full-upgrade -y
sudo timedatectl set-timezone Asia/Ho_Chi_Minh
sudo timedatectl status
sudo rebootLệnh `full-upgrade` có thể thay đổi package phụ thuộc và yêu cầu reboot. Không chạy nó trong lúc đang có deploy quan trọng nếu chưa có console dự phòng. Sau reboot, hãy đăng nhập lại và kiểm tra `journalctl -p warning -b`, disk space cùng trạng thái SSH trước khi cài dịch vụ ứng dụng.
5. Tạo user quản trị và chuẩn bị SSH key
Ubuntu khuyến nghị dùng user thường kết hợp với `sudo`; user đầu tiên do installer tạo thường đã thuộc group `sudo`. Với VPS do team quản lý, tạo user riêng cho từng người giúp log audit có ý nghĩa hơn một tài khoản dùng chung. Không gửi private key hoặc password qua chat, ticket công khai hay repository.
# Tạo user mới trên VPS, thực hiện từ console hoặc tài khoản có sudo
sudo adduser deploy
sudo adduser deploy sudo
# Kiểm tra group và quyền
id deploy
sudo -l -U deployTừ máy quản trị, tạo Ed25519 key có passphrase rồi chép public key vào `authorized_keys`. Tài liệu OpenSSH của Ubuntu khuyến nghị Ed25519 vì khóa ngắn và chi phí tính toán thấp; RSA 4096 là phương án tương thích khi hệ thống cũ yêu cầu [2]. Sau khi đăng nhập thành công bằng key ở một terminal mới, mới cân nhắc tắt password authentication.
# Thực hiện trên máy quản trị, không phải paste private key lên VPS
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_technt
ssh-copy-id -i ~/.ssh/id_ed25519_technt.pub deploy@SERVER_IP
ssh -i ~/.ssh/id_ed25519_technt deploy@SERVER_IP6. Cập nhật package và tự động nhận bản vá bảo mật
Package cũ có thể chứa lỗi bảo mật hoặc bug đã được sửa. Trong baseline đầu tiên, cập nhật index rồi nâng cấp package. Với VPS production, chọn lịch cập nhật, theo dõi reboot cần thiết và kiểm tra dịch vụ sau reboot thay vì bật nâng cấp vô điều kiện trong giờ cao điểm.
sudo apt update
apt list --upgradable
sudo apt upgrade -y
# Kiểm tra package tự động cập nhật nếu đang dùng
systemctl status unattended-upgrades --no-pager || true
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgradesAutomatic security updates không thay thế backup, staging hoặc giám sát. Một bản vá kernel có thể cần reboot; một thư viện runtime có thể làm ứng dụng thay đổi hành vi. Hãy lưu changelog, kiểm tra process đang chạy và có cửa sổ bảo trì rõ ràng.
7. Cấu hình timezone, hostname, DNS và firewall
Timezone nên thống nhất với log, cron và lịch deploy. TechNT sử dụng GMT+7; trên server có thể dùng `Asia/Ho_Chi_Minh`, nhưng ứng dụng vẫn nên lưu timestamp theo UTC khi thiết kế database. Hostname nên phản ánh vai trò như `web-01` hoặc `queue-01`, tránh tên mặc định khó truy vết.
sudo hostnamectl set-hostname web-01
sudo timedatectl set-timezone Asia/Ho_Chi_Minh
resolvectl status
# Firewall cơ bản, chỉ thực hiện sau khi chắc chắn SSH đang hoạt động
sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verboseKhông mở database, Redis hoặc panel quản trị cho toàn bộ Internet nếu không có lý do và lớp bảo vệ bổ sung. Trước `ufw enable`, hãy bảo đảm rule SSH đã tồn tại và console của nhà cung cấp vẫn dùng được. Firewall của VPS và firewall trong hệ điều hành có thể cùng tồn tại; hãy ghi rõ nơi nào đang chặn cổng để tránh debug nhầm.
8. Kiểm tra log và tài nguyên sau khi cài
Một server sạch vẫn có thể có lỗi boot, filesystem hoặc service. Hãy kiểm tra warning của boot hiện tại, failed units, disk, inode và memory. Đừng chỉ nhìn CPU; disk đầy, inode cạn hoặc OOM killer mới thường làm web service “tự nhiên” ngừng hoạt động.
systemctl --failed
journalctl -p warning -b --no-pager
free -h
df -hT
df -ih
sudo dmesg -T | tail -80
ss -lntup
| Tín hiệu | Lệnh gợi ý | Hành động |
|---|---|---|
| Disk gần đầy | df -hT; du -xhd1 /var | Xoay log, dọn cache có kiểm soát, mở rộng volume |
| OOM hoặc swap thấp | free -h; journalctl -k | Giảm worker, thêm swap phù hợp, tìm process ngốn RAM |
| Service failed | systemctl --failed | Đọc journal từng service, không restart mù |
| Cổng lạ đang mở | ss -lntup | Xác định process và đóng service không cần |
| SSH login bất thường | journalctl -u ssh --since today | Kiểm tra key, user, firewall và rate limiting |
9. Snapshot, backup và runbook rollback
Snapshot của nhà cung cấp giúp quay lại trạng thái nhanh nhưng không phải backup duy nhất. Snapshot có thể phụ thuộc cùng storage hoặc region; nó cũng không thay thế bản sao database nhất quán và bản sao off-site. Hãy thử restore định kỳ trên một VPS khác và ghi thời gian phục hồi thực tế.
- Lưu thông tin VPS, IP, image, disk layout và SSH recovery trong kho bí mật.
- Backup database theo lịch, kiểm tra checksum và thử restore.
- Lưu cấu hình `/etc`, systemd unit, firewall rule và danh sách package cần thiết.
- Tách dữ liệu người dùng khỏi release code nếu có thể.
- Ghi rõ ai được phép reboot, restore snapshot hoặc thay đổi firewall.
- Chạy một bài kiểm tra restore trước khi nhận server production.
10. Cài gì tiếp theo sau baseline?
Sau khi baseline sạch và có đường rollback, mới cài reverse proxy, runtime, database, Docker hoặc monitoring theo nhu cầu. Mỗi lớp nên có một thay đổi nhỏ, một lệnh xác minh và một ghi chú rollback. Cách làm này chậm hơn vài phút ở đầu dự án nhưng giảm đáng kể thời gian tìm nguyên nhân khi deployment lỗi.
Nếu mục tiêu là website PHP/Laravel, có thể chia thành các bước riêng: Nginx, PHP-FPM, database, queue worker, TLS và backup. Không gom tất cả vào một script không có dry-run nếu bạn chưa có snapshot và console recovery.
11. Kết luận
Cài Ubuntu Server tối giản trên VPS không kết thúc ở lần boot đầu tiên. Một baseline tốt cần image LTS, disk được xác minh, user quản trị riêng, SSH key, update bảo mật, timezone, firewall, log, tài nguyên và backup có thể restore. Làm đủ checklist trước khi cài ứng dụng sẽ giúp server dễ audit, dễ bàn giao và ít bất ngờ hơn trong production.
Nguồn tham khảo
[1] Ubuntu Server Documentation — Basic installation; [2] Ubuntu Server Documentation — OpenSSH server.