Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "CNTT" các nội dung bạn quan tâm.

5. Triển khai Web Server bằng Docker: Kiến trúc tổng thể

ICT

Sau khi đã chuẩn hóa cấu trúc thư mục và nguyên tắc quản lý container, bước tiếp theo không phải là viết ngay docker-compose.yml, mà là xác định kiến trúc tổng thể của Web Server khi đưa Docker vào.

Trong loạt bài này, Docker không được xem là mục tiêu, mà là một lớp triển khai có chọn lọc, tập trung vào những thành phần mang lại giá trị cao nhất – trước hết là MariaDB.


1. Nguyên tắc thiết kế kiến trúc Web Server dùng Docker

Kiến trúc tổng thể cần tuân thủ ba nguyên tắc cốt lõi:

1.1. Không Docker hóa mọi thứ

  • Docker không thay thế hệ điều hành

  • Không phải dịch vụ nào cũng cần container

  • Ưu tiên Docker hóa các thành phần:

    • cần cách ly

    • cần kiểm soát vòng đời

    • cần cấu hình riêng theo nhóm site

1.2. Host vẫn là trung tâm kiểm soát

  • Firewall

  • Nginx reverse proxy (có thể)

  • Backup orchestration

  • Monitoring tổng thể

Docker chỉ là lớp runtime dịch vụ, không phải nền tảng quản trị toàn hệ thống.


2. Kiến trúc tổng thể đề xuất

2.1. Sơ đồ khái niệm

Kiến trúc này phản ánh:

  • Giao tiếp bên ngoài → host

  • Dịch vụ lõi được Docker hóa có chọn lọc

  • Database được cách ly theo nhóm site


3. Vì sao ưu tiên Docker hóa MariaDB?

3.1. Database là điểm rủi ro cao nhất

  • Chứa dữ liệu sống còn

  • Nhạy cảm với cấu hình

  • Dễ gây sập hệ thống khi lỗi

Docker giúp:

  • Cách ly rủi ro giữa các nhóm site

  • Kiểm soát tài nguyên

  • Dễ backup / restore / di chuyển


3.2. MariaDB trong Docker ổn định hơn nếu làm đúng

  • Dữ liệu nằm ngoài container

  • Cấu hình được kiểm soát

  • Nâng cấp theo kế hoạch

Docker không làm MariaDB chậm hơn nếu kiến trúc đúng.


4. Phân vai chi tiết các thành phần

4.1. Nginx

  • Có thể chạy trên host

  • Là reverse proxy duy nhất ra Internet

  • Dễ tích hợp firewall, TLS, rate limit

Docker hóa Nginx không bắt buộc trong kiến trúc này.


4.2. PHP-FPM

Hai lựa chọn:

  • Chạy trên host → đơn giản, hiệu năng ổn định

  • Chạy trong Docker → dễ chạy song song nhiều phiên bản PHP

Kiến trúc cho phép kết hợp cả hai.


4.3. MariaDB (Docker)

  • Mỗi container = một nhóm site

  • Không expose Internet

  • Kết nối qua Docker network hoặc localhost

Đây là thành phần bắt buộc Docker hóa trong series này.


5. Network trong kiến trúc tổng thể

5.1. Phân tầng network

  • External (Internet → Host)

  • Internal (Host → Docker)

  • Docker internal network (DB)

Nguyên tắc:

  • MariaDB không mở port ra ngoài

  • Chỉ PHP / app mới truy cập DB


5.2. Kết nối MariaDB

Hai mô hình:

  • 127.0.0.1:3307 → mariadb_sites_qms:3306

  • Docker internal network nếu PHP cũng trong Docker

Ưu tiên:

  • Đơn giản

  • Dễ debug

  • Dễ kiểm soát firewall


6. Vòng đời triển khai dịch vụ

6.1. Triển khai theo nhóm

  • sites_web

  • sites_qms

  • sites_art

Mỗi nhóm:

  • có container riêng

  • có chính sách riêng

  • có lộ trình mở rộng riêng


6.2. Khi nào cần tách thêm container?

  • DB tăng tải

  • Backup quá lâu

  • Thay đổi chính sách replication

Khi đó:

  • tạo thêm sites_qms_2

  • di chuyển một phần database


7. Kiến trúc này giải quyết vấn đề gì?

  • Tránh “1 DB cho tất cả”

  • Không quá phân mảnh

  • Dễ vận hành

  • Dễ mở rộng

  • Dễ rollback


8. Những điều kiến trúc này không cố giải quyết

  • High Availability phức tạp

  • Multi-node orchestration

  • Kubernetes

Đây là kiến trúc Web Server thực tế, không phải cloud-native.


9. Kết luận

Kiến trúc Web Server dùng Docker hiệu quả là:

  • Docker hóa đúng chỗ

  • Giữ host làm trung tâm

  • Ưu tiên ổn định và khả năng vận hành

Trong loạt bài này, việc Docker hóa MariaDB theo nhóm site là bước đi chiến lược giúp:

  • Giảm rủi ro

  • Tăng khả năng kiểm soát

  • Chuẩn bị cho mở rộng trong tương lai