0

Kinh Nghiệm Thực Chiến: Thiết Lập Và Xử Lý Lỗi Môi Trường Lập Trình Local (Docker, MySQL, Nginx)

Chào anh em!

Khi tham gia phát triển các hệ thống web lớn (như e-commerce, hệ thống vận chuyển logictics,...), việc chạy dự án trên môi trường Local thông qua Docker là tiêu chuẩn bắt buộc. Tuy nhiên, trong quá trình setup và tương tác với Database hay Web Server, các lập trình viên (đặc biệt là người mới) rất dễ gặp phải những "cú lừa" từ hệ thống.

Bài viết này sẽ đúc kết lại các kinh nghiệm thiết kế Database chuẩn chỉnh và cách xử lý hai lỗi "kinh điển" nhất khi làm việc với môi trường Local.

1. Thiết kế cấu trúc Database: Chọn đúng kiểu dữ liệu để tối ưu hiệu suất

Khi tạo các bảng lưu trữ dữ liệu phức tạp (như log đơn hàng bất thường, quản lý API Key), việc chọn đúng kiểu dữ liệu quyết định rất lớn đến tốc độ truy vấn sau này:

  • Sử dụng BIGINT UNSIGNED cho Khóa chính (Primary Key): Với các bảng có lượng dữ liệu phình to nhanh chóng mỗi ngày (như log hệ thống), kiểu INT thông thường sẽ sớm bị tràn. BIGINT UNSIGNED là lựa chọn an toàn nhất.
  • Tận dụng kiểu JSON: Khi cần lưu trữ các mảng dữ liệu không cố định (như danh sách mã vận đơn packed_labels, danh sách hình ảnh, hoặc mảng phân quyền permissions), hãy dùng kiểu JSON thay vì TEXT. Kiểu JSON giúp bạn dễ dàng truy vấn động sâu vào bên trong mảng sau này.
  • Quan hệ đa hình (Polymorphic): Khi thiết kế các bảng như api_keys áp dụng cho nhiều đối tượng khác nhau (User, Admin, Đối tác), hãy dùng cặp cột model_type (VARCHAR) và model_id (BIGINT) kết hợp Index để truy xuất chéo dễ dàng.

2. "Bóng ma" Database: Tạo bảng thành công nhưng không tìm thấy?

Tình huống: Bạn vừa viết xong câu lệnh CREATE TABLE hoặc import một file SQL vào database thông qua các công cụ quản lý như HeidiSQL, DBeaver hay Navicat. Câu lệnh báo chạy thành công (Query OK), nhưng khi gõ tìm kiếm ở danh sách bảng bên trái, bạn không hề thấy bảng mới đâu cả.

Nguyên nhân & Cách xử lý: Đây không phải là lỗi hệ thống mà đơn thuần là cơ chế Cache giao diện (UI Cache) của các phần mềm quản lý Database. Để tránh làm nặng máy, phần mềm không tự động quét lại toàn bộ cấu trúc database sau mỗi dòng lệnh bạn gõ.

  • Cách khắc phục: Vô cùng đơn giản, bạn chỉ cần click chuột vào danh sách bảng bên trái và nhấn phím F5 (hoặc click chuột phải chọn Refresh). Bảng mới của bạn sẽ lập tức xuất hiện.

3. Lỗi Trình Duyệt: Tên miền Local báo DNS_PROBE_FINISHED_NXDOMAIN

Tình huống: Bạn đã cất công setup nguyên một cụm Docker cực xịn (bao gồm Nginx, Redis, MariaDB, App,...). Mở Docker Desktop lên thấy tất cả các container đều sáng đèn xanh (Running) ổn định. Thế nhưng, khi mở trình duyệt và gõ tên miền ảo của dự án (ví dụ: hasakinow.local), trình duyệt lại thẳng thừng báo lỗi: This site can't be reached (DNS_PROBE_FINISHED_NXDOMAIN).

Nguyên nhân: Lỗi này có nghĩa là "Không tìm thấy tên miền". Docker đang chạy web của bạn ở địa chỉ localhost (IP: 127.0.0.1), nhưng trình duyệt và hệ điều hành của bạn không hề biết cái tên hasakinow.local là gì. Nó cố gắng lên mạng Internet để tìm tên miền này và dĩ nhiên là thất bại.

Cách xử lý (Cấu hình File Hosts trên Windows): Bạn cần phải làm "người chỉ đường" thủ công cho hệ điều hành bằng cách sửa file hosts:

  1. Mở ứng dụng Notepad với quyền quản trị (Run as administrator). Nếu không có quyền này, bạn sẽ không thể lưu file.
  2. Từ Notepad, chọn File > Open, điều hướng tới đường dẫn:
    C:\Windows\System32\drivers\etc
    
  3. Ở góc phải dưới cùng, đổi định dạng hiển thị thành All Files (.), bạn sẽ thấy file tên là hosts. Mở nó lên.
  4. Cuộn xuống dòng cuối cùng và thêm cấu hình để trỏ tên miền về máy tính của bạn:
    127.0.0.1    hasakinow.local
    
  5. Nhấn Ctrl + S để lưu lại.

Quay trở lại trình duyệt và nhấn F5 tải lại trang. Chắc chắn giao diện web của bạn sẽ hiện lên mượt mà!

💡 Lời kết

Quá trình setup local tuy đôi lúc tốn thời gian vì những lỗi lặt vặt liên quan đến cấu hình mạng (DNS, Port) hay giao diện phần mềm, nhưng một khi đã hiểu rõ bản chất hoạt động của Server, DNS và Database, bạn có thể tự tin xử lý bất kỳ dự án nào một cách dễ dàng.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí