Cách cài đặt và cấu hình VPS từ A-Z cho người mới

VPS cho phép bạn chủ động hơn nhiều so với hosting thông thường, nhưng đổi lại bạn phải tự xử lý phần lớn công việc liên quan đến hệ điều hành, tài khoản, mạng, bảo mật và phần mềm máy chủ. Với người mới, khó khăn không nằm ở việc gõ vài câu lệnh mà nằm ở việc biết phải cấu hình theo thứ tự nào, thiết lập nào thực sự cần thiết và thiết lập nào có thể bỏ qua.

Một VPS mới tạo thường chỉ là một máy chủ ảo với hệ điều hành cơ bản. Để biến nó thành một môi trường có thể chạy website ổn định, bạn cần thực hiện nhiều bước: kết nối máy chủ, cập nhật hệ thống, tạo tài khoản quản trị phù hợp, bảo vệ SSH, thiết lập tường lửa, cấu hình hostname, DNS, swap và sau đó mới cài đặt web server, PHP, database hoặc những phần mềm mà website cần.

Bài viết này hướng dẫn theo một quy trình có thứ tự từ lúc nhận VPS trắng cho đến khi máy chủ sẵn sàng phục vụ website. Nội dung được trình bày theo hướng thực hành để người mới có thể hiểu vì sao cần làm từng bước, thay vì chỉ sao chép một danh sách lệnh.

Cách cài đặt và cấu hình VPS từ A-Z cho người mới
Cách cài đặt và cấu hình VPS từ A-Z cho người mới

VPS mới tạo thực chất đang có gì?

Trước khi bắt đầu cấu hình, cần hiểu trạng thái ban đầu của một VPS. Sau khi nhà cung cấp hoàn tất quá trình khởi tạo, bạn thường nhận được một máy chủ ảo đã cài sẵn một hệ điều hành như Ubuntu, Debian, AlmaLinux hoặc một lựa chọn tương tự.

Ở thời điểm này, VPS có thể chưa có môi trường chạy website. Thông thường bạn sẽ có một số thông tin cơ bản:

  • Địa chỉ IP của VPS.
  • Tài khoản quản trị ban đầu.
  • Mật khẩu hoặc thông tin xác thực SSH.
  • Hệ điều hành đã được cài đặt.
  • Cấu hình CPU, RAM và dung lượng lưu trữ.

Các thông tin trên đủ để đăng nhập vào máy chủ, nhưng không có nghĩa VPS đã sẵn sàng để đưa website vào vận hành. Một máy chủ vừa được cấp phát vẫn cần được cập nhật và bảo vệ trước khi cài các dịch vụ khác.

Đây cũng là điểm mà người mới thường mắc lỗi. Họ đăng nhập VPS rồi cài ngay Nginx, Apache, PHP, MySQL hoặc một control panel mà bỏ qua việc kiểm tra và bảo mật hệ thống. Cách làm này có thể khiến quá trình xử lý sự cố về sau phức tạp hơn rất nhiều.

Chuẩn bị những gì trước khi bắt đầu?

Không cần quá nhiều công cụ để cấu hình VPS. Quan trọng nhất là bạn phải có đầy đủ thông tin truy cập và xác định rõ VPS sẽ được dùng vào mục đích gì.

Xác định hệ điều hành sẽ sử dụng

Hệ điều hành ảnh hưởng trực tiếp đến câu lệnh, vị trí cấu hình, cách cài đặt phần mềm và cách xử lý lỗi. Vì vậy, không nên lấy hướng dẫn dành cho Ubuntu rồi áp dụng nguyên xi cho một hệ điều hành khác.

Nếu mới làm quen với VPS, Ubuntu LTS thường là lựa chọn dễ tiếp cận vì có hệ sinh thái tài liệu và phần mềm phong phú. Debian cũng là một lựa chọn tốt nếu bạn muốn một hệ thống gọn và ổn định.

Trong bài hướng dẫn này, các ví dụ lệnh sẽ ưu tiên môi trường Linux phổ biến, đặc biệt phù hợp với Ubuntu Server. Nếu VPS của bạn đang chạy hệ điều hành khác, cần kiểm tra lại câu lệnh trước khi thực hiện.

Kiểm tra cấu hình VPS

Không phải website nào cũng cần VPS có cấu hình lớn. Trước khi cài đặt, hãy xác định máy chủ có bao nhiêu CPU, RAM và dung lượng lưu trữ.

Tài nguyên Vai trò chính Cần quan tâm khi
CPU Xử lý tác vụ và yêu cầu của ứng dụng Website có nhiều request, xử lý PHP nặng hoặc chạy tác vụ nền
RAM Lưu trữ dữ liệu và tiến trình đang hoạt động Chạy database, PHP, cache hoặc nhiều dịch vụ cùng lúc
SSD NVMe Lưu hệ điều hành, website và dữ liệu Cần tốc độ đọc ghi cao hoặc website sử dụng database thường xuyên
Băng thông Đáp ứng lưu lượng dữ liệu ra vào Website có lượng truy cập lớn hoặc phục vụ nhiều file
IP Địa chỉ để truy cập máy chủ và liên kết domain Thiết lập DNS, SSL, email hoặc các dịch vụ mạng

Đối với website nhỏ hoặc website mới, không nhất thiết phải bắt đầu bằng một VPS quá mạnh. Quan trọng hơn là cấu hình có đủ tài nguyên cho hệ điều hành, web server, PHP, database và phần mềm đang chạy đồng thời.

Chuẩn bị máy tính để kết nối

VPS Linux thường được quản trị thông qua SSH. Trên Linux và macOS, công cụ SSH thường đã có sẵn. Trên Windows, bạn có thể sử dụng PowerShell hoặc Windows Terminal với SSH tích hợp.

Ngoài SSH, một số người dùng thích sử dụng ứng dụng quản lý kết nối riêng. Tuy nhiên, với người mới, hiểu cách kết nối bằng SSH trực tiếp sẽ giúp bạn dễ xử lý VPS hơn về sau.

Đăng nhập VPS lần đầu qua SSH

SSH là phương thức phổ biến để điều khiển VPS Linux từ xa. Khi kết nối thành công, bạn sẽ có một cửa sổ dòng lệnh và có thể thực hiện các thao tác quản trị máy chủ.

Thông tin kết nối thường có dạng:

  • Username: tài khoản đăng nhập.
  • IP address: địa chỉ IP của VPS.
  • Port: cổng SSH, thường là 22 nếu nhà cung cấp không thay đổi.
  • Password hoặc SSH key: phương thức xác thực.

Ví dụ, nếu VPS sử dụng tài khoản root và địa chỉ IP là 203.0.113.10, câu lệnh kết nối có thể có dạng:

ssh root@203.0.113.10

Nếu SSH sử dụng một cổng khác, bạn cần chỉ định cổng trong lệnh:

ssh -p 2222 root@203.0.113.10

Địa chỉ IP trong ví dụ chỉ mang tính minh họa. Bạn phải thay bằng IP thực tế của VPS.

Thông báo xác nhận fingerprint khi đăng nhập

Ở lần đầu kết nối đến một máy chủ, SSH có thể yêu cầu xác nhận fingerprint của máy chủ. Đây là cơ chế giúp máy khách nhận diện máy chủ mà bạn đang kết nối.

Nếu bạn đã kiểm tra fingerprint do nhà cung cấp VPS cung cấp và xác nhận đó là máy chủ của mình, có thể tiếp tục xác nhận kết nối.

Không nên có thói quen chấp nhận mọi fingerprint một cách máy móc, đặc biệt khi bạn đang quản trị máy chủ chứa dữ liệu quan trọng.

Kiểm tra mình đang đăng nhập bằng tài khoản nào

Sau khi kết nối thành công, hãy kiểm tra tài khoản hiện tại thay vì lập tức thực hiện các thao tác cấu hình.

whoami

Nếu kết quả trả về là root, bạn đang sử dụng tài khoản có quyền quản trị cao nhất trên hệ thống. Điều này thuận tiện khi cài đặt nhưng cũng làm tăng mức độ nguy hiểm nếu bạn thực hiện nhầm một câu lệnh.

Tiếp theo, có thể kiểm tra tên máy chủ:

hostname

Và kiểm tra thông tin hệ điều hành:

cat /etc/os-release

Ba kiểm tra đơn giản này giúp xác định bạn đang làm việc với tài khoản nào, máy chủ nào và hệ điều hành nào trước khi bắt đầu thay đổi hệ thống.

Kiểm tra tài nguyên trước khi cài đặt

Không nên cấu hình VPS theo kiểu cài tất cả những gì bạn thấy trong một hướng dẫn. Trước tiên hãy kiểm tra tài nguyên thực tế để biết máy chủ đang có bao nhiêu CPU, RAM và dung lượng lưu trữ.

Xem dung lượng ổ đĩa

df -h

Lệnh này giúp bạn xem dung lượng của các phân vùng theo đơn vị dễ đọc. Đây là thông tin quan trọng vì website, database, log và các file tạm đều sử dụng dung lượng ổ đĩa.

Ổ đĩa gần đầy có thể gây ra nhiều vấn đề tưởng như không liên quan, chẳng hạn database không ghi được dữ liệu, log không thể tạo thêm hoặc dịch vụ hoạt động bất thường.

Kiểm tra RAM

free -h

Thông tin RAM đặc biệt quan trọng đối với VPS có cấu hình nhỏ. Web server, PHP, database và các dịch vụ nền đều có thể tiêu thụ bộ nhớ cùng lúc.

Không nên chỉ nhìn vào con số RAM tổng. Cần quan tâm cả lượng RAM đang sử dụng, còn trống và bộ nhớ cache để đánh giá tình trạng thực tế của hệ thống.

Kiểm tra CPU

nproc

Lệnh này cho biết số CPU logic mà hệ thống nhận diện. Đây là thông tin cơ bản để bạn đánh giá khả năng xử lý của VPS trước khi lựa chọn cấu hình dịch vụ.

Cập nhật hệ thống trước khi cấu hình dịch vụ

Sau khi đăng nhập thành công, một trong những việc đầu tiên nên làm là cập nhật danh sách package và các gói phần mềm hiện có. VPS mới tạo không phải lúc nào cũng sử dụng phiên bản package mới nhất tại thời điểm bạn bắt đầu cấu hình.

Với Ubuntu hoặc Debian, có thể sử dụng:

apt update
apt upgrade -y

Lệnh đầu tiên cập nhật thông tin về các package có sẵn. Lệnh thứ hai tiến hành nâng cấp những package đã được cài trên hệ thống.

Việc cập nhật ngay từ đầu giúp giảm nguy cơ sử dụng các phiên bản phần mềm đã quá cũ và tạo nền tảng nhất quán hơn cho những bước cài đặt tiếp theo.

Không nên chạy mọi lệnh cập nhật một cách mù quáng

Trong môi trường máy chủ đang vận hành, việc nâng cấp package cần được cân nhắc kỹ hơn vì một số thay đổi có thể ảnh hưởng đến dịch vụ. Nhưng với VPS mới tạo, chưa đưa website vào hoạt động, đây thường là thời điểm thuận lợi để cập nhật hệ thống.

Nếu quá trình nâng cấp yêu cầu khởi động lại hoặc có thông báo đặc biệt, hãy đọc kỹ nội dung trước khi tiếp tục thay vì đóng cửa sổ terminal ngay lập tức.

Có nên dùng tài khoản root để chạy website?

Không nên. Root là tài khoản có quyền rất cao trên Linux. Nếu một ứng dụng hoặc thao tác quản trị xảy ra lỗi khi chạy với quyền root, phạm vi ảnh hưởng có thể lớn hơn nhiều so với tài khoản thông thường.

Quy trình hợp lý hơn là sử dụng root cho những công việc quản trị ban đầu, sau đó tạo một tài khoản riêng có quyền sudo để thực hiện công việc hằng ngày.

Ví dụ tạo tài khoản có tên webadmin:

adduser webadmin

Sau đó thêm tài khoản vào nhóm có quyền sudo:

usermod -aG sudo webadmin

Ở bước này, hệ thống có thể yêu cầu bạn đặt mật khẩu và nhập một số thông tin bổ sung. Những trường thông tin không cần thiết có thể để trống nếu hệ thống cho phép.

Kiểm tra quyền sudo của tài khoản mới

Đăng nhập bằng tài khoản mới hoặc chuyển sang tài khoản đó rồi kiểm tra quyền:

su - webadmin

Sau đó thử:

sudo whoami

Nếu cấu hình đúng, kết quả sẽ cho thấy lệnh được thực thi với quyền quản trị.

Điểm quan trọng ở đây là không loại bỏ root chỉ vì nghĩ rằng root nguy hiểm. Root vẫn cần thiết cho một số tác vụ quản trị. Mục tiêu là hạn chế việc sử dụng root trực tiếp cho các hoạt động thường ngày, chứ không phải làm cho tài khoản root biến mất.

SSH key hay mật khẩu: nên dùng cách nào?

SSH hỗ trợ nhiều phương thức xác thực. Hai cách phổ biến nhất là mật khẩu và SSH key.

Với người mới, mật khẩu dễ hiểu và dễ bắt đầu. Tuy nhiên, khi VPS được sử dụng lâu dài, SSH key thường là lựa chọn phù hợp hơn vì không cần truyền mật khẩu tài khoản qua quá trình đăng nhập và có thể kiểm soát khóa truy cập riêng biệt.

Một SSH key thường gồm hai phần:

  • Private key: phải được giữ bí mật trên thiết bị của bạn.
  • Public key: được đặt trên VPS để máy chủ có thể xác thực bạn.

Điều quan trọng nhất là không gửi private key cho người khác và không đưa private key lên website, Git repository công khai hoặc hệ thống chia sẻ không an toàn.

Tạo SSH key trên máy tính

Trên các hệ điều hành hiện đại, bạn có thể tạo SSH key bằng công cụ ssh-keygen. Ví dụ:

ssh-keygen -t ed25519

Sau khi chạy lệnh, hệ thống sẽ hỏi vị trí lưu key và passphrase. Nếu bạn đặt passphrase, private key sẽ có thêm một lớp bảo vệ trong trường hợp file key bị sao chép.

Sau khi tạo key, bạn cần đưa public key lên VPS. Cách thực hiện phụ thuộc vào hệ điều hành máy tính và phương thức truy cập mà nhà cung cấp VPS hỗ trợ.

Những việc chưa nên làm ngay sau khi đăng nhập

Người mới thường có xu hướng cài càng nhiều phần mềm càng tốt vì nghĩ rằng VPS phải có đầy đủ công cụ mới chạy được website. Thực tế hoàn toàn ngược lại.

Một VPS tốt nên bắt đầu từ một hệ thống gọn, rõ ràng và dễ kiểm soát. Chỉ cài những thành phần thực sự cần thiết cho mục đích sử dụng.

Chẳng hạn, nếu mục tiêu là chạy một website PHP, chưa cần cài Docker, Node.js, Python, Redis, Elasticsearch, nhiều web server hoặc hàng loạt công cụ quản trị nếu website không sử dụng chúng.

Mỗi dịch vụ bổ sung đều có thể tiêu tốn tài nguyên, tạo thêm log, mở thêm cổng mạng và tăng số lượng thành phần cần cập nhật. Với VPS nhỏ, điều này càng đáng lưu ý.

Ở giai đoạn này, mục tiêu chỉ là tạo một nền tảng máy chủ sạch và an toàn. Sau khi hoàn thành phần bảo mật và mạng, chúng ta mới cài đúng stack mà website thực sự cần.

Checklist sau khi hoàn thành bước chuẩn bị

Trước khi chuyển sang phần bảo mật sâu hơn, hãy kiểm tra lại các điểm sau:

  • Đã xác định chính xác hệ điều hành đang chạy.
  • Đã biết IP và thông tin truy cập VPS.
  • Đã đăng nhập SSH thành công.
  • Đã kiểm tra tài khoản đang sử dụng.
  • Đã kiểm tra CPU, RAM và dung lượng ổ đĩa.
  • Đã cập nhật package của hệ thống.
  • Đã tạo tài khoản quản trị riêng ngoài root.
  • Đã hiểu sự khác nhau giữa SSH key và mật khẩu.
  • Chưa cài những dịch vụ không thực sự cần thiết.

Đây là nền tảng trước khi bước sang phần quan trọng hơn: khóa các điểm truy cập không cần thiết, bảo vệ SSH, thiết lập firewall và giảm rủi ro khi VPS bắt đầu hoạt động trên Internet.

Thiết lập tài khoản quản trị an toàn hơn

Sau khi đã tạo tài khoản quản trị riêng, bước tiếp theo là chuyển thói quen quản trị VPS từ việc đăng nhập trực tiếp bằng root sang sử dụng tài khoản có quyền sudo. Đây là thay đổi quan trọng vì nó tạo ra một lớp phân tách giữa tài khoản sử dụng hằng ngày và tài khoản có toàn quyền trên hệ thống.

Trước khi vô hiệu hóa đăng nhập root qua SSH, cần chắc chắn rằng tài khoản mới có thể đăng nhập và thực thi lệnh với sudo. Không nên tắt quyền truy cập root trước khi kiểm tra bước này, bởi nếu tài khoản thay thế chưa hoạt động đúng, bạn có thể tự khóa quyền quản trị VPS.

Kiểm tra tài khoản quản trị

Đăng nhập bằng tài khoản đã tạo ở bước trước:

ssh webadmin@203.0.113.10

Sau đó kiểm tra quyền sudo:

sudo whoami

Nếu kết quả là root, tài khoản đã có khả năng thực hiện các tác vụ cần quyền quản trị. Từ thời điểm này, những câu lệnh yêu cầu quyền cao có thể được chạy thông qua sudo thay vì đăng nhập trực tiếp bằng root.

Ví dụ:

sudo apt update

Cách làm này cũng giúp bạn nhận biết rõ lệnh nào đang yêu cầu quyền quản trị, thay vì mọi câu lệnh đều mặc nhiên chạy với quyền cao nhất.

Bảo vệ phương thức đăng nhập SSH

SSH là cánh cửa quản trị quan trọng nhất của VPS Linux. Nếu SSH bị cấu hình yếu, một máy chủ dù có firewall hay phần mềm mới nhất vẫn có thể trở thành mục tiêu của các cuộc dò quét và thử mật khẩu tự động.

Bảo vệ SSH không có nghĩa chỉ đơn giản là đổi cổng từ 22 sang một cổng khác. Việc đổi cổng có thể làm giảm lượng truy cập tự động không cần thiết, nhưng không phải biện pháp bảo mật cốt lõi. Những thiết lập quan trọng hơn là sử dụng xác thực mạnh, hạn chế tài khoản được phép đăng nhập và tắt những phương thức không cần thiết.

Kiểm tra cấu hình SSH hiện tại

Tệp cấu hình SSH phổ biến nằm tại:

/etc/ssh/sshd_config

Trước khi chỉnh sửa, nên tạo một bản sao dự phòng:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Bản sao này giúp bạn có điểm tham chiếu nếu cấu hình mới gây ra vấn đề.

Không vô hiệu hóa root trước khi kiểm tra tài khoản thay thế

Một lỗi rất nguy hiểm đối với người mới là chỉnh sửa SSH để cấm root ngay lập tức rồi đóng phiên SSH hiện tại. Nếu tài khoản mới chưa có sudo, SSH key chưa hoạt động hoặc cấu hình chứa lỗi cú pháp, bạn có thể mất đường quản trị.

Quy trình an toàn hơn là:

  1. Tạo tài khoản quản trị mới.
  2. Cấp quyền sudo.
  3. Đăng nhập bằng tài khoản mới trong một phiên SSH khác.
  4. Kiểm tra sudo.
  5. Thiết lập SSH key nếu sử dụng.
  6. Kiểm tra lại cấu hình SSH.
  7. Chỉ sau đó mới hạn chế root hoặc mật khẩu.

Đây là nguyên tắc quan trọng khi quản trị máy chủ: luôn giữ ít nhất một đường truy cập quản trị đã được kiểm chứng trước khi đóng đường truy cập hiện tại.

Sử dụng SSH key để tăng mức độ bảo vệ

Nếu đã tạo SSH key trên máy tính, public key cần được đưa vào tài khoản trên VPS. Với tài khoản webadmin, public key thường được lưu trong thư mục:

/home/webadmin/.ssh/authorized_keys

Quyền đối với thư mục và file SSH cũng cần được thiết lập phù hợp. Một cấu hình quyền phổ biến là:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Trong trường hợp bạn tự tạo thư mục và file bằng root, cần đảm bảo chúng thuộc về đúng tài khoản:

sudo chown -R webadmin:webadmin /home/webadmin/.ssh

Sai quyền hoặc sai chủ sở hữu là một trong những nguyên nhân phổ biến khiến SSH key không đăng nhập được dù public key đã được thêm đúng nội dung.

Kiểm tra SSH key trước khi đóng phiên hiện tại

Không nên đăng xuất khỏi phiên SSH đang hoạt động ngay sau khi thêm key. Hãy mở một cửa sổ terminal mới và thử đăng nhập bằng key.

ssh -i ~/.ssh/id_ed25519 webadmin@203.0.113.10

Nếu kết nối thành công, bạn đã có một phương thức quản trị dự phòng đáng tin cậy. Khi đó mới nên tiến hành hạn chế các phương thức đăng nhập không cần thiết.

Hạn chế đăng nhập SSH bằng root

Sau khi tài khoản quản trị và SSH key đã được kiểm tra, bạn có thể hạn chế việc đăng nhập trực tiếp bằng root. Mục tiêu của thiết lập này là giảm khả năng một kẻ tấn công có thể thử trực tiếp tài khoản có quyền cao nhất.

Trong cấu hình SSH, thiết lập thường được sử dụng là:

PermitRootLogin no

Nếu đang sử dụng mật khẩu cho tài khoản thông thường và chưa chuyển sang SSH key, cần cân nhắc kỹ trước khi tắt đăng nhập bằng mật khẩu. Không nên áp dụng thiết lập bảo mật theo kiểu sao chép một cấu hình hoàn chỉnh mà không hiểu phương thức đăng nhập hiện tại của mình.

Đặc biệt, không nên tắt đồng thời root, password authentication và các phương thức dự phòng khi SSH key chưa được kiểm tra.

Kiểm tra cú pháp trước khi khởi động lại SSH

Một lỗi cú pháp trong file cấu hình SSH có thể khiến dịch vụ không khởi động lại đúng cách. Vì vậy, cần kiểm tra cấu hình trước khi áp dụng.

sudo sshd -t

Nếu lệnh không trả về lỗi, cấu hình về cơ bản đã vượt qua bước kiểm tra cú pháp.

Sau đó mới có thể tải lại dịch vụ SSH:

sudo systemctl reload ssh

Tên service có thể khác tùy hệ điều hành và cách đóng gói của hệ thống. Nếu lệnh trên không phù hợp với VPS của bạn, cần kiểm tra service SSH thực tế trước khi thực hiện.

Đổi cổng SSH có thực sự cần thiết?

Cổng SSH mặc định thường là 22 nên thường xuyên xuất hiện trong các hoạt động quét tự động trên Internet. Đổi SSH sang một cổng khác có thể làm giảm một phần lượng truy cập tự động không mong muốn trong log.

Tuy nhiên, đây chỉ là một lớp giảm tiếng ồn chứ không phải biện pháp thay thế cho xác thực mạnh và firewall.

Nếu muốn sử dụng cổng khác, có thể thay đổi giá trị:

Port 2222

Sau khi thay đổi, phải mở cổng mới trên firewall trước khi đóng phiên SSH hiện tại. Đồng thời cần chắc chắn nhà cung cấp VPS hoặc hệ thống mạng bên ngoài không chặn cổng đó.

Khi kết nối bằng cổng mới:

ssh -p 2222 webadmin@203.0.113.10

Điều quan trọng nhất là không đóng phiên SSH đang hoạt động cho đến khi xác nhận cổng mới thực sự đăng nhập được.

Cấu hình firewall cho VPS

Firewall kiểm soát những kết nối mạng nào được phép đi vào hoặc đi ra khỏi máy chủ. Đây là lớp bảo vệ rất quan trọng vì một VPS kết nối Internet có thể nhận được các yêu cầu từ rất nhiều nguồn khác nhau.

Nguyên tắc đơn giản là chỉ mở những cổng mà dịch vụ thực sự cần. Không nên mở hàng loạt cổng chỉ để phòng trường hợp sau này cần dùng.

Đối với một VPS chạy website thông thường, những dịch vụ phổ biến có thể cần các cổng:

Cổng Mục đích Có nên mở?
22 SSH Có, nếu SSH đang sử dụng cổng này
80 HTTP Có, nếu website phục vụ HTTP
443 HTTPS Có, nếu website sử dụng SSL/TLS

Không phải dịch vụ nào cũng cần mở trực tiếp ra Internet. Ví dụ database thường chỉ cần được truy cập từ chính VPS hoặc từ một máy chủ ứng dụng được xác định rõ. Việc mở cổng database công khai chỉ vì muốn kết nối cho tiện có thể tạo ra rủi ro không cần thiết.

Sử dụng UFW trên Ubuntu

Ubuntu thường cung cấp UFW như một lớp giao diện đơn giản để quản lý firewall. Trước khi bật firewall, điều quan trọng nhất là phải cho phép SSH.

sudo ufw allow OpenSSH

Sau đó cho phép HTTP và HTTPS:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Kiểm tra các rule hiện tại:

sudo ufw status

Khi đã chắc chắn SSH được phép truy cập, mới bật firewall:

sudo ufw enable

Kiểm tra lại:

sudo ufw status verbose

Nếu bạn đã đổi SSH sang cổng riêng, phải cho phép chính cổng đó thay vì chỉ mở OpenSSH mặc định.

Không mở cổng database ra Internet nếu không cần

Ví dụ MySQL hoặc MariaDB thường có thể hoạt động nội bộ trên chính VPS. Website kết nối database thông qua localhost hoặc socket thay vì truy cập database từ Internet.

Trong trường hợp này, không cần mở cổng database trên firewall cho toàn bộ Internet.

Đây là một nguyên tắc có giá trị hơn việc ghi nhớ một danh sách cổng cố định: dịch vụ nào không cần truy cập từ bên ngoài thì không nên phơi trực tiếp ra Internet.

Kiểm tra các cổng đang mở trên máy chủ

Sau khi thiết lập firewall, bạn nên biết VPS hiện đang lắng nghe những cổng nào. Điều này giúp phát hiện những dịch vụ mà bạn không chủ động cài đặt hoặc không biết rằng chúng đang chạy.

Một lệnh thường dùng là:

sudo ss -tulpn

Kết quả có thể cho biết địa chỉ, cổng và tiến trình đang lắng nghe kết nối.

Đừng chỉ quan tâm đến firewall. Một dịch vụ không cần thiết tốt nhất nên được gỡ bỏ hoặc tắt ngay từ nguồn thay vì để nó chạy rồi chỉ dựa vào firewall để ngăn truy cập.

Kiểm tra trạng thái các dịch vụ hệ thống

Linux có thể chạy rất nhiều service nền. Một số service thuộc hệ thống, một số do phần mềm bạn cài đặt tạo ra. Khi quản trị VPS, việc biết những gì đang chạy giúp bạn dễ xác định nguyên nhân khi máy chủ sử dụng nhiều CPU hoặc RAM bất thường.

Có thể xem các service đang hoạt động bằng:

systemctl --type=service --state=running

Không nên tắt một service chỉ vì tên của nó không quen thuộc. Một số thành phần hệ thống có thể cần thiết cho việc quản lý VPS, mạng, đăng nhập hoặc các chức năng khác của nhà cung cấp.

Trước khi tắt một service, hãy xác định:

  • Service đó dùng để làm gì.
  • Phần mềm nào đã cài nó.
  • Có dịch vụ nào khác phụ thuộc vào nó hay không.
  • Nó có thực sự cần thiết với VPS hiện tại hay không.

Thiết lập hostname cho máy chủ

Hostname là tên nhận diện VPS trong hệ thống. Một hostname rõ ràng giúp việc quản trị nhiều máy chủ dễ dàng hơn, đồng thời hữu ích khi đọc log hoặc kiểm tra trạng thái dịch vụ.

Kiểm tra hostname hiện tại:

hostnamectl

Nếu cần thay đổi, có thể sử dụng:

sudo hostnamectl set-hostname server1.example.com

Bạn nên chọn tên có ý nghĩa, đặc biệt nếu sau này quản lý nhiều VPS. Chẳng hạn có thể phân biệt máy chủ web, database, staging và production thay vì đặt tên chung chung.

Hostname không phải domain website

Đây là hai khái niệm người mới rất dễ nhầm. Domain website là địa chỉ mà khách truy cập sử dụng để vào website. Hostname là tên nhận diện máy chủ.

Hai tên này có thể liên quan với nhau nhưng không bắt buộc phải giống nhau.

Ví dụ một website có thể sử dụng domain:

webmoi.vn

Trong khi hostname của VPS có thể là:

server1.webmoi.vn

Việc tách biệt hai khái niệm giúp bạn dễ mở rộng hệ thống về sau.

Thiết lập múi giờ cho máy chủ

Múi giờ ảnh hưởng đến timestamp trong log, cron job và một số ứng dụng. Nếu máy chủ sử dụng múi giờ khác với nơi bạn quản trị, việc đọc log hoặc kiểm tra thời điểm xảy ra lỗi có thể trở nên khó khăn.

Kiểm tra múi giờ:

timedatectl

Nếu website phục vụ người dùng tại Việt Nam và bạn muốn máy chủ sử dụng múi giờ Việt Nam, có thể thiết lập:

sudo timedatectl set-timezone Asia/Ho_Chi_Minh

Sau đó kiểm tra lại:

timedatectl

Tuy nhiên, đối với hệ thống phân tán hoặc ứng dụng quốc tế, việc sử dụng UTC cho máy chủ cũng có thể là lựa chọn hợp lý. Điều quan trọng là phải thống nhất cách ghi nhận thời gian giữa máy chủ, database, ứng dụng và hệ thống log.

Thiết lập Swap cho VPS RAM thấp

Swap là vùng lưu trữ trên ổ đĩa được hệ điều hành sử dụng như một phần bộ nhớ khi RAM vật lý chịu áp lực. Swap không thể thay thế RAM thật, nhưng có thể giúp hệ thống có thêm khoảng đệm trong một số tình huống thiếu bộ nhớ.

Đối với VPS cấu hình nhỏ, swap đặc biệt đáng cân nhắc nếu website chạy đồng thời web server, PHP và database.

Kiểm tra swap hiện tại:

swapon --show

Nếu chưa có swap, bạn có thể kiểm tra tổng quan bộ nhớ:

free -h

Tạo swap file

Ví dụ tạo swap file dung lượng 2 GB:

sudo fallocate -l 2G /swapfile

Giới hạn quyền truy cập file:

sudo chmod 600 /swapfile

Định dạng file thành swap:

sudo mkswap /swapfile

Bật swap:

sudo swapon /swapfile

Kiểm tra:

free -h

Nếu muốn swap được kích hoạt lại sau khi VPS khởi động, cần cấu hình file hệ thống tương ứng. Đây là bước nên thực hiện cẩn thận vì một lỗi trong cấu hình mount có thể ảnh hưởng đến quá trình khởi động.

Kiểm tra tổng thể trước khi cài web server

Đến đây VPS đã đi qua phần nền tảng quan trọng nhất: tài khoản quản trị, SSH, firewall, hostname, thời gian và bộ nhớ bổ sung. Trước khi cài web server, hãy kiểm tra lại thay vì tiếp tục cài phần mềm ngay.

  • Có thể đăng nhập bằng tài khoản quản trị riêng.
  • Quyền sudo hoạt động bình thường.
  • SSH key hoạt động nếu bạn đã cấu hình.
  • Đã có ít nhất một phương thức quản trị dự phòng đã kiểm tra.
  • Firewall chỉ mở những cổng cần thiết.
  • SSH vẫn truy cập được sau khi thay đổi cấu hình.
  • Không có dịch vụ lạ đang lắng nghe trên những cổng không cần thiết.
  • Hostname đã được thiết lập rõ ràng.
  • Múi giờ phù hợp với cách quản trị và ứng dụng.
  • Đã kiểm tra RAM và swap nếu VPS có bộ nhớ thấp.

Hoàn thành các bước này trước khi triển khai website sẽ giúp phần cài đặt phía sau dễ kiểm soát hơn rất nhiều. Ở đợt 3, chúng ta sẽ đi sâu vào phần mạng và hệ thống: DNS trỏ domain về VPS, kiểm tra IP, cấu hình phân giải tên miền, tối ưu một số thiết lập hệ điều hành và chuẩn bị nền tảng trước khi đưa web server, PHP và database vào hoạt động.

Hiểu mối liên hệ giữa domain và địa chỉ VPS

Trước khi cài web server, cần hiểu cách domain tìm đến VPS. Khi người dùng nhập tên miền vào trình duyệt, trình duyệt không trực tiếp biết website nằm ở máy chủ nào. Nó cần thông qua hệ thống DNS để phân giải tên miền thành địa chỉ IP.

Ví dụ VPS có IP:

203.0.113.10

Và website sử dụng:

example.com

Bạn có thể tạo bản ghi A để tên miền trỏ về địa chỉ IPv4 của VPS.

Loại bản ghi Ví dụ Mục đích
A example.com → 203.0.113.10 Trỏ tên miền đến IPv4
AAAA example.com → địa chỉ IPv6 Trỏ tên miền đến IPv6
CNAME www → example.com Trỏ một tên miền phụ đến tên miền khác

Không phải VPS nào cũng cần sử dụng IPv6 ngay từ đầu. Nếu bạn chưa cấu hình IPv6 đầy đủ, không nên tạo bản ghi AAAA chỉ vì thấy nhà cung cấp cung cấp sẵn một địa chỉ IPv6.

Bản ghi www nên được xử lý như thế nào?

Có hai cách phổ biến để xử lý phiên bản có www. Bạn có thể cho cả hai tên cùng trỏ về VPS hoặc dùng một tên làm địa chỉ chính rồi chuyển hướng tên còn lại.

Ví dụ:

example.com
www.example.com

Quan trọng không phải chọn www hay non-www, mà là chọn một phiên bản chính và duy trì nhất quán trong website, canonical, sitemap, SSL và các đường dẫn nội bộ.

Kiểm tra DNS trước khi cài website

Sau khi tạo hoặc thay đổi bản ghi DNS, không nên lập tức kết luận rằng VPS bị lỗi nếu domain chưa truy cập được. DNS có thể cần thời gian để các máy chủ DNS và bộ nhớ đệm cập nhật.

Bạn có thể kiểm tra quá trình phân giải bằng các công cụ có sẵn trên Linux.

dig example.com

Hoặc kiểm tra bản ghi A cụ thể:

dig A example.com

Kết quả cần chứa địa chỉ IP VPS mà bạn muốn domain trỏ đến.

Nếu kết quả vẫn trả về IP cũ, trước tiên hãy kiểm tra lại DNS tại nơi quản lý domain thay vì vội chỉnh sửa cấu hình web server.

Kiểm tra từ chính VPS

Bạn cũng có thể kiểm tra khả năng phân giải tên miền trên máy chủ:

getent hosts example.com

Nếu VPS không phân giải được domain, vấn đề có thể nằm ở DNS resolver hoặc cấu hình mạng của máy chủ. Nếu VPS phân giải đúng nhưng máy tính cá nhân chưa thấy thay đổi, có thể bộ nhớ DNS cục bộ vẫn đang giữ kết quả cũ.

Kiểm tra kết nối mạng của VPS

Một máy chủ web cần giao tiếp ổn định với Internet để tải package, nhận request từ khách truy cập và kết nối đến những dịch vụ bên ngoài khi cần.

Trước khi cài stack website, hãy kiểm tra kết nối cơ bản:

ip addr

Lệnh này giúp xem các interface mạng và địa chỉ IP đang được hệ thống nhận diện.

Có thể kiểm tra route:

ip route

Và kiểm tra kết nối đến một địa chỉ bên ngoài:

ping -c 4 1.1.1.1

Nếu kết nối IP hoạt động nhưng domain không phân giải được, vấn đề nhiều khả năng liên quan đến DNS thay vì đường truyền Internet.

Không nên dùng ping làm tiêu chí duy nhất

Một máy chủ có thể chặn ICMP nhưng vẫn hoạt động bình thường đối với HTTP, HTTPS hoặc SSH. Vì vậy, ping chỉ là một phép kiểm tra cơ bản, không thể dùng để kết luận toàn bộ hệ thống mạng có hoạt động hay không.

Khi cần kiểm tra website, nên kiểm tra đúng giao thức mà website sử dụng thay vì chỉ dựa vào ping.

Kiểm tra đồng bộ thời gian của hệ thống

Thời gian chính xác rất quan trọng đối với log, chứng chỉ SSL, cron job, token xác thực và nhiều ứng dụng khác. Linux thường sử dụng dịch vụ đồng bộ thời gian để duy trì đồng hồ hệ thống.

Kiểm tra trạng thái:

timedatectl status

Bạn nên chú ý đến trạng thái đồng bộ thời gian. Nếu máy chủ có thời gian sai đáng kể, hãy xử lý vấn đề này trước khi triển khai các dịch vụ liên quan đến chứng thực hoặc lịch chạy tự động.

Cấu hình DNS riêng cho từng dịch vụ

Khi website phát triển, bạn có thể cần nhiều hostname thay vì chỉ một domain. Chẳng hạn:

  • Website chính.
  • Trang quản trị.
  • API.
  • Máy chủ thử nghiệm.
  • Máy chủ lưu trữ file.

Mỗi hostname có thể trỏ về cùng một VPS hoặc những máy chủ khác nhau tùy kiến trúc.

Ví dụ:

example.com
www.example.com
api.example.com
staging.example.com

Không nên tạo hàng loạt subdomain nếu chưa có nhu cầu thực tế. Mỗi hostname mới có thể kéo theo yêu cầu về DNS, web server, SSL, firewall và cấu hình ứng dụng.

Kiểm tra dung lượng và inode trước khi triển khai

Nhiều người chỉ quan tâm dung lượng SSD nhưng bỏ qua inode. Trong Linux, mỗi file và thư mục đều tiêu thụ inode. Một hệ thống có thể còn nhiều GB dung lượng nhưng vẫn gặp vấn đề nếu inode bị sử dụng hết.

Kiểm tra dung lượng:

df -h

Kiểm tra inode:

df -i

Website tạo rất nhiều file nhỏ, cache hoặc session có thể tiêu thụ inode đáng kể. Vì vậy, đây là chỉ số đáng kiểm tra nếu VPS phục vụ ứng dụng tạo nhiều file.

Quản lý log để tránh đầy ổ đĩa

Log giúp tìm lỗi và theo dõi hoạt động của máy chủ, nhưng log cũng chiếm dung lượng. Một VPS chạy website lâu ngày có thể tích lũy rất nhiều log nếu không có cơ chế quản lý phù hợp.

Trước khi website đi vào vận hành, nên biết log hệ thống được lưu ở đâu và cơ chế log rotation đang hoạt động như thế nào.

Một vị trí thường gặp là:

/var/log/

Có thể kiểm tra những thư mục hoặc file lớn để phát hiện bất thường:

sudo du -sh /var/log/*

Không nên tùy tiện xóa log đang được sử dụng bởi dịch vụ. Nếu cần giảm dung lượng log, hãy xử lý thông qua cơ chế log rotation hoặc cấu hình chính thức của dịch vụ.

Thiết lập giới hạn tài nguyên hợp lý

VPS nhỏ dễ gặp tình trạng một tiến trình tiêu thụ quá nhiều tài nguyên rồi ảnh hưởng đến toàn bộ máy chủ. Vì vậy, khi cài web server và ứng dụng, cần hiểu rằng CPU và RAM của VPS là tài nguyên dùng chung.

Ví dụ, một website PHP có thể đồng thời chạy nhiều PHP worker. Nếu số worker quá lớn so với RAM, hệ thống có thể bắt đầu sử dụng swap mạnh hoặc thậm chí xảy ra tình trạng thiếu bộ nhớ.

Ngược lại, nếu giới hạn quá thấp, website có thể bị chậm khi có nhiều request đồng thời.

Do đó, cấu hình hiệu năng nên dựa trên:

  • Lượng RAM thực tế.
  • Số CPU.
  • Loại website.
  • Số request đồng thời.
  • Mức độ nặng của PHP hoặc ứng dụng.
  • Lượng truy cập thực tế.

Không có một con số worker hoặc giới hạn tài nguyên phù hợp cho mọi VPS. Đây là lý do không nên sao chép nguyên một file cấu hình tối ưu từ máy chủ khác.

Chuẩn bị cấu trúc triển khai website

Trước khi cài web server, bạn nên xác định website sẽ được đặt ở đâu trên hệ thống file. Việc có một cấu trúc rõ ràng ngay từ đầu giúp việc phân quyền, sao lưu và quản lý nhiều website dễ dàng hơn.

Ví dụ có thể sử dụng:

/var/www/example.com

Với nhiều website:

/var/www/example.com
/var/www/example.net
/var/www/demo.example.com

Mỗi website có thư mục riêng giúp hạn chế tình trạng file của website này lẫn với website khác.

Không nên cho website quyền ghi toàn bộ thư mục

Một lỗi phổ biến là cấp quyền quá rộng cho thư mục website để giải quyết nhanh lỗi permission. Cách này có thể khiến ứng dụng có quyền sửa hoặc xóa những file mà nó không thực sự cần.

Nguyên tắc tốt hơn là chỉ cấp quyền ghi cho những thư mục mà ứng dụng thực sự cần ghi, chẳng hạn thư mục upload, cache hoặc file tạm.

Chuẩn bị quyền sở hữu file

Linux phân biệt chủ sở hữu, group và quyền truy cập của file. Khi triển khai website, việc hiểu ba thành phần này quan trọng hơn việc chạy một lệnh chmod thật rộng để "cho chạy được".

Kiểm tra quyền của một thư mục:

ls -la /var/www

Ví dụ một file có thể hiển thị thông tin tương tự:

-rw-r--r-- 1 user user 1234 Sep 6 index.php

Thông tin này cho biết ai sở hữu file và những nhóm người dùng nào có quyền đọc, ghi hoặc thực thi.

Đối với website, quyền chính xác cần phụ thuộc vào web server, PHP handler và ứng dụng. Không nên áp dụng một bộ quyền cố định cho mọi hệ thống.

Chọn web server phù hợp

Đến đây VPS đã có nền tảng cần thiết để cài môi trường chạy website. Thành phần đầu tiên cần lựa chọn là web server.

Hai lựa chọn phổ biến là NginxApache. Cả hai đều có thể phục vụ website tốt, nhưng cách cấu hình và mô hình hoạt động khác nhau.

Tiêu chí Nginx Apache
Phục vụ file tĩnh Rất phù hợp Phù hợp
Reverse proxy Phổ biến Có hỗ trợ
Cấu hình .htaccess Không sử dụng trực tiếp Hỗ trợ
Hệ sinh thái PHP Thường kết hợp PHP-FPM Có nhiều mô hình triển khai

Nếu bạn sử dụng một website PHP cần nhiều hướng dẫn dựa trên .htaccess, Apache có thể dễ tiếp cận hơn. Nếu muốn xây dựng mô hình reverse proxy hoặc phục vụ nhiều ứng dụng theo cách linh hoạt, Nginx là một lựa chọn rất phổ biến.

Không có web server nào tự động làm website nhanh hơn chỉ vì tên của nó. Hiệu năng thực tế phụ thuộc vào cấu hình, ứng dụng, database, cache, tài nguyên VPS và cách xử lý request.

Cài đặt web server theo nhu cầu thực tế

Không nên cài đồng thời Nginx và Apache chỉ vì nghĩ rằng có hai web server sẽ nhanh hơn. Nếu cả hai cùng muốn sử dụng cổng 80 hoặc 443, chúng có thể xung đột.

Trước khi cài, hãy xác định mô hình:

  • Nginx phục vụ trực tiếp website.
  • Apache phục vụ website.
  • Nginx làm reverse proxy phía trước ứng dụng.
  • Nginx nhận request và chuyển PHP sang PHP-FPM.

Việc chọn mô hình trước giúp những bước tiếp theo rõ ràng hơn và tránh phải sửa lại kiến trúc giữa chừng.

Kiểm tra dịch vụ sau khi cài đặt

Sau khi cài web server, đừng vội upload website. Hãy kiểm tra service trước.

Ví dụ với systemd:

sudo systemctl status nginx

Hoặc nếu sử dụng Apache:

sudo systemctl status apache2

Nếu service đang hoạt động, kiểm tra cổng mà web server đang lắng nghe:

sudo ss -tulpn

Bước này giúp xác nhận web server thực sự đang nhận kết nối và không bị xung đột với dịch vụ khác.

Kiểm tra website bằng IP trước khi gắn domain

Trong một số trường hợp, bạn có thể kiểm tra web server bằng địa chỉ IP trước khi DNS hoàn tất. Điều này giúp tách riêng lỗi web server khỏi lỗi DNS.

Nếu truy cập IP và nhận được trang mặc định của web server, điều đó cho thấy ít nhất dịch vụ HTTP đang hoạt động.

Nếu IP không truy cập được, cần kiểm tra theo thứ tự:

  1. Web server có đang chạy không?
  2. Cổng 80 có đang lắng nghe không?
  3. Firewall có cho phép cổng 80 không?
  4. Nhà cung cấp VPS có firewall mạng riêng hay security group không?
  5. Web server có bind đúng địa chỉ mạng không?

Cách kiểm tra theo từng lớp như vậy hiệu quả hơn việc thay đổi hàng loạt cấu hình cùng lúc.

Chuẩn bị cho PHP và database

Nếu website sử dụng PHP, web server chưa đủ để chạy ứng dụng. Bạn còn cần PHP runtime và thường cần PHP-FPM khi triển khai với Nginx.

Nếu website sử dụng hệ quản trị cơ sở dữ liệu, bạn cũng cần lựa chọn database phù hợp, chẳng hạn MySQL hoặc MariaDB.

Điều quan trọng là không nên cài phiên bản PHP hoặc database chỉ vì đó là phiên bản mới nhất. Phiên bản cần tương thích với mã nguồn website, framework, plugin và thư viện mà website đang sử dụng.

Trước khi cài, hãy xác định:

  • Website yêu cầu phiên bản PHP nào.
  • Framework hoặc CMS có yêu cầu đặc biệt gì không.
  • Database sử dụng MySQL, MariaDB hay hệ khác.
  • Có extension PHP bắt buộc nào không.
  • Ứng dụng có cần Redis, queue hoặc dịch vụ phụ trợ không.

Cài PHP và các thành phần cần thiết

Với website PHP, sau khi web server đã hoạt động, bước tiếp theo là cài PHP cùng những thành phần mà ứng dụng thực sự sử dụng. Không nên cài toàn bộ extension có sẵn chỉ để tránh lỗi thiếu thư viện. Càng ít thành phần không cần thiết thì hệ thống càng dễ quản lý và giảm bề mặt cần bảo trì.

Trước tiên có thể kiểm tra phiên bản PHP hiện tại:

php -v

Nếu chưa có PHP, hãy cài phiên bản phù hợp với ứng dụng. Với Ubuntu, quá trình cài đặt thường bắt đầu từ việc cập nhật danh sách package:

sudo apt update
sudo apt install php

Nếu website chạy với Nginx, PHP thường được xử lý thông qua PHP-FPM. Bạn cần cài gói PHP-FPM tương ứng với phiên bản PHP đang sử dụng.

Ví dụ:

sudo apt install php-fpm

Các website thực tế có thể cần thêm những extension như database driver, mbstring, curl, XML, ZIP hoặc GD. Danh sách chính xác phụ thuộc vào ứng dụng.

Không cài PHP theo kiểu càng nhiều càng tốt

Mỗi extension là một thành phần bổ sung vào môi trường PHP. Nếu ứng dụng không sử dụng một extension nào đó thì việc cài nó không mang lại lợi ích trực tiếp.

Cách tốt hơn là đọc yêu cầu của CMS, framework hoặc mã nguồn trước khi cài đặt. Khi gặp lỗi thiếu extension, bạn bổ sung đúng thành phần cần thiết thay vì cài cả một bộ PHP rất lớn.

Kết nối Nginx với PHP-FPM

Nginx không tự xử lý mã PHP. Khi nhận một request đến file PHP, Nginx cần chuyển request đó cho PHP-FPM xử lý rồi nhận kết quả trả về cho trình duyệt.

Đây là lý do việc cài Nginx và PHP riêng lẻ chưa có nghĩa website PHP đã chạy được.

Kiểm tra trạng thái PHP-FPM bằng systemd. Tên service phụ thuộc vào phiên bản PHP, ví dụ:

sudo systemctl status php8.3-fpm

Nếu phiên bản trên máy chủ khác, hãy thay bằng phiên bản PHP thực tế.

Thông tin socket PHP-FPM thường nằm trong thư mục runtime của PHP. Có thể kiểm tra bằng:

ls /run/php/

Kết quả có thể xuất hiện một file socket tương tự:

php8.3-fpm.sock

Đường dẫn socket này sẽ được sử dụng trong cấu hình server block của Nginx.

Tạo server block cho website

Đây là bước biến web server từ một dịch vụ chung thành môi trường phục vụ website cụ thể. Với Nginx, mỗi domain có thể có một server block riêng.

Ví dụ website sử dụng:

example.com
www.example.com

Thư mục mã nguồn:

/var/www/example.com

Một cấu hình Nginx cơ bản có thể có dạng:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }
}

Đây chỉ là cấu hình mẫu. Không nên sao chép nguyên xi nếu website sử dụng framework hoặc CMS có yêu cầu routing khác.

Kiểm tra cấu hình Nginx trước khi áp dụng

Đây là thói quen rất quan trọng khi quản trị VPS. Sau mỗi lần sửa cấu hình Nginx, hãy kiểm tra cú pháp trước khi reload.

sudo nginx -t

Nếu kiểm tra thành công, mới reload:

sudo systemctl reload nginx

Cách làm này an toàn hơn việc sửa file rồi restart ngay lập tức. Nếu có lỗi cú pháp, bạn có thể sửa trước khi ảnh hưởng đến dịch vụ đang chạy.

Đặt mã nguồn website vào đúng vị trí

Sau khi server block đã được chuẩn bị, đưa mã nguồn vào thư mục website. Ví dụ:

/var/www/example.com

Không nên đặt toàn bộ website trong thư mục home của root nếu website cần được web server phục vụ lâu dài. Một cấu trúc riêng cho từng domain giúp việc phân quyền và sao lưu rõ ràng hơn.

Sau khi upload, kiểm tra file:

ls -la /var/www/example.com

Nếu website có file cấu hình chứa mật khẩu database, API key hoặc thông tin nhạy cảm, cần đặc biệt chú ý quyền truy cập. Không phải file nào trong source code cũng nên được web server phục vụ trực tiếp.

Cấu hình quyền cho mã nguồn

Quyền file là một trong những phần dễ gây lỗi nhất khi triển khai website. Hai vấn đề thường gặp là website không thể đọc file hoặc ứng dụng được cấp quyền ghi quá rộng.

Nguyên tắc nên áp dụng là:

  • Web server phải đọc được những file cần phục vụ.
  • Ứng dụng chỉ có quyền ghi vào những thư mục thực sự cần thiết.
  • Không cấp quyền ghi toàn bộ source code nếu không có lý do rõ ràng.
  • Không sử dụng quyền 777 như một cách giải quyết lỗi permission.

Quyền 777 cho phép nhiều đối tượng đọc, ghi và thực thi. Trong môi trường website, đây thường là giải pháp quá rộng và có thể làm tăng rủi ro nếu ứng dụng bị khai thác.

Xác định thư mục cần quyền ghi

Một CMS hoặc framework có thể cần ghi vào thư mục upload, cache, storage hoặc một vị trí riêng. Thay vì cho phép toàn bộ website ghi, hãy xác định chính xác những thư mục này.

Ví dụ cấu trúc có thể là:

/var/www/example.com
/var/www/example.com/public
/var/www/example.com/storage
/var/www/example.com/uploads

Quyền thực tế phải được điều chỉnh theo ứng dụng và user mà PHP-FPM đang chạy.

Cài đặt MySQL hoặc MariaDB

Nếu website sử dụng cơ sở dữ liệu, bạn cần cài hệ quản trị database tương thích với ứng dụng. MySQL và MariaDB là hai lựa chọn phổ biến trong hệ sinh thái website PHP.

Sau khi cài đặt, kiểm tra service:

sudo systemctl status mysql

Hoặc tùy hệ điều hành và package có thể sử dụng service tương ứng của MariaDB.

Điểm quan trọng không phải là chọn hệ quản trị nào đang được nhắc đến nhiều nhất, mà là đảm bảo nó tương thích với phần mềm website và phiên bản mà ứng dụng yêu cầu.

Tạo database riêng cho website

Mỗi website nên có database và user database riêng thay vì dùng một tài khoản database chung cho nhiều website. Cách phân tách này giúp giới hạn phạm vi ảnh hưởng nếu một website gặp sự cố.

Ví dụ sau khi đăng nhập database, có thể tạo database:

CREATE DATABASE example_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Tạo user riêng:

CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'MatKhauRatManh';

Cấp quyền cho đúng database:

GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'localhost';
FLUSH PRIVILEGES;

Tên database, username và mật khẩu trong ví dụ chỉ mang tính minh họa.

Không nên sử dụng tài khoản database có quyền quản trị toàn bộ hệ thống cho một website thông thường. Ứng dụng chỉ nên có quyền trên database mà nó cần sử dụng.

Không mở database trực tiếp ra Internet nếu không cần

Nếu website và database cùng chạy trên một VPS, ứng dụng thường có thể kết nối database thông qua localhost. Khi đó không có lý do phải mở cổng database cho toàn bộ Internet.

Đây là một nguyên tắc bảo mật quan trọng: dịch vụ nội bộ nên được giữ nội bộ nếu kiến trúc không yêu cầu truy cập từ bên ngoài.

Nếu database bắt buộc phải được truy cập từ một máy chủ khác, hãy giới hạn nguồn truy cập thay vì mở cho mọi địa chỉ.

Cấu hình HTTPS và chứng chỉ SSL

Website hiện đại gần như luôn cần HTTPS. HTTPS mã hóa kết nối giữa trình duyệt và máy chủ, giúp bảo vệ dữ liệu truyền qua mạng và là nền tảng cần thiết cho nhiều tính năng web hiện nay.

Trước khi cấp chứng chỉ, cần đảm bảo domain đã trỏ đúng về VPS và web server có thể nhận request từ Internet.

Thông thường cần cho phép:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Cổng 80 thường được sử dụng để xác thực hoặc chuyển hướng HTTP sang HTTPS, trong khi 443 phục vụ HTTPS.

Kiểm tra domain trước khi cấp SSL

Hãy kiểm tra:

  • Domain đã trỏ đúng IP VPS.
  • Server block nhận đúng domain.
  • Cổng 80 đang hoạt động.
  • Không có firewall chặn kết nối.
  • Website có thể phản hồi request HTTP.

Nếu những điều kiện này chưa đúng, việc cấp chứng chỉ có thể thất bại hoặc bạn sẽ khó xác định nguyên nhân lỗi.

Chuyển hướng HTTP sang HTTPS

Sau khi HTTPS hoạt động, website thường nên sử dụng một phiên bản chính là HTTPS. Request HTTP có thể được chuyển hướng sang HTTPS để người dùng luôn truy cập kết nối được mã hóa.

Một server block chuyển hướng cơ bản có thể có dạng:

server {
    listen 80;
    server_name example.com www.example.com;

    return 301 https://example.com$request_uri;
}

Cấu hình thực tế cần được điều chỉnh theo domain chính, www và cách triển khai SSL của website.

Kiểm tra PHP bằng một trang thử nghiệm

Trước khi đưa mã nguồn thật lên, có thể kiểm tra chuỗi Nginx → PHP-FPM bằng một file PHP đơn giản.

Ví dụ:

<?php
phpinfo();
?>

Sau đó truy cập file từ trình duyệt để kiểm tra PHP có được xử lý hay không.

Không nên giữ trang phpinfo trên website production vì nó có thể tiết lộ nhiều thông tin về môi trường PHP và máy chủ. Sau khi kiểm tra xong, hãy xóa file thử nghiệm.

Cấu hình database trong ứng dụng

Sau khi database đã được tạo, website cần biết thông tin kết nối. Tùy CMS hoặc framework, thông tin này có thể nằm trong file cấu hình, biến môi trường hoặc hệ thống quản lý secret.

Thông thường cần các thông tin:

  • Tên database.
  • Tên user database.
  • Mật khẩu database.
  • Database host.
  • Database port nếu không sử dụng mặc định.

Nếu database nằm cùng VPS, host thường có thể là localhost hoặc một socket tùy cách ứng dụng được cấu hình.

Không nên đưa mật khẩu database trực tiếp vào mã nguồn công khai hoặc commit vào repository. Nếu ứng dụng hỗ trợ biến môi trường, đây thường là cách thuận tiện hơn để tách cấu hình nhạy cảm khỏi source code.

Kiểm tra website sau khi triển khai

Đừng chỉ mở trang chủ rồi kết luận VPS đã cấu hình xong. Một website cần được kiểm tra ở nhiều lớp.

Hãy thử:

  • Trang chủ.
  • Một trang nội dung.
  • Trang quản trị nếu có.
  • URL có rewrite.
  • Form gửi dữ liệu.
  • Chức năng upload nếu website có.
  • Kết nối database.
  • HTTPS.
  • Phiên bản có www và không www.

Nếu trang chủ hoạt động nhưng URL con trả về 404, nguyên nhân có thể nằm ở rewrite hoặc cấu hình routing. Nếu PHP hiển thị lỗi kết nối database, cần kiểm tra thông tin database thay vì sửa Nginx một cách ngẫu nhiên.

Kiểm tra log khi website gặp lỗi

Khi website không hoạt động, log thường là nơi đầu tiên cần kiểm tra. Việc đọc log giúp xác định lỗi nằm ở web server, PHP, database hay chính ứng dụng.

Với Nginx, log thường có access log và error log. Bạn có thể xem các dòng gần nhất bằng:

sudo tail -f /var/log/nginx/error.log

Đối với PHP-FPM, vị trí log phụ thuộc vào phiên bản và cấu hình.

Database cũng có log riêng. Khi website báo lỗi kết nối hoặc query, hãy kiểm tra đúng lớp gây lỗi thay vì chỉ nhìn vào log Nginx.

Phân loại lỗi theo từng lớp

Hiện tượng Nên kiểm tra trước
Domain không truy cập được DNS, firewall, cổng 80/443 và web server
502 Bad Gateway PHP-FPM và kết nối giữa Nginx với PHP-FPM
404 Not Found Document root, server block và routing
403 Forbidden Quyền file, ownership và cấu hình Nginx
Lỗi kết nối database Database service, username, password, host và quyền
Website tải chậm CPU, RAM, database, PHP, disk I/O và ứng dụng

Cách phân loại này giúp rút ngắn đáng kể thời gian xử lý sự cố vì bạn không phải thay đổi toàn bộ VPS để tìm một lỗi chỉ nằm ở một thành phần.

Thiết lập sao lưu cho VPS

Một VPS hoạt động ổn định vẫn có thể mất dữ liệu do lỗi phần mềm, thao tác nhầm, hỏng hệ thống file hoặc sự cố từ nhà cung cấp. Vì vậy, backup không phải tùy chọn chỉ dành cho website lớn.

Tối thiểu nên có phương án sao lưu cho:

  • Mã nguồn website.
  • Database.
  • File upload.
  • File cấu hình quan trọng.
  • Các secret hoặc thông tin cần thiết để khôi phục dịch vụ.

Không nên chỉ lưu bản backup trên chính VPS. Nếu VPS gặp sự cố nghiêm trọng, cả website lẫn bản backup có thể biến mất cùng lúc.

Sao lưu database

Với MySQL hoặc MariaDB, công cụ phổ biến để xuất database là mysqldump.

mysqldump -u example_user -p example_db > example_db.sql

File xuất ra cần được bảo vệ vì có thể chứa toàn bộ dữ liệu website.

Backup tốt không chỉ là "có file sao lưu". Bạn cần định kỳ kiểm tra khả năng khôi phục từ file đó. Một bản backup chưa từng thử restore chỉ mới chứng minh rằng bạn đã tạo ra một file, chưa chứng minh rằng bạn có thể phục hồi website.

Cập nhật VPS định kỳ

Cấu hình VPS xong không có nghĩa công việc đã kết thúc. Hệ điều hành, web server, PHP, database và các phần mềm khác đều có thể nhận bản cập nhật theo thời gian.

Định kỳ kiểm tra package:

sudo apt update

Sau đó xem những package có thể nâng cấp:

apt list --upgradable

Trong môi trường production, nên xem xét thay đổi trước khi nâng cấp các thành phần quan trọng. Đặc biệt với PHP hoặc database, không nên nâng phiên bản lớn mà chưa kiểm tra khả năng tương thích của website.

Theo dõi CPU, RAM và dung lượng ổ đĩa

Sau khi website bắt đầu có người truy cập, bạn cần theo dõi tài nguyên thay vì chỉ chờ đến lúc VPS báo lỗi.

Một số lệnh cơ bản:

free -h
df -h
uptime
top

Nếu RAM thường xuyên cạn, CPU liên tục ở mức cao hoặc ổ đĩa tăng nhanh, cần xác định nguyên nhân trước khi đơn giản nâng cấp VPS.

Ví dụ, RAM tăng có thể do database, PHP worker hoặc một ứng dụng bị rò rỉ bộ nhớ. Ổ đĩa đầy có thể do log, backup hoặc file upload tăng nhanh. Biết nguyên nhân sẽ giúp bạn giải quyết đúng vấn đề thay vì chỉ tăng tài nguyên.

Những lỗi người mới thường mắc khi cấu hình VPS

Dùng root cho mọi hoạt động

Root thuận tiện nhưng quyền quá lớn. Hãy sử dụng tài khoản quản trị riêng và sudo cho công việc thường ngày.

Mở tất cả các cổng firewall

Firewall mất nhiều ý nghĩa nếu mọi cổng đều được mở. Chỉ cho phép những dịch vụ cần thiết.

Dùng quyền 777 để sửa lỗi website

Đây thường là cách xử lý nhanh nhưng không phải cách xử lý đúng. Hãy xác định user, group và thư mục thực sự cần quyền ghi.

Cài quá nhiều phần mềm

Mỗi dịch vụ bổ sung làm hệ thống phức tạp hơn. Chỉ cài những gì website hoặc hệ thống thực sự sử dụng.

Không kiểm tra cấu hình trước khi restart

Đối với Nginx, SSH và nhiều dịch vụ khác, nên kiểm tra cấu hình trước khi reload hoặc restart. Điều này giảm nguy cơ tự làm gián đoạn dịch vụ.

Không có backup bên ngoài VPS

Backup cùng máy chủ không đủ an toàn trước những sự cố nghiêm trọng. Bản sao quan trọng nên được lưu ở một vị trí độc lập.

Không kiểm tra log

Log là nguồn thông tin quan trọng để xác định nguyên nhân lỗi. Khi website gặp vấn đề, hãy kiểm tra đúng log thay vì thay đổi nhiều cấu hình cùng lúc.

Checklist hoàn thiện VPS trước khi vận hành

Trước khi đưa website vào hoạt động chính thức, có thể kiểm tra lần cuối theo danh sách dưới đây:

  1. VPS sử dụng hệ điều hành phù hợp.
  2. Hệ thống đã được cập nhật.
  3. Đã tạo tài khoản quản trị riêng.
  4. Sudo hoạt động bình thường.
  5. SSH key đã được kiểm tra nếu sử dụng.
  6. Đã hạn chế phương thức đăng nhập không cần thiết.
  7. Firewall chỉ mở những cổng cần dùng.
  8. Không có dịch vụ không cần thiết đang công khai trên Internet.
  9. Hostname đã được thiết lập.
  10. Thời gian hệ thống được đồng bộ.
  11. RAM và dung lượng ổ đĩa đủ cho workload hiện tại.
  12. Swap đã được cân nhắc đối với VPS RAM thấp.
  13. Domain trỏ đúng IP.
  14. Web server hoạt động.
  15. PHP và PHP-FPM hoạt động nếu website sử dụng PHP.
  16. Database hoạt động nếu website cần database.
  17. Website có database user riêng.
  18. HTTPS hoạt động bình thường.
  19. HTTP được xử lý theo chiến lược đã chọn.
  20. Quyền file được thiết lập ở mức cần thiết.
  21. Không còn file thử nghiệm hoặc thông tin nhạy cảm không cần thiết.
  22. Đã có backup mã nguồn và database.
  23. Đã biết vị trí các log quan trọng.
  24. Đã kiểm tra các chức năng chính của website.

Quy trình quản trị VPS sau khi website hoạt động

Một VPS được cấu hình tốt không phải là VPS có thật nhiều thiết lập mà là VPS mà bạn hiểu rõ những gì đang chạy trên đó và có khả năng khôi phục khi xảy ra sự cố.

Sau khi triển khai, hãy duy trì một quy trình đơn giản:

  1. Theo dõi tài nguyên định kỳ.
  2. Kiểm tra dung lượng ổ đĩa và log.
  3. Cập nhật hệ thống có kiểm soát.
  4. Kiểm tra backup.
  5. Theo dõi tình trạng website.
  6. Kiểm tra chứng chỉ HTTPS.
  7. Không cài thêm dịch vụ nếu chưa có nhu cầu.
  8. Ghi lại những thay đổi quan trọng trên VPS.

Đặc biệt, hãy ghi lại các thông tin như cổng SSH, domain, thư mục website, phiên bản PHP, database, vị trí backup và những cấu hình đặc biệt. Khi VPS gặp sự cố sau nhiều tháng, tài liệu này có thể giúp bạn khôi phục nhanh hơn rất nhiều.

Kết luận

Cài đặt một VPS không đơn giản là chạy vài câu lệnh rồi upload website. Một quy trình đúng cần bắt đầu từ việc xác định hệ điều hành và tài nguyên, thiết lập tài khoản quản trị, bảo vệ SSH, cấu hình firewall, kiểm tra mạng và DNS, sau đó mới triển khai web server, PHP, database, HTTPS và mã nguồn.

Điều quan trọng nhất đối với người mới là không cấu hình theo kiểu sao chép máy móc. Mỗi VPS có cấu hình phần cứng, hệ điều hành, website và nhu cầu khác nhau. Một thiết lập phù hợp với máy chủ này chưa chắc phù hợp với máy chủ khác.

Nếu chia quá trình thành từng lớp rõ ràng — hệ điều hành → tài khoản → SSH → firewall → mạng → web server → PHP → database → HTTPS → website → backup → giám sát — bạn sẽ dễ hiểu hệ thống hơn và cũng dễ tìm nguyên nhân khi có lỗi.

Đó mới là mục tiêu thực sự của việc tự quản trị VPS: không chỉ làm cho website chạy được, mà còn xây dựng được một môi trường an toàn, có thể kiểm soát, dễ bảo trì và có phương án phục hồi khi xảy ra sự cố.

  • 0 Bình luận
CEO Bùi Tấn Lực | Founder Web Mới
Bùi Tấn Lực
Tìm hiểu về CEO Bùi Tấn Lực, Founder Web Mới với nhiều năm kinh nghiệm trong lĩnh vực phát triển website, SEO và chia sẻ kiến thức công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Cách cài đặt và cấu hình VPS từ A-Z cho người mới
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !