VPS cho người mới: dựng website đầu tiên trên Ubuntu 24.04

Vừa nhận được VPS, bạn có quyền root, một địa chỉ IP, và cảm giác hơi choáng? Yên tâm, ai lần đầu cũng vậy. Bài này đi từ SSH lần đầu, tạo user sudo, cài Nginx, PHP, trỏ domain, cho đến cấu hình SSL, đủ để bạn đưa trang web đầu tiên lên sống. Lệnh nào cũng chạy được trên Ubuntu 24.04, mỗi bước đều có cách kiểm tra.
Tóm tắt nhanh
- SSH vào VPS với user root, tạo user sudo mới và cấu hình SSH key để tăng bảo mật.
- Cập nhật hệ thống, cài Nginx và PHP 8.3 (hoặc Node.js 22 LTS nếu bạn chọn stack khác).
- Trỏ domain về IP của VPS qua A record, dùng Nginx server block để serve site.
- Cài Certbot để cấp SSL miễn phí từ Let's Encrypt.
Yêu cầu trước khi bắt đầu
- Một VPS chạy Ubuntu 24.04 LTS (có thể thuê VPS Linux với full root access, IPv4 riêng).
- Máy tính có SSH client: Linux/macOS dùng terminal, Windows dùng PowerShell hoặc PuTTY.
- Tên miền đã trỏ về IP VPS (nếu chưa có, tạm dùng IP để kiểm tra ở bước Nginx).
- Trình soạn thảo quen tay: nano, vim, hoặc VS Code Remote SSH.
Vì sao nên bắt đầu với VPS thay vì shared hosting?
Shared hosting tiện nhưng giới hạn: bạn không thể cài tuỳ ý phần mềm, không kiểm soát được tài nguyên, và thường bị chậm khi site đông người. VPS cho bạn full root, toàn quyền quản trị máy chủ. Bạn có thể cài bất kỳ stack nào (Nginx, Apache, Node.js, Docker), tự cấu hình firewall, và mở rộng khi cần. Với một VPS Linux dùng NVMe, tốc độ đọc ghi cao hơn hẳn ổ cứng shared hosting, giúp website load nhanh hơn.
Bước 1, SSH lần đầu và tạo user sudo
Khi nhận VPS, bạn có IP và mật khẩu root. Hãy SSH vào:
ssh root@<IP_VPS>
Nhập mật khẩu root khi được hỏi. Ngay sau khi vào, việc đầu tiên là tạo một user thường có quyền sudo, không nên làm việc hàng ngày dưới quyền root vì rủi ro bảo mật.
adduser tenuser
usermod -aG sudo tenuser
Thay tenuser bằng tên bạn muốn. Lệnh trên tạo user mới, đặt mật khẩu, và thêm user vào nhóm sudo. Đăng nhập lại bằng user này để kiểm tra:
ssh tenuser@<IP_VPS>
sudo whoami
Nếu output ra root là bạn đã có quyền sudo.
Cấu hình SSH key, bỏ mật khẩu
Dùng SSH key an toàn hơn mật khẩu rất nhiều. Trên máy tính của bạn, tạo key pair (nếu chưa có):
ssh-keygen -t ed25519 -C "ten@maytinh"
Sau đó copy public key lên VPS:
ssh-copy-id tenuser@<IP_VPS>
Giờ bạn có thể SSH mà không cần mật khẩu. Bước tiếp theo: khoá đăng nhập root và chỉ cho phép key. Sửa file /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
Tìm và đặt các dòng sau:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Reload SSH để áp dụng:
sudo systemctl reload sshd
Kiểm tra: mở một terminal khác thử SSH bằng root, nếu bị từ chối là đúng. Chỉ user có key mới vào được.
Bước 2, Cập nhật hệ thống và cài Nginx
Cập nhật danh sách gói và nâng cấp:
sudo apt update && sudo apt upgrade -y
Cài Nginx, web server nhanh, nhẹ, phổ biến nhất hiện nay:
sudo apt install nginx -y
Kiểm tra Nginx đã chạy chưa:
sudo systemctl status nginx
Bạn sẽ thấy active (running). Mở trình duyệt gõ http://<IP_VPS>, nếu thấy trang chào mừng Nginx là thành công.
Cấu hình firewall cơ bản
Nếu dùng UFW (mặc định trên Ubuntu), cho phép SSH, HTTP và HTTPS:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Kiểm tra: sudo ufw status verbose sẽ hiển thị rules đang active.
Bước 3, Cài PHP (hoặc Node.js) để chạy web động
Nếu site của bạn dùng WordPress, Laravel, hay bất kỳ CMS PHP nào, cần cài PHP-FPM. Ubuntu 24.04 có sẵn PHP 8.3:
sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip -y
Kiểm tra phiên bản:
php -v
Output sẽ hiển thị PHP 8.3.x. Nếu bạn dùng Node.js (cho React, Next.js, Express), cài Node.js bản LTS:
sudo apt install nodejs npm -y
Hoặc dùng nvm để quản lý phiên bản linh hoạt hơn. Trong bài này, chúng tôi lấy PHP làm ví dụ chính.
Bước 4, Tạo server block (virtual host) cho website
Thư mục mặc định của Nginx là /var/www/html, nhưng nên tạo riêng cho từng domain. Tạo thư mục cho site của bạn:
sudo mkdir -p /var/www/tenmien.com/public_html
sudo chown -R $USER:$USER /var/www/tenmien.com/public_html
Thay tenmien.com bằng domain thật của bạn. Tạo file cấu hình Nginx cho site:
sudo nano /etc/nginx/sites-available/tenmien.com
Nội dung file:
server {
listen 80;
server_name tenmien.com www.tenmien.com;
root /var/www/tenmien.com/public_html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}
}
Kích hoạt site bằng symlink:
sudo ln -s /etc/nginx/sites-available/tenmien.com /etc/nginx/sites-enabled/
sudo nginx -t
Nếu output test is successful, reload Nginx để áp dụng:
sudo systemctl reload nginx
Kiểm tra: tạo file index.php trong thư mục public_html với nội dung <?php phpinfo(); ?> rồi truy cập http://tenmien.com, bạn sẽ thấy trang thông tin PHP.
Bước 5, Trỏ domain và cấu hình SSL
Trước khi cài SSL, domain phải trỏ về IP VPS. Vào trang quản lý DNS của nhà đăng ký tên miền, tạo A record:
- Host:
@(hoặc để trống), giá trị: IP VPS của bạn - Host:
www, giá trị: IP VPS của bạn (hoặc CNAME tên miền chính)
DNS có thể mất vài phút đến vài giờ để lan. Kiểm tra bằng lệnh:
dig tenmien.com +short
Nếu ra IP VPS là ok. Giờ cài Certbot để cấp SSL tự động từ Let's Encrypt:
sudo apt install certbot python3-certbot-nginx -y
Chạy lệnh lấy chứng chỉ cho domain:
sudo certbot --nginx -d tenmien.com -d www.tenmien.com
Certbot sẽ tự động cấu hình HTTPS, chuyển hướng HTTP sang HTTPS. Kiểm tra gia hạn tự động:
sudo certbot renew --dry-run
Nếu không có lỗi, SSL sẽ tự động gia hạn mỗi 90 ngày. Giờ truy cập https://tenmien.com, bạn sẽ thấy ổ khoá xanh trên trình duyệt.
Xử lý lỗi thường gặp
1. "Permission denied" khi SSH bằng key
Kiểm tra quyền của thư mục .ssh và file authorized_keys trên VPS:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
2. Nginx không restart được, báo lỗi cú pháp
Chạy sudo nginx -t để biết chính xác lỗi ở dòng nào. Thường là thiếu dấu chấm phẩy ; hoặc đường dẫn sai.
3. Trang web báo 502 Bad Gateway (khi dùng PHP)
PHP-FPM chưa chạy hoặc socket sai. Kiểm tra:
sudo systemctl status php8.3-fpm
Nếu chưa chạy, bật lên: sudo systemctl start php8.3-fpm && sudo systemctl enable php8.3-fpm.
Câu hỏi thường gặp
VPS cho người mới có khó dùng không?
Không, nếu bạn làm theo hướng dẫn từng bước. Kiến thức cơ bản về Linux (biết gõ lệnh) là đủ. Ubuntu 24.04 có cộng đồng hỗ trợ lớn, mọi lỗi đều có hướng giải quyết.
Tôi có cần mua VPS dung lượng cao ngay không?
Không. Với website WordPress cơ bản, gói 1 vCPU, 2 GB RAM, 20 GB NVMe (như VNLite) là đủ dùng. Khi traffic tăng, bạn có thể nâng cấp gói dễ dàng.
Làm sao để biết VPS của tôi đang chạy ổn định?
Dùng lệnh htop xem CPU/RAM, df -h xem dung lượng ổ cứng. Nên cài fail2ban để chặn brute force SSH.
SSL miễn phí của Let's Encrypt có đảm bảo không?
Có, Let's Encrypt là CA uy tín, chứng chỉ được mọi trình duyệt tin tưởng. Hạn 90 ngày nhưng Certbot tự động gia hạn, bạn không cần can thiệp.
Nếu tôi muốn chạy Node.js thay vì PHP thì thay đổi gì?
Bỏ qua bước cài PHP, cài Node.js và dùng PM2 để chạy ứng dụng. Cấu hình Nginx làm reverse proxy trỏ về port Node app (thường là 3000).
VPS thuê theo tháng có bị mất dữ liệu khi không thanh toán đúng hạn không?
Tuỳ nhà cung cấp. Các nhà cung cấp uy tín thường giữ bản sao lưu (snapshot) trong vài ngày. Bạn nên tự backup dữ liệu quan trọng ra ngoài VPS.
Bài viết liên quan
- Hướng dẫn cấu hình UFW firewall cơ bản trên Ubuntu VPS
- Cấu hình Fail2Ban chống brute force SSH trên Ubuntu 24.04
- Tối ưu PHP-FPM cho WordPress trên VPS


