Trong kiến trúc Web Server đã xác định ở các bài trước, Docker được sử dụng có chọn lọc, tập trung vào thành phần mang rủi ro cao nhất: MariaDB.
Nginx và PHP-FPM tiếp tục chạy trên host để giữ hệ thống đơn giản, ổn định và dễ vận hành, trong khi database được cách ly theo nhóm site bằng Docker.
Bài viết này trình bày mô hình triển khai MariaDB bằng Docker cho production, áp dụng trực tiếp cho Web Server chạy nhiều website.
1. Nguyên tắc của mô hình cách ly database
Mô hình được xây dựng trên các nguyên tắc sau:
Không “1 database cho tất cả”
Không “1 container cho mỗi site”
Mỗi nhóm site giống nhau → 1 MariaDB container
Mỗi site → 1 database + 1 user riêng
Nginx/PHP-FPM trên host, DB trong Docker
MariaDB chỉ bind localhost, không mở ra Internet
Mô hình này cân bằng tốt giữa:
cách ly rủi ro
đơn giản vận hành
khả năng mở rộng về sau
2. Phân nhóm MariaDB theo nhóm site
Ví dụ cấu trúc thực tế:

Ý nghĩa:
sites_web: website giới thiệu, nội dung, tải nhẹsites_qms: hệ thống nghiệp vụ, dữ liệu quan trọngsites_art: nội dung media, ít giao dịch
Mỗi thư mục = 1 MariaDB instance độc lập.
3. Chuẩn bị cấu trúc thư mục cho một nhóm MariaDB
Ví dụ với sites_art:
Đây là cấu trúc tối thiểu nhưng an toàn cho production.
4. Docker Compose mẫu cho MariaDB (sites_qms)
4.1. File .env
Lưu ý:
Không tạo database mặc định trong container
Database và user sẽ tạo thủ công cho từng site
4.2. File docker-compose.yml
Giải thích nhanh:
127.0.0.1:3308: chỉ cho host truy cập./data:/var/lib/mysql: dữ liệu an toàn ngoài containerREAD-COMMITTED: phù hợp Drupal và CMSKhông expose ra mạng ngoài
5. Khởi động MariaDB container
Kiểm tra:
6. Tạo database và user cho từng site
6.1. Truy cập MariaDB
6.2. Tạo database và user (ví dụ site qms1)
Nguyên tắc:
Mỗi site một database
Mỗi site một user
Không dùng root cho ứng dụng
7. Kết nối từ Drupal (chạy trên host)
Ví dụ settings.php:
Drupal không cần biết MariaDB đang chạy trong Docker.
8. Lặp lại cho các nhóm site khác
Ví dụ:
sites_web→ port3307sites_art→ port3308sites_qms→ port3309
Quy ước rõ ràng:
| Nhóm | Port |
|---|---|
| sites_web | 3307 |
| sites_art | 3308 |
| sites_qms | 3309 |
9. Khi nào cần tách thêm MariaDB container?
Tách thêm khi:
Một nhóm site tăng tải đột biến
Backup mất quá nhiều thời gian
Cần chính sách replication khác
Ví dụ:
Di chuyển database theo site, không ảnh hưởng các site khác.
10. Những lỗi cần tránh
Bind
0.0.0.0:3306Dùng chung user cho nhiều site
Chạy nhiều nhóm site trong một DB container
Không backup
data/trước khi thay đổi
11. Kết luận
Mô hình Nginx + PHP-FPM trên host, MariaDB Docker theo nhóm site mang lại:
Cách ly rủi ro hiệu quả
Vận hành đơn giản
Dễ backup, dễ mở rộng
Phù hợp Web Server production thực tế
Docker ở đây không làm hệ thống phức tạp hơn, mà giảm rủi ro tại đúng điểm cần giảm.
- Đăng nhập để gửi ý kiến