Sau khi cài đặt Docker và Docker Compose, bước quan trọng tiếp theo là chuẩn hóa cấu trúc thư mục và nguyên tắc quản lý container.
Với Web Server chạy nhiều website, đặc biệt là các hệ thống CMS, việc chuẩn hóa ngay từ đầu quyết định trực tiếp đến độ ổn định, khả năng mở rộng và mức độ rủi ro khi vận hành lâu dài.
Trong bài này, kiến trúc được thống nhất theo nguyên tắc:
Mỗi Docker MariaDB phục vụ cho một nhóm website có đặc tính giống nhau, không phải cho từng site đơn lẻ.
1. Nguyên tắc thiết kế cấu trúc Docker cho Web Server
1.1. Nhóm site theo đặc tính vận hành, không theo số lượng
Việc tách MariaDB không nên làm theo kiểu:
Mỗi site một database container (quá phân mảnh)
Một database cho tất cả site (rủi ro cao)
Thay vào đó, nhóm site theo:
Chức năng (web giới thiệu, hệ thống nghiệp vụ, nội dung số…)
Mức độ tải
Chính sách backup / replication
Mức độ quan trọng và rủi ro
Mỗi nhóm sẽ dùng một MariaDB container riêng.
1.2. Tách rõ 4 lớp: code – cấu hình – dữ liệu – backup
Code: source web, không phụ thuộc Docker
Cấu hình: docker-compose, env, config service
Dữ liệu: database runtime
Backup: dữ liệu sao lưu có vòng đời riêng
Tuyệt đối không:
Để dữ liệu sống trong container
Trộn backup của nhiều nhóm site vào một chỗ
2. Cấu trúc thư mục Docker khuyến nghị
2.1. Thư mục gốc Docker
Thư mục này chỉ dùng cho Docker service, không trộn code website.
2.2. Phân nhóm theo loại dịch vụ
2.3. Cấu trúc MariaDB theo nhóm site
Ý nghĩa kiến trúc:
sites_web: nhóm website giới thiệu, nội dung, tải nhẹsites_qms: nhóm hệ thống nghiệp vụ, dữ liệu quan trọngsites_art: nhóm site nội dung số, media, ít giao dịch
Mỗi thư mục = 1 MariaDB instance độc lập.
3. Chuẩn hóa nội dung trong từng nhóm MariaDB
3.1. docker-compose.yml
Chỉ mô tả service MariaDB
Mount volume cho
datavàconf.dKhông hard-code mật khẩu
Cấu hình restart policy, healthcheck
3.2. File .env – quản lý biến môi trường
Ví dụ:
Lưu ý:
Không tạo database mặc định nếu trong container có nhiều DB
Database và user sẽ được tạo thủ công theo từng site
Mỗi nhóm site dùng chung một instance nhưng user và database tách biệt
3.3. Thư mục conf.d/
Dùng cho:
my.cnf tuning theo đặc thù nhóm site
InnoDB buffer, log, charset
Khác nhau giữa
sites_webvàsites_qms
3.4. Thư mục data/
Chứa toàn bộ dữ liệu runtime của MariaDB instance
Không chỉnh tay
Backup trước mọi thay đổi lớn
3.5. Thư mục backup/
Backup theo nhóm site
Có thể backup từng database riêng
Áp dụng chính sách retention khác nhau
4. Nguyên tắc quản lý database trong cùng một MariaDB container
4.1. Mỗi site = một database + một user
Không dùng chung user
Không cấp quyền chéo giữa các database
Giúp:
Giảm rủi ro bảo mật
Dễ truy vết sự cố
Dễ di chuyển site sang nhóm khác nếu cần
4.2. Không dùng root cho ứng dụng
Root chỉ dùng cho quản trị
App user chỉ có quyền trên database của mình
5. Nguyên tắc quản lý container MariaDB
5.1. Đặt tên container theo nhóm site
Ví dụ:
Giúp:
Phân biệt nhanh khi debug
Dễ theo dõi log và tài nguyên
5.2. Không chỉnh sửa container đang chạy
Mọi thay đổi qua file cấu hình
Restart có kiểm soát
5.3. Không gom quá nhiều nhóm vào một MariaDB
Nguyên tắc:
Nếu nhóm site có đặc tính khác biệt → tách container
Nếu một nhóm tăng tải → tách tiếp thành
sites_qms_1,sites_qms_2
6. Network Docker cho MariaDB theo nhóm
MariaDB chỉ nằm trong
backend_nethoặcdb_netKhông expose ra Internet
Web/PHP container được cấp quyền truy cập theo nhóm
7. Chuẩn hóa vòng đời vận hành
7.1. Quy trình thay đổi chuẩn
Backup toàn bộ instance
Kiểm tra dung lượng và tài nguyên
Cập nhật cấu hình
Restart container
Kiểm tra log, truy vấn, ứng dụng
8. Kết luận
Mô hình mỗi MariaDB container cho một nhóm site giống nhau giúp:
Cân bằng giữa cách ly và đơn giản
Dễ quản lý, dễ backup
Hạn chế rủi ro lan truyền lỗi
Phù hợp Web Server chạy nhiều hệ thống song song
Chuẩn hóa cấu trúc thư mục và nguyên tắc quản lý container ngay từ đầu là nền tảng để các bài sau về triển khai Web Server, MariaDB, backup và tối ưu có thể áp dụng một cách an toàn và hiệu quả.
- Đăng nhập để gửi ý kiến

