Máy chủ này phục vụ hệ thống chạy thật - live/production. Việc xác định này rất quan trọng để tránh rắc rối về sau.
1. Vì sao cần xác lập nguyên tắc trước khi cài đặt?
Trong triển khai Web Server, kỹ thuật không phải vấn đề khó nhất.
Khó nhất là ra quyết định đúng ngay từ đầu.
Rất nhiều hệ thống gặp các vấn đề như:
Server chạy được nhưng hay lỗi vặt
Sợ cập nhật vì lo sập hệ thống
Mỗi lần có sự cố phải “đoán mò”
Người sau không dám động vào cấu hình người trước
Nguyên nhân cốt lõi thường không nằm ở Nginx, PHP hay MySQL, mà nằm ở:
Thiếu nguyên tắc thiết kế xuyên suốt ngay từ đầu.
Bài viết này đặt ra 4 nguyên tắc nền tảng, được áp dụng nhất quán trong toàn bộ loạt bài.
2. Nguyên tắc 1: Ưu tiên ổn định trước mọi thứ khác
2.1. Ổn định là yêu cầu số một của hệ thống production
Một Web Server trong môi trường thực tế cần:
Chạy liên tục
Chịu được lỗi nhỏ
Không phụ thuộc vào “trí nhớ” của một cá nhân
Do đó:
Không chạy theo cấu hình “nghe có vẻ tối ưu”
Không áp dụng giải pháp chưa kiểm chứng
Không thử nghiệm trực tiếp trên hệ thống live
2.2. Cách áp dụng nguyên tắc ổn định
Trong loạt bài này:
Sử dụng Ubuntu Server LTS/Debian
Dùng các phiên bản phần mềm:
Phổ biến
Được cộng đồng sử dụng rộng rãi
Cấu hình theo hướng:
Rõ ràng
Có thể đọc hiểu lại sau nhiều tháng
Nguyên tắc quan trọng:
Chạy ổn định 2 năm tốt hơn chạy “tối ưu” 2 ngày.
3. Nguyên tắc 2: Bảo mật phải được thiết kế, không phải vá lỗi
3.1. Bảo mật không đến từ một vài dòng cấu hình
Một hệ thống không thể gọi là “an toàn” chỉ vì:
Có SSL
Đổi port SSH
Cài thêm firewall
Bảo mật cần được thiết kế ngay từ kiến trúc:
Phân tách rõ các lớp
Hạn chế bề mặt tấn công
Không cấp quyền dư thừa
3.2. Cách tiếp cận bảo mật trong loạt bài
Các nguyên tắc được áp dụng xuyên suốt:
Dịch vụ nào không cần Internet thì không mở Internet
Database không expose ra ngoài
PHP không chạy trong Nginx
User, quyền, thư mục được phân tách rõ ràng
Bảo mật trong loạt bài này:
Không cực đoan
Không phức tạp hóa
Nhưng đủ an toàn cho production
4. Nguyên tắc 3: Dễ mở rộng ngay cả khi chưa cần mở rộng
4.1. Mở rộng không chỉ là scale lớn
Nhiều người hiểu mở rộng là:
Nhiều server
Load balancing
Docker, Kubernetes
Trong thực tế, mở rộng thường bắt đầu từ những việc nhỏ hơn:
Thêm website mới
Thêm chức năng mới
Tách database
Thay đổi backend
Nếu ngay từ đầu:
Cấu trúc thư mục lộn xộn
Cấu hình trộn lẫn
Phụ thuộc cứng vào một cách triển khai
Thì mở rộng sẽ trở thành việc rất rủi ro.
4.2. Cách thiết kế để dễ mở rộng
Trong loạt bài này:
Mỗi website có cấu hình riêng
Không dùng cấu hình “dùng chung cho tiện”
Tách biệt rõ:
Web server
Application
Database
Nguyên tắc:
Chưa cần mở rộng, nhưng không được tự khóa đường mở rộng.
5. Nguyên tắc 4: Dễ vận hành quan trọng hơn tối ưu kỹ thuật
5.1. Ai sẽ vận hành hệ thống sau 6 tháng?
Một câu hỏi rất thực tế:
Ai trực hệ thống khi có sự cố?
Người đó có phải là người cài server ban đầu không?
Nếu câu trả lời là không chắc, thì:
Cấu hình phải dễ hiểu
Log phải rõ ràng
Quy trình phải có thể đọc lại
5.2. Cách tiếp cận vận hành trong loạt bài
Trong quá trình triển khai:
Ưu tiên cấu hình dễ đọc hơn cấu hình “ngắn”
Tách file cấu hình theo vai trò
Log đầy đủ, không tắt vì “đỡ tốn dung lượng”
Nguyên tắc xuyên suốt:
Hệ thống tốt là hệ thống người khác có thể tiếp quản được.
Tổ chức thư mục log, có backup ở nơi khác để tra cứu khi không truy cập được máy chủ
6. Những điều cố tình KHÔNG làm trong loạt bài
Để giữ đúng các nguyên tắc trên, loạt bài này cố tình không làm một số việc:
Không tối ưu hiệu năng sớm
Không đưa quá nhiều công nghệ cùng lúc
Không áp dụng các mẹo cấu hình khó kiểm soát
Không copy cấu hình “thần thánh” trên Internet
Mọi thứ đều được triển khai theo hướng:
Hiểu được
Giải thích được
Quay lại kiểm tra được
7. Mối liên hệ giữa nguyên tắc và các bài triển khai
Từ bài tiếp theo trở đi:
Mỗi quyết định cài đặt
Mỗi file cấu hình
Mỗi lệnh sử dụng
Đều sẽ được đặt câu hỏi:
Có làm tăng ổn định không?
Có ảnh hưởng bảo mật không?
Có gây khó mở rộng về sau không?
Có dễ vận hành không?
Nếu câu trả lời là không rõ ràng, chúng ta sẽ không làm.
Trong Bài 4, chúng ta sẽ bắt đầu bước triển khai đầu tiên:
Chuẩn bị phần cứng và hạ tầng mạng cho Web Server
Đây là phần thường bị xem nhẹ, nhưng lại ảnh hưởng trực tiếp đến:
Độ ổn định
Hiệu năng thực tế
Khả năng mở rộng về sau
- Đăng nhập để gửi ý kiến