WPML

Với Docker Compose, Xdebug và PhpStorm, bạn có thể tạo một môi trường phát triển cục bộ có thể tái tạo, biệt lập và dễ quản lý, phản chiếu một máy chủ chính thức, giúp nâng cao chất lượng các dự án WordPress của bạn.

Xin chào các nhà phát triển và người dùng nâng cao của WordPress! Hôm nay, tôi rất vui được chia sẻ một hướng dẫn toàn diện nhưng đơn giản về cách thiết lập môi trường phát triển WordPress cục bộ bằng Docker Compose. Gần đây, khi trở thành một phần của đội ngũ năng động tại OnTheGoSystems, tôi đã quyết định mang theo vùng an toàn của mình, và đó chính là mục đích của thiết lập này.

Mục tiêu rất đơn giản: phát triển một thiết lập nơi tôi có thể kiểm soát chi tiết các công cụ phát triển của mình, tích hợp Xdebug và WP-CLI với image Docker chính thức của WordPress. Thiết lập này không nhằm phát minh lại bánh xe, mà là tùy chỉnh nó để phù hợp với sở thích và phong cách làm việc cá nhân. Tôi hy vọng rằng hướng dẫn này sẽ hữu ích cho bạn trong việc cấu hình một môi trường tương tự, nâng cao hành trình phát triển WordPress của bạn.

Điều kiện tiên quyết

Để tận dụng tối đa hướng dẫn này, bạn sẽ cần cài đặt các phần phụ thuộc sau:

  1. Docker: Chúng ta sẽ sử dụng Docker làm công cụ chính để tạo, triển khai và chạy các ứng dụng bằng container. Nó cho phép chúng ta đóng gói một ứng dụng với tất cả các thành phần cần thiết trong một container và xuất nó dưới dạng một gói duy nhất. Điều làm cho Docker trở nên mạnh mẽ hơn nữa là khả năng kiểm soát chi tiết, cho phép chúng ta xác định chính xác mọi khía cạnh của thiết lập ứng dụng. Sự kiểm soát này hỗ trợ việc tạo ra một môi trường phát triển phù hợp chính xác với nhu cầu của chúng ta.
  2. Xdebug Chrome Extension: Tiện ích mở rộng trình duyệt này sẽ giúp chúng ta từng bước kiểm tra mã, phát hiện lỗi và cải thiện chất lượng tổng thể của các dự án WordPress.
  3. PhpStorm: Một IDE thông minh và đầy đủ tính năng dành cho PHP do JetBrains phát triển. Nó cung cấp một trình soạn thảo cho PHP, HTML và JavaScript với khả năng phân tích mã trực tiếp và tái cấu trúc tự động cho các ngôn ngữ này.

Tại sao lại là Docker, Xdebug và PhpStorm?

Mục tiêu của chúng ta là thiết lập một môi trường phát triển WordPress cục bộ biệt lập, có thể tái tạo và dễ quản lý. Docker tạo thành xương sống của thiết lập này, cung cấp cơ sở hạ tầng để chứa và quản lý ứng dụng của chúng ta. Xdebug và PhpStorm là những mảnh ghép bổ sung của bức tranh này, cung cấp các khả năng phát triển và gỡ lỗi mã PHP nâng cao.

Hành trình của chúng ta sẽ bắt đầu bằng việc tạo một Dockerfile mở rộng từ image Docker chính thức của WordPress. Chúng ta sẽ nâng cao image này bằng cách kết hợp Xdebug và WP-CLI, những công cụ quan trọng trong các tác vụ phát triển và gỡ lỗi WordPress.

Tiếp theo, chúng ta sẽ soạn thảo một tệp Docker Compose để điều phối hai dịch vụ chính: WordPress và MySQL. Và dù bạn có tin hay không, về cơ bản chỉ có vậy!

Vẻ đẹp của thiết lập này là nó tạo ra một môi trường phát triển cục bộ không chỉ phản chiếu một máy chủ chính thức mà còn dễ dàng sao chép. Điều này có nghĩa là chúng ta có thể dễ dàng nhân bản chính xác thiết lập này trên nhiều môi trường hoặc máy tính khác nhau, đảm bảo tính nhất quán và giảm thiểu các vấn đề liên quan đến thiết lập.

Hướng dẫn từng bước

Bước 1: Dockerfile

Hành trình của chúng ta bắt đầu bằng việc tạo một Dockerfile mới. Tệp này hướng dẫn Docker cách xây dựng image của chúng ta. Dưới đây là thiết lập cơ bản mà tôi thường bắt đầu:

# Use the official WordPress image as a parent image
FROM wordpress:latest

# Install Xdebug
RUN pecl install xdebug 

# Install WP-CLI
RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \
    chmod +x wp-cli.phar && \
    mv wp-cli.phar /usr/local/bin/wp

# Copy xdebug.ini into the container
COPY xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini

Trong Dockerfile này, chúng ta bắt đầu từ image WordPress chính thức. Sau đó, chúng ta cài đặt riêng Xdebug và WP-CLI để đảm bảo sự rõ ràng và dễ bảo trì. Tệp cấu hình Xdebug (xdebug.ini) được sao chép vào thư mục thích hợp trong container. Điều này tạo thành nền tảng cho thiết lập yêu thích của tôi đối với môi trường phát triển WordPress cục bộ.

Bước 2: Tệp cấu hình Xdebug (xdebug.ini)

Bây giờ chúng ta đã cài đặt Xdebug trong image Docker của mình, chúng ta cần cấu hình nó để hoạt động trong môi trường phát triển cục bộ. Quá trình này bao gồm việc tạo một tệp xdebug.ini với các cài đặt sau:

ini
zend_extension=xdebug
xdebug.mode=debug
xdebug.client_port=9003
xdebug.start_with_request=yes

Các cài đặt này bật tiện ích mở rộng Xdebug, thiết lập nó để bắt đầu gỡ lỗi với mỗi yêu cầu và xác định cổng máy khách mà nó sẽ kết nối tới (trong trường hợp này là 9003). Bạn có thể nhận thấy chúng ta chưa chỉ định client_host, nhưng đừng lo, nó sẽ sớm xuất hiện trong quá trình thiết lập của chúng ta.

Bước 3: Tệp Docker Compose

Tiếp theo, chúng ta sẽ tạo một tệp docker-compose.yml để thiết lập các dịch vụ WordPress và MySQL của chúng ta:

yaml
version: '3'
services:
  # MySQL Service
  mysql:
    image: mysql:latest
    container_name: mysql_container
    restart: always
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
  
  # WordPress Service
  wordpress:
    depends_on: 
      - mysql
    image: wordpress:latest
    container_name: wp_container
    volumes:
      - ./wp_data:/var/www/html
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DEBUG: 1
      XDEBUG_CONFIG: client_host=host.docker.internal
    ports:
      - "8000:8000"

volumes:
  db_data:

Trong tệp này, chúng ta đã xác định hai dịch vụ – MySQL và WordPress. Cả hai dịch vụ này đều có tên container duy nhất, giúp dễ dàng tham chiếu và quản lý hơn.

Chỉ thị restart: always đảm bảo rằng dịch vụ sẽ luôn khởi động lại nếu nó dừng đột ngột. Nếu nó bị dừng thủ công, nó chỉ được khởi động lại khi container được khởi động lại thủ công.

Dịch vụ MySQL gắn kết một volume Docker (db_data), đảm bảo lưu trữ liên tục ngay cả khi container bị xóa. Đối với dịch vụ WordPress, chúng ta đang gắn kết một thư mục cục bộ (./wp_data) vào container. Điều này có nghĩa là bất kỳ thay đổi nào trong các tệp WordPress trên hệ thống cục bộ của chúng ta sẽ được phản ánh trong container.

Chúng ta đã thêm hai biến môi trường bổ sung cho dịch vụ WordPress – WORDPRESS_DEBUG để bật tính năng gỡ lỗi WordPress và XDEBUG_CONFIG để chỉ định máy chủ khách cho Xdebug. client_host được đặt thành host.docker.internal, đây là một tên DNS đặc biệt định tuyến đến địa chỉ IP nội bộ của máy chủ, cho phép Xdebug giao tiếp với IDE của chúng ta trên máy chủ.

Xin lưu ý rằng cài đặt client_host được điều chỉnh cho Windows và macOS. Đối với Linux, một giải pháp thay thế phổ biến là thay thế host.docker.internal bằng địa chỉ IP thực tế của máy bạn, có thể lấy được thông qua lệnh terminal ip addr show.

Bước 4: Chạy môi trường phát triển WordPress cục bộ của bạn

Khi Dockerfile, tệp cấu hình Xdebug và tệp Docker Compose của bạn đã sẵn sàng, đã đến lúc đưa môi trường phát triển WordPress cục bộ của bạn vào hoạt động.

Để làm điều này, chỉ cần điều hướng đến thư mục chứa tệp Docker Compose của bạn trong terminal và chạy lệnh sau:

bash
docker-compose up -d

Lệnh này sẽ hướng dẫn Docker khởi động các dịch vụ của bạn trong nền.

Sau khi thực thi thành công, bạn sẽ có một trang web WordPress chạy trên máy cục bộ của mình, có thể truy cập qua http://localhost:8000. Bất kỳ thay đổi nào bạn thực hiện đối với các tệp PHP của WordPress giờ đây sẽ được phản ánh trên trang web này, mang đến một cách dễ dàng và hiệu quả để phát triển và gỡ lỗi ứng dụng WordPress của bạn.

Ngoài ra, dịch vụ MySQL của bạn cũng sẽ hoạt động, có thể truy cập trên cổng 3306. Điều này cung cấp một cơ sở dữ liệu MySQL đầy đủ chức năng cho ứng dụng WordPress của bạn, mô phỏng một môi trường thực tế cho nhu cầu phát triển của bạn.

Bước 4.5: Bước bổ sung – Thêm tệp phpinfo.php

Đối với những ai muốn tìm hiểu sâu hơn một chút về cấu hình PHP của mình, chúng ta có thể đưa tệp phpinfo.php vào image Docker. Khi được truy cập, tệp này sẽ trình bày một tổng quan toàn diện về các cài đặt PHP của bạn.
Để thêm tệp phpinfo.php, trước tiên bạn cần tạo nó trong cùng thư mục với Dockerfile của bạn. Tệp này nên chứa mã PHP sau:

<?php phpinfo(); ?>

Tiếp theo, hãy thêm dòng sau vào Dockerfile của bạn:

# Bonus: Copy phpinfo.php into the container
COPY phpinfo.php /var/www/html/phpinfo.php

Lệnh này sẽ sao chép tệp phpinfo.php vào thư mục gốc của WordPress bên trong image Docker.

Để đảm bảo các thay đổi này có hiệu lực, bạn sẽ cần xây dựng lại image Docker của mình và khởi động lại các dịch vụ Docker Compose. Chạy các lệnh sau trong terminal của bạn:

bash
docker-compose down
docker-compose up -d --build

Lệnh docker-compose down dừng và xóa các container Docker hiện tại của bạn. Sau đó, docker-compose up -d –build xây dựng lại image Docker với tệp phpinfo.php mới được thêm vào và khởi động lại các dịch vụ WordPress và MySQL của bạn trong nền.
Giờ đây, bạn có thể truy cập tệp phpinfo.php bằng cách điều hướng đến http://localhost:8000/phpinfo.php trong trình duyệt web của mình. Tại đây, bạn sẽ thấy một trang chi tiết phác thảo cấu hình PHP của bạn, đây có thể là một tài nguyên quý giá để gỡ lỗi và xác minh.

Bước 5: Bắt đầu gỡ lỗi

Giờ đây, khi bạn đã thiết lập môi trường phát triển WordPress cục bộ với Docker, Xdebug và PhpStorm, bạn có thể bắt đầu gỡ lỗi trang web WordPress của mình. Dưới đây là tóm tắt nhanh về cách bắt đầu:

  1. Thiết lập Xdebug trong PhpStorm: Mở PhpStorm và truy cập File → Settings (Preferences trên Mac) → Languages & Frameworks → PHP → Debug. Trong phần Xdebug, đảm bảo rằng Debug port được đặt thành 9003 và tùy chọn Can accept external connections được chọn.
  2. Thêm máy chủ PhpStorm: Điều hướng đến PHP → Servers. Thêm một máy chủ mới với tên wordpress và máy chủ lưu trữ là localhost. Đặt cổng thành 8000. Đảm bảo các ánh xạ đường dẫn được thiết lập chính xác – đường dẫn tuyệt đối trên máy chủ cho thư mục wp_data phải là /var/www/html.
  3. Cài đặt tiện ích mở rộng Xdebug helper: Cài đặt tiện ích mở rộng Xdebug helper cho Google Chrome. Sau khi cài đặt, nhấp vào biểu tượng con bọ và đặt khóa IDE thành PHPSTORM.
  4. Bắt đầu lắng nghe các kết nối PHP Debug: Trong PhpStorm, nhấp vào biểu tượng con bọ ở góc trên cùng bên phải để bắt đầu lắng nghe các kết nối PHP Debug.
  5. Bắt đầu gỡ lỗi: Với các bước trước đã hoàn tất, bạn đã sẵn sàng bắt đầu gỡ lỗi ứng dụng WordPress của mình. Chỉ cần đặt các điểm ngắt trong PhpStorm khi cần, sau đó tải lại trang web của bạn. Chúc bạn gỡ lỗi vui vẻ!

Kết luận

Khi kết thúc hướng dẫn này, tôi hy vọng nó sẽ trở thành một tài nguyên quý giá cho bạn giống như đối với tôi trong hành trình của mình. Khả năng tùy chỉnh thiết lập này – giống như chúng ta đã làm bằng cách thêm tệp phpinfo.php – mở ra vô số khả năng, làm cho quá trình phát triển của chúng ta mạnh mẽ và hiệu quả hơn. Toàn bộ mã có sẵn trong kho lưu trữ GitHub này. Đừng ngần ngại tải về, dùng thử và đề xuất các cải tiến!

Cá nhân tôi sử dụng hệ điều hành Ubuntu, nhưng vẻ đẹp của thiết lập này là nhờ Docker, điều đó không quan trọng! Nhờ thực tế là Docker có thể chạy trên bất kỳ Hệ điều hành nào như nhau, cho dù bạn thích macOS, Windows hay Linux, việc thiết lập và sử dụng đều giống hệt nhau!

Cảm ơn bạn đã đồng hành cùng tôi trong bài hướng dẫn này. Tôi hy vọng sẽ được nghe từ bạn về những trải nghiệm của bạn hoặc bất kỳ đề xuất nào bạn có thể có để cải thiện hơn nữa thiết lập này. Hãy nhớ rằng, sự phát triển nảy nở dựa trên kiến thức được chia sẻ và tinh thần hợp tác.

Chúc bạn lập trình vui vẻ và hãy cùng nhau tiếp tục tạo ra những trải nghiệm WordPress tuyệt vời!

Bạn thấy bài viết này hữu ích? Hãy chia sẻ bài viết này: