Mới mua VPS Ubuntu cần làm gì? Checklist cấu hình production
Checklist cấu hình VPS Ubuntu mới gồm update, user sudo, SSH key, UFW, timezone, swap, log, backup và kiểm tra bảo mật.
Mục lục bài viết
VPS & Hosting cho dự án của bạn
Khám phá các gói máy chủ và lưu trữ phù hợp từ website cá nhân đến ứng dụng production.
Một VPS mới không thể xem là sẵn sàng cho production chỉ vì bạn đã SSH vào được. Trước khi deploy, cần kiểm tra hệ điều hành, tài khoản, firewall, update, thời gian, dung lượng, log và backup.
Mục tiêu sau khi hoàn thành
User quản trị không phải root
SSH key hoạt động
Firewall chỉ mở port cần thiết
Package được cập nhật
Timezone rõ ràng
Swap được đánh giá
Log và tài nguyên được kiểm tra
Có kế hoạch backup ban đầu
Bước 1: Xác minh server
Kết nối:
ssh root@203.0.113.10
Kiểm tra:
hostnamectl
uname -a
cat /etc/os-release
Xác nhận:
- Đúng IP.
- Đúng hệ điều hành.
- Đúng hostname.
- Đúng kiến trúc CPU.
- Đúng phiên bản Ubuntu.
Không chạy script cài đặt ngẫu nhiên trước khi xác minh máy.
Bước 2: Kiểm tra tài nguyên
lscpu
free -h
df -h
df -i
lsblk
uptime
Kiểm tra port:
sudo ss -tulpn
Các câu hỏi:
- Có đúng số vCPU và RAM đã mua không?
- Ổ đĩa root còn bao nhiêu?
- Có swap chưa?
- Có process hoặc port lạ không?
- Inode có đủ không?
Bước 3: Đặt hostname
sudo hostnamectl set-hostname deployeasy-prod
Kiểm tra:
hostnamectl
Có thể thêm vào /etc/hosts:
127.0.1.1 deployeasy-prod
Không đặt hostname chứa secret hoặc thông tin khách hàng nhạy cảm.
Bước 4: Cập nhật package
sudo apt update
sudo apt upgrade -y
Kiểm tra có cần reboot:
test -f /var/run/reboot-required && cat /var/run/reboot-required
Khởi động lại khi phù hợp:
sudo reboot
Sau reboot, SSH lại và kiểm tra service.
Không nâng cấp major version Ubuntu trên production nếu chưa có snapshot, backup và rollback.
Bước 5: Tạo user quản trị
adduser thien
usermod -aG sudo thien
Kiểm tra:
id thien
Chuyển user:
su - thien
sudo whoami
Kết quả:
root
Dùng user thường cho công việc hàng ngày, chỉ dùng sudo khi cần.
Bước 6: Cấu hình SSH key
Trên máy cá nhân:
ssh-keygen -t ed25519 -C "deployeasy-admin"
Copy public key:
ssh-copy-id thien@203.0.113.10
Permission trên server:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Mở terminal thứ hai:
ssh thien@203.0.113.10
Không đóng phiên root cũ cho đến khi user mới đăng nhập và sudo thành công.
Bước 7: Tăng an toàn SSH
Tạo file:
sudo nano /etc/ssh/sshd_config.d/99-deployeasy.conf
Ví dụ:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no
Chỉ áp dụng sau khi key đã được test.
Kiểm tra:
sudo sshd -t
Reload:
sudo systemctl reload ssh
Giữ phiên hiện tại và thử kết nối mới.
Bước 8: Cấu hình UFW
Ubuntu dùng UFW làm công cụ firewall thân thiện. UFW thường mặc định chưa bật.
Mở SSH trước:
sudo ufw allow OpenSSH
Nếu dùng port riêng:
sudo ufw allow 2222/tcp
Mở web:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Đặt policy:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Bật:
sudo ufw enable
sudo ufw status verbose
Không public database nếu không cần:
5432 PostgreSQL
3306 MySQL
6379 Redis
Bước 9: Cấu hình timezone
timedatectl
Đặt giờ Việt Nam:
sudo timedatectl set-timezone Asia/Ho_Chi_Minh
Kiểm tra:
date
timedatectl
Thời gian đúng quan trọng với log, cron, JWT, chứng chỉ và database.
Một số đội giữ server ở UTC. Quan trọng là quy ước thống nhất.
Bước 10: Đánh giá swap
Kiểm tra:
swapon --show
free -h
Tạo swap file 2 GB nếu cần:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Thêm /etc/fstab:
/swapfile none swap sw 0 0
Kiểm tra:
sudo swapon --show
free -h
Swap hỗ trợ khi thiếu RAM tạm thời, nhưng chậm hơn RAM và không sửa được VPS thiếu tài nguyên kéo dài.
Bước 11: Cài công cụ cơ bản
sudo apt install -y \
curl \
wget \
git \
unzip \
ca-certificates \
gnupg \
htop \
tree \
jq
Chỉ cài package thực sự cần dùng.
Bước 12: Tự động cập nhật bảo mật
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
Kiểm tra:
systemctl status unattended-upgrades
Tự động update không thay thế monitoring. Một số update vẫn cần reboot hoặc test.
Bước 13: Kiểm tra AppArmor
sudo aa-status
Ubuntu thường bật AppArmor mặc định. Không tắt chỉ để sửa nhanh một lỗi permission; hãy kiểm tra log và profile.
Bước 14: Tạo thư mục deploy
sudo mkdir -p /var/www/deployeasy
sudo chown -R thien:thien /var/www/deployeasy
Cấu trúc gợi ý:
/var/www/deployeasy/
├── app/
├── releases/
├── shared/
└── backups/
Không dùng chmod -R 777.
Bước 15: Chọn cách chạy app
Truyền thống
Nginx
PM2 hoặc systemd
Node.js
Source/build trên host
Docker
Nginx
Docker Engine
Docker Compose
Image, container, volume
Không cần vừa PM2 vừa Docker cho cùng app nếu không có lý do.
Bước 16: Kiểm tra log
Systemd:
journalctl --disk-usage
sudo journalctl -p warning --since today
Nginx:
/var/log/nginx/access.log
/var/log/nginx/error.log
Theo dõi:
sudo tail -f /var/log/nginx/error.log
Kiểm tra logrotate:
ls /etc/logrotate.d/
Bước 17: Chuẩn bị backup
Trả lời:
Backup dữ liệu nào?
Chạy bao lâu một lần?
Lưu ở đâu?
Giữ bao nhiêu bản?
Restore bằng cách nào?
Ai nhận cảnh báo?
Cần quan tâm:
- Database.
- File upload.
- Config.
- Compose file.
- Nginx config.
- Thông tin phục hồi.
Không chỉ lưu backup trên cùng VPS.
Bước 18: Monitoring cơ bản
free -h
df -h
df -i
uptime
htop
sudo ss -tulpn
Docker:
docker stats
docker system df
Theo dõi:
- CPU.
- RAM.
- Swap.
- Disk.
- Inode.
- Service down.
- HTTPS.
- Backup.
- Chứng chỉ.
Bước 19: Snapshot trước thay đổi lớn
Tạo snapshot trước khi:
- Upgrade OS.
- Thay firewall.
- Migration database lớn.
- Thay Docker storage.
- Chuyển kiến trúc.
- Sửa filesystem.
Snapshot không thay thế backup nhưng giúp rollback hạ tầng nhanh.
Bước 20: Ghi tài liệu server
Hostname:
IP:
Provider:
OS:
User quản trị:
SSH port:
Domain:
Service:
Port nội bộ:
Backup:
Ngày gia hạn:
Người phụ trách:
Không ghi password hoặc private key trong tài liệu không được bảo vệ.
Những việc không nên làm
Chạy app bằng root
Nếu app bị khai thác, kẻ tấn công có thể có quyền rất cao.
Mở toàn bộ port
Chỉ mở port thật sự cần.
Dùng chmod 777
Hãy sửa owner và group đúng thay vì cho mọi user toàn quyền.
Chạy curl URL | sudo bash thiếu kiểm tra
Bạn đang cấp quyền root cho nội dung tải từ mạng. Dùng nguồn chính thức và đọc kỹ hướng dẫn.
Commit secret
Không commit:
.env
private key
database password
access token
Checklist production
[ ] Package đã cập nhật
[ ] User sudo hoạt động
[ ] SSH key hoạt động
[ ] Root login được hạn chế
[ ] UFW bật
[ ] Chỉ mở port cần thiết
[ ] Timezone/NTP đúng
[ ] Swap được đánh giá
[ ] Disk và inode đủ
[ ] Backup ngoài VPS
[ ] Log có rotation
[ ] Monitoring cơ bản
[ ] Snapshot trước thay đổi lớn
[ ] Có tài liệu phục hồi
Câu hỏi thường gặp
Có nên tắt root login?
Nên cân nhắc sau khi user sudo và SSH key đã được test, đồng thời có console khôi phục.
Swap bao nhiêu là đủ?
Không có con số đúng cho mọi hệ thống. Nó phụ thuộc RAM, workload và storage.
Có cần cài Docker ngay?
Chỉ cài nếu dự án dùng Docker. Server đơn giản sẽ dễ quản lý hơn.
Kết luận
Cấu hình VPS production là quá trình giảm rủi ro. Ưu tiên quyền truy cập, firewall, update, backup và khả năng phục hồi trước khi tối ưu hiệu năng.
Nguồn tham khảo
Đọc tiếp
Bài viết liên quan
VPS là gì? Cách hoạt động, ưu nhược điểm và cách chọn VPS
Tìm hiểu VPS là gì, cách máy chủ ảo hoạt động, VPS khác hosting và server riêng thế nào, cùng checklist chọn cấu hình phù hợp.
Đọc bài →Hướng dẫn deploy REMAP lên VPS Ubuntu
Triển khai monorepo REMAP gồm NestJS, Next.js, React và PostgreSQL lên VPS Ubuntu bằng PM2, Nginx, domain và chứng chỉ SSL.
Đọc bài →SSH Key là gì? Đăng nhập VPS an toàn không cần mật khẩu
Hướng dẫn tạo SSH key, thêm public key vào VPS, cấu hình SSH alias, sửa permission và xử lý lỗi publickey trên Windows, Linux.
Đọc bài →