DeployEasy
Menu
VPSCơ bản

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.

· 7 phút đọc · 1.432 từ
Mục lục bài viết

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